Skip to content

SoulSync

v2.5.3 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

Published 20d Media Servers
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Summary

AI summary

Multi-artist tagging overhaul populates _artists_list and applies separator/feat settings, fixing mis‑tagged tracks.

Changes in this release

Feature Medium

Multi-artist support overhaul with _artists_list, artist_separator, feat_in_title settings applied.

Multi-artist support overhaul with _artists_list, artist_separator, feat_in_title settings applied.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Cross-script artist aliases implemented for names like Hiroyuki Sawano ↔ 澤野弘之.

Cross-script artist aliases implemented for names like Hiroyuki Sawano ↔ 澤野弘之.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Retag tool now re-embeds LYRICS tag instead of clearing it.

Retag tool now re-embeds LYRICS tag instead of clearing it.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Deezer cover art upgraded to 1900×1900 resolution.

Deezer cover art upgraded to 1900×1900 resolution.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Scanner iterates all AcoustID candidates instead of trusting the first one, reducing false positives.

Scanner iterates all AcoustID candidates instead of trusting the first one, reducing false positives.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Duration guard added to catch fingerprint hash collisions (e.g., 17‑min vs 5‑min tracks).

Duration guard added to catch fingerprint hash collisions (e.g., 17‑min vs 5‑min tracks).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Configurable duration tolerance setting added (default auto 3s/5s).

Configurable duration tolerance setting added (default auto 3s/5s).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

New Quarantine tab in Library History modal with per‑row Approve/Recover/Delete actions.

New Quarantine tab in Library History modal with per‑row Approve/Recover/Delete actions.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Approve action re‑runs post‑process skipping only the failing check.

Approve action re‑runs post‑process skipping only the failing check.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Discover track selection now applies diversity caps, source‑aware popularity thresholds, library deduplication, and SQL genre filtering.

Discover track selection now applies diversity caps, source‑aware popularity thresholds, library deduplication, and SQL genre filtering.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Server playlists Find & Add persists match overrides in sync_match_cache, preventing re‑download of manually paired Spotify tracks.

Server playlists Find & Add persists match overrides in sync_match_cache, preventing re‑download of manually paired Spotify tracks.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Sync append mode added to preserve user‑added tracks alongside new matches.

Sync append mode added to preserve user‑added tracks alongside new matches.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Tidal favorite tracks/albums/artists appear as virtual playlists, matching Spotify Liked Songs behavior.

Tidal favorite tracks/albums/artists appear as virtual playlists, matching Spotify Liked Songs behavior.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Auto‑import adds Picard/Beets parity: MBID + ISRC exact‑match fast path before fuzzy scoring, with duration sanity gate and multi‑disc deduplication.

Auto‑import adds Picard/Beets parity: MBID + ISRC exact‑match fast path before fuzzy scoring, with duration sanity gate and multi‑disc deduplication.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Auto‑import falls back to secondary metadata sources when primary returns no match.

Auto‑import falls back to secondary metadata sources when primary returns no match.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Server playlist sync now supports Append mode in addition to Replace.

Server playlist sync now supports Append mode in addition to Replace.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Medium

Track number tag no longer writes "6/0" when album total is unknown; drops to "6" per ID3 spec.

Track number tag no longer writes "6/0" when album total is unknown; drops to "6" per ID3 spec.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Low

Quarantine actions themed with confirm toast (no native dialogs).

Quarantine actions themed with confirm toast (no native dialogs).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Feature Low

Artist page "Write Artist Image" button writes artist.jpg for Navidrome to read real photos.

Artist page "Write Artist Image" button writes artist.jpg for Navidrome to read real photos.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Performance Medium

Auto‑import now processes multiple albums in parallel (3 workers default).

Auto‑import now processes multiple albums in parallel (3 workers default).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Performance Low

Tidal album‑track fetch implemented via two‑phase cursor walk with batch hydration.

Tidal album‑track fetch implemented via two‑phase cursor walk with batch hydration.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

$albumtype folder template fixed for non-Spotify sources (EPs/Singles).

$albumtype folder template fixed for non-Spotify sources (EPs/Singles).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

Cross-script alias‑aware verification stops quarantining cross‑language artist tags.

Cross-script alias‑aware verification stops quarantining cross‑language artist tags.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

Compilation albums no longer flag every track; per‑track artist column is read correctly.

Compilation albums no longer flag every track; per‑track artist column is read correctly.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

Multi‑artist credits no longer trigger wrong‑song flags.

Multi‑artist credits no longer trigger wrong‑song flags.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

MTV Unplugged and live‑album false quarantines fixed at three pipeline layers.

MTV Unplugged and live‑album false quarantines fixed at three pipeline layers.

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

Undownloadable tracks are no longer shown on Discover page (id‑validity gate enforced).

Undownloadable tracks are no longer shown on Discover page (id‑validity gate enforced).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

SoulSync standalone library writes receive full server‑quality rows (source IDs populated correctly).

SoulSync standalone library writes receive full server‑quality rows (source IDs populated correctly).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Bugfix Low

Plex library scan trigger fixed for non‑English section names (e.g., Música, Musique).

Plex library scan trigger fixed for non‑English section names (e.g., Música, Musique).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Refactor Low

Discover page sections migrated to shared createDiscoverSectionController lifecycle (~30 sections).

Discover page sections migrated to shared createDiscoverSectionController lifecycle (~30 sections).

