..
artists
Complete MusicBrainz watchlist source parity
2026-05-18 19:19:25 -07:00
automation
Mirrored playlists: custom name alias (overrides display + sync name, survives upstream refresh) — card rename button like the source-ref editor
2026-06-13 00:23:56 -07:00
blocklist
Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page
2026-06-07 15:25:52 -07:00
credentials
Profiles: review fixes — close two gating gaps + reject whitespace secrets
2026-06-10 00:48:03 -07:00
diagnostics
#802 : on-demand memory-growth diagnostic (tracemalloc, browser-drivable)
2026-06-06 18:31:14 -07:00
discovery
#863 : add diagnostic logging to YouTube artist-recovery so we can see per-track what it returns
2026-06-13 00:03:35 -07:00
download_engine
feat(quality): quality-aware source fall-through in search_with_fallback
2026-06-14 12:33:34 +02:00
download_plugins
feat(quality): source mappers + populate real quality on streaming results
2026-06-14 12:27:03 +02:00
downloads
fix(downloads): unverified review actions always load + show real quality on completed
2026-06-14 17:11:17 +02:00
enrichment
Import speed: downloads pause ALL enrichment workers, discovery pauses the contention five
2026-06-06 19:05:56 -07:00
exports
Library export: export the whole library roster too (corruption's request)
2026-06-11 22:59:21 -07:00
imports
fix(downloads): unverified review actions always load + show real quality on completed
2026-06-14 17:11:17 +02:00
library
Orphan detector: hard-bail on a mass-orphan flood instead of warn-only
2026-06-12 08:15:23 -07:00
maintenance
Add one-off repair for source ids shared across multiple artists
2026-06-05 08:38:55 -07:00
matching
#845 tests: lift history-path resolver to core/ + seam-test the delete-safety
2026-06-11 11:07:25 -07:00
media_server
Server playlist sync: append mode (preserve user-added tracks)
2026-05-10 22:52:11 -07:00
metadata
Spotify (no-auth): report connected + 'Spotify (no-auth)' test result instead of a Deezer fallback
2026-06-13 10:16:23 -07:00
personalized
Personalized pipeline: auto-refresh stale snapshots after watchlist scan
2026-05-15 20:53:03 -07:00
playback
Player: log SoulSync web-player plays (recently-played + smart-radio recency)
2026-05-30 15:11:46 -07:00
playlists
Mirrored playlists: custom name alias (overrides display + sync name, survives upstream refresh) — card rename button like the source-ref editor
2026-06-13 00:23:56 -07:00
quality
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
radio
Player revamp Phase 2: smart radio ranking (play-count + popularity)
2026-05-30 08:47:18 -07:00
repair_jobs
#862 : Library Reorganize falls back to tag-mode when an album has no source ID (media-server libs now actually reorganize)
2026-06-12 20:05:50 -07:00
search
Multi-artist tags: Search → Download Now finally knows its metadata source (Netti93)
2026-06-09 17:20:16 -07:00
security
Login mode: enforce "every profile has a password" at every write-point (no gaps)
2026-06-11 19:48:50 -07:00
stats
Surface silent exceptions across remaining modules — ~70 sites
2026-05-07 10:28:58 -07:00
streaming
#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
sync
Sync: append mode actually dedupes — stop re-adding the whole playlist ( #823 )
2026-06-09 16:31:05 -07:00
text
Matcher: bracketed subtitles no longer read as different songs ( #825 )
2026-06-09 16:03:11 -07:00
torrent_clients
Add Aria2 to the torrent client list (Shdjfgatdif's request)
2026-06-11 22:29:40 -07:00
usenet_clients
Fix: Usenet bundle stuck at 99%/100% — SAB reports post-processing in History as non-terminal ( #721 )
2026-05-29 00:49:02 -04:00
watchlist
Complete MusicBrainz watchlist source parity
2026-05-18 19:19:25 -07:00
webui
Extract WebUI asset helpers
2026-05-13 22:26:25 +03:00
wishlist
Wishlist: manual "add to wishlist" now skips already-owned tracks ( #825 )
2026-06-09 10:55:45 -07:00
workers
Final silent-exception sweep + ruff S110 lint guardrail — ~45 sites
2026-05-07 11:16:06 -07:00
acoustid_client.py
AcoustID: report errors honestly instead of masking them as 'Skipped'
2026-05-31 20:10:31 -07:00
acoustid_verification.py
feat(verification): status vocabulary, DB column, SOULSYNC_VERIFICATION tag
2026-06-11 01:27:29 +02:00
album_consistency.py
Surface silent exceptions across remaining modules — ~70 sites
2026-05-07 10:28:58 -07:00
amazon_client.py
Fix #759 : Amazon enrichment floods when its public proxy is down
2026-06-01 13:10:51 -07:00
amazon_download_client.py
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
amazon_outage.py
Fix #759 : Amazon enrichment floods when its public proxy is down
2026-06-01 13:10:51 -07:00
amazon_worker.py
Enrichment manager: 'process this group first' + refined hero header
2026-06-02 19:45:04 -07:00
api_call_tracker.py
Wire Amazon Music as a first-class download source
2026-05-16 09:40:50 -07:00
archive_pipeline.py
fix(downloads): harden album bundle staging
2026-05-20 21:39:06 -07:00
artist_source_detail.py
Fix MusicBrainz artist detail showing MBID as name
2026-05-19 12:34:35 -07:00
artist_source_lookup.py
Fix artist-detail showing wrong artist when a source id is duplicated
2026-06-05 07:24:51 -07:00
audiodb_client.py
Add API Rate Monitor dashboard with real-time speedometer gauges
2026-04-02 10:46:43 -07:00
audiodb_worker.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
auto_import_worker.py
Fix import artist override and verification review
2026-06-11 01:28:31 +02:00
automation_engine.py
Automations: run each as its OWNER profile in the background (part 1 of per-profile sync)
2026-06-10 15:37:56 -07:00
connection_detect.py
Final silent-exception sweep + ruff S110 lint guardrail — ~45 sites
2026-05-07 11:16:06 -07:00
connection_test.py
Spotify (no-auth): report connected + 'Spotify (no-auth)' test result instead of a Deezer fallback
2026-06-13 10:16:23 -07:00
database_update_health.py
#859 : DB-update stall watchdog + UI self-heal (no more wedged 'Starting...' / frozen bar)
2026-06-12 19:38:30 -07:00
database_update_worker.py
Run auto-reconcile as a scan phase inside the running window
2026-06-05 19:10:31 -07:00
db_integrity.py
DB backups: verify integrity + never evict the last good backup
2026-05-30 21:13:04 -07:00
debug_info.py
Fix Copy Debug Info music_source + surface missing services
2026-05-12 16:47:55 -07:00
deezer_client.py
#853 follow-up: don't cache a partial Deezer discography on mid-pagination error
2026-06-11 15:35:36 -07:00
deezer_download_client.py
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
deezer_worker.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
discogs_client.py
Cache artist album lists across metadata sources
2026-06-11 22:33:04 +02:00
discogs_worker.py
Discogs: fix master/release ID collision fetching the wrong album
2026-06-10 15:01:31 +02:00
download_orchestrator.py
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
genius_client.py
Genius 429 backoff: fail-fast gate instead of napping the import pipeline
2026-06-06 20:51:33 -07:00
genius_worker.py
Enrichment manager: 'process this group first' + refined hero header
2026-06-02 19:45:04 -07:00
genre_filter.py
Expand default genre whitelist from 223 to 272 genres
2026-04-18 20:32:49 -07:00
hifi_client.py
fix(hifi): decline 30s preview manifests, fall through to a real source
2026-06-14 16:42:25 +02:00
hydrabase_client.py
feat: add explicit badges to discography modal and artist-detail cards
2026-05-12 23:35:08 -04:00
hydrabase_worker.py
Improve graceful shutdown and rollback safety
2026-04-12 15:17:18 +03:00
image_cache.py
Image cache: reject truncated downloads instead of caching broken covers ( #750 )
2026-05-30 17:45:01 -07:00
itunes_client.py
Cache artist album lists across metadata sources
2026-06-11 22:33:04 +02:00
itunes_worker.py
Full release dates: store + write yyyy-mm-dd end to end ( #824 part 2)
2026-06-08 23:32:42 -07:00
jellyfin_client.py
Sync: append mode actually dedupes — stop re-adding the whole playlist ( #823 )
2026-06-09 16:31:05 -07:00
lastfm_client.py
Add Last.fm Track Radio to Discover page
2026-04-14 23:41:36 -07:00
lastfm_worker.py
Enrichment manager: 'process this group first' + refined hero header
2026-06-02 19:45:04 -07:00
library_reorganize.py
#767-2: reorganize finds the right album edition instead of mislabeling singles as deluxe
2026-06-06 10:53:13 -07:00
lidarr_download_client.py
Surface silent exceptions across remaining modules — ~70 sites
2026-05-07 10:28:58 -07:00
listenbrainz_client.py
Remove emojis from all Python log and print statements
2026-04-11 21:11:02 -07:00
listenbrainz_manager.py
Auto-Sync: fix LB pipelines stuck on "Refreshing:" for 5+ minutes
2026-05-27 18:04:55 -07:00
listening_stats_worker.py
Final silent-exception sweep + ruff S110 lint guardrail — ~45 sites
2026-05-07 11:16:06 -07:00
lyrics_client.py
Lyrics: add a "Lyrics Filler" maintenance job + lyrics option in the Re-tag tool (Sokhi)
2026-06-07 17:27:52 -07:00
matching_engine.py
fix: treat colon as separator in normalize_string so T:T matches T_T
2026-06-12 12:54:03 +02:00
metadata_service.py
Add MusicBrainz as a metadata source
2026-05-18 18:47:13 -07:00
musicbrainz_client.py
MusicBrainz manual search: field-scope the artist in non-strict mode ( #754 )
2026-05-31 10:05:24 -07:00
musicbrainz_search.py
Fix: MusicBrainz artist discography capped at 25 releases
2026-05-28 12:00:05 -07:00
musicbrainz_service.py
Cover art: a numeric difference is a different release — Vol.4 stops wearing Vol.4.5's cover
2026-06-07 10:21:23 -07:00
musicbrainz_worker.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
navidrome_client.py
Navidrome: self-heal the connection instead of latching disconnected (jimmydotcom)
2026-06-11 21:34:48 -07:00
personalized_playlists.py
Blocklist Phase 1 (backend): artist/album/track bans enforced at the wishlist chokepoint
2026-06-07 15:18:25 -07:00
plex_client.py
Fix #792 : 'reconcile' playlist sync mode (edit in place, keep image/description)
2026-06-04 15:15:49 -07:00
profile_context.py
Automations: run each as its OWNER profile in the background (part 1 of per-profile sync)
2026-06-10 15:37:56 -07:00
prowlarr_client.py
feat(settings): add Prowlarr integration as indexer aggregator
2026-05-20 14:41:54 -07:00
qobuz_client.py
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
qobuz_worker.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
reorganize_queue.py
Reorganize: optional embedded-tag mode ( closes #592 )
2026-05-15 07:56:18 -07:00
reorganize_runner.py
Reorganize: optional embedded-tag mode ( closes #592 )
2026-05-15 07:56:18 -07:00
repair_worker.py
Add Empty Folder Cleaner library-maintenance job (corruption's request)
2026-06-11 22:11:26 -07:00
replaygain.py
Add module logger + surface silent exceptions in 7 logger-less files — 12 sites
2026-05-07 10:27:04 -07:00
runtime_state.py
Add module logger + surface silent exceptions in 7 logger-less files — 12 sites
2026-05-07 10:27:04 -07:00
seasonal_discovery.py
Fix source artist detail navigation from discover modals
2026-05-18 13:50:10 -07:00
similar_artists_worker.py
Lint: fix ruff B905 (zip strict=) + S110 (try/except/pass) in similar-artists worker + perf endpoint
2026-06-03 16:35:19 -07:00
socketio_cors.py
Socket.IO CORS: handle self-review nits
2026-04-26 19:24:43 -07:00
soulid_worker.py
Surface silent exceptions in workers + repair jobs — ~30 sites
2026-05-07 10:27:24 -07:00
soulseek_client.py
feat: global AudioQuality model with post-download quarantine + retry
2026-06-13 22:22:08 +02:00
soulsync_client.py
Surface silent exceptions across remaining modules — ~70 sites
2026-05-07 10:28:58 -07:00
soundcloud_client.py
#865 : resolve pasted SoundCloud links (incl. unlisted/private share URLs) via direct yt-dlp resolve; manual-search forces the SoundCloud source
2026-06-13 00:41:47 -07:00
source_ids.py
Source IDs: add canonical registry, adopt at the highest-value sites
2026-05-29 12:19:59 -07:00
spotify_client.py
Cache artist album lists across metadata sources
2026-06-11 22:33:04 +02:00
spotify_free_metadata.py
Spotify Free: close the album-search gap via the artist's discography
2026-06-09 12:05:40 -07:00
spotify_public_api.py
SpotipyFree integration confirmed working (236 tracks live); deps + meta tweak
2026-06-02 22:50:04 -07:00
spotify_public_scraper.py
Diagnostics: route public-fetch logs to soulsync namespace + log HTTP status
2026-06-02 22:09:51 -07:00
spotify_token_cache.py
Spotify tokens move into the database — daily Docker deauth fixed (wolf39us)
2026-06-07 12:01:33 -07:00
spotify_worker.py
Spotify: rename "Spotify Free" → "Spotify (no auth)", default enrichment to it
2026-06-09 12:55:19 -07:00
tag_writer.py
feat(verification): status vocabulary, DB column, SOULSYNC_VERIFICATION tag
2026-06-11 01:27:29 +02:00
tidal_client.py
#867 : Tidal playlist discovery shows all tracks (was capped to ~21)
2026-06-13 10:39:30 -07:00
tidal_download_client.py
feat(quality): derive per-source download tier from the global profile
2026-06-14 13:18:01 +02:00
tidal_worker.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
watchlist_scanner.py
Watchlist: per-artist 'auto-download' toggle (follow-only) — off = discover/surface releases but skip the wishlist add; default on
2026-06-13 08:07:20 -07:00
web_scan_manager.py
MS Cin-5: Drop per-server globals — engine owns the clients
2026-05-05 18:05:45 -07:00
wishlist_service.py
Extract wishlist logic into dedicated package
2026-04-28 21:17:24 +03:00
worker_utils.py
Tighten artist matching: 0.85 gate + shared uniqueness guard
2026-06-05 10:01:17 -07:00
youtube_client.py
YouTube: ship the JS runtime + nightly yt-dlp so streams/music videos work out of the box
2026-06-06 16:50:24 -07:00
youtube_track_meta.py
#863 : derive YouTube track artist from music fields / -Topic channel / 'Artist - Title' instead of the playlist owner
2026-06-12 20:14:55 -07:00