Skip to content
emreyvz edited this page Aug 22, 2026 · 1 revision

Models

Capra speaks the OpenAI protocol and nothing else, which is why almost anything works: LM Studio, Ollama, llama.cpp's server, vLLM, Google, OpenAI, OpenRouter, a company gateway. If it answers POST /chat/completions, it will do.

The four roles

Settings shows which model is filling each, and what happens when nothing is.

Role What it does Without one
Vision Describes individual frames — who is in them, what they are doing, what is in the room. Capra still finds shots, scenes, dialogue and sound, but cannot say what is in the picture. This is the one that matters.
Text Reconstructs scenes and writes the screenplay. Capra assembles the script from what it measured. Readable, and noticeably plainer than a model writing it.
Audio Transcribes speech when you have no subtitle file. Bring an .srt. Subtitles are better than transcription anyway: they carry the writer's own words.
Embedding Search, and matching characters across shots. Search falls back to a substring scan. Character matching leans harder on faces.

Local

Free, private, and slower. Load a model, then press Find local servers in Settings — Capra probes localhost for the usual ports and asks each one what it has.

Model VRAM Notes
qwen2.5-vl-7b ~6 GB What this project was developed against. Good at people and posture.
gemma-3-12b-it ~9 GB Better at text inside the frame — signs, screens, subtitles burned into the picture.
internvl3-8b ~7 GB Strong on objects and layout.

The one thing worth knowing before you start: a 7B vision model and a 27B text model will not both fit on a 12 GB card. Loading the second evicts the first and the analysis stops mid-pass. Either load the vision model and let it take both roles — it is worse at prose and it works — or point the text role at a cloud provider. The two are configured independently for exactly this reason.

Capra probes each model when you add it and records what it actually supports rather than what it claims: whether it accepts images, whether it honours a JSON schema, and how long it took. A model that fails the probe is still usable — the requests simply degrade to plain JSON and then to a prompt instruction.

Cloud

Settings offers three by name, with the URL filled in:

Provider Base URL
Google Gemini https://generativelanguage.googleapis.com/v1beta/openai
OpenAI https://api.openai.com/v1
OpenRouter https://openrouter.ai/api/v1

Anything else: Add provider, and paste the URL yourself. If it already carries a path, Capra leaves it exactly as you typed it; only a bare host gets /v1 appended.

About the key

It is encrypted with the operating system's own keystore — DPAPI on Windows, Keychain on macOS, libsecret where there is one — and never leaves the main process. The renderer is given a reference, never the key itself, and nothing about a request is cached except the model's answer.

If you move a project to another machine the key does not travel with it. Keys live in the application's preferences, never in the project directory, so copying a project folder never carries a credential.

Speed

Two thirds of an analysis is vision calls. On the test film that was 319 of them at a mean of 6.4 seconds — about 34 minutes of model time on one local GPU.

Against a cloud provider those calls are latency rather than compute, so they overlap almost perfectly. The presets ask for six at a time, which is inside the free-tier limits of all three and turns that forty-minute pass into a few minutes. Local providers stay at one, where the GPU is the constraint and more requests only add queueing.

You can change the number per provider in Settings.

Clone this wiki locally