Add 4 new cover/tracklist sources: MB back cover, iTunes, Last.fm, Discogs tracklist
cover_handler.py: - _download_image(): shared helper replaces duplicated download logic - download_back_cover(): fetches back cover from MusicBrainz CAA (/back endpoint), saves as back.jpg; skips if already present - _itunes_cover_url() / download_itunes_cover(): iTunes Search API (no auth), requests 600x600 artwork; fallback after Discogs - _lastfm_cover_url() / download_lastfm_cover(): Last.fm album.getinfo (LASTFM_API_KEY env var); last cover fallback, skips placeholder images - resolve_cover(): extended with iTunes → Last.fm fallback chain metadata_resolver.py: - _discogs_get_tracklist(): fetches full Discogs release via REST API, parses tracklist[] including heading-based disc detection - _lastfm_tracklist(): fetches Last.fm album.getinfo tracks (LASTFM_API_KEY) - resolve(): uses Discogs tracklist → Last.fm tracklist as fallback when MusicBrainz returns no tracks; LASTFM_API_KEY added to env var block music_enricher.py: - process_album(): calls download_back_cover() after execute_album() when MBID known New cover priority: local → MusicBrainz front → Discogs → iTunes → Last.fm New tracklist priority: local → YouTube → MusicBrainz → Discogs → Last.fm → OCR Test suite: 29 → 33 tests (all pass) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
071f4c5e1d
commit
80472653b4
4 changed files with 273 additions and 33 deletions
|
|
@ -26,7 +26,7 @@ from models import AlbumProposal
|
|||
from scanner import scan_album, collect_album_dirs
|
||||
from hint_extractor import extract_hints
|
||||
from metadata_resolver import resolve
|
||||
from cover_handler import resolve_cover
|
||||
from cover_handler import resolve_cover, download_back_cover
|
||||
from executor import execute_album, write_report
|
||||
|
||||
|
||||
|
|
@ -216,6 +216,12 @@ def process_album(
|
|||
for k, v in album_stats.items():
|
||||
stats[k] = stats.get(k, 0) + v
|
||||
|
||||
# Back-Cover von MusicBrainz holen (wenn MBID bekannt und noch kein back.jpg)
|
||||
if proposal.mbid and not args.no_cover and not args.dry_run:
|
||||
back = download_back_cover(proposal.mbid, album_dir)
|
||||
if back:
|
||||
print(f" 🖼️ Back-Cover heruntergeladen: {back.name}")
|
||||
|
||||
# Jellyfin Playlist Generator aufrufen
|
||||
generator_path = _find_jellyfin_generator(album_dir, getattr(args, "playlist_generator", None))
|
||||
if generator_path:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue