# Hex 3.0 Local Voice Dictation: 160MB Parakeet GPU Streaming (Mac/Windows/Linux)

> See how Hex 3.0 runs 160MB Parakeet GPU streaming voice dictation in 100ms on Mac, Windows, and Linux, plus fixes for Wayland, Intel GPUs, and multi-language models.

- URL: https://freelivecaption.com/en/posts/hex-local-voice-dictation
- Author: Emily Carter (https://freelivecaption.com/en/about)
- Topic: Dictation (https://freelivecaption.com/en/topics/dictation)

## Summary

- Hex 3.0 is an open-source.
- Apple Silicon uses strict Metal, Windows x64 uses Vulkan for Parakeet Unified English GPU streaming, Windows ARM64 runs on CPU.
- Includes practical fixes for the macOS orange mic dot, Linux Wayland shortcuts, Intel Arc GPU hangs, low-volume VAD drops, and multi-language switching.

---

Hex is an open-source, Rust-based desktop voice dictation tool ([anoma.ly/hex](https://anoma.ly/hex)) that runs speech-to-text models locally on your computer. Instead of sending your microphone audio to a cloud server, it listens while you hold down a global keyboard shortcut and pastes the transcribed text straight into whatever code editor, browser tab, or terminal window currently has focus.

With the release of Hex 3.0, the app moved its default English dictation pipeline to a streaming GPU architecture powered by NVIDIA's Parakeet Unified model. In earlier versions, keeping a local transcription model hot in the background took roughly 900MB of RAM, and you had to wait for the model to process the entire audio clip after letting go of the shortcut key. Hex 3.0 cuts that memory footprint down to 160MB and transcribes your speech in a live stream while you are still holding the hotkey. By the time you release the key, inference is nearly finished, so the final text pastes into your active cursor position in about 100ms.

Because Hex now spans macOS, Windows, and Linux with different GPU backends, getting that 100ms response time depends heavily on your hardware, display server, and model selection. Below is how the streaming backend works on each operating system, how to configure optional pre-paste polishing, and how to fix the driver and desktop quirks I ran into while testing it.

## How the 160MB Parakeet Streaming Pipeline Works

Most local Whisper wrappers work like a voice recorder paired with a batch converter: you press a shortcut, speak for ten seconds, release the shortcut, and then stare at a spinner for two or three seconds while the GPU encodes the audio buffer from start to finish. That delay is fine for long notes, but it breaks your rhythm when you are dictating quick terminal commands, Slack replies, or short sentences into a document.

Hex 3.0 avoids that pause by feeding audio chunks into the Parakeet Unified English model continuously while the shortcut key is held down. Because the GPU processes each phrase as you say it, letting go of the key only requires flushing the final syllable and injecting the string into the system clipboard. On an Apple Silicon Mac or a Windows PC with a capable Vulkan GPU, the text lands in the input box almost the instant your finger leaves the key.

One thing that catches people off guard at first is that Hex does not type words into your application one by one while you speak. By default, the small floating HUD pill only shows a recording state and a brief transcribing state, holding back the text until you release the hotkey and paste the complete segment at once. If you dictate longer thoughts and hate waiting until the end to find out whether the model misheard a technical term in your first sentence, you can turn on an experimental live preview from the command line:

```bash
hex experiments enable live-text
```

After running that command, restart the Hex background service (on Linux, the `systemd` unit only reads the experiments file at startup). Once enabled, Hex renders a single click-through line of text right below the HUD pill that updates in real time while you talk. This preview does not get saved to your dictation history and does not touch your cursor until you release the key. In my testing with Parakeet Unified streaming, the live line tracks short sentences accurately, though it displays raw streaming output without final punctuation or capitalization cleanup. If you ramble for a long paragraph without releasing the key, the single preview line can also grow wider than the overlay bounds and clip the newest words off the edge of the screen until the final cleaned text pastes into your app.

## GPU and CPU Backends Across Mac, Windows, and Linux

Hex 3.0 does not use the same inference path on every machine. Depending on your operating system and processor architecture, it routes models through different hardware backends:

- **macOS (Apple Silicon only):** Uses strict Metal GPU acceleration via `transcribe.cpp` on M-series Macs running macOS 15 or newer.
- **Windows x64:** Uses Vulkan GPU acceleration to run Parakeet Unified English streaming on discrete and integrated graphics cards.
- **Windows ARM64:** Runs transcription on the CPU, bypassing the Vulkan GPU path.
- **Linux x64:** Uses Vulkan GPU acceleration by default, with a CPU fallback path for unsupported graphics drivers or headless setups.

### Why Intel Macs Are Blocked and How to Fix the Orange Mic Dot on macOS

If you try to download Hex on an Intel-based Mac—even a 2018 or 2019 MacBook Pro equipped with a discrete Radeon Pro GPU—the installer will refuse to run and the website will show a greyed-out Apple Silicon requirement. The official macOS DMG, ZIP, and Homebrew cask builds are compiled exclusively for `macos-arm64`. Under the hood, Hex on macOS requires a model to load on strict Metal before it marks the model as usable, and there is no prebuilt CPU fallback binary for `x86_64-apple-darwin`. Unless you fork the GitHub repository, compile an Intel target yourself, and patch the model loader to accept a CPU backend instead of strict Metal, Hex requires an M-series Mac.

On Apple Silicon Macs where Hex runs natively, the first thing you will notice after launching the app is that the macOS orange microphone indicator in the menu bar stays lit full-time, even when you are sitting idle and not dictating. Hex is not secretly recording your room; it does this because its audio input setting defaults to keeping the microphone stream open so that pressing the hotkey captures your very first syllable without waiting for CoreAudio to initialize the device.

If you do not want the orange privacy dot glowing in your menu bar all day, open Hex and go to **Settings → General → Dictation → Advanced → Microphone mode**, then change the setting from **Keep ready (fast)** to **Release when idle**. As soon as you switch to **Release when idle**, the orange indicator disappears whenever you are not holding the shortcut key. The trade-off is a slight initialization pause when you press the hotkey, so you need to wait a fraction of a second before speaking to avoid clipping your first word.

## Fixing Linux Wayland, Intel GPU Hangs, and Windows 11 HUD Issues

On Windows 11 and Linux, Hex relies on Vulkan for both its Rune UI overlay and GPU model inference, while using desktop portals or clipboard utilities to inject text. That combination works out of the box on standard setups, but several hardware and desktop environment combinations need manual adjustments.

### Intel Integrated GPU Hangs on Linux Vulkan

If you run Linux on a laptop with Intel Arc integrated graphics (such as a Core Ultra processor using the `i915` kernel driver and Mesa `vulkan-intel`) and switch from Parakeet to heavier models like `qwen3_asr06_b` or `whisper_large_v3_turbo`, Vulkan inference can lock up the GPU. When this happens, kernel logs throw an `i915` GPU hang (`context reset due to GPU hang`), and Hex logs a warning that `LocalTranscriber::load` could not load the transcription model on the GPU before falling back to an 8-thread `ggml` CPU session. Because you have to wait for the GPU context to hang and reset before CPU transcription even starts, a six-second voice clip can take over 90 seconds to finish—making the GPU path nearly 20 times slower than pure CPU inference.

If you try to disable Vulkan completely by setting `VK_ICD_FILENAMES` to a dummy file path, CPU transcription drops under five seconds, but the Hex window and HUD overlay fail to launch because the Rune UI toolkit still needs a GPU surface to draw itself. To keep the HUD working while forcing transcription onto the CPU, you have two options. On newer builds that separate UI rendering from the speech engine, go to **Settings → General → Advanced → Dictation → Speech engine** and select **cpu**, or run:

```bash
hex settings set transcription_device cpu
```

If you are on a build where that setting is not yet exposed, install `vulkan-swrast` (Mesa's software `lavapipe` rasterizer) and add `Environment="VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.json"` to your Hex user service. That gives the HUD a working surface to render on while keeping model inference off the hanging Intel i915 driver, bringing six-second clips back down to around five seconds.

### Linux Wayland Shortcuts, Pasting, and the GNOME Orange Indicator

Running Hex on Linux with Wayland requires `wl-clipboard` (`wl-copy`) to paste transcribed text into your windows. Hex does not check for `wl-clipboard` at launch, so if you do not have it installed, everything will look normal until your very first dictation fails to paste. Install `wl-clipboard` through your package manager first.

On Ubuntu 24.04 running GNOME 46, you will also find that holding down the default `Ctrl+Space` hotkey does nothing, even though the Hex main window says `Hold Ctrl+Space to dictate`. If you check the startup logs, you will see `No such interface "org.freedesktop.portal.GlobalShortcuts"`. Because `xdg-desktop-portal-gnome` 46 does not implement the GlobalShortcuts portal, Hex cannot grab keystrokes directly from the compositor. To use Hex on GNOME 46, open your system **GNOME Settings → Keyboard → Keyboard Shortcuts → Custom Shortcuts** and bind a shortcut to run:

```bash
hex dictation toggle
```

Keep in mind that GNOME custom shortcuts only fire on key press rather than tracking key-down and key-up events, so this turns your hotkey into a press-to-start, press-to-stop toggle rather than hold-to-talk. Newer builds also include an **add gnome keyboard shortcuts** helper button under **Settings → Desktop shortcuts** to write this rule for you.

If you are running a newer GNOME desktop (such as GNOME 50 or 51 on Arch or NixOS) where GlobalShortcuts works, you might notice two other portal behaviors. First, if you change your shortcut key inside Hex and the new key refuses to trigger, go to **GNOME Settings → Apps → Hex → Global Shortcuts**, click **Remove All Shortcuts**, and then toggle the shortcut off and back on inside Hex so GNOME prompts you to authorize the new binding. Second, after you dictate and paste text on Wayland, GNOME's orange remote-control / screen-sharing indicator stays lit in the top bar. Hex uses a `WaylandKeys::Portal` RemoteDesktop session to send the paste keystroke, and if the desktop portal does not hand back a valid restore token, Hex intentionally keeps the session open in the background so you are not spammed with a permission dialog every single time you dictate.

### Silent Drops from Low Mic Volume and Missing HUD Pills

Another issue I ran into on Linux with PipeWire and USB microphones is speaking for five or ten seconds, releasing the key, and getting nothing pasted—without any error message in the UI. If you run `hex dictation stop --print` in the terminal and it exits with code 4 alongside a log message reading `discarded dictation without detected speech`, your microphone input gain is too low.

When your mic input sits around 35% to 40% volume (registering around `-47 dBFS` to `-50 dBFS`), Hex's voice activity detector assumes you stayed silent and throws the audio buffer away before it ever reaches the transcription model. Raising your default audio source volume to 75% fixes this immediately. On PipeWire / WirePlumber systems, run:

```bash
wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.75
```

If you are using a Bluetooth headset that randomly stops transcribing, also check that the input source is not muted at the PulseAudio/PipeWire level (`pactl set-source-mute @DEFAULT_SOURCE@ 0`), which causes Hex to record `-120 dBFS` silence and discard the clip.

Finally, if you hear the start and stop audio chimes when pressing your shortcut on Windows 11 or a minimal Wayland compositor like Hyprland, but the floating HUD pill never appears on screen, the dictation loop is still working in the background. On pure Wayland compositors without `layer-shell` support and with XWayland disabled, the Rune overlay cannot create a window surface, though text will still paste when you release the key. On Windows 11 laptops with hybrid NVIDIA and integrated graphics, early 3.x builds failed to set the required layered-window attribute for click-through overlays, leaving the HUD invisible until updated to the latest release.

## Optional Pre-Paste Polishing with OpenCode

Streaming Parakeet Unified directly into your active window gives you the fastest possible turnaround, but raw speech transcription still mirrors exactly how you talk. If you pause mid-thought, repeat a word, or dictate a rough list of bullet points, the raw transcript will paste those stumbles verbatim.

To handle that without sending your audio to the cloud, Hex 3.0 includes an optional integration with OpenCode that polishes the transcribed text right before pasting it into your application. When you enable this step, Hex still runs the local acoustic model to convert your voice into text, but instead of triggering the clipboard paste immediately upon key release, it routes the transcript through OpenCode to clean up grammar, strip out filler words, or format the text for your target context.

Because adding an LLM cleanup pass between releasing the shortcut and pasting the output introduces extra latency beyond the 100ms Parakeet streaming time, it is best treated as a situational toggle. When I am dictating terminal commands, variable names, or one-line chat messages, I keep pre-paste polishing off so the text appears instantaneously. When I am drafting a multi-sentence email or a pull request description where I would otherwise spend fifteen seconds fixing punctuation by hand, turning on the OpenCode pass saves time overall.

## Hex 3.0 vs. Built-In OS Dictation and MacWhisper

Choosing between Hex 3.0, your operating system's built-in voice typing, and a dedicated desktop transcription suite like [MacWhisper](/en/posts/macwhisper-guide) comes down to whether you care more about instant push-to-talk cursor injection, live word-by-word visual feedback, or multi-language flexibility.

Built-in macOS Dictation and Windows 11 Voice Typing (`Win + H`) have one clear advantage over Hex's default view: they insert words directly into your document one by one as you speak, so you can watch the sentence form inside your text editor. However, Windows Voice Typing requires an active internet connection to Microsoft's Azure Speech servers, and both built-in OS tools automatically shut off their microphones if you pause for a few seconds to think. Hex runs 100% offline, never times out as long as your finger is holding the hotkey, and pastes the finished block in 100ms without cloud latency.

Compared to MacWhisper, the two tools solve different parts of the local transcription workflow. MacWhisper excels when you want to drag and drop recorded audio files, capture system and meeting audio, or browse searchable transcript archives—and if you are looking for other ways to capture meetings or desktop audio on macOS, you can check my comparison of [live caption apps for Mac](/en/posts/live-caption-apps-mac). While MacWhisper also includes a global dictation mode on macOS, Hex is built exclusively as a lightweight cross-platform push-to-talk utility. At 160MB of RAM with Parakeet Unified streaming, Hex stays out of the way on 8GB and 16GB laptops where keeping a large Whisper model loaded in memory all day would cause swap pressure.

Where you do need to pay attention in Hex 3.0 is multi-language dictation. The ultra-fast 160MB streaming setup is built around Parakeet Unified English. If you dictate in German, Polish, Vietnamese, Spanish, or other languages, you have to open **Settings → General → Speech model** and download a multilingual model from the catalog, which includes Parakeet v3, Whisper Large v3 Turbo, Qwen3-ASR, Cohere, and [NVIDIA Nemotron 3.5 ASR](/en/posts/nemotron-3-5-transcribe).

If you work in more than one language, there are three practical boundaries in Hex right now. First, the language dropdown menu inside Hex uses a custom UI component that does not draw a scrollbar. When you select Whisper Large v3 Turbo—which supports around 40 languages—languages further down the list like German (`de`) look like they are completely unsupported unless you place your cursor over the open dropdown and scroll down with your mouse wheel or trackpad. Second, Parakeet v3 ignores the manual language picker altogether and relies on automatic language detection from your audio, which works well for longer sentences but can occasionally guess the wrong language on short two-word phrases if you switch between languages like English and Polish.

Third, Hex processes each hotkey press as a single audio clip and cannot switch languages mid-sentence. Manually changing the language in settings reloads the model, so if you regularly alternate between two languages on a Mac, the best workflow is enabling **Labs → switch model with keyboard language**. That links each macOS keyboard input source to a specific downloaded model and language pair; whenever you press your macOS shortcut to switch keyboard layouts, Hex automatically swaps the active speech model in the background in about 300ms.

## Sources and checks

<a id="source-anoma-ly-1"></a>

- [anoma.ly/hex](<https://anoma.ly/hex>) — Checked 2026-11-02

