remotion-dev/remotion · critical · Error

Linear gradient tint program link failed: ${log ?? '(no log)

Error message

Linear gradient tint program link failed: ${log ?? '(no log)'}

What it means

Thrown when `gl.linkProgram` reports LINK_STATUS false for linearGradientTint, with the driver info log appended. Both attached shaders compiled; a link failure on the bundled, tested pair implies a driver linker bug or context corruption.

Source

Thrown at packages/effects/src/linear-gradient-tint.ts:244

const createProgram = (gl: WebGL2RenderingContext): WebGLProgram => {
	const vs = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
	const fs = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
	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);
	gl.deleteShader(vs);
	gl.deleteShader(fs);

	if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
		const log = gl.getProgramInfoLog(program);
		gl.deleteProgram(program);
		throw new Error(
			`Linear gradient tint program link failed: ${log ?? '(no log)'}`,
		);
	}

	return program;
};

const createRgbaTexture = (gl: WebGL2RenderingContext): WebGLTexture => {
	const texture = gl.createTexture();
	if (!texture) {
		throw new Error('Failed to create WebGL texture');
	}

	gl.bindTexture(gl.TEXTURE_2D, texture);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Inspect `${log}` to localize the linker complaint.
  2. Reproduce on the affected driver; update drivers or swap the Chromium build.
  3. Dispose/re-setup on `webglcontextrestored`.
  4. File a @remotion/effects issue with log + driver string if it reproduces on current Chrome.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  setupLinearGradientTint(canvas);
} catch (err) {
  reportShaderIssue(String(err?.message ?? ''));
  renderWithoutEffect();
}

Prevention

When it happens

Trigger: Non-conformant driver's stricter linker rejecting a valid program; context loss corrupting link state; symbol/precision mismatch only on a specific stack.

Common situations: Older mobile/SwiftShader; virtualized GPU; rare regressions after driver/Chromium updates; reproducible only on certain render workers.

Related errors


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