remotion-dev/remotion · critical · Error

Noise program link failed: ${log ?? '(no log)'}

Error message

Noise program link failed: ${log ?? '(no log)'}

What it means

Thrown by linkProgram (packages/effects/src/noise.ts:178) when the noise program's LINK_STATUS is false; the info log is appended. Both shaders compiled but linking failed, which for these hardcoded correct shaders points to a driver bug, an attribute/uniform binding inconsistency in the driver, or context corruption — not user input.

Source

Thrown at packages/effects/src/noise.ts:178

};

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(`Noise program link failed: ${log ?? '(no log)'}`);
	}

	return program;
};

const setupNoise = (target: HTMLCanvasElement): NoiseState => {
	const gl = target.getContext('webgl2', {
		premultipliedAlpha: true,
		alpha: true,
		preserveDrawingBuffer: true,
	});
	if (!gl) {
		throw createWebGL2ContextError('noise effect');
	}

	gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);

	const vs = compileShader(gl, gl.VERTEX_SHADER, NOISE_VS);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Update the GPU driver / browser on the render host.
  2. Render on real GPU hardware or GPU-enabled headless Chrome.
  3. Read the appended info log, report it, and disable the noise effect for that environment.

Example fix

// before
noise({amount: 0.2}); // link fails on this driver

// after: feature-probe linking once per host and fall back
const ok = await probeNoiseProgramLinks();
const effects = ok ? [noise({amount: 0.2})] : [];
Defensive patterns

Strategy: fallback

Try / catch

try {
  scene.push(noise({amount: 0.2}));
} catch (err) {
  if (/Noise program link failed/.test(String(err?.message))) {
    // driver linker bug: disable noise for this host, log info log
  } else throw err;
}

Prevention

When it happens

Trigger: Linking the noise program on a driver that compiles GLSL ES 3.00 but links it incorrectly; linking after a context-loss/restoration that left GL state inconsistent; exceeding a driver-specific uniform/attribute limit at link time.

Common situations: Buggy or outdated GPU drivers; software rasterizers with incomplete linkers; rendering on VM/remote display adapters.

Related errors


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