Remotion Video Toolkit
A creative skill for building video generation pipelines using Remotion and React. Covers the entire lifecycle: composition setup, animations with useCurrentFrame/interpolate, rendering via CLI, Node.js, Lambda, or Cloud Run, captions, 3D scenes, data-driven charts, text effects, transitions, and media handling.
76Trust Medium
by shreefentsarcreativeadvancedv1.4.0updated Mar 10, 2026
8.4kTotal Runs
82.0%Success Rate
12.4kInstalls
76Trust Score
Tags
#remotion#video#react#animation#rendering#media#creative#clawhub
Required Tools
file_writebashInputs
| Name | Type | Description | Req |
|---|---|---|---|
| template | text | Remotion composition template name or type (e.g. "data-chart", "social-clip", "caption-video") | -- |
| data | json | JSON data to drive the video content (chart data, captions, text overlays, etc.) | yes |
| output_format | text | Output format: mp4 | webm | gif. Defaults to mp4. | -- |
| duration_seconds | number | Target video duration in seconds. Defaults to 30. | -- |
Outputs
| Name | Type | Description | Req |
|---|---|---|---|
| video_file | file | Path to the rendered video file | yes |
| render_metadata | json | Rendering metadata: duration, resolution, codec, file size | yes |
Compatible Skills
SKILL.md
---
name: remotion-video
description: Programmatic video creation with Remotion and React. Create videos with code using familiar web technologies.
---
# Remotion Video Toolkit
Create videos programmatically using React and web technologies.
## Quick Start
### Installation
```bash
# Create new Remotion project
npx create-video@latest
# Or add to existing project
npm install remotion
```
### Basic Composition
```tsx
import {Composition, useCurrentFrame, interpolate} from 'remotion';
const MyVideo = () => {
const frame = useCurrentFrame();
const opacity = interpolate(frame, [0, 30], [0, 1]);
return (
<div style={{opacity}}>
<h1>Hello World</h1>
</div>
);
};
export const RemotionRoot = () => {
return (
<Composition
id="MyVideo"
component={MyVideo}
durationInFrames={150}
fps={30}
width={1920}
height={1080}
/>
);
};
```
## Core Concepts
### useCurrentFrame
Get the current frame number:
```tsx
const frame = useCurrentFrame();
```
### interpolate
Animate values between frames:
```tsx
const opacity = interpolate(frame, [0, 30], [0, 1]);
const scale = interpolate(frame, [0, 60], [0, 1], {
extrapolateRight: 'clamp',
});
```
### spring
Physics-based animations:
```tsx
import {spring} from 'remotion';
const scale = spring({
fps,
frame,
config: {damping: 10, stiffness: 100},
});
```
## Rendering
### CLI
```bash
# Render video
npx remotion render src/index.ts MyVideo out.mp4
# Render still
npx remotion still src/index.ts MyVideo out.png
```
### Lambda (AWS)
```bash
# Deploy Lambda function
npx remotion lambda functions deploy
# Render on Lambda
npx remotion lambda render <serve-url> <composition-id> out.mp4
```
## Common Use Cases
### Data-Driven Charts
```tsx
import {BarChart} from './components/BarChart';
const ChartVideo = ({data}) => {
const frame = useCurrentFrame();
const progress = interpolate(frame, [0, 90], [0, 1]);
return <BarChart data={data} progress={progress} />;
};
```
### Text Animations
```tsx
const AnimatedText = ({text}) => {
const frame = useCurrentFrame();
const characters = text.split('');
return (
<div>
{characters.map((char, i) => {
const delay = i * 2;
const opacity = interpolate(frame, [delay, delay + 10], [0, 1]);
return <span style={{opacity}}>{char}</span>;
})}
</div>
);
};
```
### Captions
```tsx
import {Subtitle} from 'remotion';
const CaptionVideo = ({transcript}) => {
return (
<Sequence from={0} durationInFrames={300}>
<Subtitle src={transcript} />
</Sequence>
);
};
```
## Media Handling
### Images
```tsx
import {Img, staticFile} from 'remotion';
<Img src={staticFile('image.png')} />
```
### Video
```tsx
import {Video} from 'remotion';
<Video src={staticFile('video.mp4')} />
```
### Audio
```tsx
import {Audio} from 'remotion';
<Audio src={staticFile('audio.mp3')} volume={0.5} />
```
## Transitions
### Fade
```tsx
import {TransitionSeries} from '@remotion/transitions';
import {fade} from '@remotion/transitions/fade';
<TransitionSeries>
<TransitionSeries.Sequence durationInFrames={60}>
<Scene1 />
</TransitionSeries.Sequence>
<TransitionSeries.Transition timing={fade()} />
<TransitionSeries.Sequence durationInFrames={60}>
<Scene2 />
</TransitionSeries.Sequence>
</TransitionSeries>
```
## Resources
- Docs: https://www.remotion.dev/docs
- GitHub: https://github.com/remotion-dev/remotion
- Showcase: https://remotion.dev/showcase