remotion-dev/remotion · error · Error
Shine program link failed: ${log ?? '(no log)'}
Error message
Shine program link failed: ${log ?? '(no log)'} What it means
The shine() effect links its compiled vertex and fragment shaders via gl.linkProgram(). If linking fails (LINK_STATUS is false), the effect reads the program info log, deletes the program, and throws this Error with the diagnostic. Since the shaders are fixed library constants, a link failure usually signals a driver bug — typically a vertex/fragment interface mismatch as seen by that particular driver, or resource limits exceeded during linking.
Source
Thrown at packages/effects/src/shine.ts:224
};
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(`Shine program link failed: ${log ?? '(no log)'}`);
}
return program;
};
export const shine = createEffect<ShineParams, ShineState>({
type: 'dev.remotion.effects.shine',
label: 'shine()',
documentationLink: 'https://www.remotion.dev/docs/effects/shine',
backend: 'webgl2',
calculateKey: (params) => {
const r = resolve(params);
return `shine-${r.progress}-${r.angle}-${r.haloSigma}-${r.coreSigma}-${r.haloIntensity}-${r.coreIntensity}`;
},
setup: (target) => {
const gl = target.getContext('webgl2', {
premultipliedAlpha: true,
alpha: true,View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Read the info log in the error message for the specific link-time diagnostic.
- Update the GPU driver and Chromium/Chrome to the latest version.
- Switch to a render environment with a known-good WebGL2 implementation.
- File a Remotion issue with the GPU vendor string, driver version, and full info log.
Example fix
null
Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
null
Try / catch
try {
shine({ progress: 0.5 });
} catch (e) {
if (e instanceof Error && e.message.startsWith('Shine program link failed')) {
console.error('Program link error:', e.message);
// Fall back to a non-WebGL approach or switch render environment
} else {
throw e;
}
} Prevention
- Use a render environment with a capable, up-to-date WebGL2 stack.
- Keep GPU drivers current.
- The shader source is fixed — link failures are typically driver bugs.
- Report persistent link failures with the GPU vendor, driver version, and full info log.
When it happens
Trigger: Calling shine() on a GPU/driver that compiles both shaders individually but fails to link them. This can happen with buggy drivers that misreport varying declarations, drivers that exceed instruction/texture limits during link-time allocation, or ANGLE translation bugs for specific GPU families.
Common situations: Specific integrated GPU models (older Intel HD, some Mali/Adreno mobile parts); outdated ANGLE/D3D translation layers in older Chromium builds; SwiftShader edge cases with complex fragment shaders.
Related errors
- Shrinkwrap program link failed: ${log ?? '(no log)'}
- Shine shader compile failed: ${log ?? '(no log)'}
- Shrinkwrap shader compile failed: ${log ?? '(no log)'}
- Failed to create WebGL program
- Checkerboard program link failed: ${log ?? '(no log)'}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/ae46645bf0e9c623.
Report an issue: GitHub.