TrabT
Convex Community5mo ago
1 reply
Trab

Image compression with sharp - Input buffer contains unsupported image format

I'm trying to do image compression. I use sharp which seems to work fine. But there is probably some problem with the convex/node environment I don't understand. The value of buffer keeps changing when I use sharp, even if I use sharp without touching the buffer.

- I do use "use node"
- I don't import any other code
- I use internalAction
- When I run the same code with the same image in regular node, it works

This returns correct byteLength and image data
const req = await fetch(
  "https://cdn.pixabay.com/photo/2025/06/05/09/42/forest-9642627_960_720.jpg",
);

const buffer = await response.arrayBuffer();
console.log(buffer.byteLength); // 94297


This returns different byteLength and image data
const req = await fetch(
  "https://cdn.pixabay.com/photo/2025/06/05/09/42/forest-9642627_960_720.jpg",
);

const buffer = await response.arrayBuffer();
console.log(buffer.byteLength); // 169475

sharp({
  text: {
    text: "Hello, world!",
    width: 400,
    height: 300,
  },
});


This fails
const response = await fetch(
  "https://cdn.pixabay.com/photo/2025/06/05/09/42/forest-9642627_960_720.jpg",
);

const buffer = await response.arrayBuffer();
console.log(buffer.byteLength); // 169475

// Uncaught Error: Input buffer contains unsupported image format
const metadata = await sharp(buffer).metadata();
Was this page helpful?