remotion-dev/remotion · error · Error
Vignette program link failed: ${log ?? '(no log)'}
Error message
Vignette program link failed: ${log ?? '(no log)'} What it means
Thrown by vignette's linkProgram when gl.linkProgram reports LINK_STATUS === false. The program info log is appended (or '(no log)'). Vignette's shaders are hardcoded library GLSL, so a link failure implies a driver/GPU issue (e.g. conflicting shader stage features, context loss, or a driver bug) rather than user input.
Source
Thrown at packages/effects/src/vignette.ts:299
};
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(`Vignette 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
- Reload the page/Studio to reset the context and retry linking.
- Update GPU drivers / enable hardware WebGL2.
- Reduce concurrent WebGL effects.
- Capture the info log and report to @remotion/effects if it reproduces on supported hardware.
Example fix
// before
const effect = vignette({amount: 0.6});
// after
const effect = (() => {
try { return vignette({amount: 0.6}); } catch (err) { console.warn(err); return null; }
})(); Defensive patterns
Strategy: try-catch
Try / catch
let effect = null;
try {
effect = vignette({amount: 0.6});
} catch (err) {
console.warn('vignette program link failed (driver/GPU issue), skipping', err);
} Prevention
- Keep GPU drivers current so the hardcoded GLSL links cleanly.
- Use hardware-accelerated WebGL2.
- Handle context loss/restore events and rebuild effects.
- Reduce concurrent shader-heavy effects to avoid link-time context loss.
When it happens
Trigger: linkProgram attaches the compiled VIGNETTE_VS/VIGNETTE_FS and calls gl.linkProgram; the driver returns LINK_STATUS false. Occurs on context loss, driver bugs, or GLSL feature mismatches between stages on a given GPU.
Common situations: Context loss mid-setup; buggy/outdated drivers; software rendering rejecting the linked program; Studio with many effects stressing the driver.
Related errors
- Vignette shader compile failed: ${log ?? '(no log)'}
- Vibrance shader link failed: ${log ?? '(no log)'}
- Failed to create WebGL shader
- Shader compile failed: ${log ?? '(no log)'}
- Program link failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/dc3518529c79683d.
Report an issue: GitHub.