Voice prompts
On this page
Dictate a prompt instead of typing it. Press Alt+S to start recording (push-to-talk), speak, and press Alt+S again to stop — orrerix transcribes your speech locally and drops the text at your current focus. Esc cancels at any point (including mid-transcription). Transcription is never auto-submitted: you review it and press Enter yourself.
Windows only for now. On other platforms the hotkey reports that voice capture isn’t available. The cross-platform path is sketched in
docs/design/voice.md.
Where the text lands
The target is decided when you start, and follows focus:
- a compose/steer box focused → inserted at the caret;
- any terminal pane focused (an agent, the orchestrator pane, a plain shell) → pasted into that pane’s input as if typed (bracketed paste, no trailing newline).
The orchestrator steer strip also has a 🎤 button that records into the strip; the hotkey works from any pane, with or without the button.
Only one recording runs at a time. While a capture targets a terminal, a badge floats over that pane — red “Recording”, then amber “Transcribing…” while the speech is being converted. A large model can take a while; the app stays responsive and you can Esc to abort.
Local & open source, opt-in
Speech-to-text is whisper.cpp (MIT) running entirely on your machine — no audio leaves the box, no cloud STT. Orrerix does not ship the whisper runtime (it would add ~150 MB to the installer), so voice is opt-in: install a whisper build and a model once and orrerix picks them up automatically.
Set it up (Windows)
The easy way — the staging script
Run the convenience script from a checkout. It downloads a pinned, checksum-verified runtime plus the base.en model into the location orrerix auto-detects (%LOCALAPPDATA%\orrerix\whisper):
powershell -ExecutionPolicy Bypass -File scripts\stage-whisper.ps1
Already staged under the old name? Orrerix still finds
%LOCALAPPDATA%\loomux\whisperand reads it exactly as before — nothing is moved, because what is in there is a runtime and a model you downloaded. But the script’s default destination is now%LOCALAPPDATA%\orrerix\whisper, so re-running it downloads a second copy (several hundred MB) rather than updating the one you have. To keep using your existing directory, either pass it explicitly (-Dest "$env:LOCALAPPDATA\loomux\whisper") or just don’t re-run the script — your current install keeps working. To move at your own pace, rename the directory by hand once nothing is using it.
Restart orrerix and press Alt+S.
By hand
-
From a whisper.cpp release, download the CPU
whisper-bin-x64.zipand extractwhisper-cli.exetogether with all of its DLLs —whisper.dll,ggml.dll,ggml-base.dll, and everyggml-cpu-*.dll.Missing DLLs are the usual cause of a silent “whisper failed to run.”
ggmlloads theggml-cpu-*.dllmatching your CPU at runtime, so keep the whole set together next towhisper-cli.exe. See Troubleshooting. - Download a ggml model — e.g.
ggml-base.en.binfrom ggerganov/whisper.cpp. -
Place them where orrerix looks by default:
%LOCALAPPDATA%\orrerix\whisper\whisper-cli.exe (with the DLLs beside it) %LOCALAPPDATA%\orrerix\whisper\models\ggml-base.en.bin
Restart orrerix and press Alt+S.
Custom locations (env overrides)
To keep the runtime or model elsewhere, point orrerix at them:
ORRERIX_WHISPER_CLI→ awhisper-cli.exe(with its DLLs beside it)ORRERIX_WHISPER_MODEL→ any ggml.bin(e.g. a larger multilingual model)
Resolution order is bundled resources → env vars → %LOCALAPPDATA%. Nothing ships in the bundled slot today (voice is opt-in), so in practice it’s your env vars, then the %LOCALAPPDATA% default. Every failure message names all the locations it checked, so it’s actionable.
Performance & tuning
- Threads. Orrerix passes
-tcapped at your CPU’s parallelism (max 8) — whisper.cpp otherwise defaults to 4, so this is a 2× win on a many-core machine, without oversubscribing (its CPU inference is memory-bandwidth-bound and gains flatten past ~8 threads). - Model choice (the biggest speed/quality lever).
base.enis a fine default; for noticeably better accuracy at similar speed, uselarge-v3-turboquantized —q8_0is the quality/speed sweet spot (q5_0is smaller/faster). Drop the.bininmodels\or pointORRERIX_WHISPER_MODELat it. - GPU. NVIDIA owners get a large speed-up from a cuBLAS/CUDA whisper.cpp build — download a
cublasrelease asset and pointORRERIX_WHISPER_CLIat it. - Extra flags.
ORRERIX_WHISPER_ARGSis appended verbatim to the whisper command (whitespace-split, no shell quoting) for power users — e.g.ORRERIX_WHISPER_ARGS="-t 12 -bs 5". It comes after orrerix’s args and whisper takes the last value of a flag, so your overrides win.
Vocabulary biasing
Bias recognition toward your own jargon with an optional %LOCALAPPDATA%\orrerix\whisper\vocab.txt — one term or phrase per line, # for comments. Orrerix assembles it into whisper’s --prompt (an initial-prompt hint):
# orrerix project terms
orrerix
ConPTY
tmux
gh
xterm
WASAPI
cpal
Tauri
ggml
orchestrator
Keep it a short curated list: whisper’s initial prompt is capped (~224 tokens) and only a curated list is reliably honored — orrerix truncates to a conservative budget and logs a warning if vocab.txt is over-long. Set ORRERIX_WHISPER_PROMPT to a raw prompt string to override the file entirely.
Fine-tuning a model is out of scope — it needs a GPU, a labeled dataset, and a multi-GB output;
--promptgets most of the domain-term benefit for none of the cost.
Limits & diagnostics
- Recordings are capped at 5 minutes; orrerix appends a “recording capped” note rather than growing memory without bound.
- If the mic can’t be opened (no device, or Windows microphone privacy blocks it), or the whisper runtime is missing/misconfigured, orrerix surfaces a specific message rather than failing silently.
- macOS asks for the microphone again after updating to 1.2.0-beta7. The permission is granted to an app’s bundle identifier, and that version changed Orrerix’s from
dev.loomux.apptodev.orrerix.app(see Troubleshooting). macOS therefore sees a new app the first time you record, and prompts once. Allow it and nothing else changes; if you had previously denied it, the old entry in System Settings → Privacy & Security → Microphone is stale and can be removed. - To debug a capture, set
ORRERIX_VOICE_KEEP_WAV=1— orrerix keeps the scratch WAV and logs its path, duration, and level. A near-zero level on a long capture is the fingerprint of a silent/starved mic.
See docs/design/voice.md for the architecture and the cross-platform path.