# Remocomp A registry of curated, deterministic, broadcast-grade Remotion motion graphics components. Components are copied into your project (shadcn-style), so you own the file and there is no runtime dependency. Every component is frame-driven: no CSS keyframes, no wall-clock time, no unseeded randomness. ## Workflow 1. **Search.** `GET /ai/search?q=&category=&aspect=&maxDuration=&limit=` returns a bare array of `{slug, name, summary, category, fps, durationInFrames, bestFor, avoidWhen, install}`. Default limit 5, maximum 20. `category` is `primitives`, `scenes`, `transitions` or `templates`. `aspect` takes `landscape`, `portrait`, `square` or a ratio like `16:9`. `maxDuration` is in seconds. 2. **Pick.** Read `bestFor` and `avoidWhen` before installing anything. If a hit's `avoidWhen` describes your video, skip it — that rejection is free, fetching the source to find out is not. 3. **Install.** `npx remocomp add `, or `npx remocomp add ` for several. 4. **Set props.** `GET /api/v1/components/` for the props schema and defaults. Pass them as `defaultProps` on the ``. 5. **Do not rewrite the component.** Tune props. Do not edit the spring, the easing or the frame math — that is the reviewed part. `primitives` components are props of other components, not scenes. ## Endpoints - `GET /ai/search?q=` — compact ranked results. Start here. - `GET /ai/components.json` — the full index, with `schemaVersion`, `generatedAt` and an ETag to poll cheaply. - `GET /api/v1/components/` — props schema, defaults, endpoints. - `GET /r/.json` — the source payload. - `POST /api/v1/spec/validate` — validate a whole video spec before rendering. CLI: `npx remocomp search ""`, `npx remocomp find `, `npx remocomp add `. ## Determinism & Technical Laws Motion is a pure function of the frame. All components in this registry adhere to strict frame determinism and broadcast motion standards: - **Single Source of Time:** Derived exclusively from `useCurrentFrame()` and `useVideoConfig()`. - **Strictly Forbidden:** Never `Date.now()`, `setInterval`, `setTimeout`, `requestAnimationFrame`, `Math.random()`, CSS `@keyframes`, or Tailwind `animate-*` / `transition-*` classes. Use `random('seed')` from `remotion`. - **FPS-Agnostic Timing:** Compute keyframes and delays relative to `fps` (e.g., `Math.round(0.45 * fps)`). - **Remotion Primitives:** Always use ``, ``, ``, ``, ``, `