remotion-dev/remotion · error · Error
Failed to create color correction shader program
Error message
Failed to create color correction shader program
What it means
Thrown by createProgram in the color correction effect when gl.createProgram() returns null after both shaders compiled successfully. The GL context cannot allocate a program object, signaling resource exhaustion or context loss. Effect setup cannot proceed without a linked program.
Source
Thrown at packages/effects/src/color-correction.ts:332
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(
`Color correction 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 color correction 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(
`Color correction shader link failed: ${log ?? '(no log)'}`,
);
}
return program;
};View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Lower render concurrency to reduce simultaneous GL program objects.
- Use a GPU-accelerated render environment instead of software GL.
- Update drivers/Chrome and retry if context loss was transient.
- Reduce the count of WebGL2 effects active in one render pass.
Example fix
// before remotion render main --concurrency=8 // after remotion render main --concurrency=1
Defensive patterns
Strategy: retry
Validate before calling
function webgl2ProgramAvailable(): boolean {
try {
const c = document.createElement('canvas');
const gl = c.getContext('webgl2');
if (!gl) return false;
const p = gl.createProgram();
const ok = p !== null;
if (p) gl.deleteProgram(p);
return ok;
} catch {
return false;
}
} Try / catch
try {
await renderMedia({...});
} catch (err) {
if (/Failed to create color correction shader program/i.test(String(err))) {
await renderMedia({...opts, concurrency: 1});
} else {
throw err;
}
} Prevention
- Reduce render concurrency to keep the live GL program count low.
- Render on GPU-accelerated infrastructure rather than software GL.
- Keep drivers and Chromium current.
- Stack fewer WebGL effects per frame.
When it happens
Trigger: At color-correction.ts:332, after compileShader succeeded for both vertex and fragment shaders, but gl.createProgram() yields null. Caused by GL object-limit exhaustion or a lost context, independent of colorCorrection() parameters.
Common situations: High render concurrency with many live WebGL2 contexts/programs, software GL with low object limits, or a long-running render that hit context loss.
Related errors
- Failed to create color correction shader
- Failed to create color correction texture
- Failed to create color correction vertex array
- Failed to create color correction vertex buffer
- Failed to create WebGL program
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/cc80744802f18945.
Report an issue: GitHub.