Skip to main content

<HtmlInCanvasMotionBlur>v4.0.529

EXPERIMENTAL

This component uses the experimental HTML-in-canvas browser API.

<HtmlInCanvasMotionBlur> is the state-of-the-art recommended way to achieve motion blur in Remotion.
It requires HTML-in-canvas to be enabled during preview. Rendering needs no configuration.

MyComposition.tsx
import { HtmlInCanvasMotionBlur, } from '@remotion/motion-blur'; import {useCurrentFrame, useVideoConfig} from 'remotion'; const MovingBox = () => { const frame = useCurrentFrame(); return ( <div style={{ position: 'absolute', left: frame * 10, top: 300, width: 120, height: 120, backgroundColor: '#ff6b6b', }} /> ); }; export const MyComposition = () => { const {width, height} = useVideoConfig(); return ( <HtmlInCanvasMotionBlur width={width} height={height} samples={8} shutterAngle={180} > <MovingBox /> </HtmlInCanvasMotionBlur> ); };

Props

children

The content to blur.
Make sure to call useCurrentFrame() from a child component, so <HtmlInCanvasMotionBlur> can override the time context correctly.

width

The canvas width in pixels. Must be a positive integer. Use the composition width from useVideoConfig() to cover the full frame.

height

The canvas height in pixels. Must be a positive integer. Use the composition height from useVideoConfig() to cover the full frame.

from?

Moves the blurred content on its parent timeline. Default: 0.

durationInFrames?

Limits how long the blurred content appears on its parent timeline, starting at from. By default, it lasts until the composition ends.

trimBefore?

Skips the beginning of the content without moving its from position. Default: 0.

playbackRate?

Changes how quickly the child frames advance. Default: 1. The motion blur samples follow this speed.

See Timing and trimming for how these props combine.

samples?

How many snapshots are averaged. Default: 8, min: 1, max: 64.
Higher values make the blur smoother but cost more work during preview and rendering.

shutterAngle?

How long the exposure is, expressed as an angle from 0 to 360. Default: 180.
At 180, samples span half a frame centered on the current frame.
At 0, no motion blur is applied.
Samples outside the composition are clamped to its first or last frame.

Nested HTML-in-canvas caveat

Nested <HtmlInCanvas> components are currently unsupported, so children of <HtmlInCanvasMotionBlur> cannot contain another <HtmlInCanvas> component or vice versa.

Compatibility

BrowsersEnvironments
Chrome
Firefox
Safari

See also