Repository navigation
Dictation
P3DROVFX edited this page Oct 12, 2026
·
1 revision
Press a key, talk, press it again — and what you said appears in the window you were already typing in. Dictation is local speech-to-text: audio never leaves the machine. It runs on voxtype, a Whisper-based daemon that the shell starts, configures and watches; the shell supplies the keybind, the model manager, the bar indicator and a live waveform in the Dynamic Island.
(Not to be confused with the AI sidebar's voice input, which records into an editable draft you still have to send, nor with Music Recognition, which identifies songs.)
-
Settings → Dictation (Tools group). If voxtype is missing the page says so and shows the install command for your distribution (
yay -S voxtype-binon Arch; a downloaded.rpm/.debelsewhere), plus a Check again button. It can also be installed with the optionaldictationfeature:ii-p3drovfx deps add dictation(Installer and CLI). - Turn on Type what I say into the focused window (
dictation.enabled, off by default). The shell starts the voxtype daemon with itself and stops it when the switch is off. - Under Speech model, press Download once (Fast is 142 MB; Accurate is 1.6 GB).
- Focus any text field and press Super + Shift + D. Talk. Press it again (or click the island's stop button): the text is transcribed and delivered. The same toggle is available from the bar indicator, the microphone button in the Notes editor toolbar and the dictation button in the Clock app's Reminders tab.
| Section | Options |
|---|---|
| Speech model |
Quality — Fast (Whisper base, 142 MB, quick to load and transcribe) or Accurate (large-v3-turbo, 1.6 GB, better with accents and noise at a noticeably longer wait). The Download card shows progress; models you've downloaded but aren't using can be removed |
| Speed | Shows the backend in use (e.g. CPU (AVX2), GPU (Vulkan)), a Use the GPU button when a GPU build of voxtype is installed but inactive, and Processor threads (threads, 0 = all cores but one — Whisper's own default of four wastes half of an eight-core machine) |
| Language | A list of 20 common languages, Auto-detect, or Other languages — any Whisper two-letter code, or several comma-separated (en,fr) to detect among just those, which is steadier than full auto-detection. English uses Whisper's English-only model (more accurate at the same size); any other language uses the multilingual one of the same size |
| Punctuation | A sample sentence Whisper is primed with so it punctuates "in kind". Empty picks a built-in sample per language; with auto-detect no sample is used (priming for the wrong language costs accuracy) |
| Translate |
Translate what I say into English (translateToEnglish) |
| Where the text goes |
outputMode: Paste (default — clipboard + Ctrl+V; arrives in one piece, and the previous clipboard contents are restored), Type (synthesised keystrokes; many apps drop characters at that speed, so words arrive a letter short — raise the delay between typed characters, typeDelayMs, default 5 ms) or Clipboard only |
| While dictating |
Pause music while I speak (pauseMedia, on), Play a sound when recording starts and stops (soundFeedback, off), Stop listening after N seconds (maxDurationSecs, 60) |
| Showing it |
Show the transcribed text in a notification (notifyOnTranscription, on — the only place to read the text back if it landed somewhere unexpected), Microphone in the bar while dictating (showIndicator), Keep it there while idle, as a button (alwaysShowIndicator), Waveform in the Dynamic Island (showInIsland) |
Island and bar details are in Bar & Dynamic Island; the island's dictation notch is dynamicIsland.widgets.dictation (side left, height 44).
-
State machine: idle → recording → transcribing → text delivered. The shell reads voxtype's state file (
$XDG_RUNTIME_DIR/voxtype/state) with a file watcher rather than polling, so the notch reacts the moment recording starts. - The bar indicator shows a microphone while dictating with a popup offering toggle, stop (transcribe what was said so far) and discard (throw the recording away: nothing is transcribed or typed). It takes no space when idle unless you chose keep it there as a button.
-
The waveform comes from
voxtype-audio-bridge, a small helper that reads the daemon's own capture; if it's absent the notch shows a pulse instead of your voice (dictation itself is unaffected). It deliberately doesn't open a second capture stream on the microphone. -
The daemon belongs to the shell, not systemd. voxtype's own unit hangs off
graphical-session.target, which many Hyprland sessions never reach, so enabling it there silently does nothing at next login. If you already runvoxtype.servicethe shell uses it and restarts it through systemd when settings change. -
voxtype's config is edited surgically.
scripts/dictation/voxtype_config.pychanges only the keys the shell needs (built-in hotkey off — the compositor owns the key —, state file on, model, language, threads, prompt, translate, output mode and delay, clipboard restore, notification flags, max duration, media pause and sound feedback) and preserves your comments, order and unrelated settings. -
Model downloads survive reloads. They run detached from the shell (a config reload would otherwise abandon a 1.6 GB download half-written) and the service follows a marker file; partially downloaded models are detected as incomplete and re-fetched, since
voxtype setup --downloadwould otherwise report "Model ready" for a truncated file. - Pressing the key without being set up doesn't do nothing silently: the service says what's missing (voxtype, model, switch).
| Keys | Action |
|---|---|
| Super + Shift + D | Start / stop dictation (dictationToggle) |
| — |
dictationStop (stop without further speech) is exposed as a global shortcut for your own binding |
| Piece | Role |
|---|---|
services/DictationService.qml |
Daemon ownership, state file, model management, settings application, mic-level bridge, shortcuts |
scripts/dictation/voxtype_config.py |
In-place edits of voxtype's config.toml
|
modules/settings/configs/DictationConfig.qml |
Settings page |
modules/ii/bar/widgets/indicators/DictationIndicator.qml |
Bar indicator and popup |
modules/ii/dynamicIsland/widgets/FloatingNotchDictation.qml, core/sources/DictationSource.qml
|
Island notch |
- Bar & Dynamic Island
- Notes
- AI Integration — voice input in the sidebar
- Installer and CLI
- Keybinds