Common failure modes and their fixes.
Error: Device 'VirtualMicSink.monitor' not found. Available sources: [...]
To create VirtualMicSink, run: scripts/audio-sink.sh start
Fix:
scripts/audio-sink.sh start
Then route audio into VirtualMicSink and try again.
Cause: Textual enables terminal mouse reporting, so mouse events are consumed by the app instead of the terminal, and native drag-selection never starts.
Fix: hold Shift while dragging to force your terminal's native selection, then copy
as usual. (Alternatively, launching the app with mouse support disabled —
app.run(mouse=False) — restores plain selection but loses in-app scrolling/clicks.)
By default, the daemon uses compute_type = "int8" and device = "cpu", which trades speed for accuracy. To speed up:
cpu_threads to the physical core count: cpu_threads = 16 in [whisper]
(CTranslate2's automatic choice is often slower than an explicit count on many-core CPUs)--model base or --model tiny--device cuda with compute_type float16beam_size = 1 (already default, very fast)Example:
uv run stt-daemon --model base --device cuda
This warning means the single transcription worker is falling behind: utterances are arriving faster than they are being transcribed, and once the queue is full the oldest ones get dropped. The worker is serial by design (faster-whisper's model isn't thread-safe), so fix it by making transcription faster rather than by queueing more:
--model base or tiny--device cuda with compute_type float16backlog_warn_at or queue_size in [daemon] only to make the
warning/dropping less likely — it hides the symptom, not the cause.The Faster-Whisper model is multilingual by default. It auto-detects language or can be forced:
uv run stt-daemon --language es # Force Spanish
uv run stt-daemon --language en # Force English
uv run stt-daemon --language auto # Auto-detect (default)
The output includes the detected language tag: [14:23:45] (es) ....
--language es or --language en--model medium or --model large (slower, more accurate)If parec seems stuck:
pactl list short sourcessystemctl status pulseaudio or check journalctlsystemctl restart pulseaudioIf using --backend sounddevice and getting import errors:
uv sync --extra portaudio
Then verify available devices:
python -c "import sounddevice as sd; print(sd.query_devices())"
Use the device index or name as --device 0 or --device "Microphone (...).
uv run stt-daemon -v (verbose logging)uv run stt-daemon --check (check RMS)aggressiveness (0–1 instead of 2–3) to detect quieter speechmin_utterance_ms isn't too high (default 300ms should be fine)Error loading model: ...
The model is downloaded on first run (~1.5 GB for small). Check:
df -h (needs ~2 GB free)~/.cache/huggingface/hub/ by defaultYou can override the cache:
export HF_HOME=/path/to/cache
uv run stt-daemon --model small