remotion-dev/remotion · error · Error

Levels shader link failed: ${log ?? '(no log)'}

Error message

Levels shader link failed: ${log ?? '(no log)'}

What it means

Thrown by `createProgram()` in the levels effect when `gl.getProgramParameter(program, gl.LINK_STATUS)` is false. The vertex and fragment shaders compiled, but linking them into one program failed — typically a mismatched varying/uniform declaration between the two stages, or a driver linker bug. The driver's info log is appended.

Source

Thrown at packages/effects/src/levels.ts:192

const createProgram = (gl: WebGL2RenderingContext): WebGLProgram => {
	const vertexShader = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
	const fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
	const program = gl.createProgram();
	if (!program) {
		throw new Error('Failed to create levels shader program');
	}

	gl.attachShader(program, vertexShader);
	gl.attachShader(program, fragmentShader);
	gl.linkProgram(program);
	gl.deleteShader(vertexShader);
	gl.deleteShader(fragmentShader);

	if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
		const log = gl.getProgramInfoLog(program);
		gl.deleteProgram(program);
		throw new Error(`Levels shader link failed: ${log ?? '(no log)'}`);
	}

	return program;
};

const createTexture = (gl: WebGL2RenderingContext): WebGLTexture => {
	const texture = gl.createTexture();
	if (!texture) {
		throw new Error('Failed to create levels texture');
	}

	gl.bindTexture(gl.TEXTURE_2D, texture);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
	gl.bindTexture(gl.TEXTURE_2D, null);
	return texture;

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Reinstall `@remotion/effects` (and Remotion) to rule out a corrupted shader source file.
  2. Update GPU drivers and Chromium — linker regressions are commonly fixed upstream.
  3. Report the appended info-log text plus driver/Chrome version to the Remotion tracker.
  4. Temporarily remove the `levels()` effect from the composition to unblock the render.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  levels({...})(...);
} catch (err) {
  if (/Levels shader link failed/.test(String(err))) {
    console.error('levels() link failure:', String(err));
  } else {
    throw err;
  }
}

Prevention

When it happens

Trigger: A bug in the bundled shader pair (varying `vUv` declared inconsistently), a non-conformant driver rejecting valid GLSL ES 3.00 linking, or shader source corruption from a tampered/broken package install.

Common situations: GPU driver regression; corrupted `node_modules/@remotion/effects` install; running an unsupported Chromium; swiftshader linker limitations.

Related errors


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