remotion-dev/remotion · error · Error

Exposure shader compile failed: ${log ?? '(no log)'}

Error message

Exposure shader compile failed: ${log ?? '(no log)'}

What it means

Thrown inside compileShader() in exposure.ts when gl.getShaderParameter(shader, gl.COMPILE_STATUS) is false (exposure.ts:120-124). The driver's shader translator rejected the GLSL ES 3.00 source (VERTEX_SHADER or FRAGMENT_SHADER); the InfoLog is captured, the failed shader is deleted, and the error includes the log. Unlike the null-handle case, this is a real compile rejection.

Source

Thrown at packages/effects/src/exposure.ts:123

}
`;

const compileShader = (
	gl: WebGL2RenderingContext,
	type: number,
	source: string,
): WebGLShader => {
	const shader = gl.createShader(type);
	if (!shader) {
		throw new Error('Failed to create exposure shader');
	}

	gl.shaderSource(shader, source);
	gl.compileShader(shader);
	if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
		const log = gl.getShaderInfoLog(shader);
		gl.deleteShader(shader);
		throw new Error(`Exposure shader compile failed: ${log ?? '(no log)'}`);
	}

	return shader;
};

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 exposure shader program');
	}

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

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Render with --gl=angle (CLI) / chromiumOptions.gl='angle' (SSR) / Angle (Studio) so a consistent, well-tested translator is used.
  2. Read the InfoLog in the message — it names the offending line/uniform; verify packages/effects/src/exposure.ts and color-correction-shader-utils.ts were not locally modified.
  3. Update GPU drivers on the render host, or force a software GL path known to compile the shaders.
  4. If the InfoLog references the injected COLOR_SPACE_GLSL helpers, check for a version drift between @remotion/effects and remotion/core.
  5. Report a driver/translator bug upstream if the GLSL is valid ES 3.00 yet rejected.

Example fix

// before
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
  // translator rejected FRAGMENT_SHADER -> render fails
}

// after (ensure a consistent translator)
// CLI: remotion render <comp> --gl=angle
// SSR: renderMedia({ chromiumOptions: { gl: 'angle' } })
Defensive patterns

Strategy: try-catch

Validate before calling

// There is no user-facing input to validate: VERTEX_SHADER/FRAGMENT_SHADER are
// fixed package strings. The only pre-check is context health and GLSL version.
const supportsGlslEs300 = (gl: WebGL2RenderingContext): boolean =>
  !gl.isContextLost() &&
  (gl.getParameter(gl.SHADING_LANGUAGE_VERSION) ?? '').includes('3.00');

Try / catch

try {
  // apply exposure(); for a custom canvas: const state = setupExposure(canvas);
} catch (err) {
  if (err instanceof Error && /Exposure shader compile failed/.test(err.message)) {
    // err.message contains the InfoLog; render on Angle (--gl=angle) and retry.
    console.error('exposure compile failure:', err.message);
    throw err;
  }
  throw err;
}

Prevention

When it happens

Trigger: setupExposure() compiles VERTEX_SHADER or FRAGMENT_SHADER and the Angle/driver translator reports a compile error. Because the GLSL is a fixed package string, this points at a buggy/incompatible driver translator (not user input). The InfoLog in the message identifies which stage and why.

Common situations: Headless Chromium with software GL whose translator mishandles the sRGB helpers injected via COLOR_SPACE_GLSL; outdated mobile/Intel drivers; a context that is partially degraded after a GPU reset; a local edit to FRAGMENT_SHADER that introduced a syntax error.

Related errors


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