diff --git a/server/api/api/v1/media/index.ts b/server/api/api/v1/media/index.ts index 21944f7d..8188e5b5 100644 --- a/server/api/api/v1/media/index.ts +++ b/server/api/api/v1/media/index.ts @@ -77,16 +77,28 @@ export default apiRoute<{ ? await sharp(await file.arrayBuffer()).metadata() : null; - const blurhash = - isImage && metadata?.width && metadata?.height - ? encode( - new Uint8ClampedArray(await file.arrayBuffer()), - metadata?.width ?? 0, - metadata?.height ?? 0, - 4, - 4, - ) - : null; + const blurhash = await new Promise((resolve) => { + (async () => + sharp(await file.arrayBuffer()) + .raw() + .ensureAlpha() + .toBuffer((err, buffer) => { + if (err) { + resolve(null); + return; + } + + resolve( + encode( + new Uint8ClampedArray(buffer), + metadata?.width ?? 0, + metadata?.height ?? 0, + 4, + 4, + ) as string, + ); + }))(); + }); let url = ""; diff --git a/server/api/api/v2/media/index.ts b/server/api/api/v2/media/index.ts index 6336c928..6dc3d6ae 100644 --- a/server/api/api/v2/media/index.ts +++ b/server/api/api/v2/media/index.ts @@ -77,15 +77,28 @@ export default apiRoute<{ ? await sharp(await file.arrayBuffer()).metadata() : null; - const blurhash = isImage - ? encode( - new Uint8ClampedArray(await file.arrayBuffer()), - metadata?.width ?? 0, - metadata?.height ?? 0, - 4, - 4, - ) - : null; + const blurhash = await new Promise((resolve) => { + (async () => + sharp(await file.arrayBuffer()) + .raw() + .ensureAlpha() + .toBuffer((err, buffer) => { + if (err) { + resolve(null); + return; + } + + resolve( + encode( + new Uint8ClampedArray(buffer), + metadata?.width ?? 0, + metadata?.height ?? 0, + 4, + 4, + ) as string, + ); + }))(); + }); let url = "";