Voice-to-text with push-to-talk for Wayland compositors
Voice-to-text with push-to-talk for Wayland compositors
Voice-to-text for Linux. 9-11× realtime on your CPU. Local by default.
Hold a hotkey (default: ScrollLock) while speaking, release to transcribe and output the text at your cursor position. Voxtype runs Cohere Transcribe (#1 on the Open ASR Leaderboard) faster than realtime on a plain Zen 4 CPU. Parakeet, Whisper, and six more engines if you want them. No cloud, no subscription, no telemetry.
"comma" → ,), per-user replacement tables for common mistranscriptions, and an optional post-processing pipe through any LLM or shell script. Fix domain terms, drop filler words, polish grammar — all without leaving voxtype.voxtype configure or one config line. CJK and 1600+ languages covered by the multilingual engines.voxtype configure (also surfaces in Walker / fuzzel / rofi) edits every option in ~/.config/voxtype/config.toml for you — no hand-editing TOML. Auto-downloads missing models, swaps GPU binaries via pkexec, restarts the daemon when needed.voxtype, voxtype-bin, plus voxtype-bin-rc for testers who want pre-release builds — see docs/INSTALL.md), .deb, .rpm, Homebrew on macOS. Signed release binaries from a reproducible Docker pipeline.Most users should install a pre-built package. The steps below are for building from source.
…For the full per-distro dependency matrix (including GPU backends), see docs/INSTALL.md.
Voxtype works best with your compositor's native keybindings. Add these to your compositor config.
Not sure which compositor you have? Run
echo $XDG_CURRENT_DESKTOPin a terminal. Common values:Hyprland,sway,river,KDE,GNOME.
Hyprland (~/.config/hypr/hyprland.conf):
bind = SUPER, V, exec, voxtype record start
bindr = SUPER, V, exec, voxtype record stopSway (~/.config/sway/config):
bindsym --no-repeat $mod+v exec voxtype record start
bindsym --release $mod+v exec voxtype record stopRiver (~/.config/river/init):
riverctl map normal Super V spawn 'voxtype record start'
riverctl map -release normal Super V spawn 'voxtype record stop'KDE Plasma (KWin):
KDE does not support key-release events, so use toggle mode. Open System Settings > Shortcuts > Custom Shortcuts, create a new shortcut, and set the command to:
voxtype record toggleAssign your preferred key combination (e.g., Meta+V). Since KDE handles the keybinding, the built-in hotkey should be disabled (see below).
Then disable the built-in hotkey in your config:
# ~/.config/voxtype/config.toml
[hotkey]
enabled = falseX11 / Built-in hotkey fallback: If you're on X11 or prefer voxtype's built-in hotkey (ScrollLock by default), add yourself to the
inputgroup:sudo usermod -aG input $USERand log out/in. See the User Manual for details.
Omarchy / Multi-modifier keybindings: If using keybindings with multiple modifiers (e.g.,
SUPER+CTRL+X), releasing keys slowly can cause typed text to trigger window manager shortcuts instead of inserting text. See Modifier Key Interference in the troubleshooting guide for the solution using output hooks and Hyprland submaps.
voxtype (it runs as a foreground daemon)Press Ctrl+C to stop the daemon.
If you prefer to press once to start recording and again to stop (instead of holding):
# Via command line
voxtype --toggle
# Or in config.toml
[hotkey]
key = "SCROLLLOCK"
mode = "toggle"For longer recordings like meetings and interviews, meeting mode provides continuous transcription with automatic chunking, speaker attribution, and export.
# Start a meeting
voxtype meeting start --title "Weekly standup"
# Check status
voxtype meeting status
# Stop and export
voxtype meeting stop
voxtype meeting export latest --format markdown --speakers --timestampsMeetings are stored locally and can be exported to Markdown, plain text, JSON, SRT, or VTT. Use voxtype meeting list to see past meetings, and voxtype meeting summarize latest to generate an AI summary via Ollama.
Config file location: ~/.config/voxtype/config.toml
See config/default.toml for the full annotated default configuration.
…Enable audio feedback to hear a sound when recording starts and stops:
[audio.feedback]
enabled = true
theme = "default" # Built-in themes: default, subtle, mechanical
volume = 0.7 # 0.0 to 1.0Built-in themes:
default - Clear, pleasant two-tone beepssubtle - Quiet, unobtrusive clicksmechanical - Typewriter/keyboard-like soundsCustom themes: Point theme to a directory containing start.wav, stop.wav, and error.wav files.
Voxtype can post-process transcribed text with word replacements and spoken punctuation.
Word replacements fix commonly misheard words:
[text]
replacements = { "vox type" = "voxtype", "oh marky" = "Omarchy" }Spoken punctuation (opt-in) converts spoken words to symbols - useful for developers:
[text]
spoken_punctuation = trueWith this enabled, saying "function open paren close paren" outputs function(). Supports period, comma, brackets, braces, newlines, and many more. See CONFIGURATION.md for the full list.
For advanced cleanup, you can pipe transcriptions through an external command like a local LLM for grammar correction, filler word removal, or text formatting:
[output.post_process]
command = "ollama run llama3.2:1b 'Clean up this dictation. Fix grammar, remove filler words:'"
timeout_ms = 30000 # 30 second timeout for LLMThe command receives text on stdin and outputs cleaned text on stdout. On any failure (timeout, error), Voxtype gracefully falls back to the original transcription.
See CONFIGURATION.md for more examples including scripts for LM Studio, Ollama, and llama.cpp.
…| Model | Size | English WER | Speed |
|---|---|---|---|
| tiny.en | 39 MB | ~10% | Fastest |
| base.en | 142 MB | ~8% | Fast |
| small.en | 466 MB | ~6% | Medium |
| medium.en | 1.5 GB | ~5% | Slow |
| large-v3 | 3 GB | ~4% | Slowest |
| large-v3-turbo | 1.6 GB | ~4% | Fast |
For most uses, base.en provides a good balance of speed and accuracy. If you have a GPU, large-v3-turbo offers excellent accuracy with fast inference.
The .en models are English-only but faster and more accurate for English. For other languages, use large-v3 which supports 99 languages.
Use Case 1: Transcribe in the spoken language (speak French, output French)
[whisper]
model = "large-v3"
language = "auto" # Auto-detect and transcribe in that language
translate = falseUse Case 2: Translate to English (speak French, output English)
[whisper]
model = "large-v3"
language = "auto" # Auto-detect the spoken language
translate = true # Translate output to EnglishUse Case 3: Force a specific language (always transcribe as Spanish)
[whisper]
model = "large-v3"
language = "es" # Force Spanish transcription
translate = falseWith GPU acceleration, large-v3 achieves sub-second inference while supporting all languages.
Voxtype ships separate binaries for Whisper and ONNX engines. Use voxtype setup onnx --enable to switch to the ONNX binary, or --disable to switch back.
| Engine | Languages | Architecture | Best For |
|---|---|---|---|
| Whisper (default) | 99 languages | Encoder-decoder (whisper.cpp) | General use, multilingual |
| Parakeet | English | FastConformer TDT (ONNX) | Fast English transcription |
| Moonshine | English | Encoder-decoder (ONNX) | Edge devices, low memory |
| SenseVoice | zh, en, ja, ko, yue | CTC encoder (ONNX) | Chinese, Japanese, Korean |
| Paraformer | zh+en, zh+yue+en | Non-autoregressive (ONNX) | Chinese-English bilingual |
| Dolphin | 40 languages + 22 Chinese dialects | CTC E-Branchformer (ONNX) | Eastern languages (no English) |
| Omnilingual | 1600+ languages | wav2vec2 CTC (ONNX) | Low-resource and rare languages |
| Cohere Transcribe | 14 languages | Encoder-decoder (ONNX) | Fast CPU dictation with punctuation |
| OpenVINO Whisper | 99 languages | Encoder-decoder (OpenVINO) | Intel NPU (Lunar Lake), CPU/GPU fallback |
To set the engine in your config:
engine = "sensevoice" # or: whisper, parakeet, moonshine, paraformer, dolphin, omnilingual, cohere, openvinoOr override on the command line:
voxtype --engine sensevoiceVoxtype supports optional GPU acceleration for significantly faster inference. With GPU acceleration, even the large-v3 model can achieve sub-second inference times.
Packages include a Vulkan binary. To enable GPU acceleration:
# Install Vulkan runtime (if not already installed)
# Arch:
sudo pacman -S vulkan-icd-loader
# Ubuntu/Debian:
sudo apt install libvulkan1
# Fedora:
sudo dnf install vulkan-loader
# Enable GPU acceleration
sudo voxtype setup gpu --enable
# Check status
voxtype setup gpuTo switch back to CPU: sudo voxtype setup gpu --disable
No open issues yet, or sync has not completed.