- transcriber.py: route models prefixed with "parakeet:" to a persistent
NeMo worker subprocess (spawned in .venv-parakeet); stdin/stdout JSON
protocol keeps the model loaded between transcribe() calls
- tray.py: add "Parakeet V3 (NVIDIA, GPU)" to the Model menu; greys out
when the parakeet venv is missing
- config.py: list more whisper variants (large-v2, large-v3-turbo and
q5_0/q8_0 quantized variants)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pynput's XRecord backend silently fails to receive keyboard events on
this system. Switch to direct Xlib XRecord API which works reliably.
- Replace pynput keyboard.Listener with Xlib XRecord context
- Hotkey in listen mode now acts as manual dictation trigger:
LISTENING → DICTATING on press, DICTATING → LISTENING on next press
- Wake word continues to work in parallel with hotkey
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add global hotkey (Ctrl+Super) via pynput with config support
- Fix display_server auto-detection (wayland → x11)
- Fix text injection: use xdotool type directly (no clipboard pollution),
fall back to clipboard with both PRIMARY+CLIPBOARD selections
- Fix tray icon not updating from background threads (pyqtSignal instead
of QTimer.singleShot)
- Add blinking tray icon for RECORDING/DICTATING states
- Fix wake word → DICTATING: save active window at wake time, play end
signal on stop, start silence timer immediately
- Reduce VAD trailing silence 300ms → 150ms for faster response
- Redesign Settings menu: hotkey always active, wake word listening
is an independent ON/OFF toggle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>