Skip to content

Capra 0.2.3

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Aug 11:30

Windows and Linux. Quick start · Models

Windows Capra-0.2.3-setup.exe
Linux Capra-0.2.3.AppImagechmod +x and run it

The Audio role now reaches something

Settings has offered four model roles since the beginning. Two of them were connected to anything. Transcription went to the bundled Whisper unconditionally, so a model added under Audio was stored, listed, and never asked for a thing.

It could not even be added. Adding a model probes it, probing sent a chat request, and a transcription endpoint answers that with a 404 that reads like a wrong model name. Probing is by role now, and an Audio model is verified by sending it a second of generated audio — the same way vision has always been verified with a generated image.

Add whisper-1, gpt-4o-transcribe, or a local faster-whisper server, and the dialogue is transcribed there. Without one, the Whisper in the box is still used, and the log says which one heard the film — that decides how good the dialogue is, and it should not have to be inferred from the result.

Only for films with no subtitles. A project with an .srt beside it never transcribes at all.

Cutting a feature up, and putting the timings back

The request was the easy half. A transcription endpoint takes a file with a size limit — usually 25 MB, and Capra's 16 kHz mono audio is 32 kB a second, so anything over about thirteen minutes has to be split.

That is the part that is silently wrong when it is wrong: a transcript whose timings are all ten minutes early still looks exactly like a transcript.

  • Chunks are consecutive and never overlap, so every second belongs to exactly one request.
  • The cut moves to the quietest moment within fifteen seconds of where it wanted to be, found by reading the samples already on disk. A cut through a word costs that word twice and neither half is a word.
  • A chunk that fails does not fail the film, and the log names the minutes that have no dialogue. That is a fact about the screenplay; quietly having fewer lines is not.
  • The tail of what was heard is carried forward as a spelling hint, or a character called Karahanlı comes back four ways across four chunks.
  • Segments timestamped past the end of their own audio are dropped. Whisper-family models hallucinate a closing caption there, and left in it lands on top of the next chunk's real dialogue.

If nothing comes back it says so, rather than quietly using the local model instead. The substitution would be the kind thing to do and the wrong one — you chose a model, and a silent fallback means the next film transcribes differently for reasons nobody can see.

The Embedding role stays unwired, and now says so

Its description claimed search and character matching. Neither was true: only body and face vectors are ever written, both from the local appearance signature that is required to work with no model at all, and search is full-text. An OpenAI-compatible /v1/embeddings endpoint takes text, and Capra writes no text vector anywhere — so connecting it would mean building semantic search, which is a feature rather than a missing wire.

It is better to say that than to leave somebody configuring a model that nothing will ask for.

Notes

  • No macOS build. An unsigned, unnotarised .dmg is refused on arrival by recent macOS. npm run dist on a Mac produces a working local build.
  • Neither binary is code-signed, so Windows SmartScreen will warn on first run: More info → Run anyway.
  • Your API keys are encrypted with the operating system's own keystore and never leave the main process.