add-transitions · git:20261027.4295fca · 2026-10-27 · sha256 e3e660701baf0f0b
add-transitions git:20261027.4295fcaA
Immutable. This exact content never changes and is served at /api/v1/blob/e3e660701baf0f0b.
---
name: add-transitions
description: Add professional scene transitions to your Remotion video. Choose from fade, slide, wipe, flip, clock-wipe and more — with spring physics or linear timing.
---
# Add Transitions — Scene Transition Wizard
You are helping the user add professional transitions between scenes in their Remotion composition using `@remotion/transitions`.
## Workflow
### 1. Install Transitions Package
```bash
npx remotion add @remotion/transitions
```
### 2. Audit Current Scenes
Look at the current composition and identify where transitions should go:
```bash
# Find scene components
grep -r "Sequence" src/ --include="*.tsx" --include="*.ts" -l
```
List the scenes and ask where the user wants transitions.
### 3. Choose Transition Types
Available transitions from `@remotion/transitions`:
| Transition | Effect | Best For |
|---|---|---|
| `fade` | Cross-dissolve between scenes | Universal, subtle |
| `slide` | Scene slides in from a direction | Energetic, modern |
| `wipe` | New scene wipes over old | Dramatic, reveals |
| `flip` | 3D card flip | Playful, eye-catching |
| `clockWipe` | Clock-hand reveal | Creative, unique |
**Slide directions:** `from-left`, `from-right`, `from-top`, `from-bottom`
### 4. Choose Timing
| Timing | Feel | Code |
|---|---|---|
| Linear | Constant speed, mechanical | `linearTiming({ durationInFrames: 20 })` |
| Spring | Organic, natural bounce | `springTiming({ config: { damping: 200 }, durationInFrames: 25 })` |
**Recommended:** Spring timing for most transitions — feels more natural.
### 5. Refactor to TransitionSeries
Convert from `<Sequence>` to `<TransitionSeries>`:
**Before (hard cuts):**
```tsx
<Sequence from={0} durationInFrames={90}>
<SceneA />
</Sequence>
<Sequence from={90} durationInFrames={90}>
<SceneB />
</Sequence>
<Sequence from={180} durationInFrames={90}>
<SceneC />
</Sequence>
```
**After (smooth transitions):**
```tsx
import { TransitionSeries, linearTiming, springTiming } from "@remotion/transitions";
import { fade } from "@remotion/transitions/fade";
import { slide } from "@remotion/transitions/slide";
<TransitionSeries>
<TransitionSeries.Sequence durationInFrames={90}>
<SceneA />
</TransitionSeries.Sequence>
<TransitionSeries.Transition
presentation={fade()}
timing={springTiming({ config: { damping: 200 }, durationInFrames: 20 })}
/>
<TransitionSeries.Sequence durationInFrames={90}>
<SceneB />
</TransitionSeries.Sequence>
<TransitionSeries.Transition
presentation={slide({ direction: "from-right" })}
timing={linearTiming({ durationInFrames: 15 })}
/>
<TransitionSeries.Sequence durationInFrames={90}>
<SceneC />
</TransitionSeries.Sequence>
</TransitionSeries>
```
### 6. Adjust Total Duration
**Important:** Transitions OVERLAP adjacent scenes, so the total duration shrinks:
```
Total = Sum of all sequence durations - Sum of all transition durations
Example: 3 scenes × 90 frames + 2 transitions × 20 frames
Total = 270 - 40 = 230 frames
```
Update the `durationInFrames` in the `<Composition>` registration accordingly.
### 7. Common Patterns
**All fade (cinematic):**
```tsx
// Same transition everywhere — clean and professional
const defaultTransition = (
<TransitionSeries.Transition
presentation={fade()}
timing={springTiming({ config: { damping: 200 }, durationInFrames: 20 })}
/>
);
```
**Slide carousel (social media):**
```tsx
// Each scene slides in from the right — like swiping
presentation={slide({ direction: "from-right" })}
```
**Mixed (dynamic):**
```tsx
// Fade for intro/outro, slide for body scenes, wipe for reveals
// Mix transitions to match the energy of each cut
```
### 8. Preview
```bash
npm run dev
```
Check transitions in the Remotion preview. Pay attention to:
- Transition speed — too fast feels jarring, too slow feels sluggish
- Direction — slides should follow the visual flow
- Consistency — don't use too many different transitions (2-3 types max)
Adjust `durationInFrames` and `damping` until it feels right.