Social: lyrics Plugin with UI view #27

Closed
opened 2026-10-06 21:16:52 +02:00 by SBDeveloper · 1 comment
Owner

Part of #13

What to build

Optional Plugin that shows lyrics for the current Track in its own UI view, built on playback events and the UI view capability.

The Lyrics view is an overlay tab of the big player (#41) registered through the plugin UI API (#45).

Open question (needs a human)

Which lyrics provider, and its licensing and terms of use. Decide before this ticket becomes ready-for-agent.

Acceptance criteria

  • Lyrics view follows the current Track
  • Missing lyrics handled gracefully
  • Off by default
  • Tested as a Plugin through the plugin host

Blocked by

  • #45 (declarative plugin UI and overlay tab slot)
Part of #13 ## What to build Optional Plugin that shows lyrics for the current Track in its own UI view, built on playback events and the UI view capability. The Lyrics view is an overlay tab of the big player (#41) registered through the plugin UI API (#45). ## Open question (needs a human) Which lyrics provider, and its licensing and terms of use. Decide before this ticket becomes ready-for-agent. ## Acceptance criteria - [ ] Lyrics view follows the current Track - [ ] Missing lyrics handled gracefully - [ ] Off by default - [ ] Tested as a Plugin through the plugin host ## Blocked by - #45 (declarative plugin UI and overlay tab slot)
Author
Owner

This was generated by AI during triage.

Agent Brief

Decisions: provider is LRCLIB (open, no API key or auth). Show time-synced lyrics with plain-text fallback.

Category: enhancement

Summary: Optional Plugin that shows lyrics for the current Track in a Lyrics view, an overlay tab of the big player (#41) registered through the plugin UI API (#45).

Behaviour:

  • Off by default; enabled only after the user consents to the declared capabilities (network access to lrclib.net, playback events, UI view).
  • On Track change, look up lyrics via GET https://lrclib.net/api/get with track_name, artist_name, album_name, duration (seconds). Fall back to /api/search if get returns 404.
  • Prefer syncedLyrics (LRC): highlight and scroll to the current line from playback position events. If only plainLyrics exists, show static text. Instrumental Tracks (instrumental: true) show an "Instrumental" state.
  • Missing lyrics (404, no match, network error) show a neutral empty state; never an error dialog, never affects playback.
  • View follows the current Track and resets on Track change; stale responses for a previous Track are discarded.
  • Cache results per Track for the session to avoid refetching on replay.
  • Send a descriptive User-Agent (app name/version) per LRCLIB etiquette.

Acceptance criteria:

  • Lyrics view follows the current Track
  • Synced lyrics track playback position; plain fallback works
  • Missing, instrumental and failed lookups handled gracefully
  • Off by default
  • Tested as a Plugin through the plugin host, with LRCLIB HTTP faked

Out of scope: other providers, user-submitted/edited lyrics, publishing lyrics to LRCLIB, translation, Deezer-native lyrics.

Dependencies: blocked by #45 (declarative plugin UI and overlay tab slot). The Plugin also needs network and playback-position event capabilities from the plugin API (#18/#19); crates/plugin-api has neither today, so add them there rather than special-casing this Plugin. LRCLIB data is community-submitted with no licensing guarantee, so keep lyrics in memory only and do not persist them to disk.

> *This was generated by AI during triage.* ## Agent Brief **Decisions:** provider is **LRCLIB** (open, no API key or auth). Show **time-synced lyrics with plain-text fallback**. **Category:** enhancement **Summary:** Optional Plugin that shows lyrics for the current Track in a Lyrics view, an overlay tab of the big player (#41) registered through the plugin UI API (#45). **Behaviour:** - Off by default; enabled only after the user consents to the declared capabilities (network access to `lrclib.net`, playback events, UI view). - On Track change, look up lyrics via `GET https://lrclib.net/api/get` with `track_name`, `artist_name`, `album_name`, `duration` (seconds). Fall back to `/api/search` if `get` returns 404. - Prefer `syncedLyrics` (LRC): highlight and scroll to the current line from playback position events. If only `plainLyrics` exists, show static text. Instrumental Tracks (`instrumental: true`) show an "Instrumental" state. - Missing lyrics (404, no match, network error) show a neutral empty state; never an error dialog, never affects playback. - View follows the current Track and resets on Track change; stale responses for a previous Track are discarded. - Cache results per Track for the session to avoid refetching on replay. - Send a descriptive `User-Agent` (app name/version) per LRCLIB etiquette. **Acceptance criteria:** - [ ] Lyrics view follows the current Track - [ ] Synced lyrics track playback position; plain fallback works - [ ] Missing, instrumental and failed lookups handled gracefully - [ ] Off by default - [ ] Tested as a Plugin through the plugin host, with LRCLIB HTTP faked **Out of scope:** other providers, user-submitted/edited lyrics, publishing lyrics to LRCLIB, translation, Deezer-native lyrics. **Dependencies:** blocked by #45 (declarative plugin UI and overlay tab slot). The Plugin also needs network and playback-position event capabilities from the plugin API (#18/#19); `crates/plugin-api` has neither today, so add them there rather than special-casing this Plugin. LRCLIB data is community-submitted with no licensing guarantee, so keep lyrics in memory only and do not persist them to disk.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
SBDeveloper/medley#27
No description provided.