From 428e6fd6a6739f7e56f2228b787dd26ff5019321 Mon Sep 17 00:00:00 2001 From: Maya Date: Wed, 30 Jul 2025 11:35:54 +0300 Subject: [PATCH] fix: animated webp/gif conversion fixes #107 --- src/lib/workers/magick.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/lib/workers/magick.ts b/src/lib/workers/magick.ts index b287e9b..b67a7a0 100644 --- a/src/lib/workers/magick.ts +++ b/src/lib/workers/magick.ts @@ -175,6 +175,32 @@ const handleMessage = async (message: any): Promise => { }; } + // build frames of animated formats (webp/gif) + // APNG does not work on magick-wasm since it needs ffmpeg built-in (not in magick-wasm) - handle in ffmpeg + if ( + (message.input.from === ".webp" || + message.input.from === ".gif") && + (message.to === ".gif" || message.to === ".webp") + ) { + const collection = MagickImageCollection.create( + new Uint8Array(buffer), + ); + const format = + message.to === ".gif" + ? MagickFormat.Gif + : MagickFormat.WebP; + const result = await new Promise((resolve) => { + collection.write(format, (output) => { + resolve(structuredClone(output)); + }); + }); + collection.dispose(); + return { + type: "finished", + output: result, + }; + } + const img = MagickImage.create( new Uint8Array(buffer), new MagickReadSettings({