Releases: goodroot/hyprwhspr
v1.19.0
Features
Cancel recording - New ability to abort an in-progress recording and discard the audio without transcribing or injecting text.
Useful when you hit your shortcut by accident or start speaking and want to bail out.
Three ways to cancel:
- FIFO command: echo cancel > ~/.config/hyprwhspr/recording_control - bindable to any external hotkey manager
- CLI: hyprwhspr record cancel
- Dedicated shortcut: Set "cancel_shortcut": "SUPER+ESCAPE" (or any key combo) in config to get a native cancel key
Works in all recording modes including long-form, where it discards all accumulated segments and resets the session to idle.
Improved
- Thread safety for cancel operations with proper _recording_lock acquisition
- Long-form cancel correctly initializes segment manager and acquires _longform_lock before modifying shared state
- Exception handler in cancel path now stops audio capture to prevent orphaned recording threads
Full Changelog: v1.18.16...v1.19.0
1.18.16
Features
- Regolo provider support -Added https://regolo.ai as a REST API transcription provider with Faster Whisper Large V3 (GDPR-compliant, zero data retention).
- Beta meeting recorder - New standalone meeting recorder utility (utils/meeting-recorder.py) with its own systemd service.
- Improved config management - Config is now saved as a sparse file (only non-default values + $schema), making it easier to read and manage. A full JSON Schema (share/config.schema.json) is published for editor autocompletion and validation.
hyprwhspr config shownow shows your overrides only; use--allto see all settings including defaults. - Comprehensive configuration docs - New docs/CONFIGURATION.md with full reference documentation for every setting.
Stability and reliability
- Smoother systemd boot sequence - Reworked service unit to properly depend on
graphical-session.targetandwireplumber.service. The Wayland socket check now uses$XDG_RUNTIME_DIRinstead of hardcoded paths with a faster polling interval (0.25s for up to 15s). Service now starts withWantedBy=graphical-session.targetfor correct session lifecycle integration. - Better validation checks -
hyprwhspr validatenow checks that graphical-session.target is active and thatWAYLAND_DISPLAYis set in the systemd user environment, with actionable guidance when they aren't. - Normalized audio volume defaults - All sound volume defaults (start, stop, error) normalized to 1.0. Audio feedback settings are now part of the canonical default config rather than being injected during setup.
Full Changelog: v1.18.15...v1.18.16
1.18.15
Features
ElevenLabs Scribe v2 Realtime Transcription
Ultra-low latency (~150ms) streaming speech-to-text via ElevenLabs WebSocket API.
Supports 90+ languages with native 16kHz audio (no resampling) and automatic reconnection on connection drops.
Configure via hyprwhspr setup or manually:
{
"transcription_backend": "realtime-ws",
"websocket_provider": "elevenlabs",
"websocket_model": "scribe_v2_realtime"
}The OpenAI realtime WebSocket client was also refactored to share a common architecture with ElevenLabs, improving reliabilityfor both providers.
Community contribution by @jhsu in #116
Full Python 3.14 Support
Python 3.14 is now the default on Arch Linux and Fedora 43. hyprwhspr fully supports it:
- MAX_COMPATIBLE_PYTHON bumped to (3, 14)
- Python fallback chains updated to prefer 3.14 first
- CI wheel builds now include Python 3.14 (CPU + CUDA)
- All error messages and install guidance updated for 3.14
- pywhispercpp 1.4.1 builds from source and works on 3.14
- onnx-asr installs cleanly on 3.14
Community contribution by @snipcodeit in #115
Non-QWERTY Layout Support (paste keycode override)
ydotool sends physical Linux keycodes, so Ctrl+V might not work on layouts like BEPO or Dvorak. You can now override the paste keycode:
{
"paste_keycode_wev": 55 // Use `wev` to find the keycode for 'v' on your layout
}Run wev, press the key that types v on your layout, and use the printed keycode.
Bug Fixes
- Mic-OSD startup errors now visible — The mic-osd daemon previously sent stderr to /dev/null, silently swallowing GTK4
initialization failures. Startup errors are now captured and logged to journal, with a 150ms health check that detects immediate
crashes. - Backend switching now recreates venv — Switching between local backends (e.g., pywhispercpp to onnx-asr) previously reused the
existing venv, leaving stale packages from the old backend. Now properly triggers a clean venv rebuild.
Community PRs
- Bump MAX_COMPATIBLE_PYTHON to (3, 14) by @snipcodeit in #115
- feat: Elevenlabs scribe v2 by @jhsu in #116
New Contributors
- @snipcodeit made their first contribution in #115
- @jhsu made their first contribution in #116
Full Changelog: v1.18.14...v1.18.15
1.18.14
Features
Language override for external hotkeys (--lang parameter)
Multilingual users can now specify transcription language when using external hotkey systems:
hyprwhspr record start --lang it # Start recording in Italian
hyprwhspr record start --lang de # German
hyprwhspr record toggle --lang es # Toggle with SpanishBind different languages to different hotkeys in KDE, GNOME, sxhkd, or Hyprland:
bind = SUPER ALT, D, exec, hyprwhspr record toggle
bind = SUPER ALT, I, exec, hyprwhspr record start --lang itWorks with both standard and long-form recording modes.
Configurable Python path for setup
Specify a custom Python executable during setup for systems with multiple Python installations:
hyprwhspr setup --python /usr/bin/python3.13
hyprwhspr setup auto --python /usr/bin/python3.12Improved logging
Text injection now logs confirmation: [INJECT] Text injected (30 chars) — completing the pipeline visibility from recording through transcription to paste.
Bug Fixes
- Fixed hyprwhspr record command routing — Previously, record start/stop/toggle would start a new daemon instance instead of sending commands to the running service. Now correctly routes through CLI to control the existing daemon via FIFO.
- Fixed long-form mode language support — Language parameter was being parsed and logged but silently ignored. Now properly applies language override throughout the long-form recording session.
- Much improved path handling for Python, prevents hijacking by unwieldy dep managers
Misc.
- Bumped pywhispercpp to 1.4.1 - it will now successfully respond to prompting
Community PRs
New Contributors
Full Changelog: v1.18.10...v1.18.14
1.18.10
New Features
External hotkey support - Control recording from any hotkey system (KDE, GNOME, sxhkd, Espanso, etc.):
hyprwhspr record start # Start recording
hyprwhspr record stop # Stop recording
hyprwhspr record toggle # Toggle recording on/off
hyprwhspr record status # Check current statusBind to your desktop's native shortcuts:
# KDE/GNOME custom shortcut
hyprwhspr record toggle
# Hyprland (when not using grab_keys)
bind = SUPER ALT, D, exec, hyprwhspr record toggleFiller word filtering - Automatically remove "uh", "um", "er" and other filler words:
{
"filter_filler_words": true, // Enable automatic removal (default: false)
"filler_words": ["uh", "um", "er", "ah", "eh", "hmm", "hm", "mm", "mhm"] // Customize list
}
Bug Fixes
- Fixed audio feedback on Debian/Ubuntu - Audio feedback now falls back to WAV format when OGG playback produces white noise (#105)
- Fixed Homebrew/Linuxbrew Python detection - The launcher now correctly detects Homebrew-managed Python and uses system Python for CLI commands (#104)
- Improved dependency error messages - When python-rich is missing, error now shows which Python interpreter is being used to help diagnose version mismatches
Full Changelog: v1.18.9...v1.18.10
1.18.9
Features
- CLI keyboard selection - New interactive keyboard selection in the CLI setup process for easier configuration
- Disable word replacements flag - Added option to disable word replacements when not needed
Bug Fixes
- Keyboard detection improvements
- Fixed device name matching to use exact matches only, preventing selection of incompatible devices (e.g., "Mouse" or "Consumer Control" variants)
- Fixed small bug in keyboard detection logic
- Realtime WebSocket backend
- Reset buffer commit tracking when new speech starts, fixing transcription timeouts after VAD committed previous utterances
- Support language auto-detect when config is null (omits language key instead of defaulting to English)
- Clear transcription state when starting new recording to prevent stale transcriptions
- Tray/Control fixes
- Handle multiple FIFO commands from rapid tray clicks by parsing all lines and using the most recent valid command
- Recognize realtime-ws backend for model check in tray script
- CLI improvements
- Detect ydotool version via dpkg for version 1.0+
- Increase mic-osd verification timeout from 250ms to 1.5s to fix intermittent failures (Fixes #97)
Other Changes
- Better API logging via test endpoint
- CLI and keyboard launcher addition
Community PRs
- fix: increase mic-osd verification timeout to 1.5s by @cayblood in #98
- fix: ydotool 1.0+ version detection and realtime-ws backend model check by @ali205412 in #100
- Update device name matching condition by @Mte90 in #101
- fix(cli): detect ydotool version via pacman for Arch-based distros by @mmacpherson in #102
New Contributors
- @cayblood made their first contribution in #98
- @ali205412 made their first contribution in #100
- @mmacpherson made their first contribution in #102
Full Changelog: v1.18.6...v1.18.8
1.18.6
Dandy release!
- Visualization now acts as a loading bar. On transcription, light turns green to indicate processing and completion. If transcript fails, you have the option to re-send.
- Long form mode, for longer, auto-saved recording with option to resend if there's a transcription or API failure. To setup:
{
"recording_mode": "long_form",
"long_form_submit_shortcut": "SUPER+ALT+E", // Required: no default, must be set
"long_form_temp_limit_mb": 500, // Optional: max temp storage (default: 500 MB)
"long_form_auto_save_interval": 300, // Optional: auto-save interval in seconds (default: 300 = 5 minutes)
"use_hypr_bindings": false, // Optional: set true to use Hyprland compositor bindings
"grab_keys": false // Recommended: false for normal keyboard usage
}- Added python wheels for faster install, supports most Python/Cuda version (not 13.x yet for CUDA)
- Bug fixes and setup polish
- CLI helpers for automated installation:
hyprwhspr setup auto [-h]
[--backend {nvidia,vulkan,cpu,onnx-asr,rest-api}]
[--model MODEL] [--no-waybar] [--no-mic-osd]
[--no-systemd] [--hypr-bindings]
options:
-h, --help show this help message and exit
--backend {nvidia,vulkan,cpu,onnx-asr,rest-api}
Backend to install (default: auto-detect GPU)
--model MODEL Model to download (default: base for whisper, auto for
onnx-asr)
--no-waybar Skip waybar integration
--no-mic-osd Disable mic-osd visualization
--no-systemd Skip systemd service setup
--hypr-bindings Enable Hyprland compositor bindingswheels-v1
1.17.2
- Tidies up Debian and other linux distro setups, mostly with package management fixes
- Cleans up first mile and dependency wrangling
- Adds new secondary language hotkey:
{
"primary_shortcut": "SUPER+ALT+D", // Uses default language from config
"secondary_shortcut": "SUPER+ALT+I", // Optional: second hotkey
"secondary_language": "it" // Language for secondary shortcut
}Supports most backends (Whisper, API endpoints) but not all (the model/endpoint must support it).
1.17.0
Added
- Audio ducking - Automatically lowers system audio during recording for clearer transcription (#71)
Fixed
- Realtime WebSocket transcription - Fixed "buffer too small" error when using realtime-ws backend with VAD in transcribe mode (#63)
Improved
- Thread safety for WebSocket client state management
- Code cleanup and internal refactoring
- Documentation updates
Full Changelog: v1.16.0...v1.17.0