diff --git a/CLAUDE.md b/CLAUDE.md index 43f0dbf..ee62332 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -62,6 +62,12 @@ Backend runs in Docker (see `docker-compose.yml`); on the deploy host it lives a match, and returns an unrelated same-titled track — whose wrong duration then *also* misleads the YouTube duration filter (observed: a 96 s track resolved to a 176 s slowed version). The same trim runs client-side in Android's `ExploreViewModel.search()`. +- **Mixed-artist albums search per track.** `downloadAlbumTracks` passes `rawArtist = track.artistName` + so the YTM/YouTube search query and the channel filter use each track's *own* performer, not the + album artist. `ytdlp.js` derives both from `rawArtist || mainArtist`, and `mainArtist = albumArtist`, + so without this every track on a soundtrack searched the album-artist blob + its channel filter and + matched nothing (e.g. "Strategy" = TWICE, "Love, Maybe" = MeloMance failed). The `album_artist` tag + still uses `albumArtist`, so album grouping is unaffected. - **Always write an `album` tag.** `ytdlp.js` defaults it to `Singles` when no album is known. Previously no tag was written at all, so Navidrome showed its own "Singles" fallback while the metadata editor showed "[Unknown Album]" — the two never matched and file resolution failed.