diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 6ea8c28..f2216c4 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -623,7 +623,13 @@ app.post('/api/download', async (req, res) => { if (!tracks.length) { throw new Error(`Keine einzelnen Tracks für "${album || title}" gefunden. Bitte über iTunes Global-Suche herunterladen.`); } - const { done: dlDone, skipped: dlSkipped } = await downloadAlbumTracks({ jobId, artist, albumTitle: album || title, tracks, artworkUrl }); + // Album artist: prefer iTunes' album-level collectionArtistName (identical across every track) + // over the request's `artist`, which can be a single track's performer — e.g. the lead single + // "TAKEDOWN" is by TWICE, so `artist` arrives as "TWICE" and would tag the whole soundtrack's + // album_artist as TWICE. Keeps album_artist consistent so Navidrome doesn't split the album. + const albumArtistName = tracks.map(t => t.collectionArtistName).find(Boolean) || artist; + if (albumArtistName !== artist) log(jobId, `👥 Album-Künstler: "${albumArtistName}" (iTunes)`); + const { done: dlDone, skipped: dlSkipped } = await downloadAlbumTracks({ jobId, artist: albumArtistName, albumTitle: album || title, tracks, artworkUrl }); const allSkipped = dlSkipped === tracks.length; const someSkipped = dlSkipped > 0 && !allSkipped; const msg = allSkipped