-
Notifications
You must be signed in to change notification settings - Fork 0
installation
- OS: Any modern Linux distro (Ubuntu 20.04+, Fedora 36+, Arch, etc.)
- Display: X11 or Wayland
- Audio: PulseAudio or PipeWire (ALSA fallback supported)
-
Required packages:
libwebkit2gtk-4.1,libayatana-appindicator3orlibappindicator3 -
Optional:
wtype(Wayland injection),xdotool(X11 injection) -
For Kokoro TTS:
espeak-ng(phonemisation), ONNX Runtime (inference — see Kokoro TTS below)
- OS: Windows 10 (1903+) or Windows 11
- Runtime: WebView2 (pre-installed on Win11; auto-downloadable on Win10)
The recommended distribution format is an AppImage — a single portable executable with all dependencies bundled.
# Download the latest AppImage
curl -LO https://github.com/jrufer/voxctrl/releases/latest/download/VoxCtrl.AppImage
# Make executable
chmod +x VoxCtrl.AppImage
# Run
./VoxCtrl.AppImageOr use the install script for system integration (desktop entry, udev rules):
bash install.shThe install script:
- Copies the AppImage to
~/.local/bin/voxctrl - Installs a
.desktopfile for application launchers - Creates udev rules for
/dev/inputaccess (required for global hotkeys) - Adds the current user to the
inputgroup
Note: After running
install.sh, you must log out and back in for theinputgroup membership to take effect. Until then, global hotkeys will not work.Robust Container / Sandbox Support: VoxCtrl employs intelligent diagnostic checks that support legacy rule files (
99-voxctrl.rules,99-voxctl.rules, or99-voxctr.rules) and dynamically fallback to checking the system's NSS group database (/etc/group) if the current container process session fails to refresh its active group token, ensuring that the warning screen does not show up repeatedly on every launch.
VoxCtrl uses evdev to listen for global keyboard events. Your user must be in the input group:
sudo usermod -aG input $USER
# Log out and back inVerify:
groups $USER | grep inputFor Wayland sessions, install wtype:
# Ubuntu/Debian
sudo apt install wtype
# Arch
sudo pacman -S wtype
# Fedora
sudo dnf install wtypeFor X11 sessions, install xdotool:
# Ubuntu/Debian
sudo apt install xdotool
# Arch
sudo pacman -S xdotoolOn first launch, VoxCtrl will:
- Create
~/.config/voxctrl/with defaultconfig.json,targets.toml, andbindings.toml - Create
~/.local/share/voxctrl/for model and voice storage - Open the Settings window
Before you can dictate, you need a speech recognition model:
- Go to Settings → Engine
- Choose a model size (recommendation:
smallfor a good speed/accuracy balance; the default islarge-v3for maximum accuracy) - Click "Download" and wait for completion (~142 MB for
base, ~466 MB forsmall, ~3 GB forlarge-v3)
A default binding (Super + Space, hold gesture → inject to focused window) is created automatically. Verify it in Settings → Hotkeys, or change the key combo if it conflicts with your desktop environment.
- Open any text editor
- Click into the text area
- Hold
Super + Spaceand speak - Release to transcribe
Vulkan (AMD / Intel / NVIDIA): Set engine.whisper_cpp.device = "vulkan" in config, or choose "Vulkan" in Settings → Engine. Install driver support if needed:
# Ubuntu
sudo apt install vulkan-tools libvulkan1
# Arch
sudo pacman -S vulkan-icd-loaderNVIDIA CUDA: CUDA acceleration requires a CUDA-enabled build of VoxCtrl — it is not available in the standard pre-built AppImage. You must compile from source with:
npm run tauri build -- --features cudaOnce running a CUDA build, set engine.whisper_cpp.device = "auto" (or "cuda") and VoxCtrl will use the GPU automatically. The "CUDA (NVIDIA)" option in Settings → Engine is only shown when the binary was compiled with CUDA support.
If you want LLM grammar correction:
- Install Ollama
- Pull a model:
ollama pull llama3.2 - Enable in Settings → Ollama
The Kokoro neural TTS engine requires two system components. install.sh handles both automatically; for manual setup:
1. espeak-ng (phonemisation):
# Ubuntu/Debian
sudo apt install espeak-ng
# Arch
sudo pacman -S espeak-ng
# Fedora
sudo dnf install espeak-ng
# openSUSE
sudo zypper install espeak-ng2. ONNX Runtime (model inference):
# Arch (via AUR)
yay -S onnxruntime
# All other distros
pip install onnxruntimeNote: VoxCtrl auto-discovers the ONNX Runtime library at launch — it searches common system paths and queries
python3for the location of any installedonnxruntimepackage (includingpip --userinstalls). If auto-discovery fails, setORT_DYLIB_PATH=/path/to/libonnxruntime.soin your environment before launching VoxCtrl.
Once both prerequisites are installed, download the Kokoro model from Settings → TTS → Kokoro. The fp16 quality preset (169 MB) is recommended for most systems.
- Enable in Settings → Engine → MCP Server
- Configure your MCP client to connect to
/tmp/voxctrl-mcp.sock
See Development Guide.
- Check you are in the
inputgroup:groups | grep input - Log out and back in after adding to group
- On some distros, the udev rule path differs — check
install.shfor details
- Run
arecord -lto verify your mic is recognized by ALSA - Check if PulseAudio/PipeWire is running:
pactl info - Try setting
audio.input_device_indexmanually to a specific device index (integer, not null)
- Verify
wtypeis installed:which wtype - Some applications block synthetic input (e.g. terminals with certain settings)
- Clipboard fallback always works — use
delivery = "clipboard"as a workaround
- Set
engine.languageto your language code (e.g."de","fr","es") - Use a larger model for better non-English accuracy
- Install FUSE:
sudo apt install fuse libfuse2 - Or extract and run directly:
./VoxCtrl.AppImage --appimage-extract && squashfs-root/AppRun
If the application crashes, fails to launch, or encounters hardware/model errors, you can check the local startup and error log file:
-
Location:
~/.local/share/voxctrl/startup_errors.log - Privacy: To protect your privacy, this file never records or contains any transcribed speech text or LLM prompts. It only logs system configurations (models loaded, input devices, sample rates) and application/compiler errors.
- Submitting Reports: Please attach this log file when opening issues or submitting crash reports on GitHub to help us diagnose the problem.