Skip to content

[overlay]

Configures skald-overlay, a separate process that subscribes to preview events. Text mode requires [preview].enabled = true; visualizer mode automatically disables preview ASR.

[overlay]
mode = "text"
visualizer_style = "waveform"
margin_px = 16
max_width_px = 720
anchor = "auto"
use_layer_shell = true
hide_when_idle = true
OptionTypeDefaultDescription
modestring"text"text shows stable/provisional transcription. visualizer shows microphone level bars without displaying transcript text or requiring preview ASR.
visualizer_stylestring"waveform"Visualizer appearance: waveform, bars, pulse, or dots. Ignored in text mode.
margin_pxinteger16Margin from screen edges or cursor anchor in pixels.
max_width_pxinteger720Maximum overlay width in pixels.
anchorstring"auto"top: full-width bar at top. bottom: full-width bar at bottom. auto: place near cursor on Hyprland/X11 when supported; otherwise fall back to floating window behavior.
use_layer_shellbooleantruePrefer wlr-layer-shell on compositors that support it (Hyprland, Sway, River).
hide_when_idlebooleantrueHide overlay when there is no active recording or preview text.
SessionBehavior
Hyprland / X11anchor = "auto" places preview near cursor
Hyprland / Sway / Rivertop / bottom use layer-shell bars
GNOME WaylandFloating GTK window; limited positioning
SSH / headlessUse skald watch instead
Terminal window
skald overlay

Closing the overlay window does not stop recording. The overlay reconnects after daemon restarts.

Preview the configured overlay without connecting to the daemon or starting dictation:

Terminal window
skald overlay preview
skald overlay preview --style bars
skald overlay preview --cycle
skald overlay preview --mode text
skald overlay preview --anchor bottom

Text preview uses fixed application text. Visualizer preview uses synthetic levels by default. Neither path loads ASR, writes audio, changes the clipboard, or pastes.

Use the configured input device for live calibration:

Terminal window
skald overlay preview --mode visualizer --microphone

The overlay reports no input, quiet/background input, normal speech response, consistently loud input, and clipping. Audio samples are not retained or sent to the daemon, and the capture stream is released when the preview closes.

Overrides are temporary unless --save is supplied. Saving validates and rewrites the current configuration while preserving unrelated settings:

Terminal window
skald overlay preview --mode visualizer --style waveform --save

The equivalent development shortcut is just overlay-preview --cycle.

Set mode = "visualizer" for recording feedback without scrolling text. The daemon sends rate-limited normalized RMS and peak levels to the overlay; raw audio is never sent over IPC. Visualizer mode works with [preview].enabled = false, so it does not load the preview model. When visualizer mode is selected, preview ASR stays disabled even if preview.enabled = true. This avoids loading or running the text preview model, and also means skald watch does not receive realtime preview text. Final transcription is unaffected.

Available styles:

StyleAppearance
waveformScrolling mirrored waveform history
barsSeven vertical level bars
pulseA centered circle that expands with input level
dotsScrolling mirrored dots

To validate it manually:

  1. Set overlay.mode = "visualizer" and choose overlay.visualizer_style.
  2. Restart skaldd, then run just overlay.
  3. Start a recording and confirm the bars react to normal speech, settle after speech stops, and disappear or return to idle when recording ends.
  • GNOME does not implement wlr-layer-shell; overlay cannot dock like on Hyprland.
  • Overlay does not block or slow the daemon; IPC is one-way event streaming.