Talk instead of type — voice dictation in any app
AI: local or publik API
Listening…
Release to paste
Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.
| Model | Quality | Per 1,000 uses |
|---|---|---|
| On your computer (Ollama, 4-bit download size) | ||
| Granite 4.2 3B2.2 GB | 9 | $0 |
| Phi-4 Mini2.5 GB | 6 | $0 |
| Llama 3.1 8B4.9 GB | 7 | $0 |
| gpt-oss 20B14 GB | 9 | $0 |
| Gemma 4 31B20 GB | 19* | $0 |
| Qwen3.5 35B-A3B24 GB | 19* | $0 |
| publik API | ||
| publik-fastGLM-5.3 Flash · WhimprFlow | 42 | $1.00 |
| publik-balancedMiMo-V2.6-Pro | 46 | $10.00 |
| publik-smartGPT-6 Sol | 48 | $18.00 |
Quality: Artificial Analysis Intelligence Index v4.3.2, read 2026-09-22 (publik API models 2026-09-25); * = estimated by Artificial Analysis. Sizes: the Ollama library, read 2026-09-22.
Every step written out. No terminal experience needed. Pick your setup.
A local-first, cross-platform voice dictation app — hold a key, speak, and clean text lands wherever your cursor is. Speech is transcribed on-device with Whisper and cleaned up (filler removal, self-corrections, punctuation, lists/newlines) by a local LLM, with an optional cloud path. It re-creates the workflow of a Wispr-Flow-style dictation tool from scratch, with its own name, palette, and code.
⚠️ This is a proof of concept, vibe-coded in a few hours. It works and the core loop is real, but it is rough and needs a lot of polish, testing, and hardening before it's anything like production quality. Treat it as a starting point, not a finished product.
| Platform | Status |
|---|---|
| macOS 14+ | Built and working — developed and tested locally (Apple Silicon). |
| Windows 10/11 | Built and working — compiles and runs on real Windows 11 (MSVC). Push-to-talk (hold Right Ctrl), Whisper ASR, clipboard+SendInput paste, and cloud cleanup (OpenAI or any OpenAI-compatible API, e.g. OpenRouter) are verified end-to-end. Auto-learn dictionary capture is still macOS-only; the local (on-device) LLM cleanup worker builds but is CPU-only for now (no CUDA/Vulkan yet). |
Both platforms are build-from-source only for now — there's no signed installer/release pipeline yet, so git clone + the steps below is the way to run it on either OS.
whisper.cpp), running on the GPU. Ships a small English model by default; larger models are auto-preferred if present.llama.cpp) runs as a separate worker process and cleans the transcript: removes fillers, resolves spoken self-corrections ("meet at 2… no wait, 3" → "3"), applies spoken punctuation, and formats lists/paragraphs. Deterministic gates guard against over-editing, with a raw-transcript fallback.Tauri v2 (Rust core + React/TypeScript webviews). Platform-agnostic logic lives in crates/whimpr-core (state machine, cleanup prompts/gates, dictionary, stats). ASR, audio, and the LLM worker are separate crates. The Tauri app in src-tauri/ hosts the UI and wires the native hotkey/injection per platform (hotkey.rs on macOS, win.rs on Windows).
crates/
whimpr-core/ state machine, cleanup (prompts/gates/levels), dictionary, stats
whimpr-asr/ Whisper ASR
whimpr-audio/ mic capture + resampling
whimpr-cleanup/ OpenAI / Anthropic cloud providers
whimpr-llm-worker/ local llama.cpp cleanup worker (separate process)
src-tauri/ Tauri shell: hotkey/paste/autolearn (macOS), win.rs (Windows)
ui/ React Hub + overlay pill
docs/ spec, architecture notes, research
A release build needs two things in the environment: a Developer ID identity (see scripts/build-macos.sh) and PUBLIK_APP_TOKEN — the app token that lets a downloaded copy mint its own publik API key after the user accepts the disclosure. The script refuses a release without either. The token is read at compile time and never printed; scripts/verify-macos.sh checks the module is compiled in without touching the value. CI does the same from the PUBLIK_APP_TOKEN repository secret on a v* tag (.github/workflows/release.yml). A dev build (--skip-notarize, or ./dev.sh) may omit the token — publik API then shows "not available in this build" and Local / your own key keep working.
WhimprFlow now surfaces the exact reason on the pill and in the Hub instead of failing silently (previously this only ever logged to a terminal, which is why it looked like nothing was happening at all). If you still hit this:
tauri build produces a differently-signed binary, and macOS can leave a
stale Accessibility entry for the old signature that looks granted but
isn't. Fix: in System Settings → Privacy & Security → Accessibility, remove
WhimprFlow with the − button and re-add it (or toggle it off/on), then
relaunch. WhimprFlow's pill and Hub will now show "Fn key isn't wired up"
when this happens instead of just doing nothing../dev.sh on macOS, or the built
.exe from PowerShell on Windows) and hold the key once — every failure
path also logs a [whimpr]-prefixed line explaining what happened.MIT — see LICENSE.