diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 986d491..cb39f2d 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -108,7 +108,7 @@ async function downloadArtwork(url, dir) { } // Download a single track: yt-dlp audio + ffmpeg clean metadata + iTunes cover embedded -async function downloadTrack({ jobId, artist, albumArtist, title, album, year, trackNum, totalTracks, genre, artworkUrl, outputDir }) { +async function downloadTrack({ jobId, artist, albumArtist, title, album, year, trackNum, totalTracks, discNum, discTotal, compilation, genre, artworkUrl, outputDir }) { const mainArtist = albumArtist || artist; const safeArtist = sanitize(mainArtist); const safeAlbum = sanitize(album || 'Singles'); @@ -196,7 +196,9 @@ async function downloadTrack({ jobId, artist, albumArtist, title, album, year, t if (year) ffArgs.push('-metadata', `date=${String(year)}`); if (trackNum) ffArgs.push('-metadata', `track=${totalTracks ? `${trackNum}/${totalTracks}` : String(trackNum)}`); if (totalTracks) ffArgs.push('-metadata', `totaltracks=${String(totalTracks)}`); - if (genre) ffArgs.push('-metadata', `genre=${genre}`); + if (genre) ffArgs.push('-metadata', `genre=${genre}`); + if (discNum) ffArgs.push('-metadata', `disc=${discTotal ? `${discNum}/${discTotal}` : String(discNum)}`); + if (compilation) ffArgs.push('-metadata', `compilation=1`); if (hasCover) { ffArgs.push( '-metadata:s:v', 'title=Album cover', @@ -240,8 +242,11 @@ async function downloadAlbumTracks({ jobId, artist, albumTitle, tracks, artworkU title: track.trackName || track.title, album: albumTitle, year: track.releaseDate ? new Date(track.releaseDate).getFullYear() : undefined, - trackNum: track.trackNumber || undefined, + trackNum: track.trackNumber || undefined, totalTracks: total, + discNum: track.discNumber || undefined, + discTotal: track.discCount || undefined, + compilation: track.collectionType === 'Compilation' || undefined, genre: track.primaryGenreName || undefined, artworkUrl: artworkUrl || track.artworkUrl100, outputDir: CONFIG.musicPath,