From 0d36bb8e1d0b523659f06294b049cb5db6b0d869 Mon Sep 17 00:00:00 2001 From: Corey Ching Date: Tue, 14 Apr 2026 13:01:11 -0700 Subject: [PATCH] Add Remotion plugin --- .agents/plugins/marketplace.json | 12 + README.md | 2 +- plugins/remotion/.codex-plugin/plugin.json | 44 ++ plugins/remotion/README.md | 34 ++ plugins/remotion/assets/icon.png | Bin 0 -> 37249 bytes plugins/remotion/assets/logo.png | Bin 0 -> 37249 bytes plugins/remotion/skills/remotion/SKILL.md | 95 ++++ plugins/remotion/skills/remotion/rules/3d.md | 86 ++++ .../skills/remotion/rules/animations.md | 31 ++ .../remotion/skills/remotion/rules/assets.md | 78 ++++ .../remotion/rules/audio-visualization.md | 198 +++++++++ .../remotion/skills/remotion/rules/audio.md | 169 +++++++ .../remotion/rules/calculate-metadata.md | 134 ++++++ .../skills/remotion/rules/can-decode.md | 81 ++++ .../remotion/skills/remotion/rules/charts.md | 120 +++++ .../skills/remotion/rules/compositions.md | 154 +++++++ .../skills/remotion/rules/display-captions.md | 184 ++++++++ .../skills/remotion/rules/extract-frames.md | 229 ++++++++++ .../remotion/skills/remotion/rules/ffmpeg.md | 34 ++ .../remotion/skills/remotion/rules/fonts.md | 152 +++++++ .../remotion/rules/get-audio-duration.md | 58 +++ .../remotion/rules/get-video-dimensions.md | 68 +++ .../remotion/rules/get-video-duration.md | 60 +++ .../remotion/skills/remotion/rules/gifs.md | 141 ++++++ .../remotion/skills/remotion/rules/images.md | 134 ++++++ .../remotion/rules/import-srt-captions.md | 69 +++ .../skills/remotion/rules/light-leaks.md | 73 ++++ .../remotion/skills/remotion/rules/lottie.md | 70 +++ .../remotion/skills/remotion/rules/maps.md | 412 ++++++++++++++++++ .../remotion/rules/measuring-dom-nodes.md | 34 ++ .../skills/remotion/rules/measuring-text.md | 140 ++++++ .../skills/remotion/rules/parameters.md | 109 +++++ .../skills/remotion/rules/sequencing.md | 118 +++++ plugins/remotion/skills/remotion/rules/sfx.md | 30 ++ .../remotion/rules/silence-detection.md | 71 +++ .../skills/remotion/rules/subtitles.md | 36 ++ .../skills/remotion/rules/tailwind.md | 11 + .../skills/remotion/rules/text-animations.md | 20 + .../remotion/skills/remotion/rules/timing.md | 136 ++++++ .../remotion/rules/transcribe-captions.md | 70 +++ .../skills/remotion/rules/transitions.md | 197 +++++++++ .../remotion/rules/transparent-videos.md | 106 +++++ .../skills/remotion/rules/trimming.md | 51 +++ .../remotion/skills/remotion/rules/videos.md | 171 ++++++++ .../skills/remotion/rules/voiceover.md | 99 +++++ 45 files changed, 4320 insertions(+), 1 deletion(-) create mode 100644 plugins/remotion/.codex-plugin/plugin.json create mode 100644 plugins/remotion/README.md create mode 100644 plugins/remotion/assets/icon.png create mode 100644 plugins/remotion/assets/logo.png create mode 100644 plugins/remotion/skills/remotion/SKILL.md create mode 100644 plugins/remotion/skills/remotion/rules/3d.md create mode 100644 plugins/remotion/skills/remotion/rules/animations.md create mode 100644 plugins/remotion/skills/remotion/rules/assets.md create mode 100644 plugins/remotion/skills/remotion/rules/audio-visualization.md create mode 100644 plugins/remotion/skills/remotion/rules/audio.md create mode 100644 plugins/remotion/skills/remotion/rules/calculate-metadata.md create mode 100644 plugins/remotion/skills/remotion/rules/can-decode.md create mode 100644 plugins/remotion/skills/remotion/rules/charts.md create mode 100644 plugins/remotion/skills/remotion/rules/compositions.md create mode 100644 plugins/remotion/skills/remotion/rules/display-captions.md create mode 100644 plugins/remotion/skills/remotion/rules/extract-frames.md create mode 100644 plugins/remotion/skills/remotion/rules/ffmpeg.md create mode 100644 plugins/remotion/skills/remotion/rules/fonts.md create mode 100644 plugins/remotion/skills/remotion/rules/get-audio-duration.md create mode 100644 plugins/remotion/skills/remotion/rules/get-video-dimensions.md create mode 100644 plugins/remotion/skills/remotion/rules/get-video-duration.md create mode 100644 plugins/remotion/skills/remotion/rules/gifs.md create mode 100644 plugins/remotion/skills/remotion/rules/images.md create mode 100644 plugins/remotion/skills/remotion/rules/import-srt-captions.md create mode 100644 plugins/remotion/skills/remotion/rules/light-leaks.md create mode 100644 plugins/remotion/skills/remotion/rules/lottie.md create mode 100644 plugins/remotion/skills/remotion/rules/maps.md create mode 100644 plugins/remotion/skills/remotion/rules/measuring-dom-nodes.md create mode 100644 plugins/remotion/skills/remotion/rules/measuring-text.md create mode 100644 plugins/remotion/skills/remotion/rules/parameters.md create mode 100644 plugins/remotion/skills/remotion/rules/sequencing.md create mode 100644 plugins/remotion/skills/remotion/rules/sfx.md create mode 100644 plugins/remotion/skills/remotion/rules/silence-detection.md create mode 100644 plugins/remotion/skills/remotion/rules/subtitles.md create mode 100644 plugins/remotion/skills/remotion/rules/tailwind.md create mode 100644 plugins/remotion/skills/remotion/rules/text-animations.md create mode 100644 plugins/remotion/skills/remotion/rules/timing.md create mode 100644 plugins/remotion/skills/remotion/rules/transcribe-captions.md create mode 100644 plugins/remotion/skills/remotion/rules/transitions.md create mode 100644 plugins/remotion/skills/remotion/rules/transparent-videos.md create mode 100644 plugins/remotion/skills/remotion/rules/trimming.md create mode 100644 plugins/remotion/skills/remotion/rules/videos.md create mode 100644 plugins/remotion/skills/remotion/rules/voiceover.md diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index f632ecd5..de3fdd55 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -337,6 +337,18 @@ "authentication": "ON_INSTALL" }, "category": "Coding" + }, + { + "name": "remotion", + "source": { + "source": "local", + "path": "./plugins/remotion" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Design" } ] } diff --git a/README.md b/README.md index 2e68e165..9f67f94c 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,4 @@ Highlighted richer examples in this repo include: - `plugins/build-ios-apps` for SwiftUI implementation, refactors, performance, and debugging - `plugins/build-macos-apps` for macOS SwiftUI/AppKit workflows, build/run/debug loops, and packaging guidance - `plugins/build-web-apps` for deployment, UI, payments, and database workflows -- `plugins/netlify`, `plugins/render`, and `plugins/google-slides` for additional public skill- and MCP-backed plugin bundles +- `plugins/netlify`, `plugins/remotion`, and `plugins/google-slides` for additional public skill- and MCP-backed plugin bundles diff --git a/plugins/remotion/.codex-plugin/plugin.json b/plugins/remotion/.codex-plugin/plugin.json new file mode 100644 index 00000000..4d2caed1 --- /dev/null +++ b/plugins/remotion/.codex-plugin/plugin.json @@ -0,0 +1,44 @@ +{ + "name": "remotion", + "version": "1.0.0", + "description": "Remotion video creation skills — best practices, animations, audio, captions, 3D, and more for building programmatic videos with React.", + "author": { + "name": "Remotion", + "email": "hi@remotion.dev", + "url": "https://remotion.dev" + }, + "homepage": "https://remotion.dev", + "repository": "https://github.com/remotion-dev/remotion", + "license": "MIT", + "keywords": [ + "remotion", + "video", + "react", + "animation", + "composition", + "rendering", + "ffmpeg", + "captions", + "audio" + ], + "skills": "./skills/", + "interface": { + "displayName": "Remotion", + "shortDescription": "Create motion graphics from prompts", + "longDescription": "Build videos programmatically with Remotion and React. Covers animations, timing, audio, captions, 3D, transitions, charts, text effects, and more.", + "developerName": "Remotion", + "category": "Design", + "capabilities": ["Read", "Write"], + "websiteURL": "https://remotion.dev", + "privacyPolicyURL": "https://remotion.pro/privacy", + "termsOfServiceURL": "https://remotion.pro/terms", + "defaultPrompt": [ + "Create an animated chart with 5 bars", + "Make an animated call-to-action subscribe button for our YouTube channel", + "Use Remotion to add captions and audio to a video composition." + ], + "brandColor": "#0B84F3", + "composerIcon": "./assets/icon.png", + "logo": "./assets/logo.png" + } +} diff --git a/plugins/remotion/README.md b/plugins/remotion/README.md new file mode 100644 index 00000000..97e719de --- /dev/null +++ b/plugins/remotion/README.md @@ -0,0 +1,34 @@ +# @remotion/codex-plugin + +OpenAI Codex plugin that packages [Remotion](https://remotion.dev) skills for AI-assisted video creation. + +## Building + +```bash +bun build.mts +``` + +This copies skills from `packages/skills/skills/` into the `skills/` directory in the Codex plugin format. + +## Installation + +See the [official OpenAI Codex plugin docs](https://developers.openai.com/codex/plugins/build) for how to install and test plugins locally. + +## Plugin structure + +``` +.codex-plugin/ + plugin.json # Plugin manifest +skills/ + remotion/ # Remotion best practices (animations, audio, etc.) + SKILL.md + rules/*.md +``` + +## Contributing + +This repository is a mirror of [`packages/codex-plugin`](https://github.com/remotion-dev/remotion/tree/main/packages/codex-plugin) in the [Remotion monorepo](https://github.com/remotion-dev/remotion), which is the source of truth. Please send contributions there. + +## Skills included + +- **remotion** — Best practices for video creation with Remotion and React. Covers project setup, animations, timing, audio, captions, 3D, transitions, charts, text effects, fonts, and 30+ more topics. diff --git a/plugins/remotion/assets/icon.png b/plugins/remotion/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec599a9873af0fb2f0962f868a5665a1e6510992 GIT binary patch literal 37249 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 literal 0 HcmV?d00001 diff --git a/plugins/remotion/assets/logo.png b/plugins/remotion/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ec599a9873af0fb2f0962f868a5665a1e6510992 GIT binary patch literal 37249 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 literal 0 HcmV?d00001 diff --git a/plugins/remotion/skills/remotion/SKILL.md b/plugins/remotion/skills/remotion/SKILL.md new file mode 100644 index 00000000..84679e27 --- /dev/null +++ b/plugins/remotion/skills/remotion/SKILL.md @@ -0,0 +1,95 @@ +--- +name: remotion-best-practices +description: Best practices for Remotion - Video creation in React +metadata: + tags: remotion, video, react, animation, composition +--- + +## When to use + +Use this skills whenever you are dealing with Remotion code to obtain the domain-specific knowledge. + +## New project setup + +When in an empty folder or workspace with no existing Remotion project, scaffold one using: + +```bash +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: + +```bash +npx remotion studio +``` + +## Optional: one-frame render check + +You can render a single frame with the CLI to sanity-check layout, colors, or timing. +Skip it for trivial edits, pure refactors, or when you already have enough confidence from Studio or prior renders. + +```bash +npx remotion still [composition-id] --scale=0.25 --frame=30 +``` + +At 30 fps, `--frame=30` is the one-second mark (`--frame` is zero-based). + +## Captions + +When dealing with captions or subtitles, load the [./rules/subtitles.md](./rules/subtitles.md) file for more information. + +## Using FFmpeg + +For some video operations, such as trimming videos or detecting silence, FFmpeg should be used. Load the [./rules/ffmpeg.md](./rules/ffmpeg.md) file for more information. + +## Silence detection + +When needing to detect and trim silent segments from video or audio files, load the [./rules/silence-detection.md](./rules/silence-detection.md) file. + +## Audio visualization + +When needing to visualize audio (spectrum bars, waveforms, bass-reactive effects), load the [./rules/audio-visualization.md](./rules/audio-visualization.md) file for more information. + +## Sound effects + +When needing to use sound effects, load the [./rules/sfx.md](./rules/sfx.md) file for more information. + +## How to use + +Read individual rule files for detailed explanations and code examples: + +- [rules/3d.md](rules/3d.md) - 3D content in Remotion using Three.js and React Three Fiber +- [rules/animations.md](rules/animations.md) - Fundamental animation skills for Remotion +- [rules/assets.md](rules/assets.md) - Importing images, videos, audio, and fonts into Remotion +- [rules/audio.md](rules/audio.md) - Using audio and sound in Remotion - importing, trimming, volume, speed, pitch +- [rules/calculate-metadata.md](rules/calculate-metadata.md) - Dynamically set composition duration, dimensions, and props +- [rules/can-decode.md](rules/can-decode.md) - Check if a video can be decoded by the browser using Mediabunny +- [rules/charts.md](rules/charts.md) - Chart and data visualization patterns for Remotion (bar, pie, line, stock charts) +- [rules/compositions.md](rules/compositions.md) - Defining compositions, stills, folders, default props and dynamic metadata +- [rules/extract-frames.md](rules/extract-frames.md) - Extract frames from videos at specific timestamps using Mediabunny +- [rules/fonts.md](rules/fonts.md) - Loading Google Fonts and local fonts in Remotion +- [rules/get-audio-duration.md](rules/get-audio-duration.md) - Getting the duration of an audio file in seconds with Mediabunny +- [rules/get-video-dimensions.md](rules/get-video-dimensions.md) - Getting the width and height of a video file with Mediabunny +- [rules/get-video-duration.md](rules/get-video-duration.md) - Getting the duration of a video file in seconds with Mediabunny +- [rules/gifs.md](rules/gifs.md) - Displaying GIFs synchronized with Remotion's timeline +- [rules/images.md](rules/images.md) - Embedding images in Remotion using the Img component +- [rules/light-leaks.md](rules/light-leaks.md) - Light leak overlay effects using @remotion/light-leaks +- [rules/lottie.md](rules/lottie.md) - Embedding Lottie animations in Remotion +- [rules/measuring-dom-nodes.md](rules/measuring-dom-nodes.md) - Measuring DOM element dimensions in Remotion +- [rules/measuring-text.md](rules/measuring-text.md) - Measuring text dimensions, fitting text to containers, and checking overflow +- [rules/sequencing.md](rules/sequencing.md) - Sequencing patterns for Remotion - delay, trim, limit duration of items +- [rules/tailwind.md](rules/tailwind.md) - Using TailwindCSS in Remotion +- [rules/text-animations.md](rules/text-animations.md) - Typography and text animation patterns for Remotion +- [rules/timing.md](rules/timing.md) - Timing with interpolate and Bézier easing, springs +- [rules/transitions.md](rules/transitions.md) - Scene transition patterns for Remotion +- [rules/transparent-videos.md](rules/transparent-videos.md) - Rendering out a video with transparency +- [rules/trimming.md](rules/trimming.md) - Trimming patterns for Remotion - cut the beginning or end of animations +- [rules/videos.md](rules/videos.md) - Embedding videos in Remotion - trimming, volume, speed, looping, pitch +- [rules/parameters.md](rules/parameters.md) - Make a video parametrizable by adding a Zod schema +- [rules/maps.md](rules/maps.md) - Add a map using Mapbox and animate it +- [rules/silence-detection.md](rules/silence-detection.md) - Adaptive silence detection using FFmpeg loudnorm and silencedetect +- [rules/voiceover.md](rules/voiceover.md) - Adding AI-generated voiceover to Remotion compositions using ElevenLabs TTS diff --git a/plugins/remotion/skills/remotion/rules/3d.md b/plugins/remotion/skills/remotion/rules/3d.md new file mode 100644 index 00000000..c9d254f1 --- /dev/null +++ b/plugins/remotion/skills/remotion/rules/3d.md @@ -0,0 +1,86 @@ +--- +name: 3d +description: 3D content in Remotion using Three.js and React Three Fiber. +metadata: + tags: 3d, three, threejs +--- + +# 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 `` and include proper lighting. +`` MUST have a `width` and `height` prop. + +```tsx +import { ThreeCanvas } from "@remotion/three"; +import { useVideoConfig } from "remotion"; + +const { width, height } = useVideoConfig(); + + + + + + + + +; +``` + +## 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; + + + + +; +``` + +## Using `` inside `` + +The `layout` prop of any `` inside a `` must be set to `none`. + +```tsx +import { Sequence } from "remotion"; +import { ThreeCanvas } from "@remotion/three"; + +const { width, height } = useVideoConfig(); + + + + + + + + +; +``` diff --git a/plugins/remotion/skills/remotion/rules/animations.md b/plugins/remotion/skills/remotion/rules/animations.md new file mode 100644 index 00000000..4a02e553 --- /dev/null +++ b/plugins/remotion/skills/remotion/rules/animations.md @@ -0,0 +1,31 @@ +--- +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()`. + +For eased motion, prefer `interpolate` with explicit frame ranges and an easing—especially `Easing.bezier`, which matches CSS `cubic-bezier` so timing can be shared with web specs and curve editors. See [timing](./timing.md). + +```tsx +import { useCurrentFrame, Easing } from "remotion"; + +export const FadeIn = () => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + const opacity = interpolate(frame, [0, 2 * fps], [0, 1], { + extrapolateRight: "clamp", + extrapolateLeft: "clamp", + easing: Easing.bezier(0.16, 1, 0.3, 1), + }); + + return
Hello World!
; +}; +``` + +CSS transitions or animations are FORBIDDEN - they will not render correctly. +Tailwind animation class names are FORBIDDEN - they will not render correctly. diff --git a/plugins/remotion/skills/remotion/rules/assets.md b/plugins/remotion/skills/remotion/rules/assets.md new file mode 100644 index 00000000..a5d40152 --- /dev/null +++ b/plugins/remotion/skills/remotion/rules/assets.md @@ -0,0 +1,78 @@ +--- +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 ; +}; +``` + +The function returns an encoded URL that works correctly when deploying to subdirectories. + +## Using with components + +**Images:** + +```tsx +import { Img, staticFile } from "remotion"; + +; +``` + +**Videos:** + +```tsx +import { Video } from "@remotion/media"; +import { staticFile } from "remotion"; + +