Dettivo

§ Keys + dictation

Keys and dictation on Linux

Hold F9, talk, let go. The text lands in the window that had focus when you pressed the key. Double-tap F9 to keep talking hands-free. On Omarchy these are the chords Omarchy already binds for dictation, so there is nothing to relearn.

Who this is for

Anyone changing the dictation keys, picking a mode or tuning the microphone, and anyone wondering why a dictation arrived as a paste.

Default keys

KeyDoes
Hold F9Dictates while held. The text lands on release.
Double-tap F9Dictates hands-free. The take keeps recording after you let go, and the next press finishes it.
Super+Ctrl+XStarts or stops a longer take.
Super+Ctrl+EscapeCancels the take.
Super+Ctrl+Shift+XInserts the last transcript again.

Changing a chord

~/.config/dettivo/config.toml

toml

[hotkeys]
hold = "F9"
toggle = "SUPER CTRL, X"
cancel = "SUPER CTRL, Escape"
reinsert = "SUPER CTRL SHIFT, X"

Chords use Hyprland notation. After a change, run dettivo setup omarchy (or your compositor) again so the binding snippet matches the file.

Taps, holds and hands-free

The hold key runs through one state machine in the daemon, whichever path delivers it. What a press and a release do depends on how long you held.

YouWhat happens
Press and let go within 300 msA tap, not a take. Nothing reaches the engine, no stop cue plays and nothing lands in History.
Tap, then press again within 300 msThe take locks. Let go and it keeps recording while the pill shows locked · press to finish. The next press finishes it.
Hold, then let goRecording continues for 200 ms after the release, so a last word still sounding is in the take. When the last 150 ms held no speech, the take closes at the release and its text is ready about 180 ms sooner.
Press again a second or more into a holdFinishes the take. Some compositors drop a key release, and this keeps a take from recording until the 300 s limit.

The dettivo setup snippets bind the hold key to dettivo dictation press and dettivo dictation release. A snippet written by an older release runs start and stop, which keep working. Run dettivo setup again to get the double tap and the lost-release recovery.

Text right after you let go

With Parakeet on a GPU, the daemon transcribes the take every 1.5 s while you hold the key, so the release leaves only the last few seconds. On an RTX 4090 a two-minute take shows its text 273 ms after the release instead of 841 ms, a one-minute take 114 ms instead of 525 ms and a 30 s take 88 ms instead of 349 ms, as accurate as before on the FLEURS benchmark in English and German. Whisper, the CPU backend and takes under 1.5 s transcribe the whole take.

The first dictation after the daemon starts costs what the tenth costs. After every model load the daemon runs silence through the engine on the GPU, so that work happens while you speak. dettivo speech status and dettivo doctor say whether each speech engine is cold, loaded or warm.

Raw, Polish and Enhanced

Pick a mode in the app, in the bar panel, or with [dictation] mode in config.toml. dettivo polish test "<sample>" shows what each step does to a sentence.

ModeWhat you get
RawThe engine's words with your replacements and spoken punctuation. File names, paths, URLs and version numbers come back byte for byte.
PolishGrammar fixes, fillers removed and smart punctuation, with a preset per app: email, code, chat, notes or generic.
EnhancedPolish, then a rewrite by a local language model. If the model does not answer in time, the Polish text goes in and the pill says so.

When Enhanced keeps the Polish text

A rewrite tidies what you said, so its length stays close to your dictation. Enhanced keeps the Polish text when a rewrite comes back with more than twice your words, with under 0.4 of them once you dictated more than eight, or with one or two meaningful words taken out, such as a dropped not.

A local rewrite also stops at 1.5 times the dictation's tokens plus 32 and falls back at once, so a runaway model never holds up your text.

Microphone, media and quiet takes

Four settings in config.toml shape what happens around a take.

KeyDefaultDoes
[audio] keep_microphone_readyfalseKeeps the microphone open while dictation is idle, so a take starts 450 ms before you press the key and keeps the first word you spoke as it went down. The switch is also in Settings › General.
[audio] while_dictating"nothing""pause" pauses playing media players, "duck" lowers the default output to 20 %, and "mute" mutes it. Media changes only once a take has recorded 300 ms, so a tap never touches it, and a volume you set during the take stays.
[dictation] silence_dbfs-50The level, over the loudest 30 ms of a take, below which the take counts as silence. It replaces silence_peak_threshold, which is now ignored.
[dictation] join_continuationstrueTwo dictations into the same window within 30 s, with no typing in between, read as one sentence. false types every dictation as it is.

~/.config/dettivo/config.toml

toml

[audio]
keep_microphone_ready = true
while_dictating = "duck"

Nothing heard, nothing pasted

A take passes a speech gate before the engine hears it. Its loudest 30 ms must reach [dictation] silence_dbfs, so a click or a keyboard thump stays out, and the Silero model must hear a voice in it, so a fan or a music bed stays out too. A gated take shows "Nothing heard" on the pill and pastes nothing.

The voice check needs whisper/silero-vad, which downloads with any speech model. Without it the level check runs alone, and dettivo doctor names the model and dettivo speech download --model silero-vad.

How the text gets in

Dettivo types through the Wayland virtual keyboard when the window accepts it, and pastes when it does not. Terminals get Ctrl+Shift+V. dettivo insert target shows which backend the next insertion would use.

Every take goes to the window that was focused when the key went down. It never goes to Dettivo's own windows or to a window that appeared while you were talking.

A paste puts your clipboard back afterwards in every type it held, an image, a file list or rich text included. A copy you make during the restore delay wins.

When a take continues the one before it in the same window, it starts with one space and keeps its capital only after a sentence end. "I wrote the report" then "And then I left." types " and then I left."

While you talk, the recording pill shows Listening, then Transcribing, then where the words went. On Omarchy the pill lives in the bar panel and takes its colours from the active theme.

§ Related

Free and open source · GPL-3.0

Dettivo for Linux 0.5.0 is on GitHub.

The release page has the pacman package and its checksum. Bug reports go to the issue tracker. On a Mac? The native Mac app does all of this with Apple Silicon models.