How to transcribe footage locally without uploading it to the cloud

StoryFolder —

Part of: How to search footage by what's in it and what's said

Last updated: 2 September 2026.

The interview is on your machine, it is 200GB of ProRes, and the release has not happened yet. Uploading it to a transcription service is not a neutral step, and waiting overnight for the upload is not neutral either. StoryFolder transcribes on the machine the footage is already on: it runs Whisper locally, and it separates speakers locally too. The audio is not uploaded to be transcribed.

That is a workflow fact, not a security guarantee, and the difference matters if somebody is going to ask you about it. StoryFolder is not certified against any standard, it makes no compliance claim, and two things nearby do talk to the internet: licence activation, and AI Autofill, which sends frames to StoryFolder's central server for a vision model to look at. The local claim covers transcription and speaker detection.

New in 0.4. Local transcription, speaker identification and the transcript and subtitle exports are all new, and all free. Everything else in the release.

Where does the audio actually go when you transcribe?

Nowhere. StoryFolder runs Whisper as a process on your own computer, on audio it pulled from the file already sitting on your drive, and speaker detection runs the same way, with no Python, no PyTorch and no GPU requirement. Nothing about the audio is sent anywhere to be transcribed, and no third-party transcription account is involved in the job.

That has a practical consequence people notice before they notice the privacy one. There is no upload wait. A two-hour interview starts transcribing at the speed your machine can chew through it rather than at the speed of your office's upload. It also means the job does not fail because a hotel wifi dropped at 60%.

The engine is whisper.cpp. The transcript you get is Whisper's, with Whisper's strengths and its documented weaknesses, and none of that changes because it ran locally.

What has to be downloaded before offline transcription works?

One thing has to happen online first: StoryFolder fetches the engine binaries and a language model. After that, transcription needs nothing from the network.

There are eight models, in English-only and multilingual pairs: tiny.en, tiny, base.en, base, small.en, small, medium.en and medium. The app shows them as 77 MB for a Tiny model, 147 MB for Base, 487 MB for Small and 1.5 GB for Medium, and the English-only and multilingual builds of a size are the same download. The default is small, the multilingual one, chosen as the point where multilingual becomes usable across languages rather than only in English. If everything you cut is in English, the .en twin of the same size is the better pick; if you are working across languages, stay multilingual.

Each model has its own controls. Download shows a live percentage and can be cancelled. Verify re-hashes the file on disk on demand. Offload deletes it, and there is an offload-all if you want the disk back. A model only counts as installed once the whole file has arrived intact, so an interrupted download resumes rather than leaving you with a broken model you find out about mid-job.

Two more assets come down the same way. Voice-activity detection lets Whisper skip the stretches with no speech in them, which is most of what makes a music-only file behave. The diarization pair is a segmentation model plus a speaker-embedding model, chosen so the speaker side is multilingual to match a multilingual transcriber.

Signed and notarised engine builds are published for macOS on Apple silicon, macOS on Intel, and Windows x64. There is no Linux build.

How do you transcribe a client video locally?

It starts on its own. Automatic transcription is on out of the box, and a video is queued for transcription as a separate job once its import reaches Complete, so a normal drop needs nothing from you. The switch is in Settings → Transcription, and the steps below are what you do when you want to run one deliberately: a re-transcribe, a language override, or a file you turned the automatic pass off for.

  1. Import the local .mov or .mp4. It stays where it is.
  2. Open the video's Transcript.
  3. Install a model if you have not already. small is the default and a good first choice.
  4. Hit Transcribe.
  5. Set the run's options if this file needs them. The confirmation offers language and task, and under Advanced, the model, speaker detection and voice-activity detection. Those apply to this run only and leave your global preference alone.
  6. Watch the status. It names the phase you are in rather than showing one spinner for the whole job, so you can see whether it is fetching a model, pulling the audio out, transcribing or detecting speakers. A run that has stalled reports differently from one that has failed, because the two need different responses from you.
  7. Read it and fix what matters. Each line can be copied, edited, reverted to what the model originally wrote, or, where its timings can still be trusted, re-aligned so they are re-measured from the audio.

A file with music and no speech comes back as no-speech, with the heading "No speech found in this video". That is a result about the audio, not a failure of the run.

Which languages and output formats are available?

The catalogue holds exactly 100 languages plus auto-detect, and there is a translate-to-English task alongside plain transcription. Translation needs a multilingual model; the .en models refuse it, which is the correct behaviour and an annoying surprise if you did not know.

You read it in whichever of the transcript's reading modes suits the pass you are on, and it exports as SRT, WebVTT, plain text, CSV or Fountain, none of which are behind a plan. The CSV is the one worth knowing about: it carries start, end, shot number, speaker and text, so the file already knows which picture each line belongs to. Fountain emits character cues. SRT and VTT carry speaker labels once there is more than one speaker, and a single-speaker transcript prints no names anywhere.

What does running it locally not promise?

Accuracy. Whisper degrades on heavy accents, on people talking over each other, on noisy location sound, and on the specialist vocabulary of whatever industry your client is in. Product names and surnames are where you will notice it first.

StoryFolder's answer to that is a dotted underline under words the model was unsure about, and no number anywhere. Whisper's own confidence is not calibrated well enough to print as a percentage, so printing one would be a false precision that makes people trust the wrong lines. The underlining is a Display toggle and it is off until you turn it on, which is worth knowing because otherwise you will not see it and will assume there is nothing to check.

Two smaller ones. Cancelling during the diarizing phase is not instant, because the diarizer cannot be killed part-way and has to finish the pass. And a transcript is not a compliance artefact: running the model locally is a fact about where the bytes went, and if your client needs an attestation, that is a conversation with a lawyer rather than a feature.

Which nearby features still use the cloud?

Two features, and one thing the app does in the background. All three are worth naming in the same breath as the local claim, so nobody reads "local" as an app-wide promise.

AI Autofill posts shot frames to StoryFolder's central server, which calls a third-party vision model. It is the picture half of the index and it is the opposite of the transcription story in every respect that matters here, including that it is on the Pro plan. Licence activation talks to StoryFolder's server too, and the live plan comes back from there.

Transcription and speaker detection run on your machine, Autofill is the step that sends anything out, and every field's Autofill switch ships off. The app also reports usage back to StoryFolder's server the way desktop software generally does — counts and identifiers, never a title, a filename or a path.

FAQ

Which engine does the transcription? whisper.cpp, run as a process on your own machine. The audio is not uploaded to be transcribed.

Does speaker detection run locally too? Yes. Speaker detection runs natively on your own machine, with no Python, no PyTorch and no GPU requirement.

How many models can I choose from? Eight, in English-only and multilingual pairs, from 77 MB Tiny variants to 1.5 GB Medium variants. The default is small, multilingual.

Do I need an internet connection? Once, to fetch the engine and a model, and by default that happens at startup rather than the first time you transcribe. After that transcription runs with the network off.

How many languages does it cover? Exactly 100, plus auto-detect. Translate-to-English needs a multilingual model, since .en models refuse the translate task.

Does AI Autofill run locally as well? No. Autofill sends frames to StoryFolder's central server. On-device is a transcription and diarization fact only.

Is transcription behind a paywall? No. Transcription and its SRT, WebVTT, TXT, CSV and Fountain exports are free.

Is there a Linux build? No. Engines are published for macOS on Apple silicon, macOS on Intel, and Windows x64.

← All articles