Skip to content

eliasmocik/hovor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hovor

Local, private voice dictation for Slovak + Czech + English - made for Claude Code.

Hold a hotkey, speak, and your words get typed at the cursor. Everything runs on-device with Whisper (Metal-accelerated on Apple Silicon). No cloud, no accounts, no API keys, your audio never leaves the Mac.

hovor is Slovak/Czech for "speech / talk".

Why this exists

There are plenty of local dictation tools, but they're tuned for English. If you think in Slovak or Czech and mix English tech terms mid-sentence - "pushni ten branch a sprav rebase" - the generic tools either force everything into one language or mangle the mix.

The key design choice: one general multilingual model, not a per-language one. Because real bilingual speech switches inside a single sentence, you can't route each language to a separate model - there's nothing to split a half-sentence on. A single multilingual Whisper model transcribes the whole mixed stream at once, which is exactly what you want for "just talk, don't think about the language".

It's aimed at dictating prompts into the VS Code terminal to drive Claude Code, but it pastes into any focused app.

Requirements

  • macOS on Apple Silicon (uses avfoundation + Metal)
  • whisper.cpp CLI and ffmpeg:
    brew install whisper-cpp ffmpeg
  • Python 3.10+ for the toggle daemon

Setup

git clone https://github.com/eliasmocik/hovor
cd hovor

# 1. get the model (~1.5 GB) into ./models/
curl -L -o models/ggml-large-v3-turbo.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin

# 2. python deps for the daemon
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Usage

One-shot (no hotkey, good for testing)

scripts/dictate                 # record until Enter, auto-detect language, print text
scripts/dictate -t 15           # record a fixed 15 seconds
scripts/dictate -l sk           # force Slovak
scripts/dictate --devices       # list mics, pick one with -m <index>

Toggle daemon (the real thing)

.venv/bin/python scripts/dictate-daemon

Tap Ctrl+Option+D to start recording, tap again to stop - the transcript is pasted at your cursor. A short sound marks start / done / silence.

First run, grant these in System Settings > Privacy & Security:

Permission Granted to Why
Microphone your terminal app record audio
Input Monitoring your terminal app see the global hotkey
Accessibility your terminal app paste with Cmd+V

Config (env vars)

Var Default Meaning
DICTATE_HOTKEY <ctrl>+<alt>+d global toggle key
DICTATE_MIC 0 mic index (see scripts/dictate --devices)
DICTATE_LANG auto force sk / cs / en, or auto-detect
DICTATE_MODEL ./models/ggml-large-v3-turbo.bin path to the ggml model

How it works

  1. ffmpeg records the mic to 16 kHz mono WAV (avfoundation).
  2. whisper-cli transcribes it locally with the multilingual model.
  3. The text is copied and pasted (pbcopy + a synthetic Cmd+V) into the focused app.

That's it - three small pieces, no daemon zoo, no network.

License

MIT - see LICENSE.

About

Local Slovak/Czech/English voice dictation for Claude Code - on-device Whisper, one multilingual model for seamless mid-sentence code-switching. macOS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors