Fix 'Unknown' track artists leaking from bad ID3 tags and classical schema

- hint_extractor: filter existing tags through _is_good() so 'Unknown',
  'Unknown Artist' etc. in existing ID3 tags don't override filename-parsed
  artist names
- executor: _is_classical() now returns False when track_artist is a placeholder
  ('unknown', 'unknown artist') — prevents pop albums from getting the
  Performer-Composer-Work filename schema
- executor/music_enricher: pass albumartist to _proposed_filename() so fallback
  works when track artist is missing; fix display to use albumartist fallback too

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-04-29 08:15:46 +02:00
commit aaa32622b2
3 changed files with 14 additions and 5 deletions

View file

@ -52,6 +52,8 @@ def _is_classical(albumartist: str, track_artist: str, genre: str) -> bool:
ta = (track_artist or "").casefold().strip()
if not aa or aa in ("various artists", "unknown artist", "unknown"):
return False
if not ta or ta in ("unknown artist", "unknown"):
return False # placeholder, not a real composer
if aa == ta:
return False
return True # performer ≠ composer → classical naming
@ -76,7 +78,7 @@ def _proposed_filename(
disc_prefix = f"{proposal.disc_number}-" if (proposal.disc_number and proposal.disc_number > 1) else ""
prefix = f"{disc_prefix}{tn}"
track_artist = _safe_name(proposal.artist or "Unknown")
track_artist = _safe_name(proposal.artist or albumartist or "Unknown")
aa = _safe_name(albumartist)
title = _safe_name(proposal.title or "Unknown")