How it works
The rule everything else follows
Three layers, kept strictly apart. Conflating them is how a tool like this starts producing confident nonsense.
| Layer | What it is | Example |
|---|---|---|
| Raw media | The file and its measurable properties | 23.976 fps · 3840×2160 · H.265 |
| Observation | Something Capra can point at, with a timecode | 00:12:31 — a person is at the door |
| Interpretation | What was concluded from observations | "Ahmet opens the door." — inferred, 78% |
Observations are append-only and never rewritten by a model. Interpretations carry a confidence and an evidence trail. Screenplay text is a third derivation on top and is fully regenerable — your edits survive regeneration, everything else is rebuilt.
The distinction is carried in the typography rather than in badges: observed text is set solid, inferred text takes a hairline underline, a guess takes a dotted one. A page can be read for how much of it is known without reading a single percentage.
The pipeline
Roughly in order, though most of it overlaps — the queue runs what it can as soon as its dependencies are done.
- Proxy — a 720p copy, so scrubbing is instant and every later pass has a cheap
source to seek into.
- Signals — brightness, contrast, saturation and motion, twice a second, for the
whole film. Everything downstream leans on these, and they cost one pass.
- Shot detection — cuts, from those signals rather than from a model.
- Audio — loudness, silence, music and speech regions.
- Subtitles or ASR — the dialogue track, either from your
.srtor transcribed. - Sampling plan — which frames are worth looking at. A vision call is the expensive
thing here, so this decides where the budget goes: shot starts, motion spikes, histogram changes, and a floor so nothing goes unseen for too long.
- Keyframes and detection — the frames extracted, then people and objects found in
them.
- Vision — each sampled frame described. Two thirds of the total time.
- Identity — who is who, across the whole film. Faces where visible, bodies and
clothing where not, and tracks within a shot so somebody turning away stays the same person.
- Camera — how each shot is framed, from the boxes detection produced.
- Scenes — boundaries, from location, time, cast, silence, light and the edit.
- Events — what happens, as beats.
- Screenplay — the pages, in two passes: reconstruct the scene, then format it.
- Continuity, breakdown, quality — the notes a script supervisor and a first AD
would make.
What is stored
Everything, in one SQLite file per project. Observations, detections, embeddings, scenes, events, screenplay elements, every revision you have made, and a cache of every model answer keyed by prompt version.
The cache is why re-running a stage is cheap: change the prompt and only the calls whose prompt changed are made again.
Undo
Every reversible change is journalled — the text before, the text after, what it was and what it applied to. Ctrl-Z takes back the last one; Ctrl-Shift-Z puts it back.
Two things deliberately cannot be undone from the history, and say so where the button would be: merging or splitting a character, and merging or splitting a scene. Their "before" is one half of the result, so writing it back would leave the other half where it was. The inverse of each is an action you already have — split the appearances back off, or merge the two halves together.
The queue
Jobs have dependencies, priorities and idempotency keys, so:
- Closing Capra mid-analysis loses nothing. It picks up where it stopped.
- Re-running a stage does not redo the ones before it.
- A failed step does not take the rest of the film with it — what was measured stands,
and the failure is reported with what it was.