Impact: HIGH - Enables smooth scene changes and professional video flow
This skill covers using Remotion’s TransitionSeries API and creating custom transitions between scenes or visual states.
TransitionSeries for Scene Changes
Use TransitionSeries to animate between multiple scenes or clips.
<Sequence from={0} durationInFrames={60}>
<SceneA />
</Sequence>
<Sequence from={60} durationInFrames={60}>
<SceneB />
</Sequence>
TransitionSeries automatically handles the overlap between sequences, making it much easier than manually managing opacity or position transitions.
Available Transition Types
Import transitions from their respective modules:
import { fade } from "@remotion/transitions/fade";
import { slide } from "@remotion/transitions/slide";
import { wipe } from "@remotion/transitions/wipe";
import { flip } from "@remotion/transitions/flip";
import { clockWipe } from "@remotion/transitions/clock-wipe";
Crossfade between scenes with opacity transition.Best for: General purpose, subtle scene changes
Slide one scene out while the next slides in.Best for: Directional flow, sequential contentpresentation={slide({ direction: "from-left" })}
Reveal next scene with a directional wipe.Best for: Dramatic reveals, chapter transitionspresentation={wipe({ direction: "from-top" })}
3D flip effect between scenes.Best for: Playful content, card-flip metaphorspresentation={flip({ direction: "horizontal" })}
Circular wipe emanating from center.Best for: Time-based content, countdown revealspresentation={clockWipe()}
Slide Transition with Direction
Specify slide direction for enter/exit animations.
import { slide } from "@remotion/transitions/slide";
<TransitionSeries.Transition
presentation={slide({ direction: "from-left" })}
timing={linearTiming({ durationInFrames: 20 })}
/>;
Available directions: "from-left", "from-right", "from-top", "from-bottom"
Direction refers to where the incoming scene comes from. For example, "from-left" means the new scene slides in from the left side.
Custom Crossfade Without TransitionSeries
For simple opacity crossfades within a single component:
const TRANSITION_START = 60;
const TRANSITION_DURATION = 15;
const scene1Opacity = interpolate(
frame,
[TRANSITION_START, TRANSITION_START + TRANSITION_DURATION],
[1, 0],
{ extrapolateLeft: "clamp", extrapolateRight: "clamp" }
);
const scene2Opacity = interpolate(
frame,
[TRANSITION_START, TRANSITION_START + TRANSITION_DURATION],
[0, 1],
{ extrapolateLeft: "clamp", extrapolateRight: "clamp" }
);
<AbsoluteFill style={{ opacity: scene1Opacity }}><SceneA /></AbsoluteFill>
<AbsoluteFill style={{ opacity: scene2Opacity }}><SceneB /></AbsoluteFill>
Use AbsoluteFill to ensure both scenes occupy the same space. Otherwise they’ll stack vertically.
Timing Options
import { linearTiming, springTiming } from "@remotion/transitions";
// Linear timing - constant speed
linearTiming({ durationInFrames: 20 });
// Spring timing - organic motion
springTiming({ config: { damping: 200 }, durationInFrames: 25 });
linearTiming
springTiming
Use when: You need predictable, constant-speed transitionsConfiguration:linearTiming({ durationInFrames: 20 })
Best for: Fade, wipe, slide transitions Use when: You want organic, bouncy motionConfiguration:springTiming({
config: { damping: 200, stiffness: 100 },
durationInFrames: 25
})
Best for: Flip, playful slide transitions
Key Patterns
Choose Appropriate Transition
- Fade: Default choice for most scene changes
- Slide: When there’s directional progression
- Wipe: For dramatic chapter breaks
- Flip: For playful, card-like reveals
Set Appropriate Duration
- Fast (10-15 frames): Quick cuts, energetic pacing
- Medium (15-25 frames): Standard professional transitions
- Slow (25-40 frames): Dramatic, cinematic transitions
Match Timing to Content
Use linearTiming for smooth, predictable transitions. Use springTiming for organic, bouncy effects.
Common Mistakes to Avoid
Don’t use abrupt cuts between scenes - Always transition smoothly unless you specifically want a jarring effect.
Don’t make transitions too long - 15-25 frames is usually sufficient. Longer transitions feel sluggish.
Don’t forget AbsoluteFill for custom crossfades - Without it, scenes will stack vertically instead of overlapping.
Don’t mix too many transition types - Stick to 1-2 transition styles per video for visual consistency.
Advanced: Multiple Scene Transitions
<TransitionSeries>
<TransitionSeries.Sequence durationInFrames={60}>
<Intro />
</TransitionSeries.Sequence>
<TransitionSeries.Transition
presentation={fade()}
timing={linearTiming({ durationInFrames: 15 })}
/>
<TransitionSeries.Sequence durationInFrames={90}>
<MainContent />
</TransitionSeries.Sequence>
<TransitionSeries.Transition
presentation={slide({ direction: "from-left" })}
timing={linearTiming({ durationInFrames: 20 })}
/>
<TransitionSeries.Sequence durationInFrames={45}>
<Outro />
</TransitionSeries.Sequence>
</TransitionSeries>
You can vary transition types within the same TransitionSeries for visual interest, but maintain consistency in timing.
Sequencing
Control when scenes appear
Spring Physics
Use springs in transitions