{"record":{"id":"9479469dcc448892","repo":"remotion-dev/remotion","slug":"levels-shader-link-failed-log-no-log","errorCode":null,"errorMessage":"Levels shader link failed: ${log ?? '(no log)'}","messagePattern":"Levels shader link failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/effects/src/levels.ts","lineNumber":192,"sourceCode":"\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 levels 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(`Levels shader link failed: ${log ?? '(no log)'}`);\n\t}\n\n\treturn program;\n};\n\nconst createTexture = (gl: WebGL2RenderingContext): WebGLTexture => {\n\tconst texture = gl.createTexture();\n\tif (!texture) {\n\t\tthrow new Error('Failed to create levels texture');\n\t}\n\n\tgl.bindTexture(gl.TEXTURE_2D, texture);\n\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\tgl.bindTexture(gl.TEXTURE_2D, null);\n\treturn texture;","sourceCodeStart":174,"sourceCodeEnd":210,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/levels.ts#L174-L210","documentation":"Thrown by `createProgram()` in the levels effect when `gl.getProgramParameter(program, gl.LINK_STATUS)` is false. The vertex and fragment shaders compiled, but linking them into one program failed — typically a mismatched varying/uniform declaration between the two stages, or a driver linker bug. The driver's info log is appended.","triggerScenarios":"A bug in the bundled shader pair (varying `vUv` declared inconsistently), a non-conformant driver rejecting valid GLSL ES 3.00 linking, or shader source corruption from a tampered/broken package install.","commonSituations":"GPU driver regression; corrupted `node_modules/@remotion/effects` install; running an unsupported Chromium; swiftshader linker limitations.","solutions":["Reinstall `@remotion/effects` (and Remotion) to rule out a corrupted shader source file.","Update GPU drivers and Chromium — linker regressions are commonly fixed upstream.","Report the appended info-log text plus driver/Chrome version to the Remotion tracker.","Temporarily remove the `levels()` effect from the composition to unblock the render."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  levels({...})(...);\n} catch (err) {\n  if (/Levels shader link failed/.test(String(err))) {\n    console.error('levels() link failure:', String(err));\n  } else {\n    throw err;\n  }\n}","preventionTips":["Reinstall @remotion/effects if you suspect a corrupted shader source.","Report the info log to track driver-specific linker bugs.","Pin a known-good Chromium/GPU combo for CI."],"tags":["levels","webgl2","glsl","shader-link","gpu-driver","render-env"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}