
Remotion
Teach your agent Remotion-specific rules for React Three Fiber 3D scenes so programmatic videos render without flicker or unsynced animation.
Overview
Remotion is an agent skill most often used in Build (also Launch distribution, Grow content) that codifies Three.js and React Three Fiber inside Remotion with ThreeCanvas sizing and useCurrentFrame-only animation.
Install
npx skills add https://github.com/davila7/claude-code-templates --skill remotionWhat is this skill?
- Install @remotion/three via remotion add for npm, bun, yarn, or pnpm
- Require ThreeCanvas with explicit width and height from useVideoConfig
- Mandate ambient and directional lighting inside ThreeCanvas
- Ban animations not driven by useCurrentFrame to prevent render flicker
- Aligns with React Three Fiber and Three.js practices with Remotion-only overrides
- ThreeCanvas must include width and height props
- Animations must be driven by useCurrentFrame, not autonomous useFrame loops
Adoption & trust: 941 installs on skills.sh; 27.8k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your Remotion 3D scene flickers or desyncs because shaders and R3F animations run outside Remotion’s frame clock.
Who is it for?
Solo builders already using Remotion who want agent-enforced rules for @remotion/three and React Three Fiber scenes.
Skip if: Teams only doing static React sites with no programmatic video, or projects that refuse the Remotion frame-driven animation model.
When should I use this skill?
User builds 3D content in Remotion, asks about @remotion/three, ThreeCanvas, or React Three Fiber flicker during render.
What do I get? / Deliverables
You get frame-locked 3D compositions that render cleanly in Remotion after wrapping content in ThreeCanvas and tying motion to useCurrentFrame.
- ThreeCanvas-wrapped 3D scenes sized to the composition
- Frame-driven animations safe for Remotion rendering
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
3D Remotion compositions are authored during Build as frontend video UI, even when the final asset ships in Launch or Grow. The SKILL.md is front-end oriented: ThreeCanvas layout, lighting, and frame-driven animation inside a Remotion React tree.
Where it fits
Author a product demo sphere animation inside ThreeCanvas tied to useCurrentFrame for a Remotion export.
Regenerate launch trailer variants from the same 3D scene without breaking deterministic renders.
Batch social clips that reuse lit R3F meshes with Remotion-only animation constraints.
How it compares
Use for Remotion-rendered 3D video frames, not for a generic Three.js game loop or unrelated 2D Remotion templates.
Common Questions / FAQ
Who is remotion for?
It is for indie developers and content engineers composing 3D scenes in Remotion with React Three Fiber who need consistent agent guidance on ThreeCanvas and frame-sync rules.
When should I use remotion?
Use it during Build frontend work on programmatic video, when preparing Launch motion assets, or when iterating Grow content batches that reuse the same Remotion 3D components.
Is remotion safe to install?
It is documentation-style procedural knowledge from a templates repo; still review the Security Audits panel on this page and your project dependencies before adding packages.
SKILL.md
READMESKILL.md - Remotion
# Using Three.js and React Three Fiber in Remotion Follow React Three Fiber and Three.js best practices. Only the following Remotion-specific rules need to be followed: ## Prerequisites First, the `@remotion/three` package needs to be installed. If it is not, use the following command: ```bash npx remotion add @remotion/three # If project uses npm bunx remotion add @remotion/three # If project uses bun yarn remotion add @remotion/three # If project uses yarn pnpm exec remotion add @remotion/three # If project uses pnpm ``` ## Using ThreeCanvas You MUST wrap 3D content in `<ThreeCanvas>` and include proper lighting. `<ThreeCanvas>` MUST have a `width` and `height` prop. ```tsx import { ThreeCanvas } from "@remotion/three"; import { useVideoConfig } from "remotion"; const { width, height } = useVideoConfig(); <ThreeCanvas width={width} height={height}> <ambientLight intensity={0.4} /> <directionalLight position={[5, 5, 5]} intensity={0.8} /> <mesh> <sphereGeometry args={[1, 32, 32]} /> <meshStandardMaterial color="red" /> </mesh> </ThreeCanvas> ``` ## No animations not driven by `useCurrentFrame()` Shaders, models etc MUST NOT animate by themselves. No animations are allowed unless they are driven by `useCurrentFrame()`. Otherwise, it will cause flickering during rendering. Using `useFrame()` from `@react-three/fiber` is forbidden. ## Animate using `useCurrentFrame()` Use `useCurrentFrame()` to perform animations. ```tsx const frame = useCurrentFrame(); const rotationY = frame * 0.02; <mesh rotation={[0, rotationY, 0]}> <boxGeometry args={[2, 2, 2]} /> <meshStandardMaterial color="#4a9eff" /> </mesh> ``` ## Using `<Sequence>` inside `<ThreeCanvas>` The `layout` prop of any `<Sequence>` inside a `<ThreeCanvas>` must be set to `none`. ```tsx import { Sequence } from "remotion"; import { ThreeCanvas } from "@remotion/three"; const { width, height } = useVideoConfig(); <ThreeCanvas width={width} height={height}> <Sequence layout="none"> <mesh> <boxGeometry args={[2, 2, 2]} /> <meshStandardMaterial color="#4a9eff" /> </mesh> </Sequence> </ThreeCanvas> ``` --- name: animations description: Fundamental animation skills for Remotion metadata: tags: animations, transitions, frames, useCurrentFrame --- All animations MUST be driven by the `useCurrentFrame()` hook. Write animations in seconds and multiply them by the `fps` value from `useVideoConfig()`. ```tsx import { useCurrentFrame } from "remotion"; export const FadeIn = () => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const opacity = interpolate(frame, [0, 2 * fps], [0, 1], { extrapolateRight: 'clamp', }); return ( <div style={{ opacity }}>Hello World!</div> ); }; ``` CSS transitions or animations are FORBIDDEN - they will not render correctly. Tailwind animation class names are FORBIDDEN - they will not render correctly. --- name: assets description: Importing images, videos, audio, and fonts into Remotion metadata: tags: assets, staticFile, images, fonts, public --- # Importing assets in Remotion ## The public folder Place assets in the `public/` folder at your project root. ## Using staticFile() You MUST use `staticFile()` to reference files from the `public/` folder: ```tsx import {Img, staticFile} from 'remotion'; export const MyComposition = () => { return <Img src={staticFile('logo.png')} />; }; ``` The function returns an encoded URL that works correctly when deploying to subdirectories. ## Using with components **Images:** ```tsx import {Img, staticFile} from 'remotion'; <Img src={staticFile('photo.png')} />; ``` **Videos:** ```tsx import {Video} from '@remotion/media'; import {staticFile} from 'remotion'; <Video src={staticFile('clip.mp4')} />; ``` **Audio:** ```tsx import {Audio} from '@re