Jatin K MalikandGitHub 57a0ddd0b8 feat(speech): add whisper.cpp with Vulkan support for GPU acceleration (#179)
* 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.
2026-02-11 19:37:58 -08:00
2025-05-25 23:20:08 -05:00
2026-01-20 00:00:28 -08:00

Vocalinux

Voice-to-text for Linux, finally done right!

Status: Beta GitHub release License: GPL v3

Vocalinux CI Platform: Linux Python 3.8+ Made with GTK codecov

GitHub stars GitHub forks GitHub watchers Last commit Commit activity Contributions welcome GitHub issues

Vocalinux Users

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:

Transcription in Action
Real-time voice-to-text transcription
System Tray
System tray with listening indicator
About View
About view with version info
Log Viewer
Log viewer for debugging
Features Overview
Overview of key features and configuration options with annotations

🚀 Quick Install

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 vosk Python package from PyPI
    • Whisper: installs the openai-whisper package from PyPI, which also pulls in PyTorch (the ML framework Whisper requires)
  • 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

  1. Double-tap Ctrl to start recording
  2. Speak clearly into your microphone
  3. 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

🔊 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.

⭐ 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

S
Description
Free, offline voice dictation for Void Linux and niri. Vulkan GPU acceleration, signed xbps repository.
Readme AGPL-3.0
35 MiB
v0.19.1
Latest
2026-11-06 21:18:19 +00:00
Languages
Python 84.5%
TypeScript 8.6%
Shell 5.6%
CSS 0.6%
Just 0.2%
Other 0.4%