remotion-dev/remotion · error · Error
Pixelate program link failed: ${log ?? '(no log)'}
Error message
Pixelate program link failed: ${log ?? '(no log)'} What it means
Thrown by linkProgram in pixelate.ts when gl.getProgramParameter(program, gl.LINK_STATUS) is false after gl.linkProgram. Both shaders compiled (otherwise 805 would have fired), so a link failure means the vertex and fragment shaders are mutually incompatible at the linker step on this driver, or the driver's linker is buggy. The program's info log is captured before deletion and included in the message.
Source
Thrown at packages/effects/src/pixelate.ts:117
};
const linkProgram = (
gl: WebGL2RenderingContext,
vs: WebGLShader,
fs: WebGLShader,
): WebGLProgram => {
const program = gl.createProgram();
if (!program) {
throw new Error('Failed to create WebGL program');
}
gl.attachShader(program, vs);
gl.attachShader(program, fs);
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
const log = gl.getProgramInfoLog(program);
gl.deleteProgram(program);
throw new Error(`Pixelate program link failed: ${log ?? '(no log)'}`);
}
return program;
};
const createPixelateState = (gl: WebGL2RenderingContext): PixelateState => {
const vs = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
const fs = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
const program = linkProgram(gl, vs, fs);
gl.deleteShader(vs);
gl.deleteShader(fs);
const vao = gl.createVertexArray();
if (!vao) {
throw new Error('Failed to create WebGL vertex array');
}
gl.bindVertexArray(vao);View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Read the interpolated info log in the error — linker errors typically name unmatched varyings or unsupported precision.
- Reproduce on stable desktop Chrome; success there points to the render environment.
- On Lambda use the published Chrome for Testing layer; avoid custom Chromium builds.
- Update or roll back the GPU driver on the failing machine.
- If the linker log shows a genuine mismatch, file a Remotion issue with the log and version.
Example fix
// before
import {pixelate} from '@remotion/effects';
const effect = pixelate(); // 'Pixelate program link failed: ...'
// after — log driver identity for triage
try {
pixelate();
} catch (err) {
const msg = (err as Error).message;
if (msg.includes('program link failed')) {
const dbg = document.createElement('canvas').getContext('webgl2')?.getExtension('WEBGL_debug_renderer_info');
console.error(msg, 'renderer:', dbg && document.createElement('canvas').getContext('webgl2')?.getParameter(dbg.UNMASKED_RENDERER_WEBGL));
}
} Defensive patterns
Strategy: try-catch
Try / catch
try {
pixelate();
} catch (err) {
const msg = (err as Error).message;
if (msg.startsWith('Pixelate program link failed')) {
// log renderer and info log; this is a driver/library defect, not user error
console.error(msg);
}
throw err;
} Prevention
- Capture and read the program info log from the message before any other action.
- Reproduce on stable desktop Chrome to determine if the environment is at fault.
- Avoid custom Chromium builds in headless rendering pipelines.
- Update or roll back the GPU driver when a single machine reproduces.
- Report genuine linker mismatches to Remotion with the log and version.
When it happens
Trigger: pixelate setup: vertex and fragment shaders both compiled, gl.linkProgram ran, LINK_STATUS is false. The thrown message includes gl.getProgramInfoLog output.
Common situations: Driver bug in the program linker (more common on older mobile GPUs and some virtualized GPUs); a Chrome for Testing build with a stripped or buggy GLSL linker; very rarely, a library change that introduced a vertex/fragment attribute or varying mismatch.
Related errors
- Pixelate shader compile failed: ${log ?? '(no log)'}
- Progressive pixelate program link failed: ${log ?? '(no log)
- Noise program link failed: ${log ?? '(no log)'}
- Paper program link failed: ${log ?? '(no log)'}
- Progressive pixelate shader compile failed: ${log ?? '(no lo
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/00d692d1ca5512c8.
Report an issue: GitHub.