Source: granite4.1:30b@2026-05-22-audit

Confidence: high

Other Low

affected_surface

affected_surface

Source: llm_adapter@2026-05-21

Confidence: low

Other Low

tagging

tagging

Source: llm_adapter@2026-05-21

Confidence: low

Other Low

{

{

Source: llm_adapter@2026-05-21

Confidence: low

Full changelog

Release 2.5.3

dev → main. Brings in every change since 2.4.2 (2.5.0 + 2.5.1 + 2.5.2 + the version bump).

Highlights

Tagging & metadata

  • Multi-artist support overhaul — _artists_list populated, artist_separator + feat_in_title settings actually applied, Deezer /track/<id> contributor upgrade, Soulseek matched downloads pull full artist list from track_info, scanner retag respects write_multi_artist
  • Cross-script artist aliases — Hiroyuki Sawano ↔ 澤野弘之, Dmitry Yablonsky ↔ Дмитрий Яблонский, etc. MusicBrainz canonical name + sort-name + non-strict search fallback all bridge correctly
  • Track number tag no longer writes "6/0" when album total is unknown — drops to "6" per ID3 spec
  • Retag tool now re-embeds LYRICS tag (was clearing without rewriting)
  • $albumtype folder template fix for non-Spotify sources (EPs / Singles route correctly for Deezer / Tidal / etc)
  • Deezer cover art upgraded to 1900×1900 (was 1000×1000)

AcoustID & verification

  • Multi-candidate scan — scanner now iterates ALL AcoustID candidates instead of trusting recordings[0]. Drops false positives when AcoustID returns multiple recordings per fingerprint
  • Duration guard catches fingerprint hash collisions (the 17-min mashup → 5-min track case)
  • Cross-script alias-aware verification stops quarantining cross-language artist tags
  • Compilation albums no longer flag every track (per-track artist column finally read)
  • Multi-artist credits no longer flagged as wrong song
  • Configurable duration tolerance setting (default 0 = auto 3s/5s, set higher for live/concert albums)
  • MTV Unplugged & live-album false-quarantine pipeline fixed at three layers (album-context title normalization, Tidal qualifier filter on primary search, qualifier inspection of track.album.name)

Quarantine management

  • New Quarantine tab in the Library History modal
  • Per-row Approve / Recover / Delete actions
  • Approve re-runs post-process with only the failing check skipped
  • Themed confirm + toast (no native browser dialogs)

Discover page

  • Section controller refactor — every discover section migrated to a shared createDiscoverSectionController lifecycle (~30 sections, no more drift)
  • Sharper track selection — diversity caps, source-aware popularity thresholds, library dedup, SQL-pushed genre filter
  • Stop showing undownloadable tracks (mandatory id-validity gate on every selection)

Server playlists

  • Find & Add now persists as a permanent match override in sync_match_cache — no more re-downloading the same Spotify track that the user already manually paired
  • Sync append-mode added (preserves user-added tracks)

Tidal

  • Favorite tracks / albums / artists now show up as virtual playlists (parity with Spotify Liked Songs)
  • Tidal album-tracks fetch via two-phase cursor walk + batch hydration

Auto-import

  • Multi-album parallel processing (3 workers default)
  • Picard / Beets parity — MBID + ISRC exact-match fast path before fuzzy scoring, duration sanity gate, multi-disc dedup correctness
  • SoulSync standalone library writes get full server-quality rows (source IDs populated correctly)
  • Falls through to fallback metadata sources when primary returns no match

Plex / Jellyfin / Navidrome

  • Plex library scan trigger fixed for non-English section names (Música / Musique / Musik / etc)
  • Server playlist sync now supports Append mode in addition to Replace
  • Artist page "Write Artist Image" button writes artist.jpg so Navidrome reads real artist photos

Library

  • Library reorganize stops leaving orphan audio files behind
  • Library history audit trail modal — full per-download lifecycle view + embedded tags grid via live mutagen read
  • Discography 50-cap fix (bumped to 200 for non-Spotify sources)
  • Discography skips tracks already owned (no double-queue)
  • No more cross-artist tracks or unwanted remixes from discography downloads

Search & downloads

  • Source picker default no longer always sticks to Spotify
  • Manual search in failed-track candidates modal
  • Manual picks don't auto-retry anymore
  • Download Missing modal tracklist polish
  • Soulseek min-delay-between-searches knob (fixes ISP anti-abuse trips)
  • Auto-import album duration is album total + re-imports fill metadata gaps

Docker

  • Container restart-loop fix on bind-mounted staging folder
  • Writability audit at entrypoint logs missing permissions instead of silently failing

Misc

  • AudioDB track worker no longer stuck in infinite retry loop (#553)
  • Cross-script artist names no longer quarantine files (#442)
  • Search for match no longer surfaces karaoke / tribute / "originally performed by" junk
  • Deezer ISP/peer integration tweaks
  • Multi-artist tag settings (artist_separator, feat_in_title, write_multi_artist) now actually function

Closed issues (since 2.4.2)

#442, #502, #524, #534, #535, #553, #558, #559, #566, #567, #572, #584, #585, #586, #587, #588, #589, plus several Discord / Reddit reports.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track SoulSync

Get notified when new releases ship.

Sign up free

About SoulSync

Automated Music Discovery and Collection Manager

All releases →

Beta — feedback welcome: [email protected]