LocalWhisper 🎙️
Local, offline voice-to-text for Windows. Speak, and it types wherever your cursor is — in any app. No cloud, no account, no data leaves your PC.
Two hotkeys work out of the box:
| Trigger | How | Best for |
|---|---|---|
| Ctrl + B | Hold and speak, release to insert | quick phrases (walkie-talkie) |
| Alt + N | Tap to start, tap again to stop | longer dictation (hands free) |
There is also an optional "Hey Jarvis" wake word — but it is OFF by default (see Optional wake word below), because an always-on listener can false-trigger and type transcribed audio into whatever window is focused.
Powered by faster-whisper (small.en model) and openWakeWord.
Install (easiest — no Python needed)
- Go to the Releases page and download
LocalWhisper-Setup.zip. - Extract the ZIP (right-click → Extract All). Keep the folder structure.
- Double-click
Install.batand approve the Windows admin prompt.
That's it. LocalWhisper installs, starts immediately, and launches automatically every time you log in. A small tray icon shows its state:
- ⚪ grey = idle 🟢 green = recording 🟠 amber = transcribing
Right-click the tray icon to Quit. To remove it later, run Uninstall.bat.
First-launch notes
- Windows SmartScreen may show "Windows protected your PC" — this is expected for a new, unsigned app. Click More info → Run anyway.
- Administrator rights are required because global hotkeys (Ctrl+B / Alt+N) need a system-level keyboard hook. The installer sets this up for you.
- If nothing happens on launch, check the log at
%LOCALAPPDATA%\LocalWhisper\localwhisper.log. - Needs a 64-bit Windows 10/11 PC and a microphone. If the app won't start, install the Microsoft Visual C++ Redistributable (x64).
Install via pip (for Python users)
If you already have Python 3.9+:
pip install localwhisper
localwhisper
On first run it downloads the small.en model (~240 MB) and the wake-word models automatically. Run your terminal as Administrator so the global hotkeys work.
Optional wake word
The "Hey Jarvis" wake word is disabled by default. It is an always-on microphone listener that types transcribed audio into the focused window, so a false trigger (from a meeting, a video, or background speech) can insert unwanted text. Hotkeys are safer because they only act when you press them.
To enable it (no reinstall needed), create a file at
%LOCALAPPDATA%\LocalWhisper\config.json with:
{
"wakeword_enabled": true,
"wakeword_threshold": 0.8
}
Then quit and relaunch LocalWhisper (or log out/in). Raise wakeword_threshold toward 0.9
if it still false-fires. To turn it back off, set "wakeword_enabled": false (or delete the
file). The same file overrides any other setting in the table below.
Tuning
Every field in localwhisper/config.py can be overridden by the
config.json file above — no rebuild required:
| Setting | Default | What it does |
|---|---|---|
model_name |
small.en |
Transcription model. base.en is faster, less accurate. |
wakeword_enabled |
false |
Turn the always-on wake word on/off. |
wakeword_model |
hey_jarvis |
Also: alexa, hey_mycroft, hey_rhasspy. |
wakeword_threshold |
0.75 |
Higher = fewer false triggers. |
wakeword_patience |
3 |
Consecutive detections required to fire (rejects blips). |
endpoint_silence_ms |
1500 |
Silence (ms) that ends a hands-free utterance. |
energy_threshold |
0.01 |
Loudness that counts as speech. |
Build from source / run the tests
git clone https://github.com/Bhargava-R-dev/localwhisper
cd localwhisper
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -c "import openwakeword.utils as u; u.download_models()"
# run from source
.\.venv\Scripts\python.exe -m localwhisper.app
# run the tests
.\.venv\Scripts\python.exe -m pytest -v
Build the distributable EXE
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe packaging\build_exe.py
Output lands in dist\LocalWhisper\. See packaging/ for the installer scripts and how the release ZIP is assembled.
How it works
One microphone stream feeds a small state machine. When idle it runs the wake-word detector; the two hotkeys post events from a background thread. Any trigger records audio, hands it to the warm whisper model, and pastes the result at the cursor via the clipboard. Everything runs locally on CPU.
License
Metadata
Release files for localwhisper 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| localwhisper-0.1.4.tar.gz | 24.1 kB | Without provenance | Details for localwhisper-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| localwhisper-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for localwhisper-0.1.4-py3-none-any.whl |
Total release size: 46.2 kB
Release files / localwhisper-0.1.4.tar.gz
| Download URL | localwhisper-0.1.4.tar.gz |
|---|---|
| Size | 24.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00a675bee7a4ddfec9ccbfd3ad6ac9d5f32b0ef4e03bb56de1ca7c9c523dd783
|
|
BLAKE2b-256 checksum How to use checksums |
93f38bc34fcf70ac430f1465da619ca4008e4601b937907431d32056c9ea3d53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / localwhisper-0.1.4-py3-none-any.whl
| Download URL | localwhisper-0.1.4-py3-none-any.whl |
|---|---|
| Size | 22.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d25070d28c02a05527f3180d2a6192d0bec1f087d5542198796397e9ee9e2e1b
|
|
BLAKE2b-256 checksum How to use checksums |
ac84368a4afd1703769f2756b542d01dada2158cd09c4ba2b5433415a528cb1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Security for localwhisper 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.