templates/videos/.agents/skills/animation-tracks/SKILL.md
Track-based animation system. AnimationTrack, AnimatedProp types, findTrack/trackProgress/getPropValue helpers. Read before editing animations.
npx skillsauth add BuilderIO/agent-native animation-tracksInstall 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.
Every visual animation in the studio is controlled by tracks. Tracks are the interface between the timeline UI and the composition code.
app/types.ts)interface AnimationTrack {
id: string; // Unique, stable (e.g. "lr-ring"). Used by findTrack().
label: string; // Display name in the timeline
startFrame: number;
endFrame: number;
easing: EasingKey; // "linear" | "ease-in" | "ease-out" | "ease-in-out" | "spring"
animatedProps?: AnimatedProp[];
}
interface AnimatedProp {
property: string; // e.g. "opacity", "translateY"
from: string; // Start value as string
to: string; // End value as string
unit: string; // CSS unit: "px", "deg", "" (none)
description?: string; // Plain-English explanation
codeSnippet?: string; // Read-only source shown in Properties panel
programmatic?: boolean; // true -> no editable from/to
parameters?: Array<{ // Adjustable params for programmatic animations
name: string;
label: string;
default: number;
min?: number;
max?: number;
step?: number;
}>;
parameterValues?: Record<string, number>;
}
app/remotion/trackAnimation.ts)// Returns 0->1 progress for the track at the given frame
trackProgress(frame, fps, track): number
// Interpolates from->to based on progress for a named property
getPropValue(progress, track, property, defaultFrom, defaultTo): number
// Finds a track by id; returns fallback if not found
findTrack(tracks, id, fallback): AnimationTrack
For animations with clear start/end: spring animations, fades, movements.
For instant state changes: tab switches, modal opens. Rendered as diamond markers in the timeline.
{
id: "switch-tab",
label: "Switch Tab",
startFrame: 60,
endFrame: 60, // Same = keyframe diamond
easing: "linear",
}
Usage: const activeTab = frame >= switchTrack.startFrame ? "B" : "A";
For complex effects that can't be a simple from->to:
AnimatedProp with programmatic: true or a codeSnippetdescription in plain Englishparameters for user adjustmentEven with programmatic animations, always support common animated properties (scale, opacity, translateX, translateY, rotation) via getPropValue() so users can layer standard animations on top.
codeSnippet and description when you change programmatic animation logiccodeSnippet or programmatic: true) show a purple fx badgetools
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.