2.5 KiB
Music_Server Inline Lyrics Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Make Music_Server include local .lrc content as rawLrc in distributed song items and keep the MusicFree plugins passing that field through.
Architecture: Extend catalog track queries to expose the best local file locator, resolve a sibling .lrc under LOCAL_LIBRARY_ROOT, and inject the text into the existing song payload builder. Update both served plugin assets so their mapMusicItem() output preserves rawLrc.
Tech Stack: Python 3.11, FastAPI, sqlite3, unittest, plain JavaScript plugin assets.
Task 1: Add failing backend and plugin tests
Files:
-
Modify:
tests/test_mf_catalog_routes.py -
Modify:
tests/test_plugin_routes.py -
Add route assertions that expect
rawLrcwhen a same-name.lrcexists beside a local audio file. -
Add route assertions that verify requests still succeed without
LOCAL_LIBRARY_ROOT. -
Add plugin asset assertions that both served JS assets contain
rawLrcmapping code. -
Run only the new/updated tests and confirm they fail for the expected missing-lyrics behavior.
Task 2: Implement inline lyric loading
Files:
-
Modify:
src/music_server/services/catalog_reader.py -
Modify:
src/music_server/routes/mf_catalog.py -
Extend track row queries to expose the preferred active
local_fslocator for each song. -
Add a helper that safely resolves a sibling
.lrcunderLOCAL_LIBRARY_ROOTand reads it as text. -
Inject
rawLrcinto_to_music_item()only when a lyric file is present. -
Re-run the focused backend tests and confirm they pass.
Task 3: Preserve lyrics in plugin assets
Files:
-
Modify:
src/music_server/plugin_assets/music_server.js -
Modify:
src/music_server/plugin_assets/music_server_lan.js -
Test:
tests/test_plugin_routes.py -
Update
mapMusicItem()in both plugin assets to copyrawLrcfrom the server payload. -
Re-run the plugin asset tests and confirm they pass.
Task 4: Verify the feature end to end in repo tests
Files:
-
Modify: none
-
Run the focused unittest command for
test_mf_catalog_routesandtest_plugin_routes. -
If those pass, run
test_catalog_reader.pyas a regression check for reader query changes. -
Record any deployment-only follow-up separately; do not expand scope in code.