diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 2539a94..d7105d1 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -483,7 +483,12 @@ app.post('/api/edit-metadata', async (req, res) => { const ffArgs = ['-i', filePath]; if (artFile) ffArgs.push('-i', artFile); ffArgs.push('-map', '0:a'); - if (artFile) ffArgs.push('-map', '1:v'); + // Always carry cover art: new file if provided, otherwise preserve existing embedded art + if (artFile) { + ffArgs.push('-map', '1:v'); + } else { + ffArgs.push('-map', '0:v?'); // '?' = optional, no error if file has no cover + } ffArgs.push('-c', 'copy', '-map_metadata', '-1', '-id3v2_version', '3'); if (title) ffArgs.push('-metadata', `title=${title}`); if (artist) ffArgs.push('-metadata', `artist=${artist}`, '-metadata', `album_artist=${artist.split(';')[0].trim()}`); @@ -493,7 +498,7 @@ app.post('/api/edit-metadata', async (req, res) => { if (totalTracks) ffArgs.push('-metadata', `totaltracks=${String(totalTracks)}`); if (discNum) ffArgs.push('-metadata', `disc=${discTotal ? `${discNum}/${discTotal}` : String(discNum)}`); if (genre) ffArgs.push('-metadata', `genre=${genre}`); - if (artFile) ffArgs.push('-metadata:s:v', 'title=Album cover', '-metadata:s:v', 'comment=Cover (front)'); + ffArgs.push('-metadata:s:v', 'title=Album cover', '-metadata:s:v', 'comment=Cover (front)'); ffArgs.push(tmpFile, '-y', '-loglevel', 'error'); const ff = spawn('ffmpeg', ffArgs);