soulsync/core
Broque Thomas 603d66ba5d Add artist gate and fix substring matching in matching engine
Prevents downloading tracks from completely wrong artists by adding
minimum artist score gates:
- Soulseek: artist_score < 0.25 → reject (catches Belvedere vs Periphery)
- YouTube: artist_score < 0.15 → reject (catches lizzylou06 vs Muse)

Fixes artist substring matching to use word boundaries instead of plain
containment — "muse" no longer matches "museum", "art" no longer matches
"heart". This was causing false positives where wrong artists passed with
artist_score=1.0 due to accidental substring containment.

Improves similarity fallback by comparing against individual path segments
instead of the full filename, so misspelled artist names (Radiohedd vs
Radiohead) still match correctly.

Adjusts YouTube weights from Title 70%/Artist 10% to Title 60%/Artist 20%
to give artist more influence in YouTube matching.

Addresses user reports of unreleased albums being downloaded with garbage
content from wrong artists on Soulseek and YouTube.
2026-04-10 13:45:07 -07:00
..
repair_jobs Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
acoustid_client.py Helper V2 complete + enrichment worker fixes 2026-03-26 12:20:58 -07:00
acoustid_verification.py Skip AcoustID verification for high-confidence cross-language matches 2026-03-29 20:04:41 -07:00
album_consistency.py Add Picard-style MB release preflight for album downloads 2026-03-23 12:42:29 -07:00
api_call_tracker.py Persist API call history, record rate limit events, fix Spotify re-auth issues 2026-04-05 12:36:58 -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 Fix enrichment overwriting manual match status (#221) 2026-03-30 11:07:48 -07:00
automation_engine.py Add Run Script action to automation engine 2026-04-09 18:20:29 -07:00
database_update_worker.py Fix deep scan skipping file path updates for existing tracks 2026-03-18 13:03:01 -07:00
deezer_client.py Fix Deezer metadata cache storing incomplete album and track data 2026-04-10 10:43:45 -07:00
deezer_download_client.py Fix Deezer ARL sync/download rehydration and add album data caching 2026-04-09 09:38:13 -07:00
deezer_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
discogs_client.py Fix Discogs cache — add field extractor, wire worker caching, browser UI 2026-04-02 19:47:36 -07:00
discogs_worker.py Fix Discogs cache — add field extractor, wire worker caching, browser UI 2026-04-02 19:47:36 -07:00
download_orchestrator.py Apply same match validation to streaming download sources as Soulseek 2026-04-04 22:01:29 -07:00
genius_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
genius_worker.py Fix enrichment overwriting manual match status (#221) 2026-03-30 11:07:48 -07:00
hifi_client.py Add per-source quality fallback toggle for streaming downloads (#187) 2026-03-24 11:42:47 -07:00
hydrabase_client.py Add missing _get_artist_image_from_albums to HydrabaseClient 2026-03-23 17:54:21 -07:00
hydrabase_worker.py Use nonces and drain interleaved stats in Hydrabase 2026-02-24 19:16:14 -08:00
itunes_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
itunes_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
jellyfin_client.py Set playlist poster image on Plex/Jellyfin/Emby after sync 2026-04-09 10:08:18 -07:00
lastfm_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07:00
lastfm_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
listenbrainz_client.py Add scrobbling to Last.fm/ListenBrainz + update What's New 2026-03-22 14:38:53 -07:00
listenbrainz_manager.py Fix per-profile ListenBrainz playlist cache scoping and stale data recovery 2026-03-14 21:11:59 -07:00
listening_stats_worker.py Increase stats page top artists/albums/tracks from 10 to 25 2026-03-22 16:39:53 -07:00
lyrics_client.py Fix .lrc files written without timestamps for plain lyrics 2026-03-30 13:28:41 -07:00
matching_engine.py Add artist gate and fix substring matching in matching engine 2026-04-10 13:45:07 -07:00
media_scan_manager.py Fix automated scans for non-Plex servers & incremental scan performance 2026-03-12 11:17:32 -07:00
metadata_cache.py Add Failed MB Lookups manager + optimize cache performance 2026-04-03 11:38:50 -07:00
metadata_service.py Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
musicbrainz_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
musicbrainz_service.py Add metadata cache maintenance and health monitoring 2026-03-30 07:40:20 -07:00
musicbrainz_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
navidrome_client.py Increase Navidrome API timeout from 10s to 60s 2026-03-31 12:44:40 -07:00
personalized_playlists.py Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
plex_client.py Set playlist poster image on Plex/Jellyfin/Emby after sync 2026-04-09 10:08:18 -07:00
plex_scan_manager.py fix logging issue 2025-08-09 13:17:11 -07:00
qobuz_client.py Add Qobuz auth token login as CAPTCHA bypass alternative 2026-04-08 10:37:38 -07:00
qobuz_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
repair_worker.py Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
seasonal_discovery.py Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
soulid_worker.py Rebuild artist SoulID: track-verified canonical ID from Deezer + iTunes 2026-03-23 18:34:36 -07:00
soulseek_client.py Enforce FLAC bit depth preference and prioritize audio quality in sorting 2026-03-25 15:59:22 -07:00
spotify_client.py Centralize metadata source selection in core/metadata_service.py 2026-04-10 12:34:25 -07:00
spotify_public_scraper.py Add Spotify Link tab for public playlist/album scraping without API credentials 2026-03-15 21:25:05 -07:00
spotify_worker.py Persist API call history, record rate limit events, fix Spotify re-auth issues 2026-04-05 12:36:58 -07:00
tag_writer.py Fix OPUS files losing all metadata during import/post-processing 2026-03-28 09:37:12 -07:00
tidal_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07:00
tidal_download_client.py Add per-source quality fallback toggle for streaming downloads (#187) 2026-03-24 11:42:47 -07:00
tidal_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
watchlist_scanner.py Centralize metadata source selection in core/metadata_service.py 2026-04-10 12:34:25 -07:00
web_scan_manager.py Fix automated scans for non-Plex servers & incremental scan performance 2026-03-12 11:17:32 -07:00
wishlist_service.py Fix wishlisted tracks showing 'Unknown Album' with no cover art 2026-03-18 14:23:53 -07:00
youtube_client.py Strip '- Topic' suffix from YouTube auto-generated channel names (#231) 2026-03-31 21:06:05 -07:00