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
- Re-create the effect's WebGL resources when the composition dimensions change
- Handle context loss and re-run setup before the next render pass
- Ensure the output texture is not shared with or deleted by other code
- 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
- Re-create effect resources when composition dimensions change
- Handle context loss before the next render pass
- Do not share or externally delete the effect's output texture
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
- Failed to create WebGL framebuffer
- Glow framebuffer incomplete: 0x${status.toString(16)}
- Failed to create WebGL framebuffer
- Linear progressive blur framebuffer incomplete: 0x${status.t
- Failed to create WebGL framebuffer
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/80605ef74a56c3f0.
Report an issue: GitHub.