peepshow/ how-to/ transcribe-video-locally

Reel #H-03 MP4 / MOV / MKV → text transcript, fully offline

peepshow how-to / transcribe-video-locally

Transcribe a video locally — no API key, no cloud

peepshow auto-detects whisper.cpp on PATH and uses it for audio transcription on every run. The transcript ships alongside the frames in the JSON manifest. No API keys, no cloud upload — your video bytes never leave the machine.

Steps

  1. Install peepshow + whisper.cpp

    Both are stand-alone CLIs.

    npm install -g peepshow
    brew install whisper-cpp
  2. Run peepshow on the video

    Audio extraction + transcription happen automatically when whisper.cpp is found on PATH.

    peepshow ./meeting.mp4
  3. Read the transcript

    The JSON manifest contains `transcript.text` and per-segment timings.

    peepshow ./meeting.mp4 --emit json | jq '.transcript.text'
  4. Pick a model size

    Default = `base`. Use `large-v3` for accuracy or `tiny.en` for speed.

    PEEPSHOW_WHISPER_MODEL=large-v3 peepshow ./meeting.mp4

Why it works

Whisper-on-cloud (OpenAI Whisper API, AssemblyAI, Deepgram) sends every byte of audio to a third party. For meetings, medical content, legal interviews — that's a privacy non-starter. peepshow + whisper.cpp runs the same model class entirely offline. The cloud providers stay one flag away if you want them.

When it helps

  • Meetings, interviews, depositions where audio shouldn't leave the box.
  • Air-gapped workflows (research labs, regulated industries).
  • High-volume transcription where API costs add up fast.

Pitfalls

  • `whisper.cpp` doesn't ship via npm — install via brew / apt / source.
  • Larger models (`large-v3`) need 4-8GB RAM. `base` works on a laptop.
  • Disable telemetry with `PEEPSHOW_TELEMETRY=0` for a fully offline pipeline.

Works with these LLMs

Pairs with these sinks