Source profileQuality 91/100Review permissions

MoizIbnYousaf/marketing-cli/skills/remotion-best-practices/SKILL.md

remotion-best-practices

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 o

Source repository stars
27
Declared platforms
0
Static risk flags
1
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

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.

Best for

  • User mentions Remotion, useCurrentFrame, interpolate, spring, , , staticFile.
  • User wants to scaffold a programmatic React video (npx create-video@latest).
  • User wants HtmlInCanvas, CRT terminal, glitch, video shader, or WebGL post-processing.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/remotion-best-practices"
Safe inspection promptEditorial

Inspect the Agent Skill "remotion-best-practices" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/remotion-best-practices/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    New project setup

    When in an empty folder or a workspace with no existing Remotion project:

    --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 anima…
  2. 02

    On Activation

    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).
  3. 03

    When to use

    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).

    User mentions Remotion, useCurrentFrame, interpolate, spring, , , staticFile.User wants to scaffold a programmatic React video (npx create-video@latest).User wants HtmlInCanvas, CRT terminal, glitch, video shader, or WebGL post-processing.
  4. 04

    Hard Rules

    These are non-negotiable. Violating them produces black frames, stuttered playback, or render failures.

    These are non-negotiable. Violating them produces black frames, stuttered playback, or render failures.
  5. 05

    Rule Index — load on demand

    The full rule corpus lives in rules/. Load only what you need for the current task — don't preload everything.

    rules/timing.md — interpolate ranges, Bézier easing, spring() configuration.rules/sequencing.md — / durationInFrames, layout="none" for inline content.rules/transitions.md — for scene-to-scene transitions.

Permission review

Static risk signals and limitations

Runs scripts

medium · line 47

The documentation asks the agent to run terminal commands or scripts.

npx create-video@latest --yes --blank --no-tailwind my-video

Runs scripts

medium · line 49

The documentation asks the agent to run terminal commands or scripts.

npx remotion studio

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score91/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars27SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
MoizIbnYousaf/marketing-cli
Skill path
skills/remotion-best-practices/SKILL.md
Commit
f12fbcbe4929584697b309b9096c9427b0cfce8e
License
MIT
Collected
2026-07-28
Default branch
main
View the original SKILL.md

Remotion Best Practices

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.

On Activation

Read brand files in this order. Each is a soft input — every section below works at L0 with no brand at all:

  1. brand/creative-kit.md — colors, typography, visual brand style. Drives palette, font choice, and the look of any composition you scaffold.
  2. brand/voice-profile.md — tone, vocabulary. Drives any visible text (titles, captions, subtitle phrasing).
  3. brand/audience.md — who watches. Drives pacing (tight cuts for B2C scroll feeds, longer holds for B2B explainers).
  4. 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."

When to use

  • User mentions Remotion, useCurrentFrame, interpolate, spring, <Sequence>, <Composition>, staticFile.
  • User wants to scaffold a programmatic React video (npx create-video@latest).
  • User wants HtmlInCanvas, CRT terminal, glitch, video shader, or WebGL post-processing.
  • User is debugging captions, subtitles, voiceover, audio visualization, or ffmpeg-piped Remotion work.
  • User is rendering with 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).

Hard Rules

These are non-negotiable. Violating them produces black frames, stuttered playback, or render failures.

RuleWhy
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.

New project setup

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.

Rule Index — load on demand

The full rule corpus lives in rules/. Load only what you need for the current task — don't preload everything.

Animation core

Effects

Audio & narration

Captions & subtitles

Media handling

Composition & metadata

Typography

Specialty

  • rules/3d.md — Three.js / React Three Fiber inside Remotion.
  • rules/mapbox.md — animated Mapbox flyovers (use static images for trivial maps).
  • rules/tailwind.md — Tailwind setup notes if you must use it. Animation classes still forbidden.

Composition shape

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.

Render pipeline

# 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 — the user-asked feature

