Skip to content

Dictation

P3DROVFX edited this page Oct 12, 2026 · 1 revision

Dictation

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.)

Quick start

  1. Settings → Dictation (Tools group). If voxtype is missing the page says so and shows the install command for your distribution (yay -S voxtype-bin on Arch; a downloaded .rpm / .deb elsewhere), plus a Check again button. It can also be installed with the optional dictation feature: ii-p3drovfx deps add dictation (Installer and CLI).
  2. 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.
  3. Under Speech model, press Download once (Fast is 142 MB; Accurate is 1.6 GB).
  4. 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.

Settings

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).

How it behaves

  • 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 run voxtype.service the shell uses it and restarts it through systemd when settings change.
  • voxtype's config is edited surgically. scripts/dictation/voxtype_config.py changes 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 --download would 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).

Keybinds

Keys Action
Super + Shift + D Start / stop dictation (dictationToggle)
— dictationStop (stop without further speech) is exposed as a global shortcut for your own binding

Under the hood

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

Related pages

← Back to Home

Clone this wiki locally