remotion-dev/remotion · error · Error

Region blur framebuffer is incomplete

Error message

Region blur framebuffer is incomplete

What it means

During each render pass, the region-blur runtime binds a texture to the framebuffer and checks gl.checkFramebufferStatus. If the framebuffer is not FRAMEBUFFER_COMPLETE at render time (not just setup time), the effect throws. This differs from setup-time checks because it fires per-frame, catching transient issues like texture deletion or dimension changes.

Source

Thrown at packages/effects/src/region-blur/region-blur-runtime.ts:271

	readonly program: WebGLProgram;
	readonly uniforms: BlurUniforms;
	readonly input: WebGLTexture;
	readonly output: WebGLTexture;
	readonly width: number;
	readonly height: number;
	readonly radius: number;
}): void => {
	const {gl} = state;
	gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);
	gl.framebufferTexture2D(
		gl.FRAMEBUFFER,
		gl.COLOR_ATTACHMENT0,
		gl.TEXTURE_2D,
		output,
		0,
	);
	if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
		throw new Error('Region blur framebuffer is incomplete');
	}

	gl.clear(gl.COLOR_BUFFER_BIT);
	gl.activeTexture(gl.TEXTURE0);
	gl.bindTexture(gl.TEXTURE_2D, input);
	gl.useProgram(program);
	if (uniforms.source) gl.uniform1i(uniforms.source, 0);
	if (uniforms.radius) gl.uniform1f(uniforms.radius, radius);
	if (uniforms.texelSize) {
		gl.uniform2f(uniforms.texelSize, 1 / width, 1 / height);
	}

	draw(state);
};

export const applyRegionBlur = ({
	state,
	source,

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Re-create the effect's WebGL resources when the composition dimensions change
  2. Handle context loss and re-run setup before the next render pass
  3. Ensure the output texture is not shared with or deleted by other code
  4. Reduce VRAM pressure by lowering resolution or concurrent effect count
Defensive patterns

Strategy: try-catch

Validate before calling

// Before each render pass, verify the composition dimensions are stable
if (canvas.width < 1 || canvas.height < 1) {
  throw new Error('Canvas dimensions too small for regionBlur render pass');
}

Try / catch

try {
  // render pass
} catch (err) {
  if (err instanceof Error && err.message.includes('framebuffer is incomplete')) {
    // re-initialize the effect's GL resources and retry
    setupRegionBlur(gl, canvas);
  }
  throw err;
}

Prevention

When it happens

Trigger: The output texture was deleted or resized between setup and render; the framebuffer's attached texture was invalidated by the driver mid-render; VRAM pressure caused the texture attachment to become stale; a context-loss event occurred after setup but before the render pass.

Common situations: Resizing the composition between frames without re-initializing the effect; partial context loss mid-render; driver bugs that detach textures under memory pressure; effects whose output texture is shared and deleted by another consumer.

Related errors


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