gchq/CyberChef · warning · OperationError
Error loading image. (${err})
Error message
Error loading image. (${err}) What it means
Thrown when Jimp.read(input) rejects while loading the image inside Image Brightness/Contrast. This fires only after isImage passed, so the magic bytes looked plausible but the actual decode failed. The original Jimp error is interpolated into the message.
Source
Thrown at src/core/operations/ImageBrightnessContrast.mjs:64
];
}
/**
* @param {ArrayBuffer} input
* @param {Object[]} args
* @returns {byteArray}
*/
async run(input, args) {
const [brightness, contrast] = args;
if (!isImage(input)) {
throw new OperationError("Invalid file type.");
}
let image;
try {
image = await Jimp.read(input);
} catch (err) {
throw new OperationError(`Error loading image. (${err})`);
}
try {
if (brightness !== 0) {
if (isWorkerEnvironment())
self.sendStatusMessage("Changing image brightness...");
image.brightness(brightness / 100);
}
if (contrast !== 0) {
if (isWorkerEnvironment())
self.sendStatusMessage("Changing image contrast...");
image.contrast(contrast / 100);
}
let imageBuffer;
if (image.mime === "image/gif") {
imageBuffer = await image.getBuffer(JimpMime.png);
} else {
imageBuffer = await image.getBuffer(image.mime);View on GitHub (pinned to 4290ea7539)
Solutions
- Read the interpolated Jimp error for the specific failure reason.
- Re-export or re-download the source image to ensure it is complete and uncorrupted.
- Convert the image to PNG/JPEG with an external tool before invoking.
- Check the bundled Jimp version supports the image's subformat.
Example fix
// before: feeding a truncated buffer whose header survived but body did not op.run(truncatedPngBuf, [10, 10]); // after: feed the complete file op.run(completePngBuf, [10, 10]);
Defensive patterns
Strategy: try-catch
Validate before calling
async function assertJimpReadable(buf) {
try { await Jimp.read(buf); }
catch (e) { throw new Error(`Jimp cannot read this image: ${e}`); }
} Try / catch
try {
result = await brightness.run(buf, [b, c]);
} catch (e) {
if (e instanceof OperationError && /Error loading image/.test(e.message)) {
// re-supply a complete source image
result = await brightness.run(await reload(fullUrl), [b, c]);
} else throw e;
} Prevention
- Ensure the source image is complete and uncorrupted.
- Pre-convert exotic formats to PNG/JPEG.
- Confirm the bundled Jimp version supports the subformat.
When it happens
Trigger: Truncated image (magic bytes present but body incomplete); corrupt pixel data; a format Jimp does not support despite a sniffable header (e.g. some WebP/HEIC variants, progressive JPEG edge cases); a buffer that is actually a container (e.g. a SVG with PNG-like bytes).
Common situations: Partial download/capture; conversion artefact from another tool; version mismatch where the bundled Jimp lacks a codec; very large image exceeding Jimp's memory.
Related errors
- Error loading image. (${err})
- Error opening image file. (${err})
- Error loading image. (${err})
- Error opening image. (${err})
- Error normalising image. (${err})
AI-assisted analysis of gchq/CyberChef@4290ea7539 (2026-08-13).
Data as JSON: /api/errors/97f44a727dd6b064.
Report an issue: GitHub.