A small tool that turns audio into text using OpenAI's Whisper model — running locally on your machine. No accounts, no API keys, no uploads. Free to use, free forever.
Your audio never leaves your computer. There's no server involved.
Once the model is downloaded, no internet needed. Ever.
Built for multi-hour recordings with live progress and streaming writes.
Takes about 5 minutes end-to-end. You'll need Python 3.9+ and a few command-line steps.
These instructions assume Windows — macOS and Linux users, use your platform's package manager for ffmpeg (brew install ffmpeg / apt install ffmpeg) and skip step 1.
Grab it from python.org. On the first installer screen, check "Add python.exe to PATH" before clicking Install.
Verify in a new terminal:
python --version
Needed to decode mp3, m4a, and other common formats.
Windows
winget install Gyan.FFmpeg
macOS
brew install ffmpeg
Linux
sudo apt install ffmpeg
Close and reopen your terminal, then verify:
ffmpeg -version
Either clone with git:
git clone https://github.com/dondadda416/transcribe.git
cd transcribe
or download the zip, unzip it, and open a terminal inside the folder.
From inside the project folder:
pip install -r requirements.txt
This pulls down faster-whisper (a fast local Whisper implementation) and Flask. A few hundred MB total. Takes a couple of minutes.
Two options depending on what you prefer:
Web app (recommended): drag-and-drop UI in your browser.
python app.py
Then open http://localhost:5000 and drop your audio file onto the page.
On Windows you can also just double-click start.bat.
Command line: for scripting or batch jobs.
python transcribe.py recording.m4a --model small
The transcript is written to recording.txt in the same folder.
Depends on your machine and the model. On a typical laptop CPU with the small model,
expect roughly 30–90 minutes per 2-hour recording. The web app shows live progress with an ETA.
If you have an NVIDIA GPU, it can be 5–10x faster (pass --device cuda on the CLI).
Anything ffmpeg can decode — mp3, m4a, wav, flac, ogg, mp4, mov, webm, and many more.
Good enough for most uses. The small model handles conversational English well.
For noisy audio, heavy accents, or non-English languages, try medium or large-v3 for meaningfully better accuracy at the cost of speed and RAM.
Edit MODEL_SIZE at the top of app.py, or pass --model medium on the CLI.
Not currently. The transcript is a single running text without speaker labels. If there's demand I'll add diarization — open an issue on GitHub.
No. The web app runs entirely on your own computer — the server it starts is only reachable at localhost, which is your own machine.
You can verify by disconnecting from the internet after installing; it'll still work.
Open an issue on the GitHub repo with the exact error message and what platform you're on.