whiz transcribe recording.mov

A recording goes in. A transcript that knows who spoke comes out.

Most transcription stops at text. whiz transcribes, works out who spoke when, asks you their names once, grabs the frame that was on screen for every segment, and writes a self-contained HTML transcript — from one command, on your own machine.

Read the source Install
  • local-first · no API keys
  • whisper.cpp · sherpa-onnx · Ollama
  • macOS · Linux
  • MIT
recording.mov · 23:184 speakers detected · 351 segments · 4 frames
Alice Bob Carol Dave 00:12 04:31 09:04 17:40

What the one command does

Six steps you would otherwise run by hand

Give it a video and it turns all of this on by itself — screenshots, speaker detection and the naming prompt. Give it audio and it stays out of the way. Every step is a flag you can turn off.

  1. 01

    Extract

    ffmpeg pulls the audio out of the video container.

  2. 02

    Transcribe

    whisper.cpp, with the best model it can find on your machine.

  3. 03

    Diarize

    sherpa-onnx splits one mono track into Speaker A, B, C.

  4. 04

    Name

    It asks you once, and remembers the voices for next time.

  5. 05

    Capture

    One on-screen frame per segment, into a manifest.

  6. 06

    Write

    A self-contained HTML transcript. No server, no external images.

What lands next to your recording

Plain files, named after the input, openable anywhere: .srt and .json from the transcription, .speakers.srt and .speakers.txt once the names are in, .frames.json for the captures, and the one file you actually send people — .speakers.html, self-contained, images and all.

Changed your mind about the speaker count? whiz merge re-runs only the diarization and the merge against the transcription you already have, from a cached result. No re-transcription.

recording.speakers.html
Alice 00:12

We measured it on the 1,900-mod profile. The merge never repaid the extra pass.

Bob 00:29

Then we kill it. Write it down so nobody re-proposes it in March.

Carol 01:04

The frame at 4:31 shows the old dialog, so the screenshot in the doc is stale.

Voice profiles

Name someone once. whiz knows them in the next recording.

The first time, it asks: who is Speaker B? You type Bob. That answer is not just a find-and-replace — it saves the voice.

Next week's recording with the same people comes out labeled with no flags at all. Profiles merge across recordings and get more accurate as they see more of a voice, and whiz speakers list shows you who it knows.

Nobody else's server ever hears any of it: the embeddings live on your machine, beside the models.

$ whiz transcribe standup.mov
Speakers  4 detectedAlice   181 segments   known voiceBob     152 segments   known voiceCarol    12 segments   known voiceDave      6 segments   new — who is this?

$ whiz speakers list
Alice   14 recordings   profile merged ×3
Bob     11 recordings
Carol    4 recordings

Frames, and what the model does with them

It reads the screen as a timeline, not a pile of screenshots

Every segment gets the frame that was on screen when it was said. That alone makes a screen recording readable — but the analysis goes further when your model can see.

The analyst posture reconciles what is visible with what was said and surfaces the discrepancies: the number on the slide that nobody read out, the dialog that has since been redesigned. Consecutive frames are treated as a sequence, so it can reason about what changed between them instead of describing four unrelated pictures.

It turns itself on when frames exist and the model can take them. No flag.

From an analysis

Discrepancy at 04:31. Carol says the export dialog has three options; the frame shows four, with "CSV (legacy)" added. The doc quoted in the meeting is older than the build on screen.

Long recordings

An hour-long video is not one enormous prompt. A rolling-context map-reduce keeps every call focused on a small, coherent window, so quality holds at the end of the recording — and it costs no extra calls.

Essentials

Every analysis ends with the part you feed back

After the summary, the action items or the implementation plan, whiz appends a dense ## Essentials list: every fact, decision, number and UI detail, written to be read by a model rather than admired by a human.

Hand it to the next whiz analyze and the model starts where the last one finished, instead of re-reading an hour of dialogue. No flag, no second file — it is simply always there.

recording.analysis.md

## Essentials

- Merge pass on the 1,900-mod profile: measured,
  never repaid — dropped (Alice, 00:12)
- Decision: kill it; record so it is not
  re-proposed (Bob, 00:29)
- Export dialog now has 4 options, not 3;
  doc is stale (frame 04:31)
- Open: who owns the migration note

Local by default

Nothing leaves your machine unless you send it somewhere

Transcription runs on whisper.cpp, diarization on sherpa-onnx, analysis on Ollama — all on your hardware, with no account and no API key. Point it at an OpenAI-compatible endpoint if you would rather, but that is a choice you make, not a default you discover.

  • Python 3.11+ and pipx
  • whisper-cli on your PATH, and one ggml model
  • ffmpeg, for video inputs
  • Ollama, only if you want the analysis

It used to do this too

Dictation moved out, and became Mynah

Typing what you say into whatever window has focus grew into its own thing: Mynah, a separate tool with its own hotkey, its own indicator and its own release. Two products, each explicable in a sentence, instead of one that needed two.

Your old settings are not lost: Mynah imports the dictate_* keys from whiz's config on its first run.

Install

One install, then one command per recording

$ pipx install git+https://github.com/ReidenXerx/whiz.git

# the happy path — video
$ whiz transcribe recording.mov

# add the HTML transcript
$ whiz transcribe --outputs srt,html recording.mov

# transcribe and analyse in one go
$ whiz transcribe --analyze recording.mov

# analyse a transcript you already have
$ whiz analyze recording.mov

The rest of the commands

whiz merge re-tunes speakers without re-transcribing · whiz models lists and downloads models · whiz speakers lists, forgets and matches voices · whiz config shows and edits settings · whiz upgrade updates the install.

Every command explains itself with --help, and the terminal output degrades to clean plain text the moment you pipe it somewhere.

Video inputs turn on screenshots, speaker detection and the naming prompt by themselves. Pass --no-screenshots, --no-speakers or --no-name-speakers to opt out.