A free, local voice-to-text tool that transcribes your speech and types it anywhere — browser, VS Code, Notepad, Slack, or any other application. No cloud subscription required.
If you want to learn how to build tools like this yourself, subscribe to FuturMinds.
| Feature | Description |
|---|---|
| Global hotkey | Hold a configurable key combo to record; release to transcribe and paste |
| Local transcription | Uses faster-whisper — fully offline, no API costs |
| Filler removal | Automatically strips um, uh, you know, like, basically |
| Smart corrections | Backtracks on "actually" / "I mean" — deletes the last word or sentence |
| Numbered lists | Converts "first… second… third…" into 1. 2. 3. |
| Smart punctuation | Converts dictated words like "comma", "period", "new line" |
| AI rewriting | Optional polish via Gemini, OpenAI, or Claude — with custom style/tone instructions |
| Transcription history | Last 100 transcriptions with copy-on-click |
| Cross-platform | Windows 10/11 and macOS |
Don't want to deal with Python or code? Just download and run.
👉 Download WisprTool.exe — Windows 10/11, no installation needed.
- Download
WhisperTool.exefrom the link above - Double-click to run
- Hold Alt + Ctrl, speak, release — text pastes wherever your cursor is
First launch downloads the Whisper model (~104 MB) once. Everything after that is instant.
Want to see how this was built from scratch in 20 minutes? 📺 Watch the full build on YouTube
- Install Python 3.10+ (check "Add to PATH")
- Double-click
install.bat— installs all dependencies - Double-click
run.bat— launches WisprTool - Hold Alt + Ctrl (default), speak, release — text is pasted at your cursor
- Install Python 3 or via Homebrew:
brew install python3 - Open Terminal in the project folder and run:
chmod +x run.command pip3 install -r requirements.txt
- Double-click
run.command— launches WisprTool - Grant permissions when prompted:
- Accessibility — for global hotkey detection System Settings → Privacy & Security → Accessibility → add Python/WisprTool
- Microphone — for recording System Settings → Privacy & Security → Microphone → allow
- Hold Alt + Ctrl (default), speak, release — text is pasted at your cursor
First run downloads the Whisper
basemodel (~150 MB). Subsequent runs are instant.
If you received a WisprTool.exe file:
- Place it in any folder
- Double-click to run — no Python or installation needed
- On first run, the Whisper model downloads to
%USERPROFILE%\.cache\huggingface\ - Settings are saved as
config.jsonin the same folder as the exe
Share the single WisprTool.exe file with anyone on Windows. They need no additional software.
- Position your cursor in any text field in any application
- Hold the hotkey (default: Alt + Ctrl) — a circular animated overlay appears
- Speak — the waveform responds to your voice
- Release the hotkey — a loading spinner shows while transcribing
- Your text is pasted at the cursor automatically
- Click Change next to the hotkey display
- Press and hold your desired modifier keys (e.g., Ctrl + Shift)
- Release — the new hotkey is saved automatically
- Tick Enable AI rewriting in the AI Rewriting section
- Choose a provider: Gemini, OpenAI, or Claude
- Paste your API key
- Optionally add style/tone instructions, e.g. "Professional and concise"
- Click Apply Settings to save (you'll see a green confirmation)
- Every transcription is now automatically polished by the AI before pasting
If the AI call fails, the error message appears in red below the Apply button.
# 1. Install build dependencies
pip install pyinstaller
# 2. Run the build script
build.batThe exe is created at dist\WisprTool.exe.
# 1. Install build dependencies
pip3 install pyinstaller
# 2. Make the script executable and run it
chmod +x build.sh
./build.shThe binary is created at dist/WisprTool.
macOS app signing: Unsigned macOS binaries may be blocked by Gatekeeper. Right-click → Open the first time, or run:
xattr -dr com.apple.quarantine dist/WisprTool
wisprTool/
├── main.py # Main application (UI, audio, transcription, AI)
├── text_processor.py # Text post-processing (fillers, backtrack, lists, punctuation)
├── requirements.txt # Python dependencies
│
├── install.bat # Windows: install dependencies
├── run.bat # Windows: launch without console window
├── run.command # macOS: launch script
├── build.bat # Windows: build single .exe
├── build.sh # macOS: build single binary
│
├── VERSION # Current version (read by the app at runtime)
├── CHANGELOG.md # Release history
├── README.md # This file
├── .gitignore # Git ignore rules
│
└── config.json # Auto-created at runtime (not committed)
Settings are saved automatically to config.json. You can also edit it manually:
{
"hotkey": ["alt", "ctrl"],
"model_size": "base",
"language": "en",
"remove_fillers": true,
"backtrack": true,
"numbered_lists": true,
"smart_punctuation": true,
"ai_rewrite": false,
"ai_provider": "Gemini",
"ai_api_keys": {
"Gemini": "",
"OpenAI": "",
"Claude": ""
},
"ai_style": ""
}Model sizes (larger = more accurate but slower):
tiny · base (default) · small · medium · large-v3
Language: Set to en for English, or leave empty for auto-detect.
- Go to aistudio.google.com/apikey
- Create an API key and paste it in WisprTool
- Go to platform.openai.com/api-keys
- Create an API key and paste it in WisprTool
- Go to console.anthropic.com
- Create an API key and paste it in WisprTool
| Package | Purpose |
|---|---|
faster-whisper |
Local speech-to-text (Whisper model, CTranslate2 backend) |
sounddevice |
Microphone audio capture |
numpy |
Audio data processing |
pynput |
Cross-platform global hotkey detection |
pyperclip |
Clipboard read/write |
pyautogui |
Simulate Ctrl+V / Cmd+V paste |
All AI API calls use Python's built-in urllib — no extra HTTP library needed.
WisprTool uses Semantic Versioning (MAJOR.MINOR.PATCH).
Where the version lives:
VERSIONfile at the project root — single source of truth- Shown in the app title bar: "WhisperTool v1.0.0 (by FuturMinds)"
- Bundled into the exe automatically by the build scripts
To cut a new release:
# 1. Update the VERSION file
echo "1.1.0" > VERSION
# 2. Update CHANGELOG.md with new entries under ## [1.1.0]
# 3. Commit, tag, push
git add VERSION CHANGELOG.md
git commit -m "Release v1.1.0"
git tag -a v1.1.0 -m "Release v1.1.0 — <short summary>"
git push origin master --tags
# 4. Build the exe (Windows) or binary (macOS)
build.bat # Windows
./build.sh # macOS
# 5. Upload dist/WisprTool.exe as a GitHub Release asset
gh release create v1.1.0 dist/WisprTool.exe --title "v1.1.0" --notes "See CHANGELOG.md"Version bumping guide:
PATCH(1.0.0 → 1.0.1) — bug fixes, minor tweaksMINOR(1.0.0 → 1.1.0) — new features, backward compatibleMAJOR(1.0.0 → 2.0.0) — breaking changes to config or behavior
All past releases are documented in CHANGELOG.md.
No text is pasted
- Make sure your cursor is in a text field before releasing the hotkey
- On Mac, verify Accessibility permission is granted
"Permission denied" on microphone
- Mac: System Settings → Privacy → Microphone → allow Python or WisprTool
- Windows: Settings → Privacy → Microphone → allow desktop apps
Hotkey not detected
- Mac: Accessibility permission is required for
pynputto detect keys globally - Try running as administrator on Windows if using a restricted account
AI rewriting fails
- Double-check your API key
- Verify you have credits/quota on the provider's dashboard
First run is slow
- The Whisper model (~150 MB for
base) downloads once on first use
Drop feature requests as GitHub Issues — the most upvoted ones get built in the next version.
If this saved you $12/month, a GitHub star takes 2 seconds and helps others find it.