Local, offline push-to-talk and wake-word voice-to-text for Windows — types speech at your cursor.
Project description
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file localwhisper-0.1.3.tar.gz.
File metadata
- Download URL: localwhisper-0.1.3.tar.gz
- Upload date:
- Size: 23.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d0773c8c8231e6ffb0c9a8b5b64c14ab261eb848a68d9399e121629b307568e
|
|
| MD5 |
0165b09e09289f8d61c546db1bcbda03
|
|
| BLAKE2b-256 |
c0f36a9d4392d65634ece35da9beac5376ba03ed4f8deab90c015052417115a7
|
File details
Details for the file localwhisper-0.1.3-py3-none-any.whl.
File metadata
- Download URL: localwhisper-0.1.3-py3-none-any.whl
- Upload date:
- Size: 21.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83696e133fb45c517ab528784aa661c2be3470f2bba0d432637b4b29e1ad55aa
|
|
| MD5 |
893b8314659a4fcfb5207f31f9a90923
|
|
| BLAKE2b-256 |
1f450df6d3f53c15ab5d456be02c172621e53116510e8c3bb0cd09b30e117122
|