/install remotion-best-practice
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:
npx create-video@latest --yes --blank --no-tailwind my-video
Replace my-video with a suitable project name.
Designing a video
Animate properties using useCurrentFrame() and interpolate(). Use Easing to customize the timing of the animation.
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 \x3Cdiv style={{ opacity }}>Hello World!\x3C/div>;
};
CSS transitions or animations are FORBIDDEN - they will not render correctly.
Tailwind animation class names are FORBIDDEN - they will not render correctly.
Place assets in the public/ folder at your project root.
Use staticFile() to reference files from the public/ folder.
Add images using the \x3CImg> component:
import { Img, staticFile } from "remotion";
export const MyComposition = () => {
return \x3CImg src={staticFile("logo.png")} style={{ width: 100, height: 100 }} />;
};
Add videos using the \x3CVideo> component from @remotion/media:
import { Video } from "@remotion/media";
import { staticFile } from "remotion";
export const MyComposition = () => {
return \x3CVideo src={staticFile("video.mp4")} style={{ opacity: 0.5 }} />;
};
Add audio using the \x3CAudio> component from @remotion/media:
import { Audio } from "@remotion/media";
import { staticFile } from "remotion";
export const MyComposition = () => {
return \x3CAudio src={staticFile("audio.mp3")} />;
};
Assets can be also referenced as remote URLs:
import { Video } from "@remotion/media";
export const MyComposition = () => {
return \x3CVideo src="https://remotion.media/video.mp4" />
};
To delay content wrap it in \x3CSequence> and use from.
To limit the duration of an element, use durationInFrames of \x3CSequence>.
\x3CSequence> by default is an absolute fill. For inline content, use layout="none".
import { Sequence } from "remotion";
export const Title = () => {
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 \x3Cdiv style={{ opacity }}>Title\x3C/div>;
};
export const Subtitle = () => {
return \x3Cdiv>Subtitle\x3C/div>;
};
const Main = () => {
const {fps} = useVideoConfig();
return (
\x3CAbsoluteFill>
\x3CSequence>
\x3CBackground />
\x3C/Sequence>
\x3CSequence from={1 * fps} durationInFrames={2 * fps} layout="none">
\x3CTitle />
\x3C/Sequence>
\x3CSequence from={2 * fps} durationInFrames={2 * fps} layout="none">
\x3CSubtitle />
\x3C/Sequence>
\x3C/AbsoluteFill>
);
}
The width, height, fps, and duration of a video is defined in src/Root.tsx:
import { Composition } from "remotion";
import { MyComposition } from "./MyComposition";
export const RemotionRoot = () => {
return (
\x3CComposition
id="MyComposition"
component={MyComposition}
durationInFrames={100}
fps={30}
width={1080}
height={1080}
/>
);
};
Metadata can also be calculated dynamically:
import { Composition, CalculateMetadataFunction } from "remotion";
import { MyComposition, MyCompositionProps } from "./MyComposition";
const calculateMetadata: CalculateMetadataFunction\x3C
MyCompositionProps
> = async ({ props, abortSignal }) => {
const data = await fetch(`https://api.example.com/video/${props.videoId}`, {
signal: abortSignal,
}).then((res) => res.json());
return {
durationInFrames: Math.ceil(data.duration * 30),
props: {
...props,
videoUrl: data.url,
},
width: 1080,
height: 1080,
};
};
export const RemotionRoot = () => {
return (
\x3CComposition
id="MyComposition"
component={MyComposition}
fps={30}
width={1080}
height={1080}
defaultProps={{ videoId: "abc123" }}
calculateMetadata={calculateMetadata}
/>
);
};
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, colors, 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).
Captions
When dealing with captions or subtitles, load the ./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 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 file.
Audio visualization
When needing to visualize audio (spectrum bars, waveforms, bass-reactive effects), load the ./rules/audio-visualization.md file for more information.
Sound effects
When needing to use sound effects, load the ./rules/sfx.md file for more information.
3D content
See rules/3d.md for 3D content in Remotion using Three.js and React Three Fiber.
Advanced audio
See rules/audio.md for advanced audio features like trimming, volume, speed, pitch.
Dynamic duration, dimensions and data
See rules/calculate-metadata.md for dynamically set composition duration, dimensions, and props.
Advanced compositions
See rules/compositions.md for how to define stills, folders, default props and for how to nest compositions.
Google Fonts
Is the recommended way to load fonts in Remotion. See rules/google-fonts.md for how to load Google Fonts.
Local fonts
See rules/local-fonts.md for how to load local fonts.
Getting audio duration
See rules/get-audio-duration.md for getting the duration of an audio file in seconds with Mediabunny.
Getting video dimensions
See rules/get-video-dimensions.md for getting the width and height of a video file with Mediabunny.
Getting video duration
See rules/get-video-duration.md for getting the duration of a video file in seconds with Mediabunny.
GIFs
See rules/gifs.md for how to display GIFs synchronized with Remotion's timeline.
Advanced Images
See rules/images.md for sizing and positioning images, dynamic image paths, and getting image dimensions.
Light leaks
See rules/light-leaks.md for light leak overlay effects using @remotion/light-leaks.
Lottie animations
See rules/lottie.md for embedding Lottie animations in Remotion.
HTML in canvas
See rules/html-in-canvas.md if you need to render HTML into a \x3Ccanvas> to apply 2D or WebGL effects via \x3CHtmlInCanvas>.
Measuring DOM nodes
See rules/measuring-dom-nodes.md for measuring DOM element dimensions in Remotion.
Measuring text
See rules/measuring-text.md for measuring text dimensions, fitting text to containers, and checking overflow.
Advanced sequencing
See rules/sequencing.md for more sequencing patterns - delay, trim, limit duration of items.
TailwindCSS
See rules/tailwind.md for using TailwindCSS in Remotion.
Text animations
See rules/text-animations.md for typography and text animation patterns.
Advanced timing
See rules/timing.md for advanced timing with interpolate and Bézier easing, and springs.
Transitions
See rules/transitions.md for scene transition patterns.
Transparent videos
See rules/transparent-videos.md for rendering out a video with transparency.
Trimming
See rules/trimming.md for trimming patterns - cutting the beginning or end of animations.
Advanced Videos
See rules/videos.md for advanced knowledge about embedding videos - trimming, volume, speed, looping, pitch.
Parameterized videos
See rules/parameters.md for making a composition parametrizable by adding a Zod schema.
Maps
For simple maps with little flyovers, consider using static map images. For complex maps with animated routes or flyovers, load the maps rule: rules/maplibre.md
Voiceover
See rules/voiceover.md for adding AI-generated voiceover to Remotion compositions using ElevenLabs TTS.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install remotion-best-practice - 安装完成后,直接呼叫该 Skill 的名称或使用
/remotion-best-practice触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Remotion Best Practice 是什么?
Best practices for Remotion - Video creation in React. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 50 次。
如何安装 Remotion Best Practice?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install remotion-best-practice」即可一键安装,无需额外配置。
Remotion Best Practice 是免费的吗?
是的,Remotion Best Practice 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Remotion Best Practice 支持哪些平台?
Remotion Best Practice 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Remotion Best Practice?
由 小海星(@start-fish)开发并维护,当前版本 v1.0.0。