/** * @file footage/schema.ts — Footage-analysis + EDL sidecar data model * (feature-footage-analysis-director, Task 1). * @scope apps/studio/footage/schema.ts * @purpose The single source of truth for the two artifacts the footage * "director" pipeline persists (DDR-115 taxonomy: both VERSIONED, * alongside the footage they describe — same bucket as `.photo.json` * / `.meta.json` / `.annotations.svg`): * * 1. `assets/.footage.json` — a `FootageAnalysis`: what the * `footage-analyst` agent SAW when it watched the keyframes of * one clip (shots, good-moment ranges, tags, a summary). Per-clip. * 2. `/.edl.json` — an `Edl`: what the * `footage-director` agent decided (an ordered beat list — the * cut). Per-project-cut. * * Both are *metadata only* — never pixels, never re-encoded video. * The `/design:reel` codegen reads the `Edl` and emits a * Timeline-parseable `` video-comp TSX (video-comp * SKILL.md is the authoring contract). * * @invariant DEPENDENCY-FREE. Imported by BOTH the server (`footage-store.ts`, * the `/_api/footage` route) and any client/agent surface. MUST NOT * import any browser / native / heavy lib. Pure TS types + plain * helpers + a hand-rolled structural validator (no Ajv) — the exact * house style of `photo/schema.ts`. * * @time-model Footage time is in **SECONDS** (source-relative), NOT frames: an * HTML5 `