SoulSync v2.6.5
Merges dev into main. This release is a major web-player overhaul, a new cover-art source feature, and a broad round of download/metadata/library bug fixes (issues #730, #743, #750, #751, #754, #756, #759, #760).
✨ Highlights
Web player / "Now Playing" revamp
A near-complete rework of the in-app player:
- Per-listener stream sessions — multiple users/tabs no longer collide on shared playback; stream state extracted into a testable per-session store.
- Now Playing redesign — full visual refresh, vibrant album-art color extraction, click-art visualizer, sleep timer, up-next, drag-to-reorder queue.
- Real crossfade for library tracks (experimental), with hardened race-condition handling.
- Synced lyrics with click-to-seek, and complete Media Session lock-screen/OS controls.
- Smart radio ranking (play-count + popularity), fixed Artist Radio never populating the queue, and a "Playing from" context header.
- Mini-player parity — shuffle/repeat/play-next, N/P prev-next keys, global mute, volume persisted across reloads, seek-hover tooltip.
- Web-player plays are now logged (recently-played + smart-radio recency).
New: preferred album-art source selection
Pick which providers' cover art to use and in what order (CAA, Deezer, iTunes, Spotify, AudioDB), with graceful fallback. Fully opt-in — default behavior is unchanged. Applies to both embedded art and cover.jpg. Includes a minimum-resolution guard so a low-res source (e.g. a small Cover Art Archive upload) is skipped in favor of a bigger one, and iTunes art is requested at max resolution.
Other UI upgrades
- Mirrored playlist modal redesign (real artwork, per-track thumbnails) + fixed header clipping on long playlists.
- Batches panel visual upgrade (summary, segmented progress, ETA, live track) + cleaner expanded track rows.
- Track-detail modal — click any download row for a rich, status-aware view.
- Quarantine management — handle a quarantined file directly from the download modal (Listen / Accept & Import / Search).
Bug fixes
| Issue | Fix |
|---|---|
| #759 | Amazon enrichment floods logs/CPU and could make the UI unreachable when its public proxy is down — added an outage circuit-breaker + made enrichment opt-in by default |
| #760 | Album-bundle staging Permission denied: storage/album_bundle_staging — entrypoint now chowns /app/storage to the runtime PUID on every start; plus a per-track fallback so an I/O/staging error no longer hard-fails a batch
|
| #756 | Validly-streamed FLAC no longer wrongly quarantined as "zero-length" |
| #754 | Manual Library Match now accepts non-numeric (Navidrome/Jellyfin GUID) track ids; MusicBrainz manual search field-scopes the artist in non-strict mode (fewer karaoke/cover mismatches) |
| #743 | Soulseek album-bundle staging-misses fall through to per-track / cross-source fallback instead of failing |
| #730 | Album-bundle release picker is gated by album-title relevance (with word-boundary full-phrase bonus); no longer rejects the right album over an edition suffix |
| #751 | Live-search debounce raised 300ms → 600ms |
| #750 | Image cache rejects truncated downloads instead of caching broken covers |
Plus:
- Duplicate detector now keeps lossless over lossy (ranks by format first), so a FLAC with a missing bitrate is no longer deleted in favor of a 282 kbps MP3.
- Mirrored playlist action buttons (delete/auto-sync/etc.) no longer break when the playlist name contains an apostrophe.
- Torrent/usenet album bundle falls back to per-track on "no results" instead of hard-failing.
- AcoustID reports errors honestly instead of masking them as "Skipped" (an invalid API key is now visible).
- Spotify sync crash (
unexpected keyword argument 'candidate_pool') fixed.
Stability & internals
- Metadata cache hard LRU row cap to stop unbounded growth (root-causes the 7.6 GB DB incident).
- Fixed metadata-cache tables silently missing after a DB recovery (stale migration marker).
- Test suite is now database-isolated — tests can never touch the real library DB.
Behavior changes to note
- Amazon enrichment is now opt-in (paused by default). Anyone who relied on the old auto-on default must enable it in Settings.
- The new album-art source list is off by default; existing art behavior is unchanged unless you configure it.