{"record":{"id":"4c50340edd8051c9","repo":"remotion-dev/remotion","slug":"venetian-blinds-program-link-failed-log-no","errorCode":null,"errorMessage":"Venetian blinds program link failed: ${log ?? '(no log)'}","messagePattern":"Venetian blinds program link failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/effects/src/venetian-blinds.ts","lineNumber":223,"sourceCode":"};\n\nconst linkProgram = (\n\tgl: WebGL2RenderingContext,\n\tvs: WebGLShader,\n\tfs: WebGLShader,\n): WebGLProgram => {\n\tconst program = gl.createProgram();\n\tif (!program) {\n\t\tthrow new Error('Failed to create WebGL program');\n\t}\n\n\tgl.attachShader(program, vs);\n\tgl.attachShader(program, fs);\n\tgl.linkProgram(program);\n\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\tconst log = gl.getProgramInfoLog(program);\n\t\tgl.deleteProgram(program);\n\t\tthrow new Error(\n\t\t\t`Venetian blinds program link failed: ${log ?? '(no log)'}`,\n\t\t);\n\t}\n\n\treturn program;\n};\n\nconst setupVenetianBlinds = (\n\ttarget: HTMLCanvasElement,\n): VenetianBlindsState => {\n\tconst gl = target.getContext('webgl2', {\n\t\tpremultipliedAlpha: true,\n\t\talpha: true,\n\t\tpreserveDrawingBuffer: true,\n\t});\n\n\tif (!gl) {\n\t\tthrow createWebGL2ContextError('venetian blinds effect');","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/venetian-blinds.ts#L205-L241","documentation":"Thrown by the venetian-blinds effect's linkProgram when gl.linkProgram succeeds but gl.getProgramParameter(program, gl.LINK_STATUS) returns false. The error includes the GL program info log explaining the link failure. Link failures indicate the vertex and fragment shaders are individually valid but incompatible (e.g. varying/interface mismatch), or a driver bug in the linker.","triggerScenarios":"Both shaders compiled, a program was created, gl.linkProgram was called, but LINK_STATUS is false. The VENETIAN_BLINDS_VS and VENETIAN_BLINDS_FS have a mismatched varying interface or the driver's linker has a bug with the specific GLSL constructs used.","commonSituations":"GPU driver linker bugs with GLSL ES 3.00; driver updates that introduced regressions; rendering on GPUs with incomplete WebGL2 implementations. Since the shaders are bundled and tested, a link failure almost always points to a driver/hardware issue rather than a user config problem.","solutions":["Update GPU drivers to the latest version","Check the program info log in the error message for the specific linker diagnostic","Switch to a different GPU or rendering environment with known-good WebGL2 support","Report to @remotion/effects maintainers with the GPU model, driver version, and the info log text"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const state = setupVenetianBlinds(canvas);\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith('Venetian blinds program link failed')) {\n    // Shaders compiled but the driver linker rejected the program.\n    console.error('Program link log:', err.message);\n    throw new Error('GPU linker cannot link venetian-blinds shaders. Update drivers or use a different GPU.');\n  }\n  throw err;\n}","preventionTips":["Keep GPU drivers current to avoid linker bugs with GLSL ES 3.00","Verify the rendering GPU has full WebGL2 support before production deployment","Report link failures with the info log to @remotion/effects maintainers"],"tags":["webgl","gpu","glsl","shader-link","venetian-blinds","driver-compatibility"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}