yashas / docs
Products

Wisper Low

Local-first speech-to-text with a tiny desktop overlay.

What it is

Wisper Low is my local-first dictation experiment. Press a global shortcut, speak, release it, and the transcribed text is pasted into whichever app was active. It is aimed at the boring but useful part of voice input: getting words into a text box quickly without sending audio to a cloud service.

The repository currently contains the wider Handy desktop implementation, so you may see “Handy” in the source, releases, and build docs. The important idea is the same: an open, extensible, offline speech-to-text desktop app.

Current status: Prototype. Expect model download time, microphone quirks, shortcut conflicts, and platform-specific rough edges.

Quick start

  1. Download the available installer from the GitHub releases page.
  2. Launch the app and grant microphone and accessibility/input permissions when your OS asks.
  3. Use Ctrl+Alt+P or Ctrl+Alt+Space to start dictation.
  4. Speak, then press the same shortcut to stop and paste the result.
  5. Press Ctrl+Alt+Backspace to cancel without pasting.

On macOS and Linux the exact release and permission flow can differ. Read the repo's build and platform notes before assuming a Windows shortcut will be identical everywhere.

How it works

global shortcut → microphone → VAD removes silence → local speech model
                 → optional cleanup/post-process → text input/paste into active app

Voice Activity Detection (VAD) reduces the amount of silence sent to inference. You can choose from Whisper-family models or the CPU-focused Parakeet V3 path. An optional Ollama-based post-process can clean up wording, but the core transcription remains local.

Tech stack

PartTechnologyJob
Desktop shellTauriSmall cross-platform native app shell
Settings UIReact + TypeScript + Tailwind CSSConfiguration and status screens
System backendRustNative integration, audio, and ML orchestration
Speech modelswhisper.cpp GGML/GGUF, transcribe-rs/ParakeetOffline transcription paths
Audiocpal + rubatoCross-platform capture and resampling
Silence detectionvad-rs / Silero VADAvoids processing long silence
Global inputrdevKeyboard shortcuts and system events
Optional cleanupOllamaLocal rewrite/post-processing when enabled

Useful controls

The default toggle shortcuts are Ctrl+Alt+P and Ctrl+Alt+Space; configure them in settings if another program already owns them. Ctrl+Alt+Backspace cancels the current capture. The full Handy build also exposes command-line controls such as --toggle-transcription, --toggle-post-process, --start-hidden, --no-tray, and --debug.

On Wayland, global shortcuts are often best configured in your desktop environment or window manager to run handy --toggle-transcription. Text input may need wtype or dotool.

Privacy and model choices

Audio is processed locally by the selected model. If you enable Ollama cleanup, that request still goes to your own Ollama instance, not a hosted YashasVM service. Model quality, speed, and memory use trade off against each other: smaller models respond faster; larger models tend to transcribe more accurately but need more resources.

Troubleshooting

Nothing happens on the shortcut: check microphone/accessibility permission and whether another app owns the key combination. On Wayland, add the shortcut in the compositor/desktop settings.

Text is not inserted: install the appropriate wtype (Wayland) or xdotool (X11), or use the clipboard-based fallback. The active app also needs a normal editable text field.

Transcription is slow: use a smaller model, close other CPU/GPU-heavy apps, or try the Parakeet CPU path. First-run model loading can be much slower than later runs.

The app crashes: enable debug mode and attach logs plus OS, model, audio device, and GPU details to an issue. Prototype model crashes can be configuration-specific.

Build from source

The exact platform prerequisites are maintained in BUILD.md. Clone the repository first:

git clone https://github.com/YashasVM/Wisper-Low.git
cd Wisper-Low

The source includes the Tauri frontend, Rust backend, model integrations, and platform-specific packaging. Keep downloaded model files out of commits.

On this page