Skip to content

Repository files navigation

Capra

Takes a film apart — shots, scenes, cast, dialogue, sound — and writes back a screenplay you can trace, line by line, to the frame it came from.

CI License: MIT

Download · Website · Docs

Capra: the film, the beats beside it, the timeline underneath

What it does

Every page is a view onto one analysis — the timeline, the playhead and the selection are shared, so following something from a line of the script to the second it came from is one click in any direction.

Film

The film, the beats and dialogue beside it as they happen, and every track of the analysis underneath. Speech reads at full weight and what the camera saw a step back from it, so you can follow one without reading the other.

Capra's Film page

Cast

Everyone Capra found, named first, with the frames each of them was found in. Principals, supporting parts and extras are told apart automatically — nobody is ever asked to name a passer-by. Drag one card onto another to say they are the same person.

Capra's Cast page

Questions

What Capra could not settle, asked beside the moment it is about, with the film playing. Every answer changes the script: a merge collapses two cards everywhere, an attribution rewrites the character cue on the page. It learns where your line falls and stops asking about pairs you have already refused.

Capra's Questions page

Script

The screenplay on paper, with the film beside it. Click any line and it plays the seconds it came from. Edit anything — what you write survives every rewrite — and the rail in the margin says how much of each line Capra stands behind.

Capra's Script page

Relationships

Who deals with whom, drawn as faces with the weight of the claim between them. Click a relationship and the seconds it rests on play beside it, because an edge saying two people fight is a reading of a few seconds of footage.

Capra's Relationships page

Production

What each scene needs before you could shoot it: cast, wardrobe, props, lighting, camera, sound, and its length in eighths of a page. Exports tab-separated for a scheduling tool. VFX and SFX are reported empty rather than guessed at.

Capra's Production page

Exports: PDF, Final Draft (.fdx), Fountain, DOCX, SRT, plain text, plus the production sheet and a director's breakdown.


Quick start

1. Installdownload the latest release, or build it yourself:

npm install
npm run dev          # run it
npm run dist         # build an installer

2. Install ffmpeg. Capra will not run without it.

winget install ffmpeg      # Windows
brew install ffmpeg        # macOS
sudo apt install ffmpeg    # Debian/Ubuntu

3. Give it a model. Settings → add a provider. Capra speaks the OpenAI protocol, so almost anything works.

Local — free, private, slower

Install LM Studio or Ollama, load a vision model, and press Find local servers in Settings.

Role What to load Notes
Vision qwen2.5-vl-7b ~6 GB VRAM. What this project was developed against.
gemma-3-12b-it Better on text in the frame, needs more room.
Text any 8–27B instruct model Optional. Without one, Capra assembles the script from what it measured.

One caveat worth knowing: a 7B vision model and a 27B text model will not both fit on a 12 GB card. Load the vision model and let it do both roles, or point the text role at a cloud provider.

Cloud — faster, costs money

Settings → Add Google Gemini / Add OpenAI / Add OpenRouter, paste the key, pick a model. The URL is filled in for you.

Your key is encrypted with the operating system's own keystore — DPAPI on Windows, Keychain on macOS — and never leaves the main process.

Vision against a cloud provider is the single biggest speed-up available: those calls are latency rather than compute, so they overlap. A pass that takes forty minutes locally takes a few minutes remotely.

4. Open a video and watch it work. The analysis runs in stages and you can read the screenplay while it is still being written.


How it thinks

Three layers, kept strictly apart, because conflating them is how a tool like this starts producing confident nonsense.

  • Raw media — the file and its measurable properties. 23.976 fps, 3840×2160, H.265
  • Observation — something Capra can point at, with a timecode. at 00:12:31 a person is at the door
  • Interpretation — what was concluded from that. "Ahmet opens the door." — inferred, 78%

Observations are append-only and never rewritten by a model. An inference is never shown as an observation: the distinction is carried in the typography rather than in badges — observed text is set solid, inferred text takes a hairline underline, a guess a dotted one.

Your edits are authoritative. Regenerating rebuilds everything except what you wrote.

The cast, with the frames each person was found in


Contributing

Issues and pull requests are welcome. A few things that will make yours land faster:

Before you open a PR

npm run typecheck && npm run test:unit

Both must pass. CI runs exactly these.

What a good PR looks like here

  • One thing. A change that fixes a bug and tidies four files is two pull requests.
  • A test that fails without your change. Then check it: break the fix again and watch the test go red. A test that passes either way is worse than none.
  • Say why in the code, not only in the PR. This codebase explains its reasoning in comments — what went wrong, what was measured, why the number is that number. Match it. A comment that only restates the line above it is noise; one that says what happens if you get it wrong is worth ten.
  • Measure claims about behaviour. "This is faster" is a question, not a statement. Run it and put the figure in the message.
  • Never invent output. If Capra cannot tell, it says so. A confident wrong answer is the one failure mode this project treats as unacceptable.

Where things are

src/main/      the Electron main process — pipeline, database, IPC
src/renderer/  the interface
src/shared/    types and logic both processes need
tests/unit/    fast, no model, no ffmpeg — these run in CI
tests/integration/  talks to a real model server, skips itself when there is none

Licence

MIT. Courier Prime and IBM Plex are bundled under the SIL Open Font Licence. FFmpeg is not bundled — Capra uses whatever is on your PATH.


Built by Emre Yavuz

About

Turn videos and films into professional screenplays using AI-powered visual and temporal analysis.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages