Skip to content

feat: related music videos in the now-playing side panel #442

Description

@InstaZDLL

Idea

Spotify's now-playing side panel surfaces a "Related music videos" carousel for the current track/artist. Add an equivalent section to WaveFlow's now-playing surfaces — a horizontally-scrolling row of related video clips under the track metadata.

Where

  • NowPlayingPanel — primary home, as a new "Related music videos" section (mirrors the existing about-the-artist / credits blocks).
  • Optionally the immersive ImmersiveSidePanel as a third tab, later.

Sourcing — reuse the metadata-plugin pipeline

Rather than baking a video provider into the signed core, source clips through a metadata-world plugin, exactly like Apple Motion Artwork:

  • extend the metadata world with a related-videos field (an ordered list of { title, thumbnail_url, video_url, artists? }) resolved per track/artist;
  • a host command (à la fetch_album_motion_artwork) fans the request out to enabled metadata plugins and returns the first/merged result;
  • keeps grey-area content sourcing in a separate plugin repo (liability isolation), honours offline::is_offline(), and reuses the permissioned waveflow:host/http + blake3-verified install path.

The desktop webview has no HLS.js, so plugins must return a directly-playable mp4 (same constraint as motion covers) — or we render a thumbnail that opens the source URL externally.

Open design questions

  1. Interaction — clicking a clip: (a) open a fullscreen/PiP <video> overlay, (b) open externally in the browser, or (c) inline-expand. Playing a video vs. the current audio: does it pause playback, duck it, or run muted-as-visual? Needs a decision.
  2. Privacy — video providers (YouTube/Vimeo/etc.) are third-party network calls; must be plugin-gated + offline-aware, and clearly opt-in like other integrations. No embeds that phone home without consent.
  3. Caching — thumbnails cache like Deezer artwork; full clips probably stream (don't reuse the 1 GB motion LRU without thought).
  4. CSP — inline <video src> is fine; any iframe/embed needs a CSP + sandbox review.

Related

Metadata

Metadata

Assignees

Labels

scope: frontendReact/Vite frontend (src/)scope: pluginsPlugin runtime, SDK, store, and bundled pluginstype: featNew feature

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions