remotion-dev/remotion · critical · Error
Glow framebuffer incomplete: 0x${status.toString(16)}
Error message
Glow framebuffer incomplete: 0x${status.toString(16)} What it means
Thrown by the Glow effect after attaching a texture to a framebuffer and calling checkFramebufferStatus, when the status is not FRAMEBUFFER_COMPLETE. The hex code in the message (e.g. 0x8cd6, 0x8cdd, 0x8cd9) identifies the specific incompleteness reason per the WebGL spec. The library throws because rendering into an incomplete framebuffer would silently produce no output, so it fails fast.
Source
Thrown at packages/effects/src/glow/glow-runtime.ts:287
);
};
const setFramebufferTexture = (
gl: WebGL2RenderingContext,
framebuffer: WebGLFramebuffer,
texture: WebGLTexture,
): void => {
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(
gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.TEXTURE_2D,
texture,
0,
);
const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
if (status !== gl.FRAMEBUFFER_COMPLETE) {
throw new Error(`Glow framebuffer incomplete: 0x${status.toString(16)}`);
}
};
const setBlurUniforms = ({
gl,
uniforms,
radius,
width,
height,
}: {
readonly gl: WebGL2RenderingContext;
readonly uniforms: GlowState['horizontal'];
readonly radius: number;
readonly width: number;
readonly height: number;
}): void => {
if (uniforms.uSource) gl.uniform1i(uniforms.uSource, 0);
if (uniforms.uRadius) gl.uniform1f(uniforms.uRadius, radius);View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Read the hex: 0x8cd6 = INCOMPLETE_ATTACHMENT (check texture format/dims), 0x8cd9 = DIMENSIONS_MISMATCH, 0x8cdd = UNSUPPORTED (driver rejects format), 0x8cd5 = INCOMPLETE_MISSING_ATTACHMENT (null texture).
- Ensure the composition/video width and height are positive and within gl.getParameter(gl.MAX_TEXTURE_SIZE); clamp very large frames.
- If running headless, confirm the GPU/angle backend initialized (check for earlier WebGL errors); switch to a GPU-enabled headless shell.
- On suspected transient context loss, recreate the effect state and retry the frame.
Example fix
// before: composition too large for the GPU
<Sequence durationInFrames={...} compositionWidth={7680} compositionHeight={4320} />
// after: stay under MAX_TEXTURE_SIZE, or render in tiles
<Sequence durationInFrames={...} compositionWidth={3840} compositionHeight={2160} /> Defensive patterns
Strategy: try-catch
Validate before calling
// Before rendering, probe max texture size and current dims
const max = gl.getParameter(gl.MAX_TEXTURE_SIZE);
if (width <= 0 || height <= 0 || width > max || height > max) {
throw new Error(`frame dims ${width}x${height} exceed MAX_TEXTURE_SIZE ${max}`);
} Type guard
null
Try / catch
try {
glowEffect.apply(...);
} catch (e) {
if (e instanceof Error && e.message.startsWith('Glow framebuffer incomplete')) {
// 0x8cdd = UNSUPPORTED: switch backend / lower resolution
// 0x8cd6 = INCOMPLETE_ATTACHMENT: verify texture format/dims
logger.error('glow framebuffer', e.message);
}
throw e;
} Prevention
- Keep composition dimensions within gl.MAX_TEXTURE_SIZE.
- Register webglcontextlost so transient incompleteness is handled, not fatal.
- Validate width/height > 0 before applying glow.
- Free glow textures on cleanup to avoid context pressure.
When it happens
Trigger: Called during Glow effect setup/apply when the glow ping-pong textures (textureSource/textureGlowA/textureGlowB) are sized via setTextureSize with dimensions the implementation rejects. Concretely: width or height of 0, dimensions exceeding GL_MAX_TEXTURE_SIZE/ MAX_RENDERBUFFER_SIZE, an RGBA/UNSIGNED_BYTE format unsupported on the driver (FRAMEBUFFER_UNSUPPORTED = 0x8cdd), or a lost context.
Common situations: Rendering at 0x0 dimensions, a composition sized larger than the GPU's max texture size (common on integrated GPUs / older mobile), a context-loss event mid-render, or a driver/GPU that refuses the RGBA+UNSIGNED_BYTE combo for render targets. Headless Chrome with SwiftShader may also report 0x8cdd for large buffers.
Related errors
- Failed to create WebGL framebuffer
- Linear progressive blur framebuffer incomplete: 0x${status.t
- Failed to create WebGL texture
- Failed to create WebGL buffer
- Failed to create WebGL texture
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/c6f27602b600bbcb.
Report an issue: GitHub.