soulsync/api/video
BoulderBadgeDad 59c88fa0db video: Movie detail page (Netflix flat layout), movies now clickable
- Movie cards in the library now drill into a movie-detail page (both kinds use
  the same open-detail event / video-side navigation).
- New video-movie-detail subpage reuses the .vd-* hooks; video-detail.js is now
  kind-aware (root() targets the active page by kind, billboard/links/actions
  branch on movie vs show). Flat layout: billboard + a details strip (released /
  runtime / studio / status / critic score / quality) + the shared Cast & Crew row.
- Lazy on-view backfill for movies too: engine.refresh_movie_art re-fetches TMDB
  (cast/genres/backdrop/ratings) when missing, regardless of match status, via
  POST /detail/movie/<id>/refresh-art. movie_match_info added.

Seam tests: movie refresh backfills cast/genres, movie_match_info, route
registered, movie subpage markup, cards clickable for both kinds.
2026-06-14 21:31:51 -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: Movie detail page (Netflix flat layout), movies now clickable 2026-06-14 21:31:51 -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