Drag in an audio or video file. Get back a timed, formatted transcript — without it ever leaving your computer.
Download · Screenshots · Features · How it works · Privacy · Docs · Build from source
English ∙
简体中文 ∙
日本語 ∙
한국어 ∙
Deutsch ∙
Español ∙
Français ∙
Português ∙
فارسی
A desktop app that runs OpenAI's Whisper model locally — via
faster-whisper — so transcription
costs nothing per minute, works on a plane, and never uploads your recording to
anyone. Drop a file in and it writes .srt, .vtt, .txt, .json, .docx,
.pdf, .ass and more, right next to the original. It also downloads from any site
yt-dlp supports, labels speakers, batches a queue of jobs, and can turn itself
into a transcription page for the other devices on your network.
No account. No API key. No subscription. Your files stay on your disk.
- 🔒 Runs on your machine — faster-whisper (CTranslate2) by default, plus whisper.cpp and NVIDIA Parakeet
- 📝 14 output formats —
srtvttasstsvtxtjsonlrcmddocxpdf, plus oTranscribe / ELAN / InqScribe / Express Scribe - 🎙️ Live transcription — a microphone or the system audio, transcribed as it happens → docs/LIVE.md
- 🗣️ Speaker labels — offline diarisation, per-word timestamps, time-range clipping
- 🎬 Downloads — any
yt-dlpsite, with optional transcribe-on-finish - 🧹 Adaptive denoise — measures the audio and only cleans it when that helps → docs/DENOISE.md
- 🌐 Local-network mode — turn this machine into a transcription page for your other devices
- 💸 Free and BSD-3 licensed — no per-minute cost, no subscription, no telemetry by default
Grab the latest build from the releases page:
| Asset | Size | Best for |
|---|---|---|
WhisperProject-…-Setup-Standard.exe |
~215 MB | Most people. A normal installer: Start-menu shortcut, upgrades in place over an older version, files visible on disk. |
WhisperProject-…-Portable.zip |
~330 MB | Unzip and run. No installation, no admin rights, happy on a USB stick. |
WhisperProject-…-macOS-*.dmg |
~400 MB | macOS (x64 and arm64 builds are published separately). |
Everything needed is inside — a bundled Python, ffmpeg, ffprobe and
yt-dlp. The only thing fetched later is the speech model itself
(~1–3 GB, once, on first launch); after that the app is fully offline.
Step-by-step walkthrough, including what to click past on Windows SmartScreen: docs/INSTALL.md.
The other four tabs
Transcription Queue — batch jobs with live progress; pause, resume, cancel, re-run or remove any row.
Download Videos — any yt-dlp site: pick a format, clip a time range, pull
subtitles, optionally transcribe as soon as the download finishes.
Video Tiling — play one live stream as a full-screen N×N video wall, optionally across several monitors.
Web / LAN access — one button turns this machine into a transcription page for the phones and PCs on your network.
| Local transcription | Whisper large-v3 by default, plus large-v3-turbo and distil-large-v3.5. Backends: faster_whisper (default), whisper.cpp, NVIDIA Parakeet. |
| Many output formats | srt vtt ass tsv txt json lrc md docx pdf — written next to your input file. |
| Convert transcript | Re-emit an existing transcript into the formats above, or into oTranscribe / ELAN / InqScribe / Express Scribe. Reads .ass / .ssa too. |
| Live transcription | Transcribe a microphone — or whatever this machine is playing — as it happens. Chunks are cut at natural pauses so words are never split in half. |
| Speaker diarisation | Optional "Identify speakers", plus per-word timestamps and time-range clipping. |
| Adaptive denoise | Measures each recording first and only cleans it when the measurement says that helps; verifies its own output and reverts if it removed speech. |
| Last-Result card | File sizes, one-click Open file / Open folder, and an in-app viewer with split-pane click-to-seek playback. |
| Batch queue | Live status for every pending and running job, with Pause / Resume / Cancel / Re-run / Remove always one click away. |
| Downloads | Anything yt-dlp handles, plus Supreme Master TV episode links. Downloads resume rather than restart. |
| Video wall | Tile one live stream as an N×N grid across one or many monitors. |
| Local network mode | A stdlib-only web server so other devices can transcribe through this machine — optional password, off until you start it. |
| Post-processing | Automatic chapters and hallucination detection, both toggleable. |
Keyboard: Ctrl+O browse · Ctrl+Enter transcribe · Esc cancel ·
Ctrl+Q exit.
The Tk GUI runs in the main process. Each transcription job runs in a
long-lived subprocess worker that keeps the Whisper model in memory and talks
back over newline-delimited JSON on stdin/stdout; yt-dlp gets its own
subprocess per download. A per-worker UUID token and a 5-second heartbeat keep
that routing robust against PID recycling and let the GUI detect a wedged
worker instead of hanging with it.
Deeper: docs/ARCHITECTURE.md (prose) · docs/architecture.svg (full diagram) · docs/DECISIONS.md (why things are the way they are).
Every default backend runs on your machine. Nothing is uploaded, no account exists, and the app works with the network unplugged once the model is downloaded.
Important
Two opt-in backends break that guarantee, and both are off unless you go into Advanced → Backend and choose them. Use them only for content you are willing to send to a third party.
cloud_stt— Google Gemini API, authenticated with a free API key you paste. Quickest to set up. → docs/CLOUD_STT.mdgoogle_cloud_stt— full Google Cloud Speech-to-Text, authenticated with a service-account JSON file. 60 free minutes/month, speaker labels, a cheaper batch mode. → docs/CLOUD_STT_GOOGLE.md
The optional update check is likewise notify-only: it asks GitHub whether a
newer release exists, at most once a day, and never downloads or installs
anything by itself. Turn it off with update_check_enabled.
First run — choosing where the model lives
On first launch the app asks where to store the Whisper model files. The
default is a private per-user cache that is always writable —
%LOCALAPPDATA%\WhisperProject\Cache\models — never the Program Files install
directory. Pick anywhere you like instead: an external drive, a network share.
The choice is saved to %LOCALAPPDATA%\WhisperProject\config.json under
hub_folder, and the dialog never appears again. To start over:
WhisperProject.exe --safe-modeThat moves the user config aside and re-fires the first-run dialog with the defaults.
Configuration keys
User settings live at %LOCALAPPDATA%\WhisperProject\config.json.
| Key | What it controls |
|---|---|
hub_folder |
Where Whisper model files are stored (set by the first-run dialog) |
model_path |
Per-model override; derived from hub_folder + model.name when unset |
whisper_model |
large-v3 (default), large-v3-turbo, distil-large-v3.5 |
transcribe_backend |
faster_whisper (default), whisper_cpp, parakeet, cloud_stt, google_cloud_stt |
auto_chapters_enabled, hallucination_detect_enabled |
Post-process toggles |
update_check_enabled |
Opt-in GitHub update check (on by default; notify-only) |
last_update_check |
ISO date of the last check (once-per-day throttle) |
Full reference: docs/CONFIG.md.
Updating to a newer version
No uninstall needed. The Standard installer uses a stable application ID,
so you just download the newer …-Setup-Standard.exe and run it — it upgrades
over the existing install and keeps your shortcut and settings. The Portable
build is self-contained: replace the old folder with the new one.
Help → Check for updates… runs the check on demand and also tells you when you are already current. The quiet daily check stays silent unless something newer exists, and fails silently when offline.
Share it on your local network
Rather than installing the app on every machine, let people on a trusted network transcribe through this one. The Web / LAN access tab does it with one button, an optional port, a "Share on local network" checkbox and an optional access password.
For headless or scripted use there is an equivalent command line (same stdlib-only HTTP engine):
python gui.py serve REM loopback only (no firewall prompt)
python gui.py serve --lan REM share on the LAN (allow the firewall prompt)It has no accounts and no encryption — anyone who can reach the address (and
knows the password, if you set one) can use it. Trusted networks only. Routes,
the upload cap and the --token option: docs/SERVER.md.
git clone https://github.com/Milomilo777/whisper_app.git
cd whisper_app
pip install -r requirements.txt
python gui.pyUpdating a source checkout later: platform\windows\update.bat on Windows,
platform/linux/update.sh on Linux — both pull the latest source and
refresh the dependencies (platform/windows/README.md).
docs/BUILD.md covers the build pipelines — which two are actually shipped and which are kept alive but unpublished — and docs/RELEASE_PROCESS.md has the ship sequence.
Regenerate the images in this README with python tools/make_graphics.py
(they are drawn by that script, not pasted in from a design tool).
Actively maintained. The quality bar enforced on every commit:
- pyright on
app/andcore/— 0 errors, 0 warnings, 0 informations. - The hermetic unit + integration suite (
pytest tests/ --ignore=tests/smoke) runs on every push, on Windows and Ubuntu — see docs/TESTING.md. Coverage is reported by the badge above.
docs/CHANGELOG.md has what shipped recently; superseded freeze and stability audits are archived under docs/history/.
| Doc | Audience |
|---|---|
| INSTALL.md | End-user install + troubleshooting |
| SERVER.md | Local-network / web server mode (gui.py serve) |
| BUILD.md | Build the deliverables yourself |
| ARCHITECTURE.md | Process model, threading, protocols |
| CONFIG.md | Every config key with defaults |
| CLOUD_STT.md | Optional Gemini-API backend (paste a key) |
| CLOUD_STT_GOOGLE.md | Optional Google Cloud STT backend (service account, batch mode) |
| LIVE.md | The Live tab: microphone / system-audio transcription |
| DENOISE.md | The adaptive denoise pre-process |
| RELEASE_PROCESS.md | How to ship a new version |
| CHANGELOG.md | Version history |
| DECISIONS.md | Non-obvious design choices and why |
| ROADMAP.md · roadmap/ | What is being considered next |
Coding agents: start at
PROJECT_INDEX.md— a generated, tool-neutral repo map built for fast, low-token onboarding.
Issues, pull requests and
Discussions are all
welcome. CONTRIBUTING.md has the dev setup, the quality bar
and the PR conventions; if you are new here, the
good first issue
label is the place to start.
This project follows the Contributor Covenant. Security reports go through SECURITY.md.
Written by translation-robot — https://github.com/translation-robot.
This project's own source is licensed under the BSD 3-Clause License — see
LICENSE. The bundled binaries (ffmpeg, ffprobe, yt-dlp), the
bundled Python runtime and packages, and the Whisper model itself keep their own
upstream licenses; THIRD_PARTY_NOTICES.md summarises
them and says what to include when redistributing.
Keywords — offline speech to text · local Whisper GUI · audio to text · video to text · subtitle generator · SRT VTT generator · transcription software · speaker diarization · faster-whisper desktop app · yt-dlp downloader · private on-device transcription · Windows · macOS · Linux