<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 149+ with chrome://flags/#canvas-draw-element enabled. Tell the user this once.
  • Non-Chromium machines cannot render — flag it before starting work.
  • Do NOT nest <HtmlInCanvas> inside another <HtmlInCanvas>. Remotion throws.
  • Use --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-Patterns

Anti-patternInsteadWhy
@keyframes or CSS transitioninterpolate(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 frameSame root cause — Tailwind compiles motion utilities to CSS animations.
<img src="..."> / native <video> / native <audio><Img> / <Video> / <Audio> from @remotion/mediaNative elements don't sync to Remotion's frame clock. Video desyncs and audio drifts.
Hardcoded /logo.png or ./assets/x.pngstaticFile("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 checknpx remotion still <id> --frame=30 --scale=0.25 firstCatches missing fonts, broken paths, overflow in 2 seconds instead of 20-minute renders.
Nesting <HtmlInCanvas> inside <HtmlInCanvas>Merge effects into one outer canvasChrome only honors the outermost effect; Remotion throws an explicit error.
WebGL effects rendered without --gl=angleAdd --gl=angle to render and Config.setChromiumOpenGlRenderer("angle") to configDefault GL backend silently produces blank frames in headless renders; ANGLE is required for parity with Studio.
Running on a non-Chromium machine for HtmlInCanvas workFlag the constraint before starting; render on a Chrome 149+ hostFirefox / Safari engines can't enable canvas-draw-element; render will fail with no signal.
Reading the rule index for files you don't needLoad just the rule files relevant to the current taskThe rule corpus is large — preloading wastes context budget that should go to brand files and the actual composition.

Checking for upstream updates

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.

How this composes

Three sibling skills overlap. Pick the right entry point — they are not interchangeable.

SkillUse whenInputsOutput
remotion-best-practicesYou are writing or debugging Remotion code itself. Domain knowledge only.Composition source, rendering questionGuidance + rule pointers
/cmo-remotionYou want a polished programmatic video built end-to-end with mktg brand context.Brief, brand filesScaffolded composition + render
/video-contentYou already have slide PNGs and want them assembled into an MP4 (ffmpeg or Remotion tier).PNG slides, audioFinished MP4
/tiktok-slideshowYou want the full pipeline from positioning angle to TikTok-ready video.Positioning angleScript → 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.

Attribution

Mirrored from:

  • Primary: remotion-dev/skillsskills/remotion/SKILL.md and the full skills/remotion/rules/ tree (35 files).
  • Secondary: remotion-dev/remotion.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.

Alternatives

Compare before choosing

Computed 9427

MoizIbnYousaf/marketing-cli

cmo-remotion

Brand-grounded Remotion video pipeline. Take a brief, ground it in `brand/` (voice, audience, positioning, creative-kit), write a beat sheet, scaffold a fresh Remotion project, generate any required assets, compose with frame-driven animations, and bake a final MP4. Use this skill whenever the user wants to build a NEW Remotion video from scratch — product films, motion graphics, code-driven shaders, CRT/glitch effects, HTML-in-canvas demos, React video. Triggers on requests like "make a remotio

Computed 89165

JasonColapietro/suede-creator-skills

suede-code-review

Find the bugs a diff can actually ship: TypeScript, React, Next.js, OWASP, accessibility, SEO, database, and deploy-risk review. Return findings, not a grade.

Computed 8410,762

Jeffallan/claude-skills

nextjs-developer

Use when building Next.js 14+ applications with App Router, server components, or server actions. Invoke to configure route handlers, implement middleware, set up API routes, add streaming SSR, write generateMetadata for SEO, scaffold loading.tsx/error.tsx boundaries, or deploy to Vercel. Triggers on: Next.js, Next.js 14, App Router, RSC, use server, Server Components, Server Actions, React Server Components, generateMetadata, loading.tsx, Next.js deployment, Vercel, Next.js performance.

Computed 1007

event4u-app/agent-config

design-intelligence

Grounded design brief from the adopted corpus — style, WCAG-checked color tokens, typography, layout pattern, anti-patterns. Use on ui-design-brief or any which-style/palette/font/chart decision.