* feat(speech): add whisper.cpp with Vulkan support for GPU acceleration Add whisper.cpp as a new speech recognition engine with the following features: - Vulkan GPU acceleration support (AMD, Intel, NVIDIA) - Fallback to CUDA for NVIDIA GPUs - CPU-only mode with automatic thread optimization - Support for all model sizes: tiny, base, small, medium, large - Hardware detection to recommend best model/backend - Models downloaded from Hugging Face (ggml format) - Updated UI to show compute backend info in settings - pywhispercpp as the Python binding library - whisper_cpp as the new default engine Changes: - New whispercpp_model_info.py with model metadata and hardware detection - Updated recognition_manager.py with whisper.cpp init and transcription - Updated settings_dialog.py with whisper.cpp UI support - Updated config_manager.py with whisper_cpp_model_size config - Updated main.py with whisper_cpp CLI option - Updated pyproject.toml with pywhispercpp dependency - Updated install.sh with vulkan-tools for GPU detection Closes #104 * style: fix black and isort formatting issues * test: update config manager test for whisper_cpp default engine * feat(install): interactive mode with 3 engine choices and whisper.cpp as default Major changes to install.sh: - Interactive mode is now the DEFAULT (not --auto) - Added --auto flag for non-interactive automatic installation - New --engine flag to specify engine directly - Interactive mode shows 3 engine options with visual boxes: 1. whisper.cpp (recommended) - Vulkan/CUDA/CPU support 2. whisper (OpenAI) - PyTorch-based, NVIDIA-only 3. VOSK - lightweight option - Hardware detection with recommendations: - Detects Vulkan support (AMD/Intel/NVIDIA) - Detects NVIDIA CUDA - Checks available RAM - Recommends best engine based on hardware - Updated help text with new options and examples - Removed old --with-whisper, --whisper-cpu, --no-whisper flags - whisper.cpp is now the default engine for automatic mode * feat(uninstall): kill running vocalinux processes before uninstall * fix(whisper.cpp): auto-download model, use all CPU cores, hide unavailable engines Three fixes for whisper.cpp implementation: 1. Auto-download model during install - Added install_whispercpp_model() function to install.sh - Downloads ggml-tiny.bin (~39MB) from Hugging Face - Runs automatically when whisper.cpp engine is selected 2. Use all CPU cores for transcription - Added n_threads parameter to Model initialization - Uses multiprocessing.cpu_count() to get all cores - Significantly improves transcription speed 3. Hide unavailable engines from dropdown - Added get_available_engines() function to detect installed engines - Settings dialog now only shows engines that are actually installed - Falls back to first available engine if current not available Fixes user-reported issues with whisper.cpp integration. * ui(settings): display whisper.cpp correctly and increase dialog height - Changed engine display name from 'whisper_cpp' to 'whisper.cpp' - Added format_engine_display_name() helper function - Dialog now uses 75% of screen height for better visibility - More options visible by default without scrolling * revert(settings): remove display name change, keep dialog height increase - Reverted engine display name change (was breaking engine selection) - Kept dialog height at 75% of screen for better visibility * style: fix black and isort formatting for whisper.cpp logging * style: fix black formatting in settings_dialog.py * ci: fix Fedora 39 container package installation Add dnf cache update and fallback with --nogpgcheck for Fedora containers that may have stale or missing package metadata.
Vocalinux
Voice-to-text for Linux, finally done right!
A seamless free open-source private voice dictation system for Linux, comparable to built-in solutions on macOS and Windows.
📚 What's New in v0.5.0-beta
We're excited to announce our first Beta release! Vocalinux has evolved significantly since the last alpha, with numerous bug fixes and feature improvements.
🐛 Critical Bug Fixes
- Fixed text escaping issues (apostrophes and quotes no longer have backslash escapes)
- Fixed stop sound being transcribed as "thank you"
- Fixed missing spaces after punctuation when transcribing again
✨ Key New Features
- Customizable keyboard shortcuts - Configure your own activation shortcuts via GUI
- Modern GNOME HIG settings dialog - Complete UI overhaul following GNOME design guidelines
- Pleasant audio feedback - Gliding tones replace harsh beeps
- Interactive installer with GPU detection - Smart hardware auto-detection
- Better Wayland support - Native keyboard shortcuts without XWayland
🔧 Quality Improvements
- 80%+ test coverage - Comprehensive test suite across all modules
- Microphone reconnection - Automatic recovery when microphone disconnects
- Audio buffer management - Prevents memory issues during long recordings
🎉 Beta Release!
We're excited to share Vocalinux Beta with the community! See "What's New" above for details on this release.
✨ Features
- 🎤 Double-tap Ctrl to start/stop voice dictation
- ⚡ Real-time transcription with minimal latency
- 🌎 Universal compatibility across all Linux applications
- 🔒 Offline operation for privacy and reliability (with VOSK)
- 🤖 Optional Whisper AI support for enhanced accuracy
- 🎨 System tray integration with visual status indicators
- 🔊 Pleasant audio feedback - smooth gliding tones, headphone-friendly
- ⚙️ Graphical settings dialog for easy configuration
📸 Screenshots
Here are some screenshots showcasing Vocalinux in action:
![]() Real-time voice-to-text transcription |
![]() System tray with listening indicator |
![]() About view with version info |
![]() Log viewer for debugging |
![]() Overview of key features and configuration options with annotations |
|
🚀 Quick Install
Interactive Install (Recommended for New Users)
Let the installer guide you through the setup with smart hardware detection:
curl -fsSL raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh --tag=v0.5.0-beta --interactive
The interactive installer will:
- Auto-detect your hardware (GPU, RAM)
- Recommend the best configuration for your system
- Guide you through each step with clear explanations
- Show you how to launch and use Vocalinux after installation
One-liner Installation (Quick Install)
curl -fsSL raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh --tag=v0.5.0-beta
Note
: Installs v0.5.0-beta. For the most recent version, check GitHub Releases.
GPU Detection: The installer now automatically detects NVIDIA GPUs and uses CPU-only PyTorch when no GPU is present, saving you ~2GB of download!
This will:
- Clone the repository to
~/.local/share/vocalinux-install - Install all system dependencies
- Set up a virtual environment in
~/.local/share/vocalinux/venv - Install both VOSK and Whisper AI speech engines:
- VOSK: installs the
voskPython package from PyPI - Whisper: installs the
openai-whisperpackage from PyPI, which also pulls in PyTorch (the ML framework Whisper requires)
- VOSK: installs the
- Create a symlink at
~/.local/bin/vocalinux - Download the default Whisper tiny speech model (~75MB)
⏱️ Note: Installation takes ~5-10 minutes due to Whisper AI dependencies (PyTorch with CUDA support, ~2.3GB).
Whisper with CPU-only PyTorch (no NVIDIA GPU needed):
curl -fsSL raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh --tag=v0.5.0-beta --whisper-cpu
This installs Whisper with CPU-only PyTorch (~200MB instead of ~2.3GB). Works great for systems without NVIDIA GPU.
For low-RAM systems (8GB or less) - VOSK only:
curl -fsSL raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh --tag=v0.5.0-beta --no-whisper
This skips Whisper installation entirely and configures VOSK as the default engine.
Alternative: Install from Source
# Clone the repository
git clone https://github.com/jatinkrmalik/vocalinux.git
cd vocalinux
# Run the installer (will prompt for Whisper)
./install.sh
# Or with Whisper support
./install.sh --with-whisper
The installer handles everything: system dependencies, Python environment, speech models, and desktop integration.
After Installation
# If ~/.local/bin is in your PATH (recommended):
vocalinux
# Or activate the virtual environment first:
source ~/.local/bin/activate-vocalinux.sh
vocalinux
# Or run directly:
~/.local/share/vocalinux/venv/bin/vocalinux
Or launch it from your application menu!
📚 What's New in v0.5.0-beta
We're excited to announce our first Beta release! Vocalinux has evolved significantly since the last alpha, with numerous bug fixes and feature improvements.
🐛 Critical Bug Fixes
- Fixed text escaping issues (apostrophes and quotes no longer have backslash escapes)
- Fixed stop sound being transcribed as "thank you"
- Fixed missing spaces after punctuation when transcribing again
✨ Key New Features
- Customizable keyboard shortcuts - Configure your own activation shortcuts via GUI
- Modern GNOME HIG settings dialog - Complete UI overhaul following GNOME design guidelines
- Pleasant audio feedback - Gliding tones replace harsh beeps
- Interactive installer with GPU detection - Smart hardware auto-detection
- Better Wayland support - Native keyboard shortcuts without XWayland
🔧 Quality Improvements
- 80%+ test coverage - Comprehensive test suite across all modules
- Microphone reconnection - Automatic recovery when microphone disconnects
- Audio buffer management - Prevents memory issues during long recordings
For a complete list of changes, see the release notes.
📋 Requirements
- OS: Linux (tested on Ubuntu 22.04+, Debian 11+, Fedora 39+, Arch Linux, openSUSE Tumbleweed)
- Python: 3.8 or newer
- Display: X11 or Wayland
- Hardware: Microphone for voice input
Note: See Distribution Compatibility for distribution-specific information and experimental support for Gentoo, Alpine, Void, Solus, and more.
🎙️ Usage
Voice Dictation
- Double-tap Ctrl to start recording
- Speak clearly into your microphone
- Double-tap Ctrl again (or pause speaking) to stop
Voice Commands
| Command | Action |
|---|---|
| "new line" | Inserts a line break |
| "period" / "full stop" | Types a period (.) |
| "comma" | Types a comma (,) |
| "question mark" | Types a question mark (?) |
| "exclamation mark" | Types an exclamation mark (!) |
| "delete that" | Deletes the last sentence |
| "capitalize" | Capitalizes the next word |
Command Line Options
vocalinux --help # Show all options
vocalinux --debug # Enable debug logging
vocalinux --engine whisper # Use Whisper AI engine
vocalinux --model medium # Use medium-sized model
vocalinux --wayland # Force Wayland mode
⚙️ Configuration
Configuration is stored in ~/.config/vocalinux/config.json:
{
"speech_recognition": {
"engine": "vosk",
"model_size": "small",
"vad_sensitivity": 3,
"silence_timeout": 2.0
}
}
You can also configure settings through the graphical Settings dialog (right-click the tray icon).
🔧 Development Setup
# Clone and install in dev mode
git clone https://github.com/jatinkrmalik/vocalinux.git
cd vocalinux
./install.sh --dev
# Activate environment
source venv/bin/activate
# Run tests
pytest
# Run from source with debug
python -m vocalinux.main --debug
📁 Project Structure
vocalinux/
├── src/vocalinux/ # Main application code
│ ├── speech_recognition/ # Speech recognition engines
│ ├── text_injection/ # Text injection (X11/Wayland)
│ ├── ui/ # GTK UI components
│ └── utils/ # Utility functions
├── tests/ # Test suite
├── scripts/ # Development utilities
│ └── generate_sounds.py # Sound generation script
├── resources/ # Icons and sounds
├── docs/ # Documentation
└── web/ # Website source
📖 Documentation
- Installation Guide - Detailed installation instructions
- Update Guide - How to update Vocalinux
- User Guide - Complete user documentation
- Contributing - Development setup and contribution guidelines
🔊 Sound Customization
Vocalinux uses smooth, pleasant gliding tones for audio feedback:
- Start: Ascending F4→A4 (0.6s) - positive, uplifting
- Stop: Descending A4→F4 (0.6s) - resolves completion
- Error: Lower descending E4→C4 (0.7s) - gentle but noticeable
All sounds use pure sine waves with smoothstep interpolation for buttery smooth pitch transitions - perfect for headphone use!
Regenerate Sounds
To modify or regenerate the notification sounds:
python scripts/generate_sounds.py
This script generates all three sounds using the same smooth glide algorithm. You can edit the frequencies, durations, and amplitudes in the script to customize the sounds to your preference.
🗺️ Roadmap
Custom icon design✅Graphical settings dialog✅Whisper AI support✅Multi-language support (FR, DE, RU)✅- In-app update mechanism
- Application-specific commands
- Debian/Ubuntu package (.deb)
Improved Wayland support✅- Voice command customization
🤝 Contributing
We welcome contributions! Whether it's bug reports, feature requests, or code contributions, please check out our Contributing Guide.
Quick Links
⭐ Support
If you find Vocalinux useful, please consider:
- ⭐ Starring this repository
- 🐛 Reporting bugs you encounter
- 📖 Improving documentation
- 🔀 Contributing code
📜 License
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Made with ❤️ for the Linux community




