remotion-dev/remotion · error · Error

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

Error message

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

What it means

After pixelDissolve()'s GLSL shader is submitted and compiled, the driver reports COMPILE_STATUS=false. Because the shader is fixed in the library, a genuine compile failure means the driver rejects the GLSL (unsupported feature/precision) or the context is failing operations due to loss. The driver info log is interpolated.

Source

Thrown at packages/effects/src/pixel-dissolve.ts:209

}
`;

const compileShader = (
	gl: WebGL2RenderingContext,
	type: number,
	source: string,
): WebGLShader => {
	const shader = gl.createShader(type);
	if (!shader) {
		throw new Error('Failed to create WebGL 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(
			`Pixel Dissolve shader compile failed: ${log ?? '(no log)'}`,
		);
	}

	return shader;
};

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);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Render on modern Chromium with full WebGL2 support (or SwiftShader in CI).
  2. Update GPU drivers.
  3. Handle context loss and retry setup on restore.
  4. Report the interpolated info log to the Remotion team if it reproduces on supported hardware.
Defensive patterns

Strategy: try-catch

Validate before calling

// Probe shader compilation capability on this GPU once at startup.
function canCompilePixelDissolveShader(gl: WebGL2RenderingContext): boolean {
  const s = gl.createShader(gl.FRAGMENT_SHADER);
  if (!s) return false;
  gl.shaderSource(s, PIXEL_DISSOLVE_FS);
  gl.compileShader(s);
  const ok = gl.getShaderParameter(s, gl.COMPILE_STATUS);
  gl.deleteShader(s);
  return Boolean(ok);
}

Try / catch

try {
  initPixelDissolve(canvas);
} catch (err) {
  if (String(err.message).startsWith('Pixel Dissolve shader compile failed')) {
    logShaderIssue(err.message);
    useNonGpuFallback();
  } else throw err;
}

Prevention

When it happens

Trigger: compileShader() calls gl.getShaderParameter(shader, COMPILE_STATUS) which returns false; gl.getShaderInfoLog yields the driver error. Occurs during pixelDissolve effect setup on every frame that instantiates it.

Common situations: GPU/driver lacking full GLSL ES 3.00 support; corrupted/lost context; old mobile GPU drivers; virtualized environments without real WebGL2.

Related errors


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