When to use
Load this skill whenever you read or write Remotion code, from scaffolding a project to rendering the final video.
Common AI mistakes to avoid
Check every Remotion code change against these recurring failure modes before committing:
- Non-deterministic randomness — use
random(seed) from remotion, never Math.random(), Date.now(), or new Date(). Parallel renders produce flickering noise otherwise.
- Unmemoised
<Player> inputProps — always pass memoised props; unmemoised props cause re-render storms through the whole tree.
- Missing
delayRender() / continueRender() around async work (fetch, font load, measurement). Without them the render hangs at 30 000 ms.
- Non-monotonic
inputRange on captions — interpolate's inputRange must strictly increase. For short clips use Math.min(10, Math.floor(duration / 3)) for the fade window.
- Linear easing everywhere — prefer
spring() for natural motion; use linear only for explicit technical needs.
- Forgotten
@remotion/google-fonts imports — every font needs an explicit loadFont({ weights, subsets }) call.
- Monolithic single-composition output — break scenes into small focused compositions and compose with
<Sequence> or <TransitionSeries>.
- Deprecated
startFrom / endAt — use trimBefore / trimAfter instead.
New project setup
When in an empty folder or workspace with no existing Remotion project, scaffold one using:
npx create-video@latest --yes --blank --no-tailwind my-video
Replace my-video with a suitable project name.
Starting preview
Start the Remotion Studio to preview a video:
npx remotion studio
Optional: one-frame render check
You can render a single frame with the CLI to sanity-check layout, colours, or timing.
Skip it for trivial edits, pure refactors, or when you already have enough confidence from Studio or prior renders.
npx remotion still [composition-id] --scale=0.25 --frame=30
At 30 fps, --frame=30 is the one-second mark (--frame is zero-based).
Rule index
Read individual rule files for detailed explanations and code examples.
Core
- core/compositions.md - Defining compositions, stills, folders, default props and dynamic metadata
- core/sequencing.md - Sequencing patterns - delay, trim, limit duration of items
- core/timing.md - Timing with interpolate, Bezier easing, and springs
- core/animations.md - Fundamental animation skills
- core/trimming.md - Trim the beginning or end of animations
- core/parameters.md - Make a video parametrisable with a Zod schema
- core/calculate-metadata.md - Dynamically set composition duration, dimensions, and props
- core/primitives.md - Layout and timing primitives: Loop, Freeze, Series, Null, IFrame, AnimatedImage, premount
Media
- media/images.md - Embedding images using the Img component
- media/videos.md - Embedding videos - trimming, volume, speed, looping
- media/gifs.md - Displaying GIFs synchronised with Remotion's timeline
- media/lottie.md - Embedding Lottie animations
- media/transparent-videos.md - Rendering a video with transparency
- media/assets.md - Importing images, videos, audio, and fonts
- media/light-leaks.md - Light leak overlay effects
- media/3d.md - 3D content using Three.js and React Three Fiber
Audio
- audio/audio.md - Using audio and sound - importing, trimming, volume, speed, pitch
- audio/voiceover.md - AI-generated voiceover using ElevenLabs TTS
- audio/audio-visualization.md - Visualising audio (spectrum bars, waveforms, bass-reactive)
- audio/silence-detection.md - Adaptive silence detection using FFmpeg
- audio/sfx.md - Using sound effects
- audio/subtitles.md - Captions and subtitles overview
- audio/get-audio-duration.md - Getting the duration of an audio file with Mediabunny
- audio/ai-captions.md - AI transcription: @remotion/openai-whisper, whisper-web, install-whisper-cpp
Text
- text/text-animations.md - Typography and text animation patterns
- text/measuring-text.md - Measuring text dimensions, fitting text to containers
- text/fonts.md - Loading Google Fonts and local fonts
- text/google-fonts.md - @remotion/google-fonts per-font packages with required weights/subsets
- text/display-captions.md - Rendering captions on screen
- text/import-srt-captions.md - Importing SRT caption files
Advanced
- advanced/maps.md - Adding a map using Mapbox and animating it
- advanced/charts.md - Chart and data visualisation (bar, pie, line, stock)
- advanced/transitions.md - Scene transition patterns (basics)
- advanced/transitions-package.md - @remotion/transitions full reference - presentations, timing, custom
- advanced/tailwind.md - Using TailwindCSS in Remotion
- advanced/measuring-dom-nodes.md - Measuring DOM element dimensions
- advanced/hdr.md - Colour space and HDR output: bt709, displayp3, rec2020, ProRes
Utilities
- utilities/ffmpeg.md - Using FFmpeg for video operations
- utilities/can-decode.md - Check if a video can be decoded using Mediabunny
- utilities/extract-frames.md - Extract frames at specific timestamps
- utilities/get-video-dimensions.md - Getting width and height of a video file
- utilities/get-video-duration.md - Getting the duration of a video file in seconds
- utilities/transcribe-captions.md - Transcribing captions
Production
- production/delay-render.md - Suspend rendering during async work: delayRender, continueRender, cancelRender
- production/determinism.md - Deterministic renders with random(seed); never Math.random / Date.now
- production/rendering.md - @remotion/renderer Node SSR: bundle, selectComposition, renderMedia
- production/cli.md - npx remotion subcommands and flags (render, still, bundle, studio, benchmark)
- production/config.md - remotion.config.ts Config setters (codec, CRF, concurrency, Webpack)
- production/lambda.md - AWS Lambda: deployFunction, deploySite, renderMediaOnLambda, cost tuning
- production/player.md - @remotion/player embedding, PlayerRef, memoised inputProps, buffer events
- production/video-tag-decision.md - Choose between Video / OffthreadVideo / Html5Video / @remotion/media
- production/input-props.md - Prop resolution order, Zod validation, --props CLI flags, render-boundary security
- production/caption-timing-safety.md - Monotonic inputRange and adaptive fade window for captions
- production/performance.md - Hardware acceleration, concurrency, image format, GPU precompute, benchmarking
- production/env-vars.md - REMOTION_ prefix, .env loading, secrets via inputProps / envVariables
Integration
- integration/nextjs.md - Next.js App Router: Player SSR guard, transpilePackages, API route for Lambda
- integration/docker.md - Docker: base image, --shm-size, fonts, Chromium flags, CI example
- integration/mediabunny-migration.md - Migrate from deprecated media-parser/webcodecs to Mediabunny Video/Audio
- integration/v5-prep.md - Future-proof v4 code against v5 breaking changes
Packages
- packages/paths.md - @remotion/paths SVG path utilities (interpolatePath, warpPath, getLength)
- packages/shapes.md - @remotion/shapes pre-built SVG primitives (Triangle, Circle, Star, Pie, Heart)
- packages/noise.md - @remotion/noise seeded Perlin noise (noise2D, noise3D, noise4D)
- packages/motion-blur.md - @remotion/motion-blur Trail and CameraMotionBlur (use sparingly)
- packages/skia.md - @remotion/skia high-performance canvas (React Native Skia)
- packages/rive.md - @remotion/rive animations with state machines (Lottie alternative)
1---2name: remotion-video3description: Guides Remotion video development in React, including compositions, animations, timing, audio, captions, and rendering. Use when the user works with Remotion, writes <Composition>/<Sequence>/interpolate/spring, edits remotion.config.ts, renders or deploys Lambda videos, or asks about video creation in React.4license: MIT5---67## When to use89Load this skill whenever you read or write Remotion code, from scaffolding a project to rendering the final video.1011## Common AI mistakes to avoid1213Check every Remotion code change against these recurring failure modes before committing:1415- **Non-deterministic randomness** — use `random(seed)` from `remotion`, never `Math.random()`, `Date.now()`, or `new Date()`. Parallel renders produce flickering noise otherwise.16- **Unmemoised `<Player>` `inputProps`** — always pass memoised props; unmemoised props cause re-render storms through the whole tree.17- **Missing `delayRender()` / `continueRender()`** around async work (fetch, font load, measurement). Without them the render hangs at 30 000 ms.18- **Non-monotonic `inputRange` on captions** — `interpolate`'s `inputRange` must strictly increase. For short clips use `Math.min(10, Math.floor(duration / 3))` for the fade window.19- **Linear easing everywhere** — prefer `spring()` for natural motion; use linear only for explicit technical needs.20- **Forgotten `@remotion/google-fonts` imports** — every font needs an explicit `loadFont({ weights, subsets })` call.21- **Monolithic single-composition output** — break scenes into small focused compositions and compose with `<Sequence>` or `<TransitionSeries>`.22- **Deprecated `startFrom` / `endAt`** — use `trimBefore` / `trimAfter` instead.2324## New project setup2526When in an empty folder or workspace with no existing Remotion project, scaffold one using:2728```bash29npx create-video@latest --yes --blank --no-tailwind my-video30```3132Replace `my-video` with a suitable project name.3334## Starting preview3536Start the Remotion Studio to preview a video:3738```bash39npx remotion studio40```4142## Optional: one-frame render check4344You can render a single frame with the CLI to sanity-check layout, colours, or timing.45Skip it for trivial edits, pure refactors, or when you already have enough confidence from Studio or prior renders.4647```bash48npx remotion still [composition-id] --scale=0.25 --frame=3049```5051At 30 fps, `--frame=30` is the one-second mark (`--frame` is zero-based).5253## Rule index5455Read individual rule files for detailed explanations and code examples.5657### Core5859- [core/compositions.md](rules/core/compositions.md) - Defining compositions, stills, folders, default props and dynamic metadata60- [core/sequencing.md](rules/core/sequencing.md) - Sequencing patterns - delay, trim, limit duration of items61- [core/timing.md](rules/core/timing.md) - Timing with interpolate, Bezier easing, and springs62- [core/animations.md](rules/core/animations.md) - Fundamental animation skills63- [core/trimming.md](rules/core/trimming.md) - Trim the beginning or end of animations64- [core/parameters.md](rules/core/parameters.md) - Make a video parametrisable with a Zod schema65- [core/calculate-metadata.md](rules/core/calculate-metadata.md) - Dynamically set composition duration, dimensions, and props66- [core/primitives.md](rules/core/primitives.md) - Layout and timing primitives: Loop, Freeze, Series, Null, IFrame, AnimatedImage, premount6768### Media6970- [media/images.md](rules/media/images.md) - Embedding images using the Img component71- [media/videos.md](rules/media/videos.md) - Embedding videos - trimming, volume, speed, looping72- [media/gifs.md](rules/media/gifs.md) - Displaying GIFs synchronised with Remotion's timeline73- [media/lottie.md](rules/media/lottie.md) - Embedding Lottie animations74- [media/transparent-videos.md](rules/media/transparent-videos.md) - Rendering a video with transparency75- [media/assets.md](rules/media/assets.md) - Importing images, videos, audio, and fonts76- [media/light-leaks.md](rules/media/light-leaks.md) - Light leak overlay effects77- [media/3d.md](rules/media/3d.md) - 3D content using Three.js and React Three Fiber7879### Audio8081- [audio/audio.md](rules/audio/audio.md) - Using audio and sound - importing, trimming, volume, speed, pitch82- [audio/voiceover.md](rules/audio/voiceover.md) - AI-generated voiceover using ElevenLabs TTS83- [audio/audio-visualization.md](rules/audio/audio-visualization.md) - Visualising audio (spectrum bars, waveforms, bass-reactive)84- [audio/silence-detection.md](rules/audio/silence-detection.md) - Adaptive silence detection using FFmpeg85- [audio/sfx.md](rules/audio/sfx.md) - Using sound effects86- [audio/subtitles.md](rules/audio/subtitles.md) - Captions and subtitles overview87- [audio/get-audio-duration.md](rules/audio/get-audio-duration.md) - Getting the duration of an audio file with Mediabunny88- [audio/ai-captions.md](rules/audio/ai-captions.md) - AI transcription: @remotion/openai-whisper, whisper-web, install-whisper-cpp8990### Text9192- [text/text-animations.md](rules/text/text-animations.md) - Typography and text animation patterns93- [text/measuring-text.md](rules/text/measuring-text.md) - Measuring text dimensions, fitting text to containers94- [text/fonts.md](rules/text/fonts.md) - Loading Google Fonts and local fonts95- [text/google-fonts.md](rules/text/google-fonts.md) - @remotion/google-fonts per-font packages with required weights/subsets96- [text/display-captions.md](rules/text/display-captions.md) - Rendering captions on screen97- [text/import-srt-captions.md](rules/text/import-srt-captions.md) - Importing SRT caption files9899### Advanced100101- [advanced/maps.md](rules/advanced/maps.md) - Adding a map using Mapbox and animating it102- [advanced/charts.md](rules/advanced/charts.md) - Chart and data visualisation (bar, pie, line, stock)103- [advanced/transitions.md](rules/advanced/transitions.md) - Scene transition patterns (basics)104- [advanced/transitions-package.md](rules/advanced/transitions-package.md) - @remotion/transitions full reference - presentations, timing, custom105- [advanced/tailwind.md](rules/advanced/tailwind.md) - Using TailwindCSS in Remotion106- [advanced/measuring-dom-nodes.md](rules/advanced/measuring-dom-nodes.md) - Measuring DOM element dimensions107- [advanced/hdr.md](rules/advanced/hdr.md) - Colour space and HDR output: bt709, displayp3, rec2020, ProRes108109### Utilities110111- [utilities/ffmpeg.md](rules/utilities/ffmpeg.md) - Using FFmpeg for video operations112- [utilities/can-decode.md](rules/utilities/can-decode.md) - Check if a video can be decoded using Mediabunny113- [utilities/extract-frames.md](rules/utilities/extract-frames.md) - Extract frames at specific timestamps114- [utilities/get-video-dimensions.md](rules/utilities/get-video-dimensions.md) - Getting width and height of a video file115- [utilities/get-video-duration.md](rules/utilities/get-video-duration.md) - Getting the duration of a video file in seconds116- [utilities/transcribe-captions.md](rules/utilities/transcribe-captions.md) - Transcribing captions117118### Production119120- [production/delay-render.md](rules/production/delay-render.md) - Suspend rendering during async work: delayRender, continueRender, cancelRender121- [production/determinism.md](rules/production/determinism.md) - Deterministic renders with random(seed); never Math.random / Date.now122- [production/rendering.md](rules/production/rendering.md) - @remotion/renderer Node SSR: bundle, selectComposition, renderMedia123- [production/cli.md](rules/production/cli.md) - npx remotion subcommands and flags (render, still, bundle, studio, benchmark)124- [production/config.md](rules/production/config.md) - remotion.config.ts Config setters (codec, CRF, concurrency, Webpack)125- [production/lambda.md](rules/production/lambda.md) - AWS Lambda: deployFunction, deploySite, renderMediaOnLambda, cost tuning126- [production/player.md](rules/production/player.md) - @remotion/player embedding, PlayerRef, memoised inputProps, buffer events127- [production/video-tag-decision.md](rules/production/video-tag-decision.md) - Choose between Video / OffthreadVideo / Html5Video / @remotion/media128- [production/input-props.md](rules/production/input-props.md) - Prop resolution order, Zod validation, --props CLI flags, render-boundary security129- [production/caption-timing-safety.md](rules/production/caption-timing-safety.md) - Monotonic inputRange and adaptive fade window for captions130- [production/performance.md](rules/production/performance.md) - Hardware acceleration, concurrency, image format, GPU precompute, benchmarking131- [production/env-vars.md](rules/production/env-vars.md) - REMOTION_ prefix, .env loading, secrets via inputProps / envVariables132133### Integration134135- [integration/nextjs.md](rules/integration/nextjs.md) - Next.js App Router: Player SSR guard, transpilePackages, API route for Lambda136- [integration/docker.md](rules/integration/docker.md) - Docker: base image, --shm-size, fonts, Chromium flags, CI example137- [integration/mediabunny-migration.md](rules/integration/mediabunny-migration.md) - Migrate from deprecated media-parser/webcodecs to Mediabunny Video/Audio138- [integration/v5-prep.md](rules/integration/v5-prep.md) - Future-proof v4 code against v5 breaking changes139140### Packages141142- [packages/paths.md](rules/packages/paths.md) - @remotion/paths SVG path utilities (interpolatePath, warpPath, getLength)143- [packages/shapes.md](rules/packages/shapes.md) - @remotion/shapes pre-built SVG primitives (Triangle, Circle, Star, Pie, Heart)144- [packages/noise.md](rules/packages/noise.md) - @remotion/noise seeded Perlin noise (noise2D, noise3D, noise4D)145- [packages/motion-blur.md](rules/packages/motion-blur.md) - @remotion/motion-blur Trail and CameraMotionBlur (use sparingly)146- [packages/skia.md](rules/packages/skia.md) - @remotion/skia high-performance canvas (React Native Skia)147- [packages/rive.md](rules/packages/rive.md) - @remotion/rive animations with state machines (Lottie alternative)