Slit Scan
Slit-scan time displacement: each strip of any child — rows, columns, rings or a gradient map — shows that child at a different moment, deterministically. Install with npx remotion-ui@latest add slit-scan.
PrimitiveMotion graphicsAdvanced
$ npx remotion-ui@latest add slit-scanThe frame is cut into strips and each strip shows the child a little earlier than the one before, so motion bends, smears and spirals across the frame. The preview is three nested stars turning at different speeds seen through 120 rings of time: the outer rings are up to 40 frames behind the centre, so the arms curl into a vortex.
bandsslices straight strips perpendicular toangle(0 = vertical slits sweeping left→right, 90 = horizontal slits sweeping down).radialslices rings aroundcenter.curvemaps strip position to delay — a sine gives a travelling time-wave, a power curve pushes the lag to the edges.loopFrameswraps sampled frames into the child's loop, so strips looking back past frame 0 see the end of the previous cycle and a looping piece stays seamless.
Cost. Each distinct delay is one <Freeze> of the child, so a slit-scan costs levels renders of the child per frame — strips are free. Delays are fractional, so a fast child does not step between strips, but a smooth radial spiral wants one level per ring (the preview uses 120). Start around 16–24 levels for footage and raise it only if you see steps.
Usage
import { SlitScan } from "@/remotion/primitives/slit-scan";
// Vertical slits, the right edge a second behind the left.
<SlitScan mode="bands" angle={0} strips={96} levels={24} maxDelay={30}>
<OffthreadVideo src={staticFile("clip.mp4")} />
</SlitScan>
// A travelling time-wave.
<SlitScan mode="bands" angle={90} strips={80} levels={32} maxDelay={20} curve={(t) => 0.5 + 0.5 * Math.sin(t * Math.PI * 4)}>
<MyScene />
</SlitScan>Cost is `levels` renders of the child per frame. Each strip is a <Freeze> of the child clipped with a CSS path() clip.
Agent notes
Install first, then import the copied source component locally. AI guide →
@/remotion/primitives/slit-scan- Use when: After Effects-style motion graphics built from composable, keyframeable operators.
- Customize: width, height, mode, strips, plus copied source for timing, layout, colors, and typography.
- Rule: do not import this component from the
remotion-uinpm package; it is copied into your project.
Usage
import { SlitScan } from "@/remotion/primitives/slit-scan";
<SlitScan mode="radial" strips={120} levels={60} maxDelay={30} loopFrames={150}>
<MyLoopingScene />
</SlitScan>API Reference
| Prop | Type | Default | Description |
|---|---|---|---|
| children* | ReactNode | - | Anything time-based: footage, a scene, another motion component. |
| width | number | 960 | Frame width in px. |
| height | number | 540 | Frame height in px. |
| mode | "bands" | "radial" | "bands" | Straight strips at an angle, or rings around a centre. |
| strips | number | 48 | Number of strips. Free — levels sets the cost. |
| angle | number | 0 | Bands: direction the delay grows along, degrees. |
| center | [number, number] | [0.5, 0.5] | Radial: centre as shares of the frame. |
| maxDelay | number | 20 | Delay of the last strip, in frames (fractional ok). |
| levels | number | 16 | Distinct delays = renders of the child per frame. |
| curve | (t: number) => number | - | Maps strip position 0–1 to delay share 0–1. Default linear. |
| loopFrames | number | - | Wrap sampled frames into a loop, so strips look back into the previous cycle. |
| frame | number | - | Render this frame instead of the current one. |
Related
Effector Field
Cinema 4D MoGraph cloner and effectors: clone any element into a grid, radial or linear arrangement and let animatable spherical, linear or noise falloff fields drive each clone. Install with npx remotion-ui@latest add effector-field.
IK Rig
A lit, shadowed two-bone IK arm that reaches for any target or plots SVG strokes with a pen, laying ink exactly where the solved hand is. Install with npx remotion-ui@latest add ik-rig.