Convert invisible server data into emotion. Two features sharing one palette engine.
Sub-features
Why it's worth it
Synced lyrics is a pure gap-closer with the API already present — very cheap for the delight. Ambient glow is flagship-adjacent polish.
Scope
L combined; synced lyrics alone is S–M (endpoint + model already generated).
Honest limitations
Ambient glow is libmpv-only: takeScreenshot is too heavy to poll and returns null on ExoPlayer/web. Gate it behind the BasePlayer capability matrix.
Definition of done
Unit tests for lyric-line timing/selection; widget test for the lyrics view; flutter analyze lib/ clean; dart format --line-length 120.
Source: product-vision analysis (2026-07). Part of the Driftfin 10x tracking issue.
Convert invisible server data into emotion. Two features sharing one palette engine.
Sub-features
audioItemIdLyricsGet/LyricDtoalready exist in generated code and are rendered nowhere.LyricLine.startticks + word-levelcuesenable karaoke-style highlighting. Extendsaudio_player_full_screen.dart, which already has the palette engine. A full animated-art, timed-lyrics, Plexamp-class now-playing music screen.Why it's worth it
Synced lyrics is a pure gap-closer with the API already present — very cheap for the delight. Ambient glow is flagship-adjacent polish.
Scope
L combined; synced lyrics alone is S–M (endpoint + model already generated).
Honest limitations
Ambient glow is libmpv-only:
takeScreenshotis too heavy to poll and returns null on ExoPlayer/web. Gate it behind the BasePlayer capability matrix.Definition of done
Unit tests for lyric-line timing/selection; widget test for the lyrics view;
flutter analyze lib/clean;dart format --line-length 120.Source: product-vision analysis (2026-07). Part of the Driftfin 10x tracking issue.