From 600abbf268830171fbba8ab61ef580da212c510e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emrik=20=C3=96stling?= Date: Tue, 20 Oct 2026 00:37:49 +0200 Subject: [PATCH 1/4] Chore: prepare for release 0.20.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b58741a3..0ca95a75 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "convertx-frontend", - "version": "0.19.0", + "version": "0.20.0", "scripts": { "dev": "bun run --watch src/index.tsx", "hot": "bun run --hot src/index.tsx", From 550f83855bf75ab60a24eeaf3efb6ec924a84098 Mon Sep 17 00:00:00 2001 From: monsterlag <64719697+monsterlag@users.noreply.github.com> Date: Wed, 21 Oct 2026 17:32:03 -0400 Subject: [PATCH 2/4] fix(ffmpeg): preserve cover art when converting to m4b (#679) --- src/converters/ffmpeg.ts | 2 +- tests/converters/ffmpeg.test.ts | 35 ++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index 6182cdf5..8d5709a6 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -721,7 +721,7 @@ export async function convert( let extraArgs: string[] = []; let message = "Done"; - const audioFormatsWithCover = ["m4a", "mp3", "flac", "ogg"]; + const audioFormatsWithCover = ["m4a", "m4b", "mp3", "flac", "ogg"]; const audioFormatsNoCover = ["wav", "aac"]; if (audioFormatsWithCover.includes(convertTo)) { diff --git a/tests/converters/ffmpeg.test.ts b/tests/converters/ffmpeg.test.ts index 8fff82eb..955e2a0a 100644 --- a/tests/converters/ffmpeg.test.ts +++ b/tests/converters/ffmpeg.test.ts @@ -89,23 +89,26 @@ test.each([ expect(calls[0]).toEqual(["-i", "in.mkv", "-c:v", codec, "out.video"]); }); -test.each(["m4a", "mp3", "flac", "ogg"])("keeps embedded cover art for %s output", async (ext) => { - await convert("in.wav", "wav", ext, `out.${ext}`, undefined, mockExecFile); +test.each(["m4a", "m4b", "mp3", "flac", "ogg"])( + "keeps embedded cover art for %s output", + async (ext) => { + await convert("in.mp3", "mp3", ext, `out.${ext}`, undefined, mockExecFile); - expect(calls[0]).toEqual([ - "-i", - "in.wav", - "-map", - "0:a", - "-map", - "0:v:disp:attached_pic?", - "-c:v", - "copy", - "-disposition:v", - "attached_pic", - `out.${ext}`, - ]); -}); + expect(calls[0]).toEqual([ + "-i", + "in.mp3", + "-map", + "0:a", + "-map", + "0:v:disp:attached_pic?", + "-c:v", + "copy", + "-disposition:v", + "attached_pic", + `out.${ext}`, + ]); + }, +); test.each(["wav", "aac"])("drops video streams for %s output", async (ext) => { await convert("in.mp3", "mp3", ext, `out.${ext}`, undefined, mockExecFile); From 42cf5697bb2c8e5423343356ab618cb80392e140 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 23:21:34 +0200 Subject: [PATCH 3/4] chore(deps): update oven/bun docker tag to v1.4.4 (#683) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e4792c3a..acb74f93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.4.3-slim AS base +FROM oven/bun:1.4.4-slim AS base WORKDIR /app COPY package.json bun.lock /app/ RUN bun install --frozen-lockfile From 49b0ecbe6adcc72dbdb6912a94210a30044f9f15 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 23:21:42 +0200 Subject: [PATCH 4/4] chore(deps): update dependency bun to v1.4.4 (#682) --- .bun-version | 2 +- mise.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bun-version b/.bun-version index 3c80e4f0..e1df5de7 100644 --- a/.bun-version +++ b/.bun-version @@ -1 +1 @@ -1.4.3 \ No newline at end of file +1.4.4 \ No newline at end of file diff --git a/mise.toml b/mise.toml index cfb78577..40a490fb 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -bun = "1.4.3" +bun = "1.4.4" [env] JWT_SECRET = "aLongAndSecretStringUsedToSignTheJSONWebToken1234"