A local dictation app for macOS and Windows: speak naturally, get clean, formatted text pasted into any app — with local Whisper transcription and local Ollama cleanup. Nothing leaves the machine.
Locution is a fork of Handy, the free, open-source, extensible speech-to-text app that works completely offline. Handy proved out the whole pipeline — global hotkey, mic capture, VAD, local Whisper, optional LLM post-processing, paste — Locution builds on that with a configurable push-to-talk hotkey and adaptive-latency Ollama cleanup.
- Free & local: nothing leaves your machine — no cloud, no accounts
- Open Source: built on Handy, extend it for yourself
- Private: your voice stays on your computer
- Adaptive: short dictation returns fast; long dictation is cleaned more thoroughly
- Hold your push-to-talk hotkey to start recording
- Speak your words while the key is held
- Release and Locution transcribes your speech using Whisper, then cleans it up with a local Ollama model
- Get your transcribed text pasted directly into whatever app you're using
The process is entirely local:
- Silence is filtered using VAD (Voice Activity Detection) with Silero
- Transcription uses your choice of models:
- Whisper models (Small/Medium/Turbo/Large) with GPU acceleration when available
- Parakeet V3 - CPU-optimized model with excellent performance and automatic language detection
- Runs on macOS and Windows
- Download the latest
Locution_x.y.z_aarch64.dmgfrom the releases page. - Open the
.dmgand drag Locution into your Applications folder. - The build is unsigned, so macOS Gatekeeper warns on first launch. Right-click Locution and choose Open once, or clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/Locution.app
- Install Ollama for local AI cleanup, then pull the models Locution uses:
On Apple Silicon, pull the Metal-accelerated variants instead for lower latency:
ollama pull qwen3.5:2b ollama pull gemma4:12b
Keep Ollama running (ollama pull qwen3.5:2b-mlx ollama pull gemma4:12b-mlx
ollama serve). The speech-to-text model downloads on first launch. - Launch Locution and grant Microphone and Accessibility permissions when prompted.
- Hold the push-to-talk hotkey (default Ctrl+Space), speak, and release — your text is transcribed and pasted into the active app. Change the hotkey in Settings.
Windows builds (x64 and ARM64) are available on the releases page:
- Download the
.msior.exeinstaller from the releases page. - The build is unsigned, so Windows SmartScreen warns on first launch. The warning (for example, "Locution … isn't commonly downloaded") is expected — it means Windows can't yet verify the publisher, not that the file is unsafe. If your browser blocks the download, choose Keep. Then run the installer, click More info, and choose Run anyway.
- Install Ollama, pull the same two models listed above, and keep it running.
- Launch Locution, grant the microphone prompt, and use the default Ctrl+Space push-to-talk hotkey (change it in Settings).
Per-app auto-mode keys on the process name on Windows (for example Code.exe). Screen-context ("Context") capture is macOS-only for now.
For detailed build instructions including platform-specific requirements, see BUILD.md.
Locution is a Tauri application combining:
- Frontend: React + TypeScript with Tailwind CSS for the settings UI
- Backend: Rust for system integration, audio processing, and ML inference
- Core libraries:
transcribe-cpp: local Whisper-family speech recognition (GGML/GGUF)transcribe-rs: CPU-optimized Parakeet speech recognitioncpal: cross-platform audio I/Ovad-rs: voice activity detectionrdev: global keyboard shortcuts and system eventsrubato: audio resampling
The internal crate keeps the upstream name handy, so a development build (cargo run) produces a handy binary while the packaged app ships as Locution.
Press Cmd+Shift+D (macOS) or Ctrl+Shift+D (Windows) to open the debug menu for development and troubleshooting.
The packaged app accepts single-instance control flags. Sending one to an already-running instance toggles or cancels it:
Locution --toggle-transcription # Toggle recording on/off
Locution --toggle-post-process # Toggle recording with cleanup on/off
Locution --cancel # Cancel the current operationStartup flags: --start-hidden, --no-tray, --debug, --help.
On macOS the binary lives inside the app bundle:
/Applications/Locution.app/Contents/MacOS/Locution --toggle-transcriptionLocution is early and under active development.
- Whisper crashes on some configurations. A minority of Windows machines hit a configuration-dependent crash with Whisper models. Parakeet V3 (CPU) is a reliable fallback. If you can reproduce it and are a developer, debug logs help.
- Context mode is macOS-only. Screen-context capture (reading selected text near the cursor) is not yet implemented on Windows; the rest of the pipeline works there.
- Builds are unsigned. First launch requires the Gatekeeper/SmartScreen steps in Quick Start.
- macOS (Apple Silicon and Intel) — primary, validated
- Windows (x64 and ARM64) — available
- Linux (x64 and ARM64) — experimental
Each release builds Linux packages (.deb, .rpm, and .AppImage) inherited from Handy's Linux support, but they are not yet tested for Locution. Treat them as experimental.
Whisper models:
- macOS: Apple Silicon or Intel
- Windows: Intel, AMD, or NVIDIA GPU (Vulkan) on x64; CPU on ARM64
Parakeet V3 (CPU):
- Runs CPU-only on a wide range of hardware
- Minimum: Intel Skylake (6th gen) or equivalent AMD
- ~5x real-time on mid-range hardware; automatic language detection
If you're behind a proxy, firewall, or in a restricted network environment where Locution cannot download models automatically, you can manually download and install them. The URLs are publicly accessible from any browser.
- Open Locution settings
- Navigate to the About section
- Copy the "App Data Directory" path shown there, or use the shortcuts:
- macOS:
Cmd+Shift+Dto open debug menu - Windows:
Ctrl+Shift+Dto open debug menu
- macOS:
The typical paths are:
- macOS:
~/Library/Application Support/com.locution.mac/ - Windows:
C:\Users\{username}\AppData\Roaming\com.locution.mac\
Inside your app data directory, create a models folder if it doesn't already exist:
# macOS
mkdir -p ~/Library/Application\ Support/com.locution.mac/models
# Windows (PowerShell)
New-Item -ItemType Directory -Force -Path "$env:APPDATA\com.locution.mac\models"Download the models you want from below
Whisper Models (single .bin files):
- Small (487 MB):
https://blob.handy.computer/ggml-small.bin - Medium (492 MB):
https://blob.handy.computer/whisper-medium-q4_1.bin - Turbo (1600 MB):
https://blob.handy.computer/ggml-large-v3-turbo.bin - Large (1100 MB):
https://blob.handy.computer/ggml-large-v3-q5_0.bin
Parakeet Models (compressed archives):
- V2 (473 MB):
https://blob.handy.computer/parakeet-v2-int8.tar.gz - V3 (478 MB):
https://blob.handy.computer/parakeet-v3-int8.tar.gz
For Whisper Models (.bin files):
Simply place the .bin file directly into the models directory:
{app_data_dir}/models/
├── ggml-small.bin
├── whisper-medium-q4_1.bin
├── ggml-large-v3-turbo.bin
└── ggml-large-v3-q5_0.bin
For Parakeet Models (.tar.gz archives):
- Extract the
.tar.gzfile - Place the extracted directory into the
modelsfolder - The directory must be named exactly as follows:
- Parakeet V2:
parakeet-tdt-0.6b-v2-int8 - Parakeet V3:
parakeet-tdt-0.6b-v3-int8
- Parakeet V2:
Final structure should look like:
{app_data_dir}/models/
├── parakeet-tdt-0.6b-v2-int8/ (directory with model files inside)
│ ├── (model files)
│ └── (config files)
└── parakeet-tdt-0.6b-v3-int8/ (directory with model files inside)
├── (model files)
└── (config files)
Important Notes:
- For Parakeet models, the extracted directory name must match exactly as shown above
- Do not rename the
.binfiles for Whisper models—use the exact filenames from the download URLs - After placing the files, restart Locution to detect the new models
- Restart Locution
- Open Settings → Models
- Your manually installed models should now appear as "Downloaded"
- Select the model you want to use and test transcription
Locution can auto-discover custom Whisper GGML models placed in the models directory. This is useful for users who want to use fine-tuned or community models not included in the default model list.
How to use:
- Obtain a Whisper model in GGML
.binformat (e.g., from Hugging Face) - Place the
.binfile in yourmodelsdirectory (see paths above) - Restart Locution to discover the new model
- The model will appear in the "Custom Models" section of the Models settings page
Important:
- Community models are user-provided and may not receive troubleshooting assistance
- The model must be a valid Whisper GGML format (
.binfile) - Model name is derived from the filename (e.g.,
my-custom-model.bin→ "My Custom Model")
MIT License — see LICENSE for details.
Locution is an unofficial fork of Handy and is not affiliated with or endorsed by the Handy project. Per Handy's terms, the Handy name, logo, icon, and brand assets are not open-source; Locution uses its own branding and does not imply any endorsement or affiliation.
- Handy by CJ Pais — the upstream project Locution is built on
- Whisper by OpenAI for the speech recognition model
- ggml and transcribe.cpp for cross-platform speech-to-text inference
- Silero for lightweight VAD
- Tauri for the Rust-based app framework