soulsync/api/video
BoulderBadgeDad fba47e9665 video Library page: music-library visuals + posters + search + A-Z
Rebuilt the Library page to reuse the music library's exact look — no
reinvention, just new data:
- Same classes: .library-container, .library-artist-card grid, .alphabet-
  selector, .library-search-input, loading/empty states. Movies/Shows tab pill
  is the only video-specific bit.
- Real posters via a server-side proxy: GET /api/video/poster/<kind>/<id>
  streams the Plex/Jellyfin artwork (token stays server-side); cards fall back
  to an emoji on miss. list_movies/list_shows now expose has_poster (no raw
  server paths leaked).
- Client-side search + A-Z letter filter (article-aware) over the loaded set;
  cards are divs (not clickable yet, per request). Scan button in the header
  reuses the shared scan controller and reloads on done.
110 tests green.
2026-06-14 00:51:47 -07:00
..
__init__.py video Library page: music-library visuals + posters + search + A-Z 2026-06-14 00:51:47 -07:00
dashboard.py video side: live dashboard via isolated /api/video blueprint 2026-06-13 22:40:48 -07:00
libraries.py video side: library mapping backend (pick Movies/TV library) 2026-06-14 00:24:01 -07:00
library.py video side: Library page (lists movies/shows, scan trigger) 2026-06-13 23:17:48 -07:00
poster.py video Library page: music-library visuals + posters + search + A-Z 2026-06-14 00:51:47 -07:00
scan.py video scan: three modes (full refresh / incremental / deep) 2026-06-13 23:28:57 -07:00