A local, private, free Wispr Flow clone for Windows. Hold a hotkey, speak, release — clean text appears wherever your cursor is. All processing happens on your PC; no audio ever leaves the machine, no subscription.
⬇ Download the latest release —
unzip, run FlowLocal.exe, hold Ctrl+Win and talk. No Python needed.
- Install dependencies (one time):
pip install -r requirements.txt - Double-click
run.bat(orpython -m flowlocal.main). First launch downloads the Whisper model (~460 MB forsmall), then it's fully offline. - Click into any text field, hold
Ctrl+Space, speak, release.
While dictating, a floating pill appears at the bottom of the screen —
red pulsing dot + live mic level while listening, orange while
transcribing — then hides. A mic icon also lives in the system tray
(grey = idle, red = recording, orange = transcribing); right-click it to
edit the config, view the log, or quit. Troubleshooting: check
flowlocal.log next to run.bat.
Keyboard hooks and keystroke injection are implemented directly against
the Windows API in flowlocal/winkb.py (the popular keyboard PyPI
package is silently broken on Python 3.14).
Created automatically on first run. Restart the app after editing.
| Key | Default | Notes |
|---|---|---|
hotkey |
ctrl+space |
Any keyboard-lib combo, e.g. f9, right ctrl |
hotkey_mode |
hold |
hold (push-to-talk) or toggle |
model |
distil-small.en |
English-only, fast; small/medium for other languages or accuracy |
device |
cuda |
GPU (needs pip install nvidia-cublas-cu12 nvidia-cudnn-cu12); cpu also works |
compute_type |
int8_float16 |
for cuda; use int8 on cpu |
beam_size |
1 |
raise to 5 for slightly more careful decoding |
mute_apps_while_recording |
true |
Mutes other apps' audio while you dictate, restores after |
language |
en |
Set null to auto-detect any language |
inject_mode |
paste |
paste (fast) or type (for apps that block Ctrl+V) |
remove_fillers |
true |
Strips um/uh/erm |
replacements |
{} |
Voice snippets: {"my email": "you@example.com"} |
vocabulary |
[] |
Names/jargon to bias recognition toward (e.g. "Helius", "Xbot") |
llm_cleanup |
false |
Extra grammar pass via local Ollama, if you run it |
| Wispr Flow | FlowLocal |
|---|---|
| Push-to-talk hotkey | keyboard global hook, hold or toggle |
| Works in every app | Clipboard paste / SendInput typing into focused window |
| Cloud AI transcription | faster-whisper running locally |
| Filler removal & formatting | Regex cleanup layer (+ optional Ollama pass) |
| Snippets | replacements in config |
| 100+ languages | Whisper supports ~100 languages (language: null) |
- Pre-roll: the mic keeps a rolling 0.5 s buffer while idle, so words you start saying a moment before pressing the hotkey aren't clipped.
- Speed: on the GTX 1660 Super (cuda/int8_float16) a 20 s dictation
transcribes in ~0.5 s with
distil-small.en. CPU fallback (device: cpu,compute_type: int8) does the same in ~3 s. - Elevated apps: to dictate into admin-level windows, run
run.batas administrator (Windows blocks keystroke injection across privilege levels). - Autostart: put a shortcut to
run.batinshell:startup.
FlowLocal's own source is MIT — use it, fork it, ship it.
Dependencies keep their own licences; most are MIT or BSD. One exception worth knowing:
pystray is LGPL-3.0, so the packaged release carries the LGPL's relinking obligation.
The full source here plus requirements.txt reproduces the build, so anyone can substitute
their own pystray. Speech models are downloaded at first run, not redistributed. Full details
in THIRD-PARTY-NOTICES.md.
FlowClip — the same idea for video. A local clip editor for TikTok and YouTube Shorts: trim a clip, then compose a vertical layout from multiple regions of the frame (facecam, gameplay, minimap) instead of cropping most of it away. Runs entirely on your machine, no subscription.