soulsync/core
BoulderBadgeDad b543db147a youtube: use pasted cookies.txt instead of passing 'custom' as a browser to yt-dlp
Docker report (HellRa1SeR, 2.7.8): pasting YouTube cookies threw
`ERROR: unsupported browser: "custom"`. the 'Paste cookies.txt' dropdown value is the sentinel
'custom', and youtube_client built `cookiesfrombrowser=('custom',)` from it — yt-dlp rejects
that since 'custom' isn't a browser. (server/Docker users have no local browser, so pasted
cookies.txt is the ONLY way to authenticate yt-dlp — e.g. for private 'Liked Music'.)

the correct precedence already existed in core.youtube_cookies.build_youtube_cookie_opts
('custom' -> cookiefile, browser name -> cookiesfrombrowser, falsy -> anonymous) and the web
layer used it — but youtube_client never got migrated and kept 5 inline cookiesfrombrowser
sites. route all of them through a shared _resolve_cookie_opts() that delegates to the tested
helper (reads youtube.cookies_browser + youtube.cookies_file, checks the file exists). also:
the no-cookies download retry now drops cookiefile too (not just cookiesfrombrowser), and
removed 3 now-dead config_manager imports.

3 regression tests (custom->cookiefile, browser unchanged, custom+missing-file->anonymous);
97 youtube tests green.
2026-06-27 23:47:38 -07:00
..
artists
automation Remove old auto-acting Quality Scanner tool (replaced by Quality Upgrade Finder job) 2026-06-13 12:14:45 -07:00
blocklist
credentials
diagnostics
discovery Listening Mix: source-independent track fetch (Deezer public fallback) 2026-06-25 10:37:16 -07:00
download_engine lint: add strict=True to engine search zip() (B905) 2026-06-25 16:41:00 -07:00
download_plugins feat(quality): source mappers + populate real quality on streaming results 2026-06-14 12:27:03 +02:00
downloads unverified-history reconcile + orphan-clean: hardening follow-up to #938 2026-06-27 22:35:16 -07:00
enrichment #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
exports #903: real source wiring for the export MBID waterfall 2026-06-22 20:35:20 -07:00
imports integrity: don't quarantine longer masters/versions as 'truncated' (#937) 2026-06-27 15:25:13 -07:00
library Merge pull request #896 from nick2000713/feature/best-quality-search-mode 2026-06-24 20:27:38 -07:00
maintenance
matching
media_server
metadata discography 'add to wishlist': batch the per-track ownership check (fixes ~15-30s/track) 2026-06-27 19:51:28 -07:00
personalized SoulSync Discovery sync tab: list all kinds + Listening Mix generator 2026-06-25 11:38:41 -07:00
playback
playlists #901: give file-import playlist tracks a stable id so manual matches stick 2026-06-22 08:53:24 -07:00
quality feat(quality): rank-based candidate ordering toggle for priority mode 2026-06-25 22:00:57 +02:00
radio
repair_jobs album completeness: fix excluded-sibling missing list + O(N) grouping (follow-up to #936) 2026-06-27 18:18:50 -07:00
search
security
stats
streaming
sync Sync wishlist re-add: skip wing-it stubs (match the sync), no clickable button 2026-06-24 16:51:43 -07:00
text Cover art: a sequel digit glued to a CJK title ('…サウンドトラック2') now blocks the wrong-album match 2026-06-18 08:24:54 -07:00
torrent_clients
usenet_clients NZBGet: import from the final location, not the incomplete '….#NZBID' dir 2026-06-18 12:47:19 -07:00
watchlist watchlist history: record automatic scans too (#933) 2026-06-27 00:42:58 -07:00
webui
wishlist wishlist: render library-sourced art (album + artist) — fix blank wishlist images 2026-06-27 17:35:28 -07:00
workers
acoustid_client.py
acoustid_verification.py
album_consistency.py
amazon_client.py
amazon_download_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
amazon_outage.py
amazon_worker.py Enrichment manager: 'process this group first' + refined hero header 2026-06-02 19:45:04 -07:00
api_call_tracker.py
archive_pipeline.py
artist_source_detail.py
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
audiodb_worker.py Tighten artist matching: 0.85 gate + shared uniqueness guard 2026-06-05 10:01:17 -07:00
auto_import_worker.py #889: FIX data loss — re-identify to the same release no longer deletes the file 2026-06-18 17:13:46 -07:00
automation_engine.py
connection_detect.py
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
database_update_worker.py
db_integrity.py
debug_info.py Fix Copy Debug Info music_source + surface missing services 2026-05-12 16:47:55 -07:00
deezer_client.py Lint: log instead of bare except-pass in two best-effort paths (ruff S110) 2026-06-21 22:47:11 -07:00
deezer_download_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
deezer_worker.py #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
discogs_client.py Cache artist album lists across metadata sources 2026-06-11 22:33:04 +02:00
discogs_worker.py
download_orchestrator.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
genius_client.py
genius_worker.py Enrichment manager: 'process this group first' + refined hero header 2026-06-02 19:45:04 -07:00
genre_filter.py
hifi_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
hydrabase_client.py
hydrabase_worker.py
image_cache.py
itunes_client.py #918 follow-up: self-heal stale truncated iTunes album-tracks cache 2026-06-24 09:37:14 -07:00
itunes_worker.py #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
jellyfin_client.py Multi-disc (#927): capture real disc number at media-server scan time 2026-06-25 15:40:17 -07:00
lastfm_client.py
lastfm_worker.py
library_reorganize.py fix(reorganize): include MusicBrainz release IDs 2026-06-25 22:54:43 +02:00
lidarr_download_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
listenbrainz_client.py #903: re-export updates the same ListenBrainz playlist in place (no duplicates) 2026-06-22 22:36:29 -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
matching_engine.py
metadata_service.py #922: import search labelled Spotify Free users' primary source as 'Deezer' 2026-06-24 08:43:52 -07:00
musicbrainz_client.py
musicbrainz_search.py
musicbrainz_service.py #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
musicbrainz_worker.py #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
navidrome_client.py Multi-disc (#927): capture real disc number at media-server scan time 2026-06-25 15:40:17 -07:00
personalized_playlists.py Popular Picks: fix empty result for deezer (popularity threshold scale mismatch) 2026-06-25 16:30:52 -07:00
plex_client.py Align playlists: add Plex support + cover art + modal redesign 2026-06-24 13:12:09 -07:00
profile_context.py
prowlarr_client.py
qobuz_client.py manual search: float the pasted Qobuz/Tidal track to the top (#932) 2026-06-26 21:45:41 -07:00
qobuz_worker.py
reorganize_queue.py Reorganize: optional embedded-tag mode (closes #592) 2026-05-15 07:56:18 -07:00
reorganize_runner.py
repair_worker.py preview-clip job: enable select-all/fix-all + give the re-wishlist proper album art 2026-06-27 17:10:07 -07:00
replaygain.py
runtime_state.py fix(post-processing): prevent double-claim race that fails imported tracks 2026-06-25 21:03:33 +02:00
seasonal_discovery.py
similar_artists_worker.py
socketio_cors.py
soulid_worker.py Surface silent exceptions in workers + repair jobs — ~30 sites 2026-05-07 10:27:24 -07:00
soulseek_client.py feat(quality): make every audio format controllable via ranked targets 2026-06-24 23:01:20 +02:00
soulsync_client.py Surface silent exceptions across remaining modules — ~70 sites 2026-05-07 10:28:58 -07:00
soundcloud_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -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
spotify_free_metadata.py
spotify_public_api.py
spotify_public_scraper.py
spotify_token_cache.py
spotify_worker.py #887: Spotify enrichment shows 'Running (Spotify Free)' for no-auth users, not 'Not Authenticated' 2026-06-18 13:00:33 -07:00
tag_writer.py
tidal_client.py #880: retry 429 mid-walk when paginating Tidal Favorite Tracks (don't truncate) 2026-06-15 19:56:53 -07:00
tidal_download_client.py Download clients: don't crash init when the download path can't be created 2026-06-24 21:00:32 -07:00
tidal_worker.py
watchlist_scanner.py watchlist: don't fuse different editions as the same album (Sokhi: Expedition 33) 2026-06-26 20:38:10 -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
worker_utils.py #868: disambiguate same-name artists by owned-catalog overlap during enrichment 2026-06-13 14:57:17 -07:00
youtube_client.py youtube: use pasted cookies.txt instead of passing 'custom' as a browser to yt-dlp 2026-06-27 23:47:38 -07:00
youtube_cookies.py #902: YouTube Liked Music sync — paste a cookies.txt (server/Docker auth) 2026-06-22 14:41:04 -07:00
youtube_track_meta.py