Global hotkeys to record speech and transcribe directly to your cursor
Project description
Whisper Key - Local Speech-to-Text
Global hotkeys to record speech and transcribe directly to your cursor.
Questions or ideas? Discord
✨ Features
- Global Hotkey: Start recording speech from any app
- Auto-Paste: Transcribe directly to cursor
- Auto-Send: Optionally auto-send with ENTER keypress
- Local/Offline: Voice data never leaves your computer
- CPU Ready: Small, efficient models available
- GPU Ready: Support for both NVIDIA & AMD cards
- Cross-platform: Works on Windows and macOS
- Voice Commands: Trigger shortcuts, text snippets, and shell commands by voice — docs
- Configurable: Customize hotkeys, models, and much more
🚀 Quick Start
From PyPI (Recommended)
Requires Python 3.11-3.13
# With pipx (isolated environment)
pipx install whisper-key-local
# Or with pip
pip install whisper-key-local
Then run: whisper-key (or wk for short)
Windows App
- Download
whisper-key.exefrom the latest release - Run
whisper-key.exe
From Source
git clone https://github.com/PinW/whisper-key-local.git
cd whisper-key-local
pip install -e .
python whisper-key.py
🎤 Basic Usage
| Hotkey | Windows | macOS |
|---|---|---|
| Start recording | Ctrl+Win |
Fn+Ctrl |
| Stop & transcribe | Ctrl |
Fn |
| Stop & auto-send | Alt |
Option |
| Cancel recording | Esc |
Shift |
| Voice command mode | Alt+Win |
Fn+Command |
Open the system tray / menu bar icon to:
- Toggle auto-paste vs clipboard-only
- Change transcription model
- Select audio device
🗣️ Voice Commands
Speak trigger phrases to run shell commands and more. Define in:
- Windows:
%APPDATA%\whisperkey\commands.yaml - macOS:
~/.whisperkey/commands.yaml
commands:
# Send a keyboard shortcut
- trigger: "undo"
hotkey: "ctrl+z"
# Deliver pre-written text
- trigger: "my email"
type: "user@example.com"
# Run a shell command
- trigger: "open notepad"
run: 'notepad.exe'
See the Voice Commands Guide for full details.
⚡ GPU Acceleration
Whisper Key detects your GPU on first launch and offers one-press install of the required runtime libraries. Supports NVIDIA (CUDA) and AMD (ROCm).
For manual setup or troubleshooting, see the GPU Setup Guide.
⚙️ Configuration
Local settings at:
- Windows:
%APPDATA%\whisperkey\user_settings.yaml - macOS:
~/.whisperkey/user_settings.yaml
Delete this file and restart app to reset to defaults.
| Option | Default | Notes |
|---|---|---|
| Whisper | ||
whisper.model |
tiny |
Any model defined in whisper.models |
whisper.device |
cpu |
cpu or cuda (NVIDIA/AMD GPU) — setup guide |
whisper.compute_type |
int8 |
int8/float16/float32 |
whisper.language |
auto |
auto or language code (en, es, fr, etc.) |
whisper.beam_size |
5 |
Higher = more accurate but slower (1-10) |
whisper.models |
(see config) | Add custom HuggingFace or local models |
| Hotkeys | ||
hotkey.recording_hotkey |
ctrl+win / fn+ctrl |
Windows / macOS |
hotkey.stop_key |
ctrl / fn |
Stop recording |
hotkey.auto_send_key |
alt / option |
Stop + paste + Enter |
hotkey.cancel_combination |
esc / shift |
Cancel recording |
hotkey.command_hotkey |
alt+win / fn+command |
Voice command mode |
| Voice Activity Detection | ||
vad.vad_precheck_enabled |
true |
Prevent hallucinations on silence |
vad.vad_onset_threshold |
0.7 |
Speech detection start (0.0-1.0) |
vad.vad_offset_threshold |
0.55 |
Speech detection end (0.0-1.0) |
vad.vad_min_speech_duration |
0.1 |
Min speech segment (seconds) |
vad.vad_realtime_enabled |
true |
Auto-stop on silence |
vad.vad_silence_timeout_seconds |
30.0 |
Seconds before auto-stop |
| Audio | ||
audio.host |
null |
Audio API (WASAPI, Core Audio, etc.) |
audio.channels |
1 |
1 = mono, 2 = stereo |
audio.dtype |
float32 |
float32/int16/int24/int32 |
audio.max_duration |
900 |
Max recording seconds (0 = unlimited) |
audio.input_device |
default |
Device ID or "default" |
| Clipboard | ||
clipboard.auto_paste |
true |
false = clipboard only |
clipboard.delivery_method |
paste |
paste (Ctrl+V) or type (direct injection) |
clipboard.paste_hotkey |
ctrl+v / cmd+v |
Paste key simulation |
clipboard.paste_preserve_clipboard |
true |
Restore clipboard after paste |
| Logging | ||
logging.level |
INFO |
DEBUG/INFO/WARNING/ERROR/CRITICAL |
logging.file.enabled |
true |
Write to app.log |
logging.console.enabled |
true |
Print to console |
logging.console.level |
WARNING |
Console verbosity |
| Audio Feedback | ||
audio_feedback.enabled |
true |
Play sounds on record/stop |
audio_feedback.transcription_complete_enabled |
false |
Play sound on transcription complete |
audio_feedback.start_sound |
assets/sounds/... |
Custom sound file path |
audio_feedback.stop_sound |
assets/sounds/... |
Custom sound file path |
audio_feedback.cancel_sound |
assets/sounds/... |
Custom sound file path |
audio_feedback.transcription_complete_sound |
assets/sounds/... |
Custom sound file path |
| System Tray | ||
system_tray.enabled |
true |
Show tray icon |
system_tray.tooltip |
Whisper Key |
Hover text |
| Voice Commands | ||
voice_commands.enabled |
true |
Enable voice command mode |
📁 Model Cache
Default path for transcription models (via HuggingFace):
- Windows:
%USERPROFILE%\.cache\huggingface\hub\ - macOS:
~/.cache/huggingface/hub/
Contributing
Check the roadmap for planned features and see CONTRIBUTING.md for guidelines. Please open an issue before starting work on new features.
📦 Dependencies
Cross-platform:
faster-whisper · numpy · sounddevice · soxr · pyperclip · ruamel.yaml · pystray · Pillow · playsound3 · ten-vad · hf-xet
Windows: global-hotkeys · pywin32
macOS: pyobjc-framework-Quartz · pyobjc-framework-ApplicationServices
Project details
Release history Release notifications | RSS feed
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 whisper_key_local-0.8.1.tar.gz.
File metadata
- Download URL: whisper_key_local-0.8.1.tar.gz
- Upload date:
- Size: 884.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a60d46e01f6fbabb507199baf47295a2a7130cc5990bf03b9f1b6f48fd23d19f
|
|
| MD5 |
e1bd8b11cfc62c49da4aa804c9456e92
|
|
| BLAKE2b-256 |
8792e036f4c659cca23330f38b074827665035ae1adfe98ccf68351dab322b0d
|
File details
Details for the file whisper_key_local-0.8.1-py3-none-any.whl.
File metadata
- Download URL: whisper_key_local-0.8.1-py3-none-any.whl
- Upload date:
- Size: 892.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b75f4526e0fefcf287e708508e3b9d98f92c5e9bf640e717e015a39f57096202
|
|
| MD5 |
46c49a0fd436140ad144dbe38bcbc674
|
|
| BLAKE2b-256 |
3804014ee5087bc3abfb8b72bee76848de0f6fb6a9f690caf0b3d3e054332b88
|