remotion-dev/remotion · critical · Error
Lines program link failed: ${log ?? '(no log)'}
Error message
Lines program link failed: ${log ?? '(no log)'} What it means
A plain Error thrown by linkProgram in the Lines effect when gl.getProgramParameter(program, gl.LINK_STATUS) is false. The program is deleted and the GL info log is appended to the message. Linking can fail even when both shaders compiled — e.g. mismatched varying declarations or exceeding uniform/attribute limits on the device.
Source
Thrown at packages/effects/src/lines.ts:337
};
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(`Lines 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
- Read the embedded info log to see the exact linker complaint.
- Update GPU drivers and the Chromium build used to render.
- Switch GL backend (ANGLE over D3D/Vulkan/Metal/software) to isolate driver bugs.
- File a Remotion issue with the device, driver version, and info log.
Defensive patterns
Strategy: try-catch
Try / catch
try {
lines(...);
} catch (err) {
if (err instanceof Error && /program link failed/.test(err.message)) {
// log info log, switch GL backend or update driver
} else throw err;
} Prevention
- Read the embedded info log to confirm it is a driver/limits issue, not user input.
- Test on the lowest-spec target device to catch uniform/varying-limit link failures early.
- Report recurring driver-specific link failures to Remotion maintainers.
When it happens
Trigger: Device exposes WebGL2 and compiles LINES_VS/LINES_FS, but the linker rejects the pair. The shaders are static library code, so this is a driver/limits issue (e.g. too many uniforms, varying packing limits), not a user-param issue.
Common situations: A GPU/driver reports link errors for specific uniform counts or precision qualifiers; mobile/embedded GPUs with low uniform limits; buggy ANGLE builds.
Related errors
- Lines shader compile failed: ${log ?? '(no log)'}
- Liquid contours program link failed: ${log ?? '(no log)'}
- Shader compile failed: ${log ?? '(no log)'}
- Program link failed: ${log ?? '(no log)'}
- Burlap shader compile failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/4ff6e0b6b93c9ce3.
Report an issue: GitHub.