GPU-accelerated voice typing for Windows powered by OpenAI Whisper. Replaces Windows Voice Typing (Win+H) with dramatically better accuracy -- especially for technical terms, proper nouns, and accented speech.
Speak naturally into your microphone and Whisperoids types what you said into whatever window is focused -- any text box, any app. A colored system tray icon shows you the current state at a glance.
License: Personal and non-commercial use only. See LICENSE.
- Local & Private -- Everything runs on your machine. No audio leaves your computer. No cloud API, no subscription, no internet required after setup.
- GPU-Accelerated -- Uses CUDA for real-time transcription. A 5-second phrase transcribes in under 1 second on modern NVIDIA GPUs.
- Auto-Calibrating -- Measures ambient noise on startup and sets the detection threshold automatically. No manual tuning needed.
- NVIDIA Broadcast Integration -- Automatically detects and uses NVIDIA Broadcast for AI noise removal when available. Falls back to raw mic when it's not.
- System Tray Icon -- Color-coded status dot (green/yellow/red) lives in your notification area. Right-click for controls, model selection, and mic info.
- Hotswap Models -- Switch between Whisper models on the fly via tray menu or hotkey. No restart needed.
- Works Everywhere -- Types into any focused window via clipboard paste. Works in browsers, editors, chat apps, terminals -- anything that accepts
Ctrl+V.
- OS: Windows 10 or 11
- Python: 3.10 or later
- GPU: NVIDIA GPU with CUDA support (any RTX card, GTX 1060+)
- 6 GB+ VRAM recommended (turbo model)
- 10 GB+ VRAM for large-v3 (maximum accuracy)
- CPU-only: Works without NVIDIA GPU, but transcription will be significantly slower
NVIDIA Broadcast is not required but provides significant advantages when available. See NVIDIA Broadcast Integration below for details.
- Python 3.10+ -- Download from python.org. Check "Add Python to PATH" during install.
- NVIDIA GPU drivers -- For CUDA acceleration. Any modern NVIDIA driver works.
- PyTorch with CUDA -- Install from pytorch.org if not already present.
git clone https://github.com/BHP1000/Whisperoids.git
cd Whisperoids
setup.batThe setup wizard walks you through everything:
- Checks Python version and confirms 3.10+
- Scans required packages (
openai-whisper,sounddevice,keyboard,pyautogui,pyperclip,pystray,Pillow,numpy) and offers to install any that are missing - Checks optional packages (
scipyfor faster WAV writing) -- you can skip these - Verifies CUDA -- detects your GPU, reports VRAM, confirms CUDA works. If no NVIDIA GPU, Whisperoids still works on CPU (just slower)
- Detects NVIDIA Broadcast -- reports if installed/running, explains advantages if not
- Downloads Whisper models -- choose one model (turbo recommended) or all five. Models not downloaded won't be available for runtime switching with
Ctrl+Alt+M - Selects your microphone -- lists all accessible mics, defaults to NVIDIA Broadcast if available, saves your choice
- Creates whisperoids.exe -- renamed copy of
python.exeso the system tray shows "Whisperoids" instead of "Python"
Setup only runs once. After that, whisperoids.bat launches clean with no dependency checks or prompts. Run setup.bat again anytime to re-check or change settings.
If you prefer to set up manually instead of using the wizard:
pip install openai-whisper sounddevice keyboard pyautogui pyperclip pystray Pillow numpy
copy "C:\Python3xx\python.exe" whisperoids.exe
whisperoids.batReplace C:\Python3xx with your Python path (find it with python -c "import sys; print(sys.executable)").
- Launch -- Double-click
whisperoids.bat - Select a model -- Pick from the menu or press Enter for turbo (recommended)
- Wait for "Ready" -- Model loads into GPU memory (3-5 seconds)
- Start talking -- Double-tap backtick (
` `) or pressCtrl+Alt+V - Speak naturally -- Pause briefly between phrases
- Text appears -- Transcribed text is typed into whatever window has focus
| Action | Shortcut |
|---|---|
| Toggle listening | Double-tap ` (backtick) |
| Toggle listening (alt) | Ctrl+Alt+V |
| Cycle models | Ctrl+Alt+M |
| Quit | Ctrl+Alt+Q |
A colored dot appears in your notification area:
| Color | State |
|---|---|
| Green | Actively listening |
| Yellow | Paused |
| Red | Loading model / error |
Right-click the tray icon for:
- Toggle listening
- Model selection (with checkmark on active model)
- Current mic name
- Quit
Hover shows the current model and mic source.
To keep the icon always visible (not hidden in the overflow):
- Right-click the taskbar
- Taskbar settings
- Other system tray icons
- Toggle Whisperoids ON
This only needs to be done once -- Windows remembers the setting.
| Model | VRAM | Speed | Accuracy | When to Use |
|---|---|---|---|---|
| turbo | ~6 GB | Fast | Near-best | Default. Best speed/accuracy ratio. |
| large-v3 | ~10 GB | Moderate | Best | Maximum accuracy. Technical/medical/legal content. |
| medium | ~5 GB | Fast | Very good | If turbo gives odd results on specific audio. |
| small | ~2 GB | Very fast | Good | Quick drafts, low VRAM GPUs. |
| base | ~1 GB | Fastest | Low | Just need the gist. |
turbo is a distilled version of large-v3 -- nearly identical accuracy at ~8x the speed. Start with turbo and switch to large-v3 only when you need the absolute best accuracy.
Models can be changed:
- On startup -- Interactive menu (unless
--modelis passed) - At runtime -- Right-click tray icon > Model, or press
Ctrl+Alt+M
whisperoids.bat [options]
Options:
--model MODEL Whisper model: turbo, large-v3, medium, small, base
(default: turbo, skips startup menu)
--gain N Mic gain multiplier (default: 1.0, try 2.0-4.0 for quiet mics)
--threshold N Manual energy threshold (default: auto-calibrate)
--silence N Seconds of silence before transcribing (default: 1.2)
--mic N Mic device index (default: auto-detect Broadcast, then system default)
--no-broadcast Skip NVIDIA Broadcast, use raw mic directly
--list-mics List available microphones and exit
whisperoids.bat # Interactive model menu, auto everything
whisperoids.bat --model large-v3 # Max accuracy, skip menu
whisperoids.bat --gain 2.0 # Boost quiet microphone
whisperoids.bat --no-broadcast # Skip NVIDIA Broadcast
whisperoids.bat --list-mics # See all available mics
whisperoids.bat --silence 0.8 # Shorter pause before transcribing
whisperoids.bat --mic 3 # Use specific mic deviceWhisperoids is designed to work with or without NVIDIA Broadcast. When Broadcast is detected and running, Whisperoids automatically routes audio through it for AI-enhanced noise removal before Whisper processes it.
Your physical microphone feeds into NVIDIA Broadcast, which applies AI noise removal using your GPU's tensor cores, then exposes a clean virtual microphone. Whisperoids listens to this virtual mic instead of the raw hardware mic.
Physical Mic (ME6S, Blue Yeti, etc.)
|
v
NVIDIA Broadcast (AI noise removal on tensor cores)
|
v
Virtual Mic ("Microphone (NVIDIA Broadcast)")
|
v
Whisperoids (Whisper transcription on CUDA cores)
|
v
Text typed into active window
| Feature | Without Broadcast | With Broadcast |
|---|---|---|
| Background noise (fan, AC, traffic) | Picked up, may trigger false transcriptions | Removed by AI before Whisper sees it |
| Keyboard typing sounds | Can trigger recording | Suppressed |
| Other people talking nearby | May be transcribed as your speech | Isolated to primary speaker |
| Echo/reverb in room | Degrades accuracy | Removed |
| Processing cost | None | Minimal (runs on dedicated tensor cores, not CUDA cores) |
| Latency added | None | ~10ms (imperceptible) |
| Scenario | Why Skip Broadcast |
|---|---|
| Quiet environment | No noise to remove -- Broadcast adds no value |
| Low VRAM GPU | Broadcast uses ~200 MB VRAM that could go to Whisper |
| Non-RTX GPU | Broadcast requires RTX series (tensor cores) |
| Already clean mic | High-end mics with built-in noise rejection |
| Troubleshooting | Eliminate a variable if transcription isn't working |
- Download NVIDIA Broadcast from nvidia.com (requires RTX GPU)
- Open NVIDIA Broadcast
- Go to the Microphone tab
- Select your physical mic as the input source
- Enable Noise Removal effect
- Launch Whisperoids -- it will automatically detect and use the Broadcast virtual mic
If NVIDIA Broadcast is not installed or not running, Whisperoids falls back to your system default microphone automatically. You'll see a message on startup indicating which source is being used:
Source: NVIDIA Broadcast # Broadcast detected and active
Source: raw (system default) # Broadcast not available, using raw mic
Source: raw (--no-broadcast) # User opted out of Broadcast
OpenAI Whisper was trained exclusively on 16 kHz mono audio. This is its native sample rate -- feeding it audio at any other rate requires resampling, which adds latency and complexity with no accuracy benefit. Whisperoids captures directly at 16 kHz to match Whisper's native input with zero conversion overhead.
This is why Whisperoids uses DirectSound as its preferred Windows audio API. Windows exposes each microphone through three APIs:
| API | Latency | 16 kHz Support | Used By Whisperoids |
|---|---|---|---|
| DirectSound | ~20-30ms | Yes | Preferred -- lowest latency with native 16 kHz |
| MME | ~30-50ms | Yes | Fallback if DirectSound unavailable |
| WASAPI | ~5-10ms | No (48 kHz only) | Skipped -- would require resampling to 16 kHz |
WASAPI offers the lowest raw latency (~5ms) but only supports 48 kHz on most devices. Using it would require capturing at 48 kHz and downsampling 3:1 to 16 kHz on every audio block. Since Whisperoids buffers 1.2 seconds of speech before transcribing, saving 10-20ms on mic capture latency is meaningless -- the bottleneck is the deliberate silence pause, not the audio API. DirectSound's native 16 kHz support eliminates resampling entirely for a cleaner, simpler pipeline.
Whisperoids will not conflict with other audio applications running at different sample rates. Each application opens its own independent audio stream with Windows, and the OS handles per-stream sample rate conversion internally. You can:
- Record at 96 kHz in a DAW, pause it, switch to Whisperoids at 16 kHz -- no issues
- Run a video call at 48 kHz while Whisperoids listens at 16 kHz -- both work simultaneously
- Switch back and forth between applications freely
The only exception is WASAPI Exclusive Mode, where an application locks a device to a single sample rate and blocks all other access. This is rare (most apps use shared mode) and Whisperoids' startup access check will detect and report it if it happens.
- Mic Capture --
sounddeviceopens an input stream at 16 kHz mono (Whisper's native sample rate) via DirectSound - Voice Activity Detection -- Energy-based VAD measures RMS per 30ms block. Speech triggers recording, silence (1.2s default) triggers transcription.
- Auto-Calibration -- On startup, 1.5 seconds of ambient noise is recorded. The 90th percentile RMS is used as the noise floor, and the detection threshold is set at 2x that value.
- Transcription -- Audio is written to a temporary WAV file and passed to Whisper with
language="en",fp16=True, andno_speech_threshold=0.6. - Text Output -- Transcribed text is copied to clipboard and pasted via
Ctrl+Vinto the focused window. Previous clipboard contents are preserved and restored. - Hallucination Filter -- Common Whisper hallucinations ("Thank you.", "Thanks for watching!", etc.) are detected and suppressed.
Main Thread - pystray tray icon event loop
Processing Thread - VAD + transcription + text output
Audio Thread - sounddevice callback (real-time mic capture)
Poll Thread - monitors is_running flag, stops tray on quit
The --gain option applies digital amplification to the mic input before VAD and transcription. Audio is multiplied by the gain factor and clipped to [-1.0, 1.0] to prevent distortion. This is useful for quiet microphones that don't register strongly enough for the VAD threshold.
Whisperoids includes a standalone batch transcription tool for converting audio and video files to text. This is separate from the live voice typing -- it processes pre-recorded files.
- Drop audio or video files into the
input/folder - Run
transcribe.bat - Pick a model and language setting
- Transcripts appear in
output/(one subfolder per file, all formats)
Audio: MP3, WAV, M4A, FLAC, OGG Video: MP4, MKV, WebM, AVI (audio is extracted automatically via ffmpeg)
transcribe.bat # Interactive -- model menu + language picker
transcribe.bat turbo # Skip menu, auto-detect language
transcribe.bat turbo en # Force English (best for accented speakers)
transcribe.bat large-v3 mix # Mixed languages, keep originals
transcribe.bat large-v3 translate # Mixed languages, translate all to EnglishBefore model selection, the tool scans your input files and shows estimated completion times per model based on GPU benchmarks (RTX 5080):
| Model | Speed (audio min per wall min) | Typical Use |
|---|---|---|
| turbo | ~32x real-time | Default, best speed/accuracy |
| large-v3 | ~8x real-time | Maximum accuracy |
| medium | ~24x real-time | Backup if turbo struggles |
| small | ~48x real-time | Quick drafts |
| base | ~80x real-time | Just need the gist |
| Mode | Flag | When to Use |
|---|---|---|
| Auto-detect | (default) | Single-language audio, Whisper picks the language |
| Force English | en |
Speaker has a non-English accent but is speaking English |
| Mixed language | mix |
Speaker switches between languages, keep originals |
| Translate | translate |
Speaker switches between languages, translate everything to English |
- ffmpeg -- Required for video file audio extraction. Install via
winget install ffmpegor download from ffmpeg.org.
Each file gets its own subfolder in output/ containing transcripts in all Whisper output formats (TXT, SRT, VTT, TSV, JSON).
Whisperoids/
├── src/
│ ├── whisperoids.py # Main voice typing application
│ ├── setup.py # Setup wizard (dependencies, models, mic selection)
│ └── estimate.py # Time estimator for batch transcription
├── whisperoids.bat # Voice typing launcher (auto-runs setup on first launch)
├── transcribe.bat # Batch file transcription tool
├── setup.bat # Setup launcher (run once, or anytime to re-check)
├── whisperoids.exe # Renamed python.exe (created by setup, for tray icon naming)
├── input/ # Drop audio/video files here for batch transcription
├── output/ # Transcription results appear here
├── LICENSE # Non-commercial license
├── README.md # This file
├── .gitignore
├── .setup_complete # Created by setup (not tracked in git)
└── .whisperoids_prefs # Saved mic preference (not tracked in git)
Another application has exclusive access to your microphone. Close apps like Discord, Zoom, or Teams that may be holding the mic, then restart Whisperoids.
- Make sure the target window has focus (click in the text field)
- Some applications block programmatic paste -- try a different text field
- Check if your antivirus is blocking keyboard simulation
- Verify CUDA is available:
python -c "import torch; print(torch.cuda.is_available())" - Use the
turbomodel instead oflarge-v3 - Close other GPU-intensive applications
- The 350ms window may be too short/long for your typing speed
- Adjust
DOUBLETAP_WINDOWinsrc/whisperoids.py - Use
Ctrl+Alt+Vas an alternative
- The auto-calibration threshold may be too low for your environment
- Try
--threshold 0.01or higher - Use NVIDIA Broadcast to clean up background noise
- Click the ^ overflow arrow in the taskbar -- it may be hidden there
- Pin it: Right-click taskbar > Taskbar settings > Other system tray icons > toggle Whisperoids ON
Whisperoids is designed for Windows 10/11. It uses:
ctypes.windllfor console title and tray icon promotion (Windows API)winregfor notification area registry settingstasklistfor NVIDIA Broadcast process detectionkeyboardlibrary for global hotkeys (requires Windows)pyautoguifor clipboard paste simulation
Porting to macOS or Linux would require replacing these Windows-specific components.
- OpenAI Whisper -- The speech recognition model
- NVIDIA Broadcast -- AI noise removal
- pystray -- System tray icon
- sounddevice -- Audio capture
- keyboard -- Global hotkeys
This project is licensed for personal and non-commercial use only. See LICENSE for details.