Skip to content

SoulSync

v2.5.7 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

Published 15d 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

Updates MusicBrainz fixes, Subsystem reliability, and Fix popup additions across a mixed release.

Changes in this release

Feature Medium

Paste MusicBrainz URL or MBID directly into Fix Track Match modal for direct recording matching.

Paste MusicBrainz URL or MBID directly into Fix Track Match modal for direct recording matching.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: high

Feature Medium

`Other` release-groups now visible in discography, surfacing previously-invisible releases.

`Other` release-groups now visible in discography, surfacing previously-invisible releases.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Feature Medium

MusicBrainz added to auto-search cascade in Fix Track Match modal, improving niche recording detection.

MusicBrainz added to auto-search cascade in Fix Track Match modal, improving niche recording detection.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Performance Medium

Pre-baked `/app/Stream` directory for rootless Docker, eliminating runtime creation failures.

Pre-baked `/app/Stream` directory for rootless Docker, eliminating runtime creation failures.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

Manual search recall fixed for MusicBrainz, improving diacritic handling and removing AND-clause mismatches.

Manual search recall fixed for MusicBrainz, improving diacritic handling and removing AND-clause mismatches.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

Album-detail 404 issue resolved by dropping unnecessary `cover-art-archive` include parameter.

Album-detail 404 issue resolved by dropping unnecessary `cover-art-archive` include parameter.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

Quarantined files no longer re-downloaded on auto-wishlist cycles, preventing duplicate entries.

Quarantined files no longer re-downloaded on auto-wishlist cycles, preventing duplicate entries.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

slskd-unreachable log spam reduced during non-Soulseek downloads to one WARNING then debug level failures.

slskd-unreachable log spam reduced during non-Soulseek downloads to one WARNING then debug level failures.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

Unknown Artist Fixer crash fixed by updating import paths and adding regression tests.

Unknown Artist Fixer crash fixed by updating import paths and adding regression tests.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Bugfix Medium

Manual MusicBrainz search now uses bare queries with diacritic folding, improving recall.

Manual MusicBrainz search now uses bare queries with diacritic folding, improving recall.

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

Confidence: low

Bugfix Medium

Removed invalid `cover-art-archive` include causing album-detail 404 errors on MusicBrainz.

Removed invalid `cover-art-archive` include causing album-detail 404 errors on MusicBrainz.

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

Confidence: low

Bugfix Medium

Quarantined files are excluded from auto-wishlist candidate selection, preventing re-download loops.

Quarantined files are excluded from auto-wishlist candidate selection, preventing re-download loops.

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

Confidence: low

Bugfix Medium

Unknown Artist Fixer no longer crashes due to missing import; imports corrected and tests added.

Unknown Artist Fixer no longer crashes due to missing import; imports corrected and tests added.

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

Confidence: low

Bugfix Low

Slskd connection failures now log a single WARNING then demote subsequent errors to DEBUG.

Slskd connection failures now log a single WARNING then demote subsequent errors to DEBUG.

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

Confidence: low

Refactor Medium

Diagnostic log added to capture `cancel_download` caller with trigger label for monitoring purposes.

Diagnostic log added to capture `cancel_download` caller with trigger label for monitoring purposes.

Source: granite4.1:8b-q6_K@2026-05-20

Confidence: low

Refactor Low

Added diagnostic INFO log line before each `cancel_download` call with a trigger label.

Added diagnostic INFO log line before each `cancel_download` call with a trigger label.

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

Confidence: low

Full changelog

Summary

Release PR: bumps _SOULSYNC_BASE_VERSION from 2.5.62.5.7 and merges the post-2.5.6 fix cycle into main. Nine user-facing fixes + one diagnostic-only logging commit.

Docker publish workflow's workflow_dispatch default tag also bumped to 2.5.7, so the manual release run pushes the correct image.

What's in 2.5.7

All bug fixes — no breaking changes, schema migrations, or new dependencies. Pure patch bump per the semver policy.

MusicBrainz fixes

  • Manual search recall — Fix popup + manual library service search were using strict Lucene phrase-match queries (recording:"X" AND artist:"Y"), killing recall on diacritics ("Bjork" vs "Björk"), bracketed suffixes like "(Live)", and any AND-clause mismatch. Switched user-facing manual lookups to bare queries that hit MB's alias/sortname indexes with diacritic folding. Enrichment workers stay strict for precision. (43ed30b4)

  • Album-detail 404 (#647 follow-up) — Every click on an MB album was silently 404-ing. The /release fetch passed cover-art-archive as an inc param, which MB rejects with 400 (that field comes back on every release response by default — no include needed). Dropped the bad include. (43ed30b4)

  • Other release-groups now visible in discography (#650) — MB tags music videos, one-off web releases, and broadcast singles with primary-type=Other. The release-group browse filter only requested album|ep|single, dropping every Other-typed group at the API layer. Centralised the type-mapper into one shared helper (core/metadata/release_type.py); added 'other' to the API filter; routed 'Other' + 'Broadcast' into the Singles section. For inabakumori, this surfaces 5 previously-invisible releases. (98740950, PR #657)

Fix popup additions

  • Paste a MusicBrainz URL or MBID to match directly (#647) — New escape hatch on the Fix Track Match modal. When fuzzy auto-search keeps ranking the wrong recording among many same-title versions, paste the recording URL or bare UUID and skip the fuzzy logic entirely. Resolves straight to that record, runs it through the existing confirm + match pipeline. (036faff8)

  • MusicBrainz added to the auto-search cascade (#655) — Modal used to query only Spotify → Deezer → iTunes. MusicBrainz was absent even for users with MB set as primary. Now it's in the cascade — first when MB is primary, last fallback otherwise. Catches niche / non-mainstream / diacritic-canonical recordings the commercial sources miss. Discogs intentionally absent (no track-level search API). (daf9a527)

Subsystem reliability

  • Quarantined files no longer re-downloaded on auto-wishlist cycles (#652) — When a file failed AcoustID and got quarantined, the candidate picker's deterministic quality ranking kept selecting the same (uploader, filename) source, re-downloading and re-quarantining the same file every cycle. Users woke up to hundreds of duplicate .quarantined entries. Soulseek candidate filter now reads quarantine sidecars and drops matching (username, filename) candidates before the quality picker ranks them. Approving/deleting the entry frees the source. (79ad4d88, PR #658)

  • slskd-unreachable log spam during non-Soulseek downloads (#649) — When slskd was configured but not running, /api/downloads/status polling fanned out to every plugin including Soulseek, producing one ERROR - Cannot connect to host ... [Name or service not known] per poll for the entire duration of any download. Connection failures now emit one WARNING with actionable context, then demote subsequent failures to debug. Flag resets on the next successful slskd response. (54e4ba84)

  • Unknown Artist Fixer crashed on every run (#646) — Repair job crashed instantly with ImportError: cannot import name '_build_path_from_template'. Commit ca5c9316 had moved the path-builder helpers out of core.repair_jobs.library_reorganize into the import pipeline, but the Unknown Artist Fixer's deferred-import path was left pointing at the old module. Re-wired imports, added regression tests so the next refactor catches this class of failure in CI. (735dd738, PR #659)

Docker / infra

  • Pre-bake /app/Stream for rootless Docker (#648) — Streaming "Play" flow on basic search tried to create /app/Stream lazily at runtime, which fails silently under rootless Docker / Podman (in-container root can't write to /app). Pre-baked at image build time, matching the /app/Staging pattern. Non-persistent — no volume needed. (a33faaeb, PR #656)

Diagnostic-only (no WHATS_NEW entry)

  • Log every cancel_download caller with a trigger label — Diagnostic groundwork for #648's "Tidal sync downloads failing" report. ~91s gap between Tidal download start and cancel matches the monitor's 90s queue-timeout exactly, but none of the WARNING log lines fire so the trigger path is ambiguous. Added one [CancelTrigger:<label>] INFO log line before every cancel_download(...) call (11 sites total, 5 monitor paths + 3 web_server + 2 API + 1 candidates). Backward-compat shape on the monitor's deferred_ops tuple. Zero behavior change. (a685f9ca)

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]