soulsync/core/video
BoulderBadgeDad 8eadadc1ae
Some checks failed
Compile the app and run tests / sanity-check (push) Has been cancelled
youtube retention: auto-clean old channel episodes (per-channel keep window)
new opt-in feature — default keeps everything, so nothing changes unless a channel sets it.

- history got smarter: youtube rows now carry channel_id + published_at (mined from
  search_ctx) + a pruned_at marker. new queries: youtube_channels_with_downloads,
  youtube_channel_episodes, mark_download_pruned.
- core/video/retention.py (pure): parse_retention + episodes_to_prune — age by UPLOAD
  date (published_at, filename fallback); 'count_N' keeps newest N, 'days_N' keeps last N
  days; undated episodes never pruned.
- handler auto_video_clean_youtube_episodes: for each channel with a policy, delete the
  out-of-window video + its -thumb/.nfo sidecars (only the exact recorded dest_path, never
  walks folders), then mark the history row pruned — KEPT so the scan never re-downloads it.
- 'Keep' dropdown in each channel's cog modal (Everything / Last 30 episodes / Last 3 / 6
  months); playlists excluded. seeded daily automation + register/block/label/icon/sort.
pure math + handler (i/o injected) + the prune-keeps-dedup DB contract all tested.
2026-06-26 17:24:59 -07:00
..
enrichment video enrichment: stop OMDb traceback spam from the detail/drawer path too 2026-06-26 16:28:37 -07:00
__init__.py video side: library scanner (server = source of truth) + scan API 2026-06-13 23:13:50 -07:00
discovery_gaps.py video discover phase 1a: pure gap-engine core (collection + filmography diffs) 2026-06-22 23:26:04 -07:00
discovery_recs.py video discover phase 2: blended 'Recommended for you' wall 2026-06-23 00:05:26 -07:00
download_config.py video downloads: reword download_config docstring (a wrapped line started with 'from the music side' — tripped the core/video no-music-import guard, a test false positive) 2026-06-19 00:25:57 -07:00
download_events.py video automations: post-download scan chain (parity with music's batch→scan→update) 2026-06-20 14:47:00 -07:00
download_monitor.py video downloads: consistent stage→import→library pipeline + 'Importing' status 2026-06-26 11:11:29 -07:00
download_pipeline.py video downloads pipeline: data + pure logic foundation 2026-06-19 14:50:27 -07:00
importer.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
library_paths.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
mediainfo.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
mock_search.py video search: each source returns its own results (was identical) 2026-06-19 13:56:04 -07:00
organization.py youtube downloads: write episode sidecars (-thumb.jpg + .nfo), gated by toggles 2026-06-26 13:57:52 -07:00
quality_eval.py Video quality: recognize plain WEB + accept resolution-only releases 2026-06-21 02:11:40 -07:00
quality_profile.py video quality profile: loose resolution cutoff + movie/episode size split 2026-06-19 10:40:53 -07:00
release_parse.py Video quality: recognize plain WEB + accept resolution-only releases 2026-06-21 02:11:40 -07:00
retention.py youtube retention: auto-clean old channel episodes (per-channel keep window) 2026-06-26 17:24:59 -07:00
retry.py video downloads Phase C: auto-retry + alternate-query requery 2026-06-19 17:12:44 -07:00
scanner.py Video: two system deep-scan automations (Movie + TV), independently scoped 2026-06-21 12:14:46 -07:00
sidecars.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
slskd_download.py video downloads Phase A: cancelled state, cancel/retry, monitor robustness 2026-06-19 15:31:51 -07:00
slskd_search.py video search: availability-aware ranking (best-in-class, like music) 2026-06-26 10:54:56 -07:00
sources.py Smart post-download scan: skip the crawl when the server already has the grab (phase 3) 2026-06-21 14:20:49 -07:00
subtitles.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
youtube.py fix: don't pass the 'custom' cookies sentinel to yt-dlp (unsupported browser error) 2026-06-22 23:41:37 -07:00
youtube_download.py youtube downloads: show 'Importing' during the ffmpeg merge, not a stuck 100% 2026-06-26 15:37:08 -07:00
youtube_enrichment.py Remember each channel: cache the video catalog + metadata (instant re-open) 2026-06-17 18:08:04 -07:00
youtube_quality.py youtube quality: map profile -> yt-dlp format selection 2026-06-25 19:11:35 -07:00