remotion-dev/remotion · critical · Error

Failed to create WebGL buffer

Error message

Failed to create WebGL buffer

What it means

Thrown by the glow setup when gl.createBuffer() returns null after the VAO was created. The VBO stores the fullscreen-quad vertex data; null indicates context loss or GPU buffer-object exhaustion.

Source

Thrown at packages/effects/src/glow/glow-runtime.ts:160

	const programExtract = createProgram(gl, GLOW_VS, GLOW_EXTRACT_FS);
	const programHorizontal = createProgram(gl, GLOW_VS, GLOW_BLUR_FS_HORIZONTAL);
	const programVertical = createProgram(gl, GLOW_VS, GLOW_BLUR_FS_VERTICAL);
	const programComposite = createProgram(gl, GLOW_VS, GLOW_COMPOSITE_FS);

	const vao = gl.createVertexArray();
	if (!vao) {
		throw new Error('Failed to create WebGL vertex array');
	}

	gl.bindVertexArray(vao);

	const data = new Float32Array([
		-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1,
	]);

	const vbo = gl.createBuffer();
	if (!vbo) {
		throw new Error('Failed to create WebGL buffer');
	}

	gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
	gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);

	gl.enableVertexAttribArray(0);
	gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 16, 0);
	gl.enableVertexAttribArray(1);
	gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 16, 8);

	gl.bindVertexArray(null);

	const textureSource = createRgbaTexture(gl);
	const textureGlowA = createRgbaTexture(gl);
	const textureGlowB = createRgbaTexture(gl);

	const framebuffer = gl.createFramebuffer();
	if (!framebuffer) {

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Reduce concurrent WebGL effects.
  2. Retry on a fresh Chrome process.
  3. Use a host with more GPU resources.
Defensive patterns

Strategy: retry

Try / catch

let effect;
for (let attempt = 0; attempt < 3; attempt++) {
  try {
    effect = glow(params);
    break;
  } catch (err) {
    if (attempt === 2 || !/WebGL|buffer/i.test(String(err))) throw err;
    await new Promise((r) => setTimeout(r, 200 * (attempt + 1)));
  }
}

Prevention

When it happens

Trigger: Lost context between VAO and VBO creation; buffer-object pool exhausted by many effects.

Common situations: Many WebGL layers; headless Chrome close to GPU object limits.

Related errors


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