AGENTS.md · git:20261104.4395459 · 2026-11-04 · sha256 661af540f01ebba7

AGENTS.md git:20261104.4395459A

Immutable. This exact content never changes and is served at /api/v1/blob/661af540f01ebba7.

# AGENTS.md

Instructions for any coding agent working here (Claude Code, Codex, GitHub Copilot). `CLAUDE.md` only imports
this file; keep everything shared here.

**Reel Studio**: a brand-agnostic kit for making marketing videos, reels, ads and posts with code. One deterministic
renderer, several engines plugged into one clock, one folder per brand, one folder per production.

## Where to look

| Question | Read |
|---|---|
| Making a video, reel, ad or post | `.agents/skills/make-video` (the whole path), then the brand folder |
| The look (art direction) of a piece: cyberpunk, toon 3D, photoreal, editorial… | `looks/README.md`, `node scripts/looks.mjs <brand>` |
| Which engine for a look | `.agents/skills/pick-engine` and `engines/README.md` |
| 3D (Three.js, Blender) | `.agents/skills/scene-3d` |
| A cartoon character or mascot | `.agents/skills/character-2d` |
| Recording a brand's live website | `.agents/skills/capture-site` |
| A new brand | `.agents/skills/new-brand` |
| *Optional:* the person reviews in the desk (frame notes, approvals) | `.agents/skills/review-desk`, `desk/README.md` |
| Render, audio and QA commands | `core/README.md` |
| What is in progress, decided, learned | `STATUS.md` |

| Path | What |
|---|---|
| `core/` | `render.mjs` (HTML → MP4/PNG), `lib/runtime.js` (the `Studio` clock), `lib/base.css` (stage, safe zones). `npm install` here once |
| `looks/` | Art directions (neon-noir, toon-3d, photoreal, editorial, kinetic-type, retro-film, paper-collage): README, `look.css`, a working `starter.html`; `fx.js` for grain, glitch, scanlines… |
| `engines/` | One adapter per engine: `three.js`, `pixi.js`, `svg-rig.js`, `capture.mjs`, `blender/` |
| `.agents/skills/` | The skills (SKILL.md). Codex and Copilot read them here; `.claude/skills` is a symlink to it |
| `desk/` | *Optional* local review app: player, frame notes, renders, approvals, "Send to agent"; `reel-desk` MCP server (not registered by default). Nothing else depends on it |
| `scripts/` | Audio mix, transcription, video QA, frame extraction, SVG → PNG |
| `brands/<slug>/` | Identity: facts and their sources, colours and fonts (`tokens.css`), `assets/`, voice, *Look range*, `compliance.md` |
| `productions/<brand>/<ID>-<slug>/` | One piece: README (storyboard → explainer), `refs/`, `composition/`, `audio/`, `qa/`, `export/` |
| `examples/engines-demo/` | A 6 s reel using every tested engine; rebuild it to check a machine |
| `examples/reel-layer/` | 8 s reel for captions, beat cuts, transitions and the four formats |

## Golden rules

1. Read `STATUS.md` before starting and update it before finishing.
2. Brief → storyboard → **approval** → production → **frame-by-frame QA** → delivery. No production before approval.
3. Never invent product facts, numbers or testimonials. Every claim traces to a source listed in the brand's README.
   Never copy competitor copy.
4. Every piece passes its brand's `compliance.md`. Brands never borrow each other's identity, facts or voice.
   Looks (`looks/`) are shared art directions: pick one per piece, and don't let a brand's pieces all look alike.
5. Every frame is a pure function of `t` (rules in `engines/README.md`). If two renders of a frame differ, it is a bug.

## Related repos (read-only, for facts)

- `../marketing-reels-skill`: the Yuppo-only kit this grew from (Yuppo brand kit, research, productions).
- `../bikelog`: Bike Logger; its live page was captured for the first `capture-site` reel.

## Checks

```sh
node --check core/render.mjs engines/capture.mjs
node core/render.mjs still examples/engines-demo/index.html /tmp/a.png --t 4.6
node core/render.mjs still examples/engines-demo/index.html /tmp/b.png --t 4.6 && md5 -q /tmp/a.png /tmp/b.png
```
(The demo needs its Blender plate first: see `examples/engines-demo/README.md`.)