Whisper, natively

Whisper subtitles on your Mac, without the terminal.

whisper.cpp with Metal acceleration, Large v3 Turbo, Silero VAD and word timing measured at about 3 ms — wrapped in an editor, so the three words it mishears take ten seconds to fix instead of ten minutes.

Get the Mac app — $3.99 Try it free in your browser
Whisper without the terminal

The good part of Whisper, minus the setup.

If you have already run whisper.cpp from a shell, you know it produces a usable transcript and a fairly unusable subtitle file.

Whisper is very good at hearing words and fairly indifferent about when they were said. Run it from the command line and you get an SRT with sensible sentences and timings that drift at phrase boundaries — close enough for a transcript, visibly late for a caption that is meant to land on the beat.

suubbs runs the same engine and then does the work afterwards that the CLI leaves to you: it aligns word boundaries against the audio, segments lines against real reading-speed rules, and gives you somewhere to fix the three words it got wrong without hand-editing timestamps in a text file.

Words are the source of truth

This is the design decision everything else rests on. A cue's text is always derived from its words and never stored beside them. That is what makes word-level highlighting, retiming, and re-segmenting with a better model while keeping your edits possible at all. Most subtitle tools store the line and throw the word timings away, which is why re-segmenting in them means starting over.

Against the command line

What you give up by running Whisper yourself.

Nothing here is impossible with the CLI. It is a question of how many evenings you want to spend on it.

  whisper.cpp by hand suubbs
SetupHomebrew, a compiler, ffmpeg, model files fetched by handDrag one app to Applications
Audio extractionAn ffmpeg incantation per fileDemuxed and decoded in-process
Word timingRaw DTW output, late at phrase boundariesDTW snapped onto real amplitude edges, about 3 ms
Fixing a wrong wordReopen the SRT in a text editor and re-count timestampsClick the word, type, timings hold
Re-segmenting linesRerun with different flags and hopeWords are the source of truth, so lines re-flow without losing edits
StylingHand-write ASS override tagsLive preview that matches what libass renders
CostFree$3.99 once
Under the hood

For people who will ask.

The engine, the models, and the honest limits.

Which Whisper model does it use?

Large v3 Turbo by default on the Mac app — 574 MB, downloaded once on first launch. The browser version starts with a 78 MB model, which is why its transcripts are rougher.

Is it whisper.cpp or the Python version?

whisper.cpp, with Metal acceleration, wrapped by a Rust core. There is no Python runtime anywhere in the app.

How accurate is the word timing?

About 3 ms against known speech onsets on the desktop build. Cross-attention alignment gives the initial boundaries and an acoustic pass snaps them onto genuine amplitude dips. Inside continuous speech, where no pause exists, it deliberately leaves the boundary alone rather than inventing one.

Can I bias it toward names and jargon?

Yes, on the Mac app. Give it the proper nouns before you start and the transcript uses your spelling instead of guessing. The browser build cannot do this — Transformers.js declares the prompt parameter but never consumes it.

Does it do voice activity detection?

Silero VAD runs in front of the model on the desktop build, which is what stops long silences being transcribed as hallucinated speech.

Which languages?

Sixteen, detected automatically: English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, Russian, Japanese, Korean, Chinese, Hindi, Arabic, Turkish and Ukrainian. Any of them can also be translated into English.

Keep reading

Related

Same engine. Someone else did the plumbing.

[no homebrew required]