Remotion
Portable, standalone Zo Computer skills you can install, reuse, and share.
npx -y skills add thevibethinker/vibe-thinker-skills --skill remotionAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Create videos programmatically with React using Remotion. Scaffold projects, write compositions, and render MP4s. Zo-optimized wrapper around official Remotion agent skills.
SKILL.md
4.9 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
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} // 10 seconds at 30fps
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
# Project management
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
# Rendering options
--composition ID # Specific composition to render (default: first)
--output PATH # Output file path (default: out/video.mp4)
--fps N # Override FPS
--width N # Override width
--height N # Override height
--codec CODEC # h264, h265, vp8, vp9, prores (default: h264)
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 }, // Smooth, no bounce
});
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 }) => {
// Animate based on props
};
// In Root.tsx:
<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:
# Each call renders with different props
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)
What ships with it: 31 files
89.1 KB alongside SKILL.md, 1 of them executable
references/
- 3d.md2.2 KB
- animations.md790 B
- assets.md1.6 KB
- audio.md3.7 KB
- calculate-metadata.md2.9 KB
- can-decode.md1.5 KB
- charts.md1.7 KB
- compositions.md3.6 KB
- display-captions.md3.6 KB
- extract-frames.md5.4 KB
- fonts.md3.4 KB
- get-audio-duration.md1.3 KB
- get-video-dimensions.md1.6 KB
- get-video-duration.md1.3 KB
- gifs.md3.8 KB
- images.md2.7 KB
- import-srt-captions.md2.1 KB
- lottie.md1.7 KB
- maps.md11.1 KB
- measuring-dom-nodes.md974 B
- measuring-text.md2.9 KB
- parameters.md2.3 KB
- sequencing.md2.7 KB
- tailwind.md422 B
- text-animations.md700 B
- timing.md3.8 KB
- transcribe-captions.md850 B
- transitions.md3.6 KB
- trimming.md1.2 KB
- videos.md3.4 KB
scripts/
- remotion_cli.pyruns10.2 KB
Gives 0 of the 12 instructions most video audio skills give in ~1.2k tokens
Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07
- Read individual rule files for detailed explanationsin 21 of 622, across 10 files
- Render final videoin 13 of 622, across 6 files
- Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
- Use this skill when dealing with Remotion codein 11 of 622, across 4 files
- Save generated audio to a WAV filein 11 of 622, across 4 files
- Handle conversion errors gracefullyin 10 of 622, across 6 files
- Add captions to videos alwaysin 10 of 622, across 4 files
- Generate music from text descriptions using MusicGenin 9 of 622, across 2 files
- Do not skip pipeline layersin 9 of 622, across 3 files
- Do not make one tool do everythingin 9 of 622, across 3 files
- Use Azure Document Intelligence for complex PDFsin 9 of 622, across 4 files
- Never ask the user to paste their full API keyin 9 of 622, across 3 files
Said here and by no other author read
- use Sequence to time element appearances
- animate based on component props
- place output videos in the out directory
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.