templates/videos/.agents/skills/composition-management/SKILL.md
How to create and register compositions. The registry pattern, CompositionEntry type, track system. Read before adding or modifying compositions.
npx skillsauth add BuilderIO/agent-native composition-managementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Compositions are the core unit of the animation studio. Each composition is a Remotion component registered in the central registry.
app/remotion/registry.ts)The compositions array is the single source of truth. Each entry:
type CompositionEntry = {
id: string; // URL slug: "logo-reveal" -> /c/logo-reveal
title: string;
description: string;
component: React.FC<any>;
durationInFrames: number;
fps: number;
width: number;
height: number;
defaultProps: Record<string, any>; // Editable in PropsEditor
tracks: AnimationTrack[]; // Default track data
};
Important: defaultProps is shown in PropsEditor as editable fields. Do NOT include tracks in defaultProps -- tracks are passed separately.
app/remotion/compositions/MyComp.tsxapp/remotion/compositions/index.tsCompositionEntry to the compositions array in registry.tstracks with meaningful IDs, labels, frame ranges, and animatedPropsimport { AbsoluteFill, useCurrentFrame, useVideoConfig } from "remotion";
import type { AnimationTrack } from "@/types";
import { trackProgress, getPropValue, findTrack } from "../trackAnimation";
const FALLBACK_TRACKS: AnimationTrack[] = [
{
id: "mc-intro",
label: "Intro",
startFrame: 0,
endFrame: 30,
easing: "spring",
animatedProps: [
{ property: "opacity", from: "0", to: "1", unit: "" },
],
},
];
export const MyComp: React.FC<{ tracks?: AnimationTrack[] }> = ({
tracks = FALLBACK_TRACKS,
}) => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
const introTrack = findTrack(tracks, "mc-intro", FALLBACK_TRACKS[0]);
const p = trackProgress(frame, fps, introTrack);
const opacity = getPropValue(p, introTrack, "opacity", 0, 1);
return (
<AbsoluteFill>
<div style={{ opacity }}>Content</div>
</AbsoluteFill>
);
};
FALLBACK_TRACKS in the component filefindTrack() / trackProgress() / getPropValue() -- never hardcode valuespnpm typecheck after changespnpm action create-composition --id "my-comp" --title "My Composition"
This scaffolds the component file, exports, and registry entry.
tools
Public booking flow — the state machine, animations, and URL/app-state sync.
tools
Trigger-based automations — reminders, follow-ups, webhooks — across the booking lifecycle.
tools
Team event types, round-robin assignment, collective bookings, host weights, and no-show calibration.
development
The pure `computeAvailableSlots` function — inputs, outputs, invariants, and debugging guide.