remotion-dev/remotion · error · Error

Failed to create vibrance vertex buffer

Error message

Failed to create vibrance vertex buffer

What it means

Thrown during vibrance setup when gl.createBuffer() returns null. The vertex buffer holds the fullscreen-quad geometry fed to the shader; without it the vibrance pass cannot run. A null return signals context loss or GL object/memory exhaustion, not a usage error.

Source

Thrown at packages/effects/src/vibrance.ts:176

		premultipliedAlpha: true,
		alpha: true,
		preserveDrawingBuffer: true,
	});
	if (!gl) {
		throw createWebGL2ContextError('vibrance effect');
	}

	gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);

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

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

	gl.bindVertexArray(vao);
	gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
	gl.bufferData(
		gl.ARRAY_BUFFER,
		new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]),
		gl.STATIC_DRAW,
	);

	const aPos = gl.getAttribLocation(program, 'aPos');
	const aUv = gl.getAttribLocation(program, 'aUv');
	gl.enableVertexAttribArray(aPos);
	gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
	gl.enableVertexAttribArray(aUv);
	gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
	gl.bindVertexArray(null);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Reload to reset the context and release GL buffers.
  2. Cut the number of simultaneously-applied WebGL effects.
  3. Verify hardware-accelerated WebGL2 and update drivers if needed.
  4. Ensure effects on unmounted/offscreen sequences are cleaned up rather than lingering.

Example fix

// before
const effect = vibrance({amount: 1});

// after
const effect = (() => {
  try { return vibrance({amount: 1}); } catch { return null; }
})();
Defensive patterns

Strategy: try-catch

Try / catch

let effect = null;
try {
  effect = vibrance({amount: 1});
} catch (err) {
  console.warn('vibrance VBO alloc failed, skipping effect', err);
}

Prevention

When it happens

Trigger: setupVibrance() calls gl.createBuffer() after the VAO is created and bound; it returns null because the context is lost or the buffer object limit is hit.

Common situations: Context loss under heavy concurrent effect load in Studio; GPU memory pressure; headless Chrome resource limits on Lambda.

Related errors


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