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

  1. Reload the page/Studio to reset the context and retry linking.
  2. Update GPU drivers / enable hardware WebGL2.
  3. Reduce concurrent WebGL effects.
  4. 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

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


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/dc3518529c79683d. Report an issue: GitHub.