AI & VOICE / OVERLAYS

Overlays

voxctrl displays a transparent always-on-top HUD while recording, while TTS is speaking, or while the MCP server is actively recording. Eight built-in styles are rendered by a dedicated native helper process. Switch between them in Settings → Visual tab.

Built-in styles

The default is Ocean Wave. All styles share three state palettes: Recording (the style's signature color), Initializing (amber), and Processing (sky blue).

Style config value Description
Ocean Wave (default) blue_wave A glass tide pool at night with a glowing moon and rising bubbles. Three layered sine waves (deep blue → cyan → ice teal) whose tide level and amplitude rise with your voice; a buoy tag floats on the front wave showing the active target.
Voice Card voice_card A membership card with a gold contact chip, embossed branding, and a holographic sheen. A 20×6 VU-meter LED dot matrix (green → amber → red) with real VU ballistics; the card flips in and out on load/unload.
Waveform waveform A green-phosphor oscilloscope ("WAVEFORM // OSC-01") with a graticule grid and a live scrolling line trace of the microphone signal. Powers on/off like a CRT.
Pulse Ring pulse A sonar/radar dial with a rotating sweep arm, expanding pulse rings, contact blips, and an audio-reactive core, paired with a "PULSE // TARGET LOCK" plate.
Mono Bars mono_bars A hyper-minimal black & white panel — no color, no gradients. A 5-bar level meter, centre-weighted, with a gentle ripple while recording.
Neon Spectrum spectrum A 16-band equalizer in a deep-violet panel with a magenta-to-cyan gradient. Bass bands swing wider and slower; treble bands flicker faster.
Retro Terminal terminal A DOS-blue console window with a three-dot title bar and a block-character ASCII meter (/·) that fills left-to-right with the audio level.
Analog VU vinyl A warm, vintage VU meter in cream and amber tones with a spring-loaded needle that sweeps a -20 to +3 scale with realistic ballistics.

To disable the overlay entirely, set ui.overlay_style = "none" in ~/.config/voxctrl/config.json or toggle it off in Settings → Visual.

Selecting a style

Open Settings → Visual tab → Overlay Style dropdown. Changes take effect immediately and are hot-switched without restarting the overlay helper. The setting is written to config.json as ui.overlay_style.

// config.json excerpt
{
  "ui": {
    "show_overlay": true,
    "overlay_style": "blue_wave",
    "overlay_position": "center",
    "overlay_monitor": "primary"
  }
}

Valid overlay_style values: "blue_wave", "voice_card", "waveform", "pulse", "mono_bars", "spectrum", "terminal", "vinyl", "none".

Positioning

The overlay window can be positioned dynamically on the active monitor via Settings → Visual & Feedback → Overlay position, or via ui.overlay_position in config.json:

Positions are calculated in physical pixels relative to the display's current scale factor, so placement is resolution-independent on 1080p, 1440p, and 4K monitors. Changes apply instantly if the overlay is currently visible.

Multi-monitor targeting

In multi-monitor setups, you can pin the overlay to a specific display via Settings → Visual & Feedback → Overlay display, or ui.overlay_monitor:

If the configured target monitor is unplugged or disconnected at runtime, VoxCtrl automatically fails over to the primary monitor and shows a golden warning badge in the settings UI to flag that fallback mode is active.

Routing indicator badge

Every overlay shows a small label with the active target's human-readable name (e.g. "Focused Window", "Hermes Agent", "Voice Journal"). When you use multiple hotkeys to route to different destinations, the badge changes with each activation. The label comes from the label field on the active target definition in targets.toml.

Speaking pill

While TTS is responding, a green "SYSTEM RESPONDING" pill slides up from the bottom of the overlay with a live mini-equalizer and the active target label, and slides back down when speech ends.

How it works

The built-in overlay styles are rendered by a dedicated native helper process (voxctrl-overlay, built with Slint) in a borderless, transparent, always-on-top, click-through window (560×190 logical px) drawn over whatever application is in focus. The main VoxCtrl process spawns this helper at startup and streams newline-delimited JSON messages (status, position, shutdown) to its stdin — recording/processing/ speaking state, smoothed microphone level, the active routing target label, the configured style, and screen coordinates.

The window is fully transparent except for drawn pixels, stays always-on-top (re-asserted on every re-appearance), and is click-through (cursor hit-testing disabled at the windowing-system level), so mouse events pass cleanly through to the window beneath it.

Every built-in style plays a dedicated spring-driven load animation when it appears and an unload animation when it disappears — the helper window stays alive until the unload animation finishes, rather than vanishing the instant recording stops.

The overlay is shown automatically when recording starts and hidden when transcription completes, provided ui.show_overlay = true.

Configuration reference

Key Type Default Description
ui.show_overlay bool true Show/hide overlay on recording
ui.overlay_style string "blue_wave" Active overlay style identifier
ui.overlay_position string "center" Screen alignment: "top", "center", or "bottom"
ui.overlay_monitor string "primary" Target display: "primary" or a specific monitor name (e.g. "HDMI-1")