Use when building or editing programmatic video in Remotion. Triggers on Remotion projects, `remotion.config.ts`, composition files, and prompts about useCurrentFrame, interpolate, spring, Sequence, transitions, captions, audio, or rendering MP4/GIF from React, even when the user doesn't say 'Remotion'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/xonovex-skill-remotion:remotion-guideThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Remotion ≥ 4, React ≥ 18, TypeScript.
evals.jsonreferences/animations.mdreferences/assets.mdreferences/captions.mdreferences/charts.mdreferences/compositions.mdreferences/dom-measurement.mdreferences/gifs.mdreferences/lottie.mdreferences/maps.mdreferences/media.mdreferences/mediabunny.mdreferences/sequencing.mdreferences/text.mdreferences/three-d.mdreferences/timing.mdreferences/transitions.mduseCurrentFrame() for all motion; CSS transitions and Tailwind animate-* classes are forbidden, see references/animations.mdfps from useVideoConfig(); use interpolate() or spring(), see references/timing.md<Sequence> with from/durationInFrames; always add premountFor to preload, see references/sequencing.mdstaticFile() for public assets; use <Img>, <Video>, <Audio> components, see references/assets.mdRoot.tsx with type (not interface) for props; use calculateMetadata() for dynamic values, see references/compositions.md<TransitionSeries> for scene changes; duration overlaps reduce total length, see references/transitions.md@remotion/google-fonts; measure with @remotion/layout-utils, see references/text.mdimport {
AbsoluteFill,
interpolate,
spring,
useCurrentFrame,
useVideoConfig,
} from "remotion";
export function FadeIn() {
const frame = useCurrentFrame();
const {fps} = useVideoConfig();
const opacity = interpolate(frame, [0, 0.5 * fps], [0, 1], {
extrapolateRight: "clamp",
});
const scale = spring({
frame,
fps,
config: {damping: 200},
});
return (
<AbsoluteFill style={{opacity, transform: `scale(${scale})`}}>
<h1>Hello Remotion</h1>
</AbsoluteFill>
);
}
Math.random() or Date.now() produces different frames across renders; seed via useCurrentFrame() insteaddurationInFrames is configured per-composition; mismatching it with the timeline causes content cut-off or padding<Audio /> inside the composition timeline — playing audio in raw HTML elements desyncs from frame ticks<Series /> re-mount per segment — extract stable computation outside or memoize per-frameGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Resolves in-progress git merge or rebase conflicts by analyzing history, understanding intent, and preserving both changes where possible. Runs automated checks after resolution.
npx claudepluginhub xonovex/platform --plugin xonovex-skill-remotion