remotion-dev/remotion · critical · Error
Burlap shader compile failed: ${log ?? '(no log)'}
Error message
Burlap shader compile failed: ${log ?? '(no log)'} What it means
Thrown by burlap's `compileShader` when the GLSL source compiled with a falsy COMPILE_STATUS; the driver's info log is embedded. BURLAP_VS/BURLAP_FS are library constants, so a compile failure points to a shader regression or a GLSL ES 3.00 feature the driver rejects (burlap uses a complex procedural-noise fragment shader).
Source
Thrown at packages/effects/src/burlap.ts:247
}
`;
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(`Burlap 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);
gl.attachShader(program, fs);
gl.linkProgram(program);View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Read the info log in the message — it cites the GLSL line of the error.
- Update @remotion/effects; shader bugs are patched upstream.
- Reproduce on a discrete GPU and a second browser to isolate driver-specific rejection.
- For headless CI, confirm WebGL2 is hardware-backed and capture GL_RENDERER.
Example fix
// Library-internal shader issue; not fixable at the call site. // Capture the info log and GL_RENDERER and report upstream: console.error(gl.getParameter(gl.RENDERER), gl.getParameter(gl.SHADING_LANGUAGE_VERSION));
Defensive patterns
Strategy: fallback
Validate before calling
// Probe compile capability with a trivial shader before setup.
const probe = gl.createShader(gl.FRAGMENT_SHADER);
if (!probe) { /* skip */ }
gl.shaderSource(probe, 'void main(){}');
gl.compileShader(probe);
const ok = gl.getShaderParameter(probe, gl.COMPILE_STATUS);
gl.deleteShader(probe);
if (!ok) { /* fall back */ } Try / catch
try {
burlap.setup(canvas);
} catch (err) {
if (/Burlap shader compile failed/.test(err.message)) {
// log the info log, fall back to a non-WebGL effect
} else { throw err; }
} Prevention
- Pin @remotion/effects to a tested version.
- Log GL_RENDERER and SHADING_LANGUAGE_VERSION with errors.
- Keep a CPU/2D fallback for shader-incompatible environments.
When it happens
Trigger: Fires at line 247 after `gl.compileShader` when `gl.getShaderParameter(shader, gl.COMPILE_STATUS)` is falsy, during `setupBurlap`.
Common situations: A shipped burlap shader revision with a syntax/type/precision error; older driver rejecting integer bit-ops or loop constructs in the noise functions; software rasterizer with weak GLSL support; truncated shader from a broken build.
Related errors
- Shader compile failed: ${log ?? '(no log)'}
- Burlap program link failed: ${log ?? '(no log)'}
- Starburst shader compile failed: ${log ?? '(no log)'}
- Thermal vision shader compile failed: ${log ?? '(no log)'}
- Program link failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/fc907cb85def2f05.
Report an issue: GitHub.