{"record":{"id":"63e87a0cb34817d3","repo":"remotion-dev/remotion","slug":"failed-to-create-vibrance-shader-program","errorCode":null,"errorMessage":"Failed to create vibrance shader program","messagePattern":"Failed to create vibrance shader program","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/effects/src/vibrance.ts","lineNumber":123,"sourceCode":"\t}\n\n\tgl.shaderSource(shader, source);\n\tgl.compileShader(shader);\n\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\tconst log = gl.getShaderInfoLog(shader);\n\t\tgl.deleteShader(shader);\n\t\tthrow new Error(`Vibrance shader compile failed: ${log ?? '(no log)'}`);\n\t}\n\n\treturn shader;\n};\n\nconst createProgram = (gl: WebGL2RenderingContext): WebGLProgram => {\n\tconst vertexShader = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);\n\tconst fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);\n\tconst program = gl.createProgram();\n\tif (!program) {\n\t\tthrow new Error('Failed to create vibrance shader program');\n\t}\n\n\tgl.attachShader(program, vertexShader);\n\tgl.attachShader(program, fragmentShader);\n\tgl.linkProgram(program);\n\tgl.deleteShader(vertexShader);\n\tgl.deleteShader(fragmentShader);\n\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(`Vibrance shader link failed: ${log ?? '(no log)'}`);\n\t}\n\n\treturn program;\n};\n\nconst createTexture = (gl: WebGL2RenderingContext): WebGLTexture => {","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/vibrance.ts#L105-L141","documentation":"Thrown by the vibrance effect's createProgram when gl.createProgram() returns null after both vertex and fragment shaders compiled successfully. This indicates the GL context was lost between compilation and program creation, or the driver exhausted its program object pool.","triggerScenarios":"Both shaders compiled via compileShader without error, but gl.createProgram() returns null in the subsequent line. Occurs when the context transitions to a lost state or the driver refuses another program object.","commonSituations":"Context loss mid-setup during concurrent rendering; driver resource limits exceeded with many effects in a composition; GPU instability during long renders.","solutions":["Reduce render concurrency to keep GL object counts within driver limits","Handle webglcontextlost and re-run the render after context restoration","Update GPU drivers","If persistent, test on different GPU hardware to isolate driver bugs"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const state = setupVibrance(canvas);\n} catch (err) {\n  if (err instanceof Error && err.message === 'Failed to create vibrance shader program') {\n    throw new Error('WebGL2 context lost during vibrance program creation. Retry render.');\n  }\n  throw err;\n}","preventionTips":["Register webglcontextlost listeners to detect context degradation early","Reduce render concurrency to keep GL program-object counts within driver limits","Restart browser instances periodically in long-running render workers"],"tags":["webgl","gpu","vibrance","context-loss","resource-exhaustion"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}