Local faster-whisper speech-to-text app with global hotkeys for Windows
Project description
Whisper Key - Local Speech-to-Text
Global hotkeys to record speech and transcribe directly to your cursor.
Now on Windows and macOS! 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
- Configurable: Customize hotkeys, models, and much more
Roadmap: voice commands → terminal UI → CLI wrapper (
whisper-key claude) → etc...
🚀 Quick Start
From PyPI (Recommended)
Requires Python 3.11-3.13
# With pipx (isolated environment)
pipx install whisper-key-local
# Or with pip (simpler)
pip install whisper-key-local
Then run: whisper-key (or wk for short)
Portable App (Windows Only)
- Download the latest release:
- NVIDIA or CPU —
windows.zip - AMD GPU —
windows-amd-gpu-rocm.zip(HIP SDK required)
- NVIDIA or CPU —
- Extract and 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
⚡ GPU Acceleration Setup
Both NVIDIA and AMD GPUs are supported but may require additional setup:
- NVIDIA (CUDA) — GTX 900 or later
- AMD (ROCm) — RX 5000 or later
See the GPU Setup Guide for instructions.
🎤 Basic Usage
| Hotkey | Windows | macOS |
|---|---|---|
| Start recording | Ctrl+Win |
Fn+Ctrl |
| Stop & transcribe | Ctrl |
Fn |
| Stop & auto-send | Alt |
Option |
| Cancel recording | Esc |
Shift |
Open the system tray / menu bar icon to:
- Toggle auto-paste vs clipboard-only
- Change transcription model
- Select audio device
⚙️ Configuration
Local settings at:
- Windows:
%APPDATA%\whisperkey\user_settings.yaml - macOS:
~/Library/Application Support/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_with_modifier_enabled |
true |
Stop with first modifier only |
hotkey.auto_enter_enabled |
true |
Enable auto-send hotkey |
hotkey.auto_enter_combination |
alt / option |
Stop + paste + Enter |
hotkey.cancel_combination |
esc / shift |
Cancel recording |
| 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.paste_hotkey |
ctrl+v / cmd+v |
Paste key simulation |
clipboard.preserve_clipboard |
true |
Restore clipboard after paste |
clipboard.key_simulation_delay |
0.05 |
Delay between keystrokes (seconds) |
| 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.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 |
| System Tray | ||
system_tray.enabled |
true |
Show tray icon |
system_tray.tooltip |
Whisper Key |
Hover text |
| Console | ||
console.start_hidden |
false |
Start minimized to tray |
📁 Model Cache
Default path for transcription models (via HuggingFace):
- Windows:
%USERPROFILE%\.cache\huggingface\hub\ - macOS:
~/.cache/huggingface/hub/
📦 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.6.3.tar.gz.
File metadata
- Download URL: whisper_key_local-0.6.3.tar.gz
- Upload date:
- Size: 851.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
095e8d6bac8f4dd17788bf716b8b560278a5ec621d9a87a8aea7c72d209f5e8f
|
|
| MD5 |
b5c97244ed829464245d9fe0ce682120
|
|
| BLAKE2b-256 |
f2c4b57146894b960f579ba0afa358bafb6a78c05a2b8e278ff17507083b834d
|
File details
Details for the file whisper_key_local-0.6.3-py3-none-any.whl.
File metadata
- Download URL: whisper_key_local-0.6.3-py3-none-any.whl
- Upload date:
- Size: 857.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73f63a3ebc7c33dcf4a5f6e9fca36a357877e9fa9c505429792ebd1680f21e8a
|
|
| MD5 |
407ff027d514b0d9b0118f3d258197ed
|
|
| BLAKE2b-256 |
b4753e93756e3fab46637cc25949aa304f158b565a5730421fb6df5386d83143
|