soulsync/webui/static
BoulderBadgeDad 1051ef2402 Lyrics: add a "Lyrics Filler" maintenance job + lyrics option in the Re-tag tool (Sokhi)
The lyrics sibling of the Cover Art Filler, plus retag integration — reusing
the existing LyricsClient (LRClib) the import pipeline already uses.

- lyrics_client: extracted the LRClib fetch (exact-match-with-duration →
  search fallback) into a shared _fetch_remote_lyrics, used by both
  create_lrc_file (unchanged behavior) and a new check-only has_remote_lyrics.
- MissingLyricsJob (core/repair_jobs/missing_lyrics.py): scans tracks with no
  .lrc sidecar and — Option A — only flags ones LRClib actually has lyrics
  for, so instrumentals/interludes are never surfaced or re-flagged. Registered
  in the job list; default OFF; respects the lrclib_enabled toggle.
- _fix_missing_lyrics (repair_worker): applies a finding by fetching + writing
  the .lrc and embedding lyrics via create_lrc_file.
- Re-tag tool: new 'lyrics' setting ('fetch'|'skip', default skip). When
  'fetch', apply_track_plans now also fetches/refreshes the .lrc per track
  (fetch-if-missing, re-embed-if-exists) — threaded through scan gates, finding
  details, the auto-apply path, and the manual fix handler. Settings UI
  auto-renders the dropdown from setting_options; no markup needed.
- Frontend: type/action/result labels for missing_lyrics + a finding detail
  render case.

Tests: 12 — has_remote_lyrics truth table, sidecar detection, scan (only-
fixable / skip-existing / lrclib-disabled), the apply handler, and retag
lyrics_action on/off. 694 repair/lyrics/cover/retag tests pass.
2026-06-07 17:27:52 -07:00
..
docs
vendor
amazon.svg
api-monitor.js Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page 2026-06-07 15:25:52 -07:00
artists.png
audiodb.png
auto-sync.js Fix organize-by-playlist downloads: library entries, wishlist, and stale Spotify cache 2026-06-03 10:26:32 +02:00
automation.png
basic-search-v2.css
beatport-ui.js
blocklist.js Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page 2026-06-07 15:25:52 -07:00
core.js Auto-Sync tile: light for the WHOLE pipeline, including scheduled auto-sync 2026-06-06 16:32:10 -07:00
dashboard.png
discover-section-controller.js
discover.js Discover: promote recommendations to a first-class section + show the 'why' 2026-06-03 18:28:19 -07:00
discover.png
docs-images-needed.md
docs.js
downloads.js Blocklist Phase 2b: gate manual downloads with a "download anyway?" confirm 2026-06-07 16:15:23 -07:00
enrichment-manager.js Show "Running (Spotify Free)" instead of "rate limited" while the worker bridges 2026-06-05 22:08:07 -07:00
enrichment.js Lyrics: add a "Lyrics Filler" maintenance job + lyrics option in the Re-tag tool (Sokhi) 2026-06-07 17:27:52 -07:00
explorer.png
favicon.png
help.png
helper.js Changelog/PR: note the Spotify Free budget→free bridge in the 2.6.7 entry 2026-06-06 08:52:54 -07:00
hydrabase.png
import.png
init.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
library.js #809 Navidrome playback: stream via the server's API when the library isn't mounted on disk 2026-06-07 13:52:14 -07:00
library.png
manifest.json
media-player.js #809 review follow-up: crossfade preload also streams un-mounted Navidrome tracks 2026-06-07 13:55:58 -07:00
mobile.css Mobile: notification panel fits the screen (override inline JS positioning) 2026-06-04 20:50:33 -07:00
origin-history.js Download Origins: see (and delete) exactly what watchlist + playlist syncs downloaded 2026-06-07 00:15:31 -07:00
pages-extra.js Merge pull request #793 from nick2000713/perf/scroll-render-and-pm-compat 2026-06-04 16:58:27 -07:00
particles.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
placeholder-album.png
pwa-icon-192.png
pwa-icon-512.png
search.js Blocklist Phase 2b: gate manual downloads with a "download anyway?" confirm 2026-06-07 16:15:23 -07:00
search.png
settings.js Torrents: surface the stall settings as UI controls (noldevin) 2026-06-07 12:52:57 -07:00
settings.png
setup-wizard.css
setup-wizard.js
shared-helpers.js #797: stop AcoustID quarantining correct non-English-artist downloads 2026-06-05 16:02:01 -07:00
shell-bridge.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
stats-automations.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
style.css Track rows: drop the pill behind track-match-status (rendered behind the library status) 2026-06-07 16:39:35 -07:00
sw.js
sync-lastfm.js
sync-listenbrainz.js
sync-services.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
sync-soulsync-discovery.js
sync-spotify.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
sync.png
track-detail.js Track-detail modal: click any download row for a rich, status-aware view 2026-05-31 20:24:37 -07:00
trans.png
trans2.png
whisoul.png
wishlist-tools.js Add "Import IDs from File Tags" backfill — gap-fill provider IDs from embedded tags 2026-06-05 17:52:29 -07:00
worker-orbs.js Dashboard animations: GPU pass — same visuals, compositor-only where possible 2026-06-06 16:05:05 -07:00