remotion-dev/remotion · critical · Error
Waves program link failed: ${log ?? '(no log)'}
Error message
Waves program link failed: ${log ?? '(no log)'} What it means
Thrown by linkProgram() inside the waves effect when gl.getProgramParameter(program, gl.LINK_STATUS) returns false. This means the vertex and fragment shaders compiled individually but failed to link into an executable program. The error includes the GL driver's info log. Since the shaders are static library constants, this is a driver/GPU compatibility issue.
Source
Thrown at packages/effects/src/waves.ts:397
};
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);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
const log = gl.getProgramInfoLog(program);
gl.deleteProgram(program);
throw new Error(`Waves program link failed: ${log ?? '(no log)'}`);
}
return program;
};
const createProgram = (
gl: WebGL2RenderingContext,
vertexSource: string,
fragmentSource: string,
): WebGLProgram => {
const vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
const program = linkProgram(gl, vs, fs);
gl.deleteShader(vs);
gl.deleteShader(fs);
return program;
};
View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Update GPU drivers and browser to the latest versions.
- Check chrome://gpu for any WebGL2-related warnings or denylisted features.
- For server-side rendering, use the latest @remotion/renderer with its bundled Chrome, which is tested for WebGL2 effect compatibility.
- Try a different GPU or toggle hardware acceleration to isolate driver vs SwiftShader issues.
- Report with the full info log from the error message and GPU details.
Defensive patterns
Strategy: try-catch
Try / catch
try {
const state = setupWaves(canvas);
} catch (e) {
if ((e as Error).message.startsWith('Waves program link failed')) {
console.warn('GPU driver failed to link waves program:', (e as Error).message);
// fall back to a non-WebGL effect or different rendering approach
}
} Prevention
- Update GPU drivers and browser to the latest versions.
- Test WebGL2 effects in the target environment before deploying.
- Check chrome://gpu for WebGL2 compatibility issues.
When it happens
Trigger: Called transitively from setupWaves() at packages/effects/src/waves.ts:446. Fires when the GL driver cannot link the compiled WAVES_VS and WAVES_FS — e.g., due to mismatched varying/in-out declarations from a driver bug, exceeding uniform/attribute limits on constrained hardware, or a driver-specific linker issue.
Common situations: GPU driver bug rejecting valid linked GLSL ES 3.00 programs; older mobile/integrated GPUs with low uniform limits (the waves fragment shader has many uniforms); software rasterizer with incomplete linker; outdated Chrome/Chromium with a WebGL2 regression.
Related errors
- Waves shader compile failed: ${log ?? '(no log)'}
- Linear gradient shader compile failed: ${log ?? '(no log)'}
- Linear gradient program link failed: ${log ?? '(no log)'}
- Linear progressive blur shader compile failed: ${log ?? '(no
- Noise shader compile failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/e88c9d04651e2797.
Report an issue: GitHub.