remotion-dev/remotion · error · Error
Progressive pixelate program link failed: ${log ?? '(no log)
Error message
Progressive pixelate program link failed: ${log ?? '(no log)'} What it means
Thrown by linkProgram in progressive-pixelate-runtime.ts when gl.getProgramParameter(program, gl.LINK_STATUS) is false. Both shaders compiled (812 would have fired otherwise), so this is a linker-stage rejection of the progressive-pixelate program on the current driver. The program info log is captured before deletion and embedded in the message.
Source
Thrown at packages/effects/src/progressive-pixelate-runtime.ts:159
};
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(
`Progressive pixelate program link failed: ${log ?? '(no log)'}`,
);
}
return program;
};
export const setupProgressivePixelate = (
target: HTMLCanvasElement,
): ProgressivePixelateState => {
const gl = target.getContext('webgl2', {
premultipliedAlpha: true,
alpha: true,
preserveDrawingBuffer: true,
});
if (!gl) {
throw createWebGL2ContextError('progressive pixelate effect');
}View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Read the interpolated info log — linker errors cite unmatched varyings, unsupported precision, or uniform count limits.
- Reproduce on stable desktop Chrome; success there points to the render environment.
- On Lambda use the published Chrome for Testing layer.
- Update or roll back the GPU driver on the failing machine.
- If the log shows a genuine link error, file a Remotion issue with the log and version.
Example fix
// before
setupProgressivePixelate(canvas); // 'Progressive pixelate program link failed: ...'
// after — surface renderer identity alongside the link log
try {
setupProgressivePixelate(canvas);
} catch (err) {
const gl = canvas.getContext('webgl2');
const dbg = gl?.getExtension('WEBGL_debug_renderer_info');
console.error((err as Error).message, 'renderer:', dbg && gl?.getParameter(dbg.UNMASKED_RENDERER_WEBGL));
} Defensive patterns
Strategy: try-catch
Try / catch
try {
setupProgressivePixelate(canvas);
} catch (err) {
const msg = (err as Error).message;
if (msg.startsWith('Progressive pixelate program link failed')) {
const gl = canvas.getContext('webgl2');
const dbg = gl?.getExtension('WEBGL_debug_renderer_info');
console.error(msg, 'renderer:', dbg && gl?.getParameter(dbg.UNMASKED_RENDERER_WEBGL));
}
throw err;
} Prevention
- Capture and read the program info log from the message first.
- Reproduce on stable desktop Chrome to isolate environment.
- Avoid custom Chromium builds in headless pipelines.
- Update or roll back the GPU driver when one machine reproduces.
- Report genuine linker mismatches to Remotion with the log and version.
When it happens
Trigger: setupProgressivePixelate: shaders compiled, gl.linkProgram ran, LINK_STATUS is false. The driver's linker info log is in the thrown message.
Common situations: Driver linker bug; Chrome for Testing with a stripped GLSL linker; very rarely, a library regression that introduced a varying/uniform mismatch between vertex and fragment shaders.
Related errors
- Pixelate program link failed: ${log ?? '(no log)'}
- Progressive pixelate shader compile failed: ${log ?? '(no lo
- Noise program link failed: ${log ?? '(no log)'}
- Paper program link failed: ${log ?? '(no log)'}
- Pixelate shader compile failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/5dbb5160bc40c8c7.
Report an issue: GitHub.