Add a new expert to the Remotion experts page
日本語の概要は準備中です。原文の説明を表示しています。
Programmatic React video best practices for Remotion. Use this skill whenever the user is writing, debugging, or rendering Remotion code — compositions, useCurrentFrame animations, interpolate, spring, Sequence timing, <Img>/<Video>/<Audio> from @remotion/media, staticFile, calculateMetadata, the Studio preview, `npx remotion render`, captions, subtitles, voiceover, audio visualization, ffmpeg, transitions, light leaks, transparent video, Lottie, 3D scenes, Mapbox flyovers. Triggers especially on HtmlInCanvas / "html in canvas" requests, CRT terminal effects, glitch effects, video shaders, WebGL video, and any request to scaffold a new programmatic React video. Owns `remotion render` and everything about Remotion code. Do NOT trigger for finished MP4 ad assembly from existing slides (that is `/video-content`) or for the inspiration-to-MP4 reference-video pipeline (that is `/cmo-video`).
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Domain-specific knowledge for writing, animating, and rendering Remotion videos in React. Mirrored from the upstream remotion-dev/skills and remotion-dev/remotion .claude snapshots — see upstream.json for SHAs and scripts/check-upstream.sh for drift detection.
This is a knowledge skill. Other skills (/cmo-remotion, /video-content, /tiktok-slideshow) chain into it for the rules. Don't invoke it directly to render a video — invoke it to ground yourself before you touch composition code.
Read brand files in this order. Each is a soft input — every section below works at L0 with no brand at all:
brand/creative-kit.md — colors, typography, visual brand style. Drives palette, font choice, and the look of any composition you scaffold.brand/voice-profile.md — tone, vocabulary. Drives any visible text (titles, captions, subtitle phrasing).brand/audience.md — who watches. Drives pacing (tight cuts for B2C scroll feeds, longer holds for B2B explainers).brand/positioning.md — what the video is selling. Drives narrative beats and CTA copy.If any file is missing or template, fall back to neutral defaults: 1920×1080 @ 30fps, system font stack, 6-second hold per beat. Tell the user once: "Brand files thin — using neutral defaults. Run /cmo foundation to ground future videos."
useCurrentFrame, interpolate, spring, <Sequence>, <Composition>, staticFile.npx create-video@latest).npx remotion render and hitting WebGL / GPU / fps issues.Do not use for: assembling a finished MP4 from existing slide PNGs (/video-content), inspiration-to-MP4 from a reference URL (/cmo-video), or TikTok slideshow chains (/tiktok-slideshow).
These are non-negotiable. Violating them produces black frames, stuttered playback, or render failures.
| Rule | Why |
|---|---|
CSS transitions / @keyframes are FORBIDDEN. | Remotion renders frame-by-frame. CSS animations are time-based and will not advance during a still or video render. |
Tailwind animation classes (animate-*) are FORBIDDEN. | Same reason — they compile to CSS animations. Tailwind for layout/colors is fine; Tailwind for motion is broken. |
Drive every motion off useCurrentFrame() + interpolate() or spring(). | Frame is the only source of truth Remotion can serialize across the render worker pool. |
Use <Img>, <Video>, <Audio> from @remotion/media — never native <img> / <video> / <audio>. | Native elements don't participate in Remotion's frame-locking, so video frames desync from the timeline and audio drifts. |
Reference public assets via staticFile("path") — never hardcoded /path or ./path. | staticFile resolves correctly in Studio, in the renderer, and in deployed Lambda functions. Hardcoded paths break in Lambda. |
| Render-then-inspect. | A composition that looks right in Studio can still ship broken frames. Render a still or short clip and look at it before declaring done. |
| One-frame sanity check before any long render. | npx remotion still <id> --frame=30 --scale=0.25 is ~2 seconds. Catches missing assets, font fallbacks, layout overflow, and Tailwind misconfigs before you burn 20 minutes on a 30-second render. |
When in an empty folder or a workspace with no existing Remotion project:
npx create-video@latest --yes --blank --no-tailwind my-video
cd my-video
npx remotion studio
Flags:
--yes — skip the interactive prompt.--blank — minimal scaffold, no demo composition.--no-tailwind — Tailwind ships with animate-* utilities that will tempt the next agent to use forbidden CSS animations. Skip it. Add Tailwind later only if you need its layout utilities and you're disciplined about animation.For mktg projects, scaffold under marketing/video/<name>/ so renders land alongside the rest of the marketing artifacts.
The full rule corpus lives in rules/. Load only what you need for the current task — don't preload everything.
interpolate ranges, Bézier easing, spring() configuration.<Sequence from> / durationInFrames, layout="none" for inline content.<TransitionSeries> for scene-to-scene transitions.<HtmlInCanvas> for 2D/WebGL post-processing of DOM. The user-asked feature. See dedicated section below.@remotion/light-leaks overlays..srt files into a composition.durationInFrames / dimensions / props from async data.The canonical frame-driven fade-in. Memorize this shape — every other animation is a variation.
import { AbsoluteFill, Easing, interpolate, useCurrentFrame, useVideoConfig } from "remotion";
export const FadeIn: React.FC = () => {
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 (
<AbsoluteFill style={{ justifyContent: "center", alignItems: "center" }}>
<h1 style={{ opacity, fontSize: 120 }}>Hello</h1>
</AbsoluteFill>
);
};
Width / height / fps / duration belong on the <Composition> in src/Root.tsx. For dynamic durations (e.g., audio-driven length), use calculateMetadata — see rules/calculate-metadata.md.
# Preview interactively
npx remotion studio
# One-frame sanity check (always do this first)
npx remotion still MyComposition --frame=30 --scale=0.25 --output=out/check.png
# Full render
npx remotion render MyComposition out/video.mp4
# WebGL effects (HtmlInCanvas + WebGL, shaders, Three.js)
npx remotion render MyComposition out/video.mp4 --gl=angle
Set --gl=angle as the default in remotion.config.ts once a project uses WebGL anywhere — it avoids "blank frames in render but fine in Studio" surprises.
import { Config } from "@remotion/cli/config";
Config.setChromiumOpenGlRenderer("angle");
<HtmlInCanvas> renders DOM children into a <canvas> so you can post-process them with the Canvas 2D API or WebGL. This is how you build CRT terminals, glitch effects, video shaders, and other "DOM but with a filter on top" looks.
Constraints:
chrome://flags/#canvas-draw-element enabled. Tell the user this once.<HtmlInCanvas> inside another <HtmlInCanvas>. Remotion throws.--gl=angle whenever the inner effect uses WebGL.Working 2D blur example (frame-driven blur radius via onPaint):
import {
AbsoluteFill,
HtmlInCanvas,
type HtmlInCanvasOnPaint,
useCurrentFrame,
useVideoConfig,
} from "remotion";
import { useCallback } from "react";
export const Blur: React.FC = () => {
const frame = useCurrentFrame();
const { width, height, fps } = useVideoConfig();
const onPaint: HtmlInCanvasOnPaint = useCallback(
({ canvas, element, elementImage }) => {
const ctx = canvas.getContext("2d");
if (!ctx) throw new Error("Failed to acquire 2D context");
const blurPx = 4 + 18 * (0.5 + 0.5 * Math.sin((frame / fps) * Math.PI));
ctx.reset();
ctx.filter = `blur(${blurPx}px)`;
const transform = ctx.drawElementImage(elementImage, 0, 0);
element.style.transform = transform.toString();
},
[frame, fps],
);
return (
<HtmlInCanvas width={width} height={height} onPaint={onPaint}>
<AbsoluteFill style={{ justifyContent: "center", alignItems: "center", fontSize: 120 }}>
<h1>Hello</h1>
</AbsoluteFill>
</HtmlInCanvas>
);
};
For the full WebGL pattern (texture upload via gl.texElementImage2D, shader programs, async multi-pass), see rules/html-in-canvas.md.
For a complete CRT terminal scene with scanlines, phosphor glow, and chromatic aberration, see the /cmo-remotion skill's templates/CRTComposition.tsx.
| Anti-pattern | Instead | Why |
|---|---|---|
@keyframes or CSS transition | interpolate(frame, ...) | CSS animations are wall-clock; render workers freeze frames mid-animation and produce stutters or static stills. |
Tailwind animate-pulse / animate-bounce / etc. | Spring or interpolate driven by frame | Same root cause — Tailwind compiles motion utilities to CSS animations. |
<img src="..."> / native <video> / native <audio> | <Img> / <Video> / <Audio> from @remotion/media | Native elements don't sync to Remotion's frame clock. Video desyncs and audio drifts. |
Hardcoded /logo.png or ./assets/x.png | staticFile("logo.png") from public/ | Hardcoded paths break in Lambda renders and can break in Studio depending on dev-server config. |
Skipping the one-frame still check | npx remotion still <id> --frame=30 --scale=0.25 first | Catches missing fonts, broken paths, overflow in 2 seconds instead of 20-minute renders. |
Nesting <HtmlInCanvas> inside <HtmlInCanvas> | Merge effects into one outer canvas | Chrome only honors the outermost effect; Remotion throws an explicit error. |
WebGL effects rendered without --gl=angle | Add --gl=angle to render and Config.setChromiumOpenGlRenderer("angle") to config | Default GL backend silently produces blank frames in headless renders; ANGLE is required for parity with Studio. |
| Running on a non-Chromium machine for HtmlInCanvas work | Flag the constraint before starting; render on a Chrome 149+ host | Firefox / Safari engines can't enable canvas-draw-element; render will fail with no signal. |
| Reading the rule index for files you don't need | Load just the rule files relevant to the current task | The rule corpus is large — preloading wastes context budget that should go to brand files and the actual composition. |
This skill mirrors content from remotion-dev/skills (primary) and remotion-dev/remotion .claude (secondary). To check for drift:
./skills/remotion-best-practices/scripts/check-upstream.sh
The script compares pinned SHAs in upstream.json against the latest commits in both upstream repos and reports added/changed rule files. Owned by ironmint — do not edit upstream.json or scripts/ from this skill.
Three sibling skills overlap. Pick the right entry point — they are not interchangeable.
| Skill | Use when | Inputs | Output |
|---|---|---|---|
remotion-best-practices | You are writing or debugging Remotion code itself. Domain knowledge only. | Composition source, rendering question | Guidance + rule pointers |
/cmo-remotion | You want a polished programmatic video built end-to-end with mktg brand context. | Brief, brand files | Scaffolded composition + render |
/video-content | You already have slide PNGs and want them assembled into an MP4 (ffmpeg or Remotion tier). | PNG slides, audio | Finished MP4 |
/tiktok-slideshow | You want the full pipeline from positioning angle to TikTok-ready video. | Positioning angle | Script → slides → video |
remotion-best-practices is the shared knowledge layer under /cmo-remotion and /video-content (Remotion tier). Skills do not call it directly — they chain in the rules they need by file path.
Mirrored from:
skills/remotion/SKILL.md and the full skills/remotion/rules/ tree (35 files)..claude/ patterns referenced in references/upstream-internal/MAP.md.Snapshot SHAs and pinned tags live in upstream.json. Curated and adapted via /mktg-steal on 2026-05-04.
Credit to @JonnyBurger and the Remotion contributors. Upstream is MIT-licensed; see each upstream repo for the canonical license text. The mktg adaptation only changes the entry-point SKILL.md (this file) and adds provenance scaffolding — the rule corpus is mirrored verbatim.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Add a new expert to the Remotion experts page
日本語の概要は準備中です。原文の説明を表示しています。
Add a new sound effect to @remotion/sfx
日本語の概要は準備中です。原文の説明を表示しています。
Use when setting up a secure email inbox for any AI agent — configuring inbound email via Resend, webhooks, tunneling for local development, and implementing security measures to prevent prompt injection attacks. Also use when someone mentions 'agent email', 'bot inbox', 'receive emails for agent', 'agent webhook', 'email security for AI', 'prompt injection via email', 'inbound email for bot', or wants their AI agent to receive and respond to emails securely.
日本語の概要は準備中です。原文の説明を表示しています。
Builds, measures, and improves an Answer Engine Optimization program across ChatGPT, Perplexity, Claude, Gemini, Google AI Overviews, and Copilot. Use for AEO, GEO, LLMO, AI search visibility, AI citations, brand mentions, answer-engine monitoring, llms.txt, AI crawler audits, or questions like 'what does AI say about us?' and 'why are competitors cited instead of us?'. Produces a durable evidence report and prioritized gameplan, not a one-shot content checklist.
日本語の概要は準備中です。原文の説明を表示しています。
Generate Apple App Store screenshot pages as a Next.js app with html-to-image export at required resolutions. Screenshots are advertisements, not documentation — every screenshot sells one idea. Use when building App Store screenshots, generating exportable marketing screenshots for iOS apps, or creating programmatic screenshot generators. Triggers on 'app store screenshots', 'App Store', 'screenshot generator', 'iOS screenshots', 'marketing screenshots', 'phone mockup', 'ASO screenshots', 'app store assets', 'app listing', 'app store page', or 'app preview images'. Also use when someone is about to submit an app and needs store assets, or when they say 'make my app store page look good'. Includes iPhone and iPad mockup components with pre-measured dimensions.
日本語の概要は準備中です。原文の説明を表示しています。
Build detailed buyer personas and audience profiles from research. Use this skill whenever the user mentions audience, buyer persona, ideal customer, target market, ICP, watering holes, 'who am I selling to', customer research, or audience profile. Also use when content feels unfocused or generic (that's an audience problem), when conversion is low because messaging doesn't resonate, when starting any new project (audience should be first), or when any downstream skill needs audience.md but it doesn't exist yet. Even if the user doesn't explicitly ask for audience research, trigger this if they're writing copy or building a landing page without a clear audience defined. Three approaches: Quick Profile, Persona Build, Community Mining.
日本語の概要は準備中です。原文の説明を表示しています。