soulsync/api/video
BoulderBadgeDad 6e526d7745 video detail: deeper TMDB extras — trailer, where-to-watch, more like this
Phase 4: dynamic extras fetched LIVE per view (providers change, so not cached)
via GET /detail/<kind>/<id>/extras → engine.item_extras → TMDB
(videos + watch/providers + similar in one call).
- Trailer: a '▶ Trailer' action that opens an in-app YouTube modal embed (Esc /
  click-away to close).
- Where to Watch: provider logos for the region (JustWatch via TMDB).
- More Like This: a poster row of similar titles linking out to TMDB.
Both movie + show pages; all keyless (same TMDB key).

Seam tests: extras parse (trailer priority, provider/similar shape), item_extras
gating on tmdb_id, route registered, markup hooks. (RT/Metacritic via OMDb needs
its own key — offered separately.)
2026-06-14 21:42:41 -07:00
..
__init__.py video: detail-page data layer (show tree + movie) + backdrop proxy 2026-06-14 15:52:22 -07:00
dashboard.py video Tools: server-prefix the scan title (Plex/Jellyfin Library Scan) 2026-06-14 07:47:40 -07:00
detail.py video detail: deeper TMDB extras — trailer, where-to-watch, more like this 2026-06-14 21:42:41 -07:00
enrichment.py video manage-workers modal: Process First Everywhere, search/filter, live glow 2026-06-14 18:28:22 -07:00
libraries.py video side: library mapping backend (pick Movies/TV library) 2026-06-14 00:24:01 -07:00
library.py video Library: server-side paging + sort/filter + card badges (music parity) 2026-06-14 08:57:25 -07:00
poster.py video enrichment: backfill season posters from TMDB (server usually lacks them) 2026-06-14 17:57:24 -07:00
scan.py video Tools: match music Database Updater (stats, cancel, real progress) 2026-06-14 07:35:57 -07:00