plugins/specweave/skills/remotion/SKILL.md
Create programmatic videos with Remotion (React components rendered to MP4). Use when creating animated presentations, product demos, marketing videos, code-generated video, Remotion project, animated explainer.
npx skillsauth add anton-abyzov/specweave plugins/specweave/skills/remotionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create videos entirely in React using Remotion. Each frame is a React component. Write code, render to MP4. No AI model needed - pure programmatic control over every pixel and frame.
| Use Case | Tool |
|----------|------|
| Precise animations, branded content, data visualizations | Remotion (this skill) |
| Creative/artistic video from text description | sw-media:video (AI models) |
| Product demos, marketing, changelogs | Remotion |
| Realistic footage, scenes, landscapes | sw-media:video |
# Check for existing Remotion setup
if [ -f "package.json" ] && grep -q '"remotion"' package.json 2>/dev/null; then
echo "Remotion project detected"
else
echo "No Remotion project found - will scaffold one"
fi
If no Remotion project exists, scaffold one:
npx create-video@latest my-video --template blank
cd my-video
npm install
Or add Remotion to an existing project:
npm install remotion @remotion/cli @remotion/bundler
Create a React component that defines the video. Key Remotion APIs:
import { useCurrentFrame, useVideoConfig, interpolate, spring, Sequence } from 'remotion';
export const MyComposition: React.FC = () => {
const frame = useCurrentFrame();
const { fps, width, height } = useVideoConfig();
// Animate opacity from 0 to 1 over first 30 frames
const opacity = interpolate(frame, [0, 30], [0, 1], {
extrapolateRight: 'clamp',
});
// Spring animation
const scale = spring({ frame, fps, config: { damping: 100 } });
return (
<div style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<h1 style={{ opacity, transform: `scale(${scale})`, fontSize: 80 }}>
Hello World
</h1>
</div>
);
};
Register the composition in src/Root.tsx:
import { Composition } from 'remotion';
import { MyComposition } from './MyComposition';
export const RemotionRoot: React.FC = () => {
return (
<Composition
id="MyVideo"
component={MyComposition}
durationInFrames={150} // 5 seconds at 30fps
fps={30}
width={1920}
height={1080}
/>
);
};
npx remotion studio
# Opens browser at http://localhost:3000 with preview player
npx remotion render src/index.ts MyVideo out/video.mp4
Additional render options:
# Custom resolution
npx remotion render src/index.ts MyVideo out/video.mp4 --width 1920 --height 1080
# Lower quality for faster rendering
npx remotion render src/index.ts MyVideo out/video.mp4 --quality 80
# Specific frame range
npx remotion render src/index.ts MyVideo out/video.mp4 --frames 0-90
# GIF output
npx remotion render src/index.ts MyVideo out/animation.gif
# PNG sequence
npx remotion render src/index.ts MyVideo out/frames --image-format png
FILE="out/video.mp4"
if [ -f "$FILE" ] && [ -s "$FILE" ]; then
file "$FILE"
SIZE=$(du -h "$FILE" | cut -f1)
echo "Video rendered successfully: $FILE ($SIZE)"
else
echo "ERROR: Render failed - check console output for errors"
fi
const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: 'clamp' });
const translateX = interpolate(frame, [0, 30], [-100, 0], { extrapolateRight: 'clamp' });
const scale = spring({ frame, fps, config: { damping: 10, stiffness: 100 } });
<Sequence from={0} durationInFrames={60}>
<Title text="Part 1" />
</Sequence>
<Sequence from={60} durationInFrames={60}>
<Title text="Part 2" />
</Sequence>
// Pass data as props to composition
const data = [
{ label: 'Jan', value: 42 },
{ label: 'Feb', value: 78 },
{ label: 'Mar', value: 95 },
];
// Animate bar chart based on frame
const progress = interpolate(frame, [0, 60], [0, 1], { extrapolateRight: 'clamp' });
Before scaffolding or rendering, verify:
# Node.js required (v18+)
node --version
# Chrome/Chromium required for rendering
if command -v google-chrome >/dev/null 2>&1; then
echo "Chrome found"
elif command -v chromium >/dev/null 2>&1; then
echo "Chromium found"
elif [ -d "/Applications/Google Chrome.app" ]; then
echo "Chrome found (macOS)"
else
echo "WARNING: Chrome/Chromium not found - rendering may fail"
echo "Install: brew install --cask google-chrome (macOS)"
fi
| Error | Action |
|-------|--------|
| Node.js not installed | Tell user to install Node.js 18+ |
| Chrome not found | Suggest brew install --cask google-chrome (macOS) or apt install chromium (Linux) |
| npx create-video fails | Try npm create video@latest or check npm registry |
| Render fails with memory error | Reduce resolution or use --concurrency 1 |
| TypeScript errors | Check composition imports and prop types |
Remotion provides official Claude Code skills for advanced usage:
# Install Remotion's official agent skills (optional)
npx skills add remotion-dev/skills
This adds deeper Remotion knowledge to the AI assistant including animation best practices, performance optimization, and advanced composition patterns.
Remotion, programmatic video, React video, code video, animated presentation, product demo video, marketing video, video from code, render video, create animation from code
tools
Generate AI videos from text prompts or images. Supports Google Veo 3.1 and Pollinations.ai (free). Use when generating video, creating animations, text-to-video, AI video, video generation, make clip, animate.
tools
Validate increment with rule-based checks and AI quality assessment. Use when saying "validate", "check quality", or "verify increment".
tools
Create and manage umbrella workspaces for multi-repo projects. Activate when the user wants to: create umbrella, umbrella init, wrap in umbrella, create workspace, setup multi-repo, migrate repos to umbrella, umbrella create, new workspace, restructure into umbrella, "wrap this repo", "create umbrella for these repos", "setup workspace with repos", "move repos into umbrella". Do NOT activate for: add a repo to existing umbrella (use sw:get), add a feature, add an increment, clone a repo (use sw:get).
tools
--- description: Merge completed parallel agent work and trigger GitHub sync per increment. Activates for: team merge, merge agents, combine work, team finish. --- # Team Merge **Verify all teammates completed, run quality gates, close increments, and trigger sync.** ## Usage ```bash sw:team-merge sw:team-merge --dry-run # Preview merge plan sw:team-merge --skip-sync # Merge without GitHub/JIRA sync ``` ## What This Skill Does 1. **Verify all teammates completed** -- bl