CAPRA Download GitHub ↗

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.

LayerWhat it isExample
Raw mediaThe file and its measurable properties23.976 fps · 3840×2160 · H.265
ObservationSomething Capra can point at, with a timecode00:12:31 — a person is at the door
InterpretationWhat 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.

  1. Proxy — a 720p copy, so scrubbing is instant and every later pass has a cheap

source to seek into.

  1. Signals — brightness, contrast, saturation and motion, twice a second, for the

whole film. Everything downstream leans on these, and they cost one pass.

  1. Shot detection — cuts, from those signals rather than from a model.
  2. Audio — loudness, silence, music and speech regions.
  3. Subtitles or ASR — the dialogue track, either from your .srt or transcribed.
  4. 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.

  1. Keyframes and detection — the frames extracted, then people and objects found in

them.

  1. Vision — each sampled frame described. Two thirds of the total time.
  2. 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.

  1. Camera — how each shot is framed, from the boxes detection produced.
  2. Scenes — boundaries, from location, time, cast, silence, light and the edit.
  3. Events — what happens, as beats.
  4. Screenplay — the pages, in two passes: reconstruct the scene, then format it.
  5. 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:

and the failure is reported with what it was.