soulsync/webui/static/video
BoulderBadgeDad 22adc3bc55 YouTube: pull FULL per-video metadata (lazy) for the wishlist info bar
Flat channel listing can't return descriptions, so selecting a video showed 'No
description'. Now we do a non-flat single-video extract on demand — the way the
TV nebula lazy-loads guest stars:
- core: video_detail(id) / shape_video() — description, views, likes, duration,
  tags, channel, webpage_url (full extract, yt-dlp injectable for tests).
- API: GET /youtube/video/<id> — returns it AND backfills the description onto
  the wishlist row (set_wishlist_video_overview), so re-opening is instant.
- Wishlist info bar (youtube): on select, lazy-fetch → real description +
  eyebrow (date · duration · views) + a 'Watch on YouTube' link; cached on the
  episode object. 'Loading details…' while in flight.

Mirrors the episode lazy-load + art-backfill patterns. 73 youtube+api tests
green; brace/CSS balanced; music untouched.
2026-06-17 08:22:45 -07:00
..
video-calendar.js Calendar: keep hero side panels >=10% wide + make Compact the default view 2026-06-17 00:03:49 -07:00
video-channel.js YouTube next-level (UI): channel detail page + wishlist YouTube tab = TV nebula 2026-06-17 01:20:13 -07:00
video-dashboard.js video dashboard: Library card is a live scan tool (parity with music) 2026-06-14 09:28:14 -07:00
video-detail.js Video detail page: follow control uses the new curated watchlist 2026-06-16 10:44:59 -07:00
video-discover.js Discover: fix grid pagination + session cache + responsive pass 2026-06-16 15:44:36 -07:00
video-enrichment-manager.js video: coverage-card click re-queues failed matches (match music manager) 2026-06-15 14:27:25 -07:00
video-enrichment.js Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
video-get-modal.js Wishlist: episode synopsis + clickable cards + FIFO/newest sort 2026-06-16 18:21:26 -07:00
video-library.js Video: airing shows get BOTH the watchlist eye AND the get/download button 2026-06-16 11:07:53 -07:00
video-person.js Video: wire the eye/get button onto every card surface 2026-06-16 10:41:07 -07:00
video-scan.js video Tools: rehydrate scan state on page refresh (parity with music) 2026-06-14 07:59:44 -07:00
video-search.js YouTube channels (4/4): UI — paste-to-follow, channel feeds, watchlist cards 2026-06-17 00:47:24 -07:00
video-settings.js Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
video-side.css YouTube: pull FULL per-video metadata (lazy) for the wishlist info bar 2026-06-17 08:22:45 -07:00
video-side.js YouTube next-level (UI): channel detail page + wishlist YouTube tab = TV nebula 2026-06-17 01:20:13 -07:00
video-watchlist-btn.js Watchlist eye: confirm before removing (the standard yes/no dialog) 2026-06-16 09:29:31 -07:00
video-watchlist.js YouTube next-level (UI): channel detail page + wishlist YouTube tab = TV nebula 2026-06-17 01:20:13 -07:00
video-wishlist.js YouTube: pull FULL per-video metadata (lazy) for the wishlist info bar 2026-06-17 08:22:45 -07:00
video-worker-orbs.js video: promote OMDb to a full 3rd enrichment worker (parity with TMDB/TVDB) 2026-06-14 23:07:35 -07:00
video-youtube.js YouTube next-level (UI): channel detail page + wishlist YouTube tab = TV nebula 2026-06-17 01:20:13 -07:00