Follow Through
Overlapping action along a chain: every element follows one leader track with its own delay, drag, overshoot and settle. Install with npx remotion-ui@latest add follow-through.
PrimitiveMotion graphicsAdvanced
$ npx remotion-ui@latest add follow-throughAnimate one leader and the rest of the chain animates itself: every link is a damped spring chasing the link ahead, so the chain drags behind a move, overshoots when the leader stops and settles after it. It is AE's delay and inertia expressions, but simulated from frame 0 with a fixed sub-step, so any frame renders identically in any order and on any machine.
The preview puts three tails on one staccato leader that halts dead at every stop. Teal is critically damped (damping={1}) with a per-link delay, so it snakes along the leader's exact path; rose is underdamped and swings past each stop; phosphor is a looser spring that softens toward the tail with falloff, like a whip.
frequency(Hz) sets how tight the springs are;dampingbelow 1 overshoots. Many underdamped links in a row amplify each other — raise damping as you add links.delaymakes each link replay the one ahead a few frames later — lag without springiness.prerollstarts the simulation early so a looping leader is already in steady motion on frame 0; set it to the loop length for a seamless cycle.renderLinkdraws each element (positioned and, withorient, rotated for you);renderSpinedraws the path through them — a rope, a tail, a ribbon.
The simulation is memoised per leader, so pass a stable leader (a module constant or useMemo) — a new track object every render recomputes from frame 0.
Usage
import { FollowThrough } from "@/remotion/primitives/follow-through";
import { easyEase } from "@/remotion/lib/ae-motion";
const LEADER = [easyEase(0, [200, 300]), easyEase(24, [760, 240]), easyEase(48, [480, 420])];
<FollowThrough
leader={LEADER}
links={12}
frequency={4}
damping={0.5}
renderSpine={({ d }) => <path d={d} stroke="#e8b86d" strokeWidth={8} strokeLinecap="round" fill="none" />}
renderLink={(link) => <div style={{ width: 14, height: 14, borderRadius: 7, background: "#e8b86d" }} />}
/>Deterministic: the chain is integrated from frame 0 with a fixed sub-step and memoised per leader, so any frame renders identically in any order.
Agent notes
Install first, then import the copied source component locally. AI guide →
@/remotion/primitives/follow-through- Use when: After Effects-style motion graphics built from composable, keyframeable operators.
- Customize: leader, links, frequency, damping, 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 { FollowThrough } from "@/remotion/primitives/follow-through";
<FollowThrough
leader={[easyEase(0, [200, 300]), easyEase(30, [760, 240])]}
links={12}
damping={0.45}
renderSpine={({ d }) => <path d={d} stroke="#e8b86d" strokeWidth={6} fill="none" />}
/>API Reference
| Prop | Type | Default | Description |
|---|---|---|---|
| leader* | Animatable<[number, number]> | - | The leader's path: keyframe track, expression or fixed point. |
| links | number | 8 | Elements after the leader. |
| frequency | number | 2.2 | Spring frequency in Hz; higher is tighter. |
| damping | number | 0.45 | 1 settles without overshoot; lower overshoots and rings. |
| delay | number | 0 | Frames each link looks back at the one ahead. |
| falloff | number | 1 | Per-link frequency multiplier; below 1 the tail loosens. |
| preroll | number | 0 | Simulate this many frames early so a looping leader starts in steady motion. |
| renderLink | (link: FollowLink) => ReactNode | - | Draws one link; positioned and optionally rotated for you. |
| renderSpine | ({ d, links }) => ReactNode | - | Draws the chain's spine as SVG — ropes, tails, ribbons. |
| orient | boolean | true | Rotate each link to face the one ahead. |
| width | number | 960 | Stage width in px. |
| height | number | 540 | Stage height in px. |
| frame | number | - | Render this frame instead of the current one. |
Related
Track Matte
After Effects track mattes: reveal any child through any other with alpha, inverted alpha, luma or inverted luma. Install with npx remotion-ui@latest add track-matte.
Import from After Effects
remotion-ui import-ae converts a Bodymovin / Lottie JSON export into editable Remotion TSX built on ae-motion: named layer components, keyframes as data, and a composition with the right size, fps and length.