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

  1. Read the embedded info log to see the exact linker complaint.
  2. Update GPU drivers and the Chromium build used to render.
  3. Switch GL backend (ANGLE over D3D/Vulkan/Metal/software) to isolate driver bugs.
  4. 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

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


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/4ff6e0b6b93c9ce3. Report an issue: GitHub.