remotion-dev/remotion · critical · Error

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

Error message

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

What it means

The starburst effect's shader program failed to link after both vertex and fragment shaders compiled successfully. `gl.LINK_STATUS === false` and the program info log is included. Linking can fail when the vertex and fragment shaders' varying/interface declarations mismatch, or due to driver-specific linking bugs. Since the shaders are static library code, this usually indicates a driver issue.

Source

Thrown at packages/effects/src/starburst.ts:268

};

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

	return program;
};

export const starburst = createEffect<StarburstEffectParams, StarburstGlState>({
	type: 'remotion/starburst',
	label: 'starburst()',
	documentationLink: 'https://www.remotion.dev/docs/effects/starburst',
	backend: 'webgl2',
	calculateKey: (params) => {
		const r = resolve(params);
		return `starburst-${r.rays}-${r.colors.join('|')}-${r.rotation}-${r.smoothness}-${r.origin.join(':')}`;
	},
	setup: (target) => {
		const gl = target.getContext('webgl2', {
			premultipliedAlpha: true,
			alpha: true,

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Read the info log in the error message to see the linker's complaint (e.g. 'unbound varying', 'too many uniforms').
  2. Update GPU drivers and browser.
  3. If editing the shaders, ensure vertex `out` declarations exactly match fragment `in` declarations (names, types, order).
  4. Test on another machine/browser to confirm a driver-specific issue, and report to maintainers if the shaders are unmodified.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  starburst({...params});
} catch (e) {
  const msg = (e as Error).message;
  if (/program link failed/.test(msg)) {
    console.error('Linker failure (likely driver bug):', msg);
    renderFallbackFrame();
  } else throw e;
}

Prevention

When it happens

Trigger: A driver bug in the program linking stage; a mismatch between vertex output varyings and fragment inputs introduced by a library edit to the shader strings; exceeding a driver-specific limit on uniform/varying count.

Common situations: Outdated mobile/integrated GPU drivers; software WebGL2 backends with linking quirks; a regression introduced when modifying `STARBURST_VS` or `STARBURST_FS` (e.g. renaming a varying in only one shader).

Related errors


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