soulsync/api/video
BoulderBadgeDad c35ec43466 downloads drawer: rich TMDB detail + fix cast photos + stop OMDb quota burn
drawer upgrades (the TMDB call we already make returns all this — just render it):
- FIX cast photos — used c.profile_url; the field is c.photo. now shows headshots.
- title LOGO header (falls back to text) + meta line (year · rating · runtime · network).
- tagline, director/creator, ▶ trailer link, and a 'Watch on' provider-logo row.
- meta endpoint widened to return logo/cast-photo/rating/runtime/crew/trailer/providers.

OMDb spam fix (the 'Request limit reached!' tracebacks):
- the new bulk schedule-refresh called refresh_show_art per show, which did an OMDb
  ratings backfill each → blew the daily quota. refresh_show_art gains with_ratings;
  the automation passes False (it only needs episode schedules).
- _backfill_ratings now latches _omdb_blocked on OMDbAuthError → one quiet warning +
  stops calling OMDb for the rest of the process, instead of a traceback per show.
tested (cast/logo/trailer contract, no-ratings plumbing, the latch-off behavior).
2026-06-26 12:49:11 -07:00
..
__init__.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
automations.py video automations: 'Scan Video Library' — the first video twin (shared engine) 2026-06-19 19:38:18 -07:00
calendar.py video calendar: watchlist-driven by default + an 'All library' toggle 2026-06-20 14:07:40 -07:00
dashboard.py Video: scope library reads to the active server (Plex/Jellyfin don't commingle) 2026-06-15 18:45:28 -07:00
detail.py video: episode detail expand (guest stars + bigger still) 2026-06-15 13:20:15 -07:00
discover.py Video Discover: split Top 10 today into Movies + TV Shows (Netflix-style) 2026-06-24 08:00:13 -07:00
downloads.py downloads drawer: rich TMDB detail + fix cast photos + stop OMDb quota burn 2026-06-26 12:49:11 -07:00
enrichment.py video enrichment: add a GLOBAL 'Retry all failed' (all workers, all kinds) 2026-06-20 14:15:18 -07:00
libraries.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
library.py Video: scope library reads to the active server (Plex/Jellyfin don't commingle) 2026-06-15 18:45:28 -07:00
manual_import.py Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
poster.py Search avatars: proxy with a UA + graceful initials fallback 2026-06-17 09:57:42 -07:00
scan.py Video tools: add a Server Scan tool (trigger the media server to index new downloads) 2026-06-22 08:26:24 -07:00
search.py video: smart multi-layer back button + next-level search/person 2026-06-15 08:30:17 -07:00
watchlist.py Video watchlist: richer show cards (status pill + ep count) + sort dropdown 2026-06-16 10:19:13 -07:00
wishlist.py video wishlist badge: count YouTube videos too (header + sidebar) 2026-06-25 23:15:45 -07:00
youtube.py youtube channels: per-channel overrides (custom show-name + quality) — core 2026-06-25 22:53:45 -07:00