Captions without uploading the recording anywhere
What the Captions tab asks you for before it will start
Open a recording in the studio, go to the Captions tab, and the TRANSCRIPT section has these rows: Engine, Model, Language, Prompt, and a Generate button under them. In Cilevi the speech engine behind them is compiled into the program itself, and the audio of your recording goes to that engine and nowhere else.

Engine is a choice of two. Whisper is the default and does the work described here. Windows is the recogniser built into the operating system, kept because it is instant and needs no download, and it has one hard limit: it only knows the languages installed on that machine. On the machine this was built on, several of the languages we needed had no voice pack available at all, so for those the Windows option is not a fallback. It is not there.
Model is the size of the file the engine loads. Language is the language being spoken, not the language of the interface. Prompt is a box for words the engine is likely to get wrong, which is worth more than it sounds and has its own section below.
Three models, and the one you want is not the biggest
The engine ships with no model inside it, because a model is bigger than the whole program by two orders of magnitude. The Model row offers three, with a tick beside the one in use and the word downloaded beside any that are already on the machine:
- Standard, 264 MB. Fast, and good for English. This is the default.
- Better quality, 574 MB. Slower, and far better on languages other than English.
- Best quality, 1.1 GB. Slowest, and the most accurate on casual or fast speech.
Whichever you pick is downloaded once, into %LOCALAPPDATA%\Cilevi\models, and never again. That path is deliberate: it is the local application folder rather than the roaming one, so on a work laptop with a roaming profile a 1.1 GB model does not follow you around the network every time you sign in.
The download resumes. It is written to a .part file and continued with a Range header, so cancelling it at 6.6 MB and coming back later picks up at 6.6 MB rather than at zero, which we tested by doing exactly that. Before every load the file is hashed with SHA-256 and compared against the hash compiled into the program, which takes about 1 second on the 574 MB model and is the price of knowing that what is about to be loaded is what was published. A file that does not match is deleted rather than used. We checked that by flipping a single byte in a good model and watching it get refused.
One model file covers 99 languages. There is no German download and no Japanese download, which means you cannot save space by fetching only the language you speak. The only choice is the size.
How long it takes, on a machine we can name
Measured on 6 September 2026, on a desktop with an i9-13900K and 24 physical cores, over 216 seconds of English narration. For every 15 minutes of recording you ask it to transcribe:
- Standard, the 264 MB model: 1.4 minutes.
- Better quality, the 574 MB model: 5.9 to 6.2 minutes.
So a 15 minute walkthrough is done in under 2 minutes on the small model, and you go and make coffee for the middle one. An hour of recording on Better quality is about 24 minutes of waiting.
The same 2 models on 180 seconds of a second language came in at 1.7 minutes and 4.8 to 5.0 minutes. Note that the order flips: the middle model is faster on that language than on English, because speed follows the number of tokens the model writes per second of audio and that differs from language to language.
Best quality has no English figure here, because it was measured on that second language sample and nobody has run the English one since. There it took 7.2 minutes per 15 minutes, against 4.8 to 5.0 for Better quality on the same audio, so it costs about half as long again for the accuracy it buys on unscripted speech.
Those figures are from a 24 core desktop. A thin laptop will be slower, and there is no figure here for one because nobody has measured it yet.
Two things about the numbers are worth knowing before you compare them with your own. Short clips look far worse than long ones: 28 seconds of audio on the largest model read as 8.7 minutes per 15 minutes, because loading the model and processing the first window is a fixed cost that a short clip has nothing to spread over. And running the voice clean up and the levelling before generating captions buys nothing, because the engine normalises the level itself. Skip it. Clean up the voice because you want the exported audio to sound better, not to help the transcript.
Where the small model stops being good enough
Standard is the default because most of the people using this work in English, and on English it is fine. On a language with far less of it in the training data, it is not.
On that 180 second sample in the second language, Standard mangled a word in nearly every line, writing spellings that are not words at all. Better quality fixed nearly all of it, matching a separate reference transcript line for line. That is a big enough gap that for any language with a small share of the training data, Standard is the wrong choice and the extra 310 MB is not optional.
This is the trade-off the row exists for. You are choosing between roughly 3 times faster and noticeably fewer wrong words, and the right answer changes with the language you are speaking.
The Prompt box, and a brand name that took three tries
Speech models get proper nouns wrong. Ours is called Cilevi, and the small model wrote "Kailevye". Typing Cilevi into the Prompt box fixed it: 7 runs out of 7 came back spelled correctly.
Then the honest half. The same box does not always rescue the larger model: with and without the prompt, Better quality wrote "Kilevi" in 8 runs out of 8. On a brand name in the second language it went the other way round, and the large model with the prompt got the spelling right 3 times out of 3 where it had been wrong 3 times out of 3 without it. So the prompt is worth typing, always, and it is not a guarantee. If a name matters to you, read it in the transcript before you export.
The language row we got wrong ourselves
We left Language on Auto during a test, generated a transcript, and got back text in a language nobody had named. There had been a note under the row for months telling people to set it. Notes do not fix forgetting.
So the row changed in four ways, and every one of them is structural rather than another sentence of advice. The choice you make is remembered on that machine, so the next project starts from your last explicit answer instead of from nothing. The Generate button now carries the language in its own label, reading Generate transcript (German) or (Auto), because the row that sets the language sits 4 rows above the button and the failure was never not knowing, it was reaching the button without having looked. When a transcript is made on Auto the engine's own answer is written into the project and the row then reads Auto (German), so a project always says what it actually did. And while the language is still unset and no transcript exists, a soft halo breathes around the control until you deal with it.

Auto is good on clean audio. It named both of our test samples correctly. The language picker exists because a short or noisy one gets read as a neighbouring language instead, and 20 seconds of someone clearing their throat is not much for a detector to work with.
Renting this from the cloud would be faster and cheaper
Prices checked on 6 September 2026. Renting the same model by the hour is cheap: Groq runs large-v3-turbo at 0.04 dollars an hour and between 217 and 228 times real time, which puts a 15 minute recording at about 1 cent and somewhere near 4 seconds of waiting, and OpenAI charges 0.36 an hour for the same job, which still only comes to about 9 cents. Compare that with 4.8 minutes on the desktop here. Cost was never the obstacle.
Two things were. The first is that a normal person recording a product demo will not go and get an API key, so the honest default has to be the one that works with no account. The second is the claim at the top of this post: the privacy policy says audio does not leave your machine, and shipping a cloud transcriber as the default would have made that sentence false.
There is also a practical trap waiting for anyone who does take the cloud route, and it is worth writing down. The newer transcription models return plain text with no timestamps at all, and timestamps are what caption lines are made of. Only the older endpoint gives word level timing. Upload caps bite too: 25 MB is roughly 13 minutes of 16 kHz mono audio.
What it will not do
There is no GPU acceleration. The GPU backend for this engine is a 67 MB library on its own, which is 18 times the size of the entire program, and carrying that so a transcript can finish faster was not a trade we were willing to make. It runs on the CPU, on as many physical cores as the machine has.
It also needs a CPU with AVX2, which means roughly 2013 and later. An older one gets a sentence explaining the problem instead of a crash, which is the least we could do, but it still means no captions on that machine.
Word timings come from an alignment pass, and if any word in the transcript comes back without one the whole run fails with "The engine could not time the words". That looks unhelpful and it is deliberate. Captions with missing timings drift out of sync with the speech a few lines later, and a transcript that refuses is better than one that quietly lies. It has not fired on a real recording yet.
Try it on your worst audio, not your best
Record 2 minutes of yourself talking the way you actually talk, with the noise your room actually has. Set Language before you press Generate rather than after. Start on Standard, read the transcript, and if the words that matter are wrong, switch to Better quality and generate again: the model downloads once and the second run costs you only the extra minutes in the table.
If it gets a language badly wrong, that is worth telling us on the feedback board, because a failing sample in a language we do not speak is hard to come by. If you want the longer story of why this is a native Windows program at all, why we built Cilevi covers it.
Comments 0
Nobody has said anything yet.