Skip to content

Releases: goodroot/hyprwhspr

v1.19.0

21 Feb 21:43

Choose a tag to compare

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

11 Feb 17:45

Choose a tag to compare

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 show now shows your overrides only; use --all to 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.target and wireplumber.service. The Wayland socket check now uses $XDG_RUNTIME_DIR instead of hardcoded paths with a faster polling interval (0.25s for up to 15s). Service now starts with WantedBy=graphical-session.target for correct session lifecycle integration.
  • Better validation checks - hyprwhspr validate now checks that graphical-session.target is active and that WAYLAND_DISPLAY is 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

06 Feb 20:35

Choose a tag to compare

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

New Contributors

Full Changelog: v1.18.14...v1.18.15

1.18.14

04 Feb 16:27

Choose a tag to compare

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 Spanish

Bind 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 it

Works 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.12

Improved 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

  • fix: pass whisper_prompt to pywhisper by @eonphi in #108

New Contributors

Full Changelog: v1.18.10...v1.18.14

1.18.10

02 Feb 16:05

Choose a tag to compare

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 status

Bind 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 toggle

Filler 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

26 Jan 18:56

Choose a tag to compare

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

Full Changelog: v1.18.6...v1.18.8

1.18.6

14 Jan 19:27

Choose a tag to compare

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 bindings

wheels-v1

14 Jan 17:18

Choose a tag to compare

wheels-v1 Pre-release
Pre-release

Wheels for faster installer.

1.17.2

12 Jan 18:06

Choose a tag to compare

  • 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

11 Jan 00:52

Choose a tag to compare

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