remotion-dev/remotion · error · Error
Failed to create levels shader program
Error message
Failed to create levels shader program
What it means
Thrown by `createProgram()` in the levels effect when `gl.createProgram()` returns `null`. Like other null-returning WebGL2 calls, this signals context loss or resource exhaustion at the program-object level, after both shaders have already compiled successfully.
Source
Thrown at packages/effects/src/levels.ts:180
}
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(`Levels 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 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 => {View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Lower render concurrency (`--concurrency`) and the number of effects active per frame.
- Handle `webglcontextlost` and retry the render after context restoration.
- Restart the GPU process / Chrome to flush leaked GL objects.
- Free other WebGL contexts in the same tab/process before rendering.
Defensive patterns
Strategy: try-catch
Try / catch
try {
levels({...})(...);
} catch (err) {
if (/Failed to create levels shader program/.test(String(err))) {
console.warn('levels() GL program unavailable', err);
} else {
throw err;
}
} Prevention
- Reduce per-frame GL object count and concurrency.
- Dispose WebGL resources between renders to prevent program-object leaks.
- Handle context-loss events before retrying.
When it happens
Trigger: WebGL2 context lost between shader compile and program creation; GPU/process memory exhausted by many simultaneous effects; an invalid context state.
Common situations: Highly concurrent renders; long-running Studio sessions; rendering on memory-constrained CI/Lambda instances with many GPU objects allocated.
Related errors
- Failed to create levels shader
- Failed to create levels texture
- Failed to create levels vertex array
- Failed to create levels vertex buffer
- Failed to create WebGL shader
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/12e3e6216a27e0de.
Report an issue: GitHub.