remotion-dev/remotion · error · Error
Linear progressive blur program link failed: ${log ?? '(no l
Error message
Linear progressive blur program link failed: ${log ?? '(no log)'} What it means
Thrown by linkProgram() in the linear-progressive-blur runtime when gl.linkProgram() reports non-LINK_STATUS. The driver's linker log is interpolated. Since the shipped vertex/fragment shaders compiled cleanly, a link failure indicates a driver-side linking defect (e.g. varying/uniform reconciliation) rather than user input.
Source
Thrown at packages/effects/src/linear-progressive-blur/linear-progressive-blur-runtime.ts:71
};
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(
`Linear progressive blur program link failed: ${log ?? '(no log)'}`,
);
}
return program;
};
const createProgram = (
gl: WebGL2RenderingContext,
vertexSource: string,
fragmentSource: string,
): WebGLProgram => {
const vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
const program = linkProgram(gl, vs, fs);
gl.deleteShader(vs);
gl.deleteShader(fs);
return program;View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Inspect the interpolated linker log for the exact mismatch.
- Restart Chrome / the worker to clear stale state and retry.
- Use a software GL backend (`--gl=angle --angle-backend=swiftshader`) with deterministic linking.
- Update Chrome and GPU drivers; on serverless use a Remotion Chrome layer.
- If reproducible on a specific driver, file an issue with the driver string and log.
Defensive patterns
Strategy: retry
Try / catch
try {
renderWithLinearProgressiveBlur();
} catch (err) {
if (err instanceof Error && err.message.startsWith('Linear progressive blur program link failed')) {
console.error(err.message); // driver linker log
await withGlBackend('swiftshader', () => renderWithLinearProgressiveBlur());
} else throw err;
} Prevention
- Use SwiftShader/ANGLE on CI/Lambda for deterministic linking.
- Restart the worker after GPU-process crashes to clear stale state.
- Capture the linker log when this fires.
- Report reproducible driver-specific link failures to @remotion/effects.
When it happens
Trigger: Both shaders compiled but the driver's linker rejected the combined horizontal or vertical blur program — a class of WebGL2 driver bug, or a GPU-process crash that left linking in a bad state.
Common situations: Buggy integrated/mobile GPU drivers, headless Linux with stripped GL, remote-render hosts with thin stacks, Chrome GPU-process crash mid-session.
Related errors
- Linear gradient program link failed: ${log ?? '(no log)'}
- Skew program link failed: ${log ?? '(no log)'}
- Speckle program link failed: ${log ?? '(no log)'}
- Evolve program link failed: ${log ?? '(no log)'}
- Exposure shader link failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/a79eab5f958e4096.
Report an issue: GitHub.