| name | remotion |
| description | Create videos programmatically with React using Remotion. Scaffold projects, write compositions, and render MP4s. Zo-optimized wrapper around official Remotion agent skills. |
| compatibility | Created for Zo Computer |
| metadata | {"author":"thevibethinker","upstream":"remotion-dev/skills","tags":"video, react, animation, rendering, media"} |
When to Use
Use this skill when:
- Creating programmatic videos from code (not generative AI video)
- Building data-driven video content (charts, stats, personalized videos)
- Producing batch videos from templates + data
- Creating animated social content (TikTok, Reels, Shorts)
- Building product/explainer videos with precise control
Quick Start
1. Create a New Project
python3 Skills/remotion/scripts/remotion_cli.py new my-video --template blank
cd Sites/my-video
2. Write Your Composition
Edit src/Composition.tsx - this is your video defined as React components.
3. Preview in Studio
python3 Skills/remotion/scripts/remotion_cli.py studio my-video
4. Render to MP4
python3 Skills/remotion/scripts/remotion_cli.py render my-video --output output.mp4
Core Concepts
Compositions
A composition defines your video's dimensions, duration, and fps:
<Composition
id="MyVideo"
component={MyComponent}
durationInFrames={300}
fps={30}
width={1920}
height={1080}
/>
Frame-Based Animation
ALL animations MUST use useCurrentFrame(). CSS animations are FORBIDDEN.
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
const opacity = interpolate(frame, [0, fps], [0, 1], { extrapolateRight: 'clamp' });
Sequences
Use <Sequence> to time when elements appear:
<Sequence from={30} durationInFrames={60}>
<Title />
</Sequence>
Rule References
Read these for detailed patterns (loaded from upstream Remotion skills):
| Rule | Description |
|---|
references/animations.md | Frame-based animation fundamentals |
references/timing.md | Springs, easing, interpolation curves |
references/compositions.md | Defining compositions, stills, folders |
references/sequencing.md | Timing and ordering elements |
references/videos.md | Embedding videos - trim, volume, speed |
references/audio.md | Audio handling - import, trim, volume |
references/assets.md | Images, fonts, static files |
references/transitions.md | Scene transitions |
references/text-animations.md | Typography animation patterns |
references/charts.md | Data visualization patterns |
references/display-captions.md | TikTok-style captions |
CLI Commands
python3 Skills/remotion/scripts/remotion_cli.py new <name> [--template blank|hello-world]
python3 Skills/remotion/scripts/remotion_cli.py studio <name>
python3 Skills/remotion/scripts/remotion_cli.py render <name> [--composition ID] [--output path]
python3 Skills/remotion/scripts/remotion_cli.py list
--composition ID
--output PATH
--fps N
--width N
--height N
--codec CODEC
Common Patterns
Fade In/Out
const frame = useCurrentFrame();
const { fps, durationInFrames } = useVideoConfig();
const fadeIn = interpolate(frame, [0, fps], [0, 1], { extrapolateRight: 'clamp' });
const fadeOut = interpolate(frame, [durationInFrames - fps, durationInFrames], [1, 0], { extrapolateLeft: 'clamp' });
const opacity = fadeIn * fadeOut;
Spring Animation (Natural Motion)
const scale = spring({
frame,
fps,
config: { damping: 200 },
});
Staggered Elements
{items.map((item, i) => (
<Sequence key={i} from={i * 10}>
<Item data={item} />
</Sequence>
))}
Data-Driven Video
type VideoProps = { title: string; stats: number[] };
export const DataVideo: React.FC<VideoProps> = ({ title, stats }) => {
};
<Composition
id="DataVideo"
component={DataVideo}
defaultProps={{ title: "Q4 Results", stats: [10, 20, 30] }}
// ...
/>
Integration with Zo
Batch Rendering
Use /zo/ask to render multiple videos in parallel:
for row in data:
await render_video(row)
Output Location
Projects live in Sites/<name>/ for consistency with Zo's site system.
Rendered videos output to Sites/<name>/out/.
Constraints
- No CSS animations - They won't render correctly
- No Tailwind animation classes - Same issue
- Frame-based only - All motion from
useCurrentFrame()
- CPU-intensive - Rendering takes time; complex videos = longer render
- Node.js required - Remotion needs Node environment (already available in Zo)