agentsclimarketplace

Remotion

Skill thevibethinker/vibe-thinker-skills/remotion

Create videos programmatically with React using Remotion. Scaffold projects, write compositions, and render MP4s. Zo-optimized wrapper around official Remotion agent skills.From its SKILL.md

Install
npx -y skills add thevibethinker/vibe-thinker-skills --skill remotion

Assembled 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.

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):

RuleDescription
references/animations.mdFrame-based animation fundamentals
references/timing.mdSprings, easing, interpolation curves
references/compositions.mdDefining compositions, stills, folders
references/sequencing.mdTiming and ordering elements
references/videos.mdEmbedding videos - trim, volume, speed
references/audio.mdAudio handling - import, trim, volume
references/assets.mdImages, fonts, static files
references/transitions.mdScene transitions
references/text-animations.mdTypography animation patterns
references/charts.mdData visualization patterns
references/display-captions.mdTikTok-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

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.