Skip to content
flykit-ccPublic

About

Native, fully local dictation for macOS. Hold a key, speak, let go: on-device speech to text and AI cleanup, inserted into any app.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

73 Commits

Folders and files

Repository files navigation

uisper

Native, fully local dictation for macOS. Hold a key, speak, let go. Clean text lands in whatever app you are typing in.

Nothing leaves your Mac. No accounts, no cloud, no telemetry.

Live transcription pill

Install

You need a Mac with Apple silicon running macOS 26 or newer. Nothing else.

  1. Download the latest uisper-x.y.z.zip from Releases.

  2. Unzip it and move uisper.app to your Applications folder.

  3. Right-click uisper.app and choose Open, then Open again in the dialog. This is needed once, because the build is not notarized by Apple.

  4. Grant the three permissions macOS asks for: Microphone, Accessibility, Input Monitoring. Then quit uisper from the menu bar and open it again.

  5. Leave it running for a few minutes the first time. uisper fetches two models it then keeps for good:

    • about 600 MB for speech, into ~/Library/Application Support/FluidAudio/
    • about 2.1 GB for the cleanup, into ~/Library/Application Support/uisper/Models/

    Settings › General shows the progress. Dictation works before they finish; you just get the raw words until the cleanup model is ready.

uisper lives in the menu bar. Look for the microphone icon.

Apple Intelligence is optional. uisper ships its own models and does not need it, but you can switch the cleanup to Apple's model in Settings if you prefer.

Use

  1. Hold your hotkey. A small pill appears at the bottom of the window you are in.
  2. Speak. The pill shows the sound level, and with Apple's engine the words as you talk.
  3. Let go. The text is transcribed, cleaned up and inserted at the cursor.

Press Escape while dictating to cancel. A tap shorter than 300 ms does nothing.

The default hotkey is Option+Space. Change it in Settings › General: click the field and press any shortcut. Modifier-only chords like Fn or Right Option work too.

Menu bar menu

Everything lives in the menu bar: language, cleanup toggle, hold or toggle mode.

Settings

Click the hotkey field and press any shortcut. That is your key from then on.

What the cleanup does

A small AI model rewrites the raw transcript before it is inserted:

  • Fixes punctuation, capitalization and grammar.
  • Drops fillers like "uh" and "um" and false starts.
  • Applies self-corrections: "send it Monday, no wait, Tuesday" becomes "send it Tuesday".
  • Repairs words the speech engine misheard, when the context makes the right one obvious.

It runs on your Mac. Turn it off in the menu bar when you want the raw words.

Some fixes happen with the cleanup on or off:

  • Sounds that are never words ("uh", "um", "hmm" in English, "äh" in German, "ãh" in Portuguese) are removed.
  • Your vocabulary words keep your spelling. "claude code" becomes "Claude Code", and a word heard in two parts is joined again: "fly kit" becomes "flykit".

Fix misheard names (optional, English)

The speech engine sometimes hears a name as ordinary words: "cloud code" instead of "Claude Code", "Antropic" instead of "Anthropic". Turn on Settings › Cleanup › Fix misheard names with the Decider to catch these.

uisper then looks for words that are spelled close to a word in your vocabulary list. For each one, it asks a small local model, Decider, whether you meant your word. It changes the text only when the model is very sure, so "a quant fund" stays as it is even if "Quants" is in your list.

  • The first time you turn it on, uisper downloads the model from its author's Hugging Face page (about 8.4 GB) and makes a smaller copy for your Mac (about 2.4 GB). The large download is deleted afterwards. Settings shows the progress. Dictation works meanwhile, without this check.
  • It adds at most half a second to a dictation. If it takes longer, the text is inserted without it.
  • English only. It is skipped when the dictation language or the text is not English.
  • Converting the model needs about 8 GB of free memory once.

The vocabulary learns

Add names and terms in Settings › Vocabulary, and uisper will spell them your way.

It also picks them up on its own. Correct a word by hand within five minutes of dictating, and the next time you dictate in that app uisper notices the change and remembers your spelling. It skips the 5,000 most common English words and sentences you rewrote, so ordinary edits like "call" to "called" are ignored. Learned words are capped at 200; the oldest go first. Words you typed in yourself are never removed.

Reading what you corrected needs the app to expose its text. Native apps do. Chrome and Electron apps do once uisper asks them to. Ghostty does through its own screen keybind. Other terminals cannot, so learning is off there — dictation itself still works everywhere.

Features

  • Hold-to-talk or press-to-toggle.
  • Any hotkey, recorded by pressing it.
  • English, German, Brazilian Portuguese. Switch from the menu bar.
  • Two speech engines: the built-in one, or Apple's. Switch in Settings › General.
  • Personal vocabulary list that grows from your own corrections.
  • Optional check that fixes misheard names from your list (English).
  • Password fields are respected: when secure input is on, the text goes to the clipboard instead.
  • Works in every app, including Chrome and Electron apps, through a paste fallback.

How it is built

Everything runs on device inside macOS 26:

Part What it uses
Speech to text Parakeet TDT v3 on the Neural Engine, via FluidAudio. Apple SpeechAnalyzer is the alternative and streams words as you talk
Cleanup Qwen3 4B on MLX. Apple Foundation Models is the alternative
Misheard names (optional) Decider 4B v2 on MLX, answering one multiple-choice question per suspect word
Text insertion Accessibility API, with a paste fallback
Hotkey A global event tap, so hold-to-talk works everywhere

The app is not sandboxed and is not on the App Store. Global hotkeys and text insertion need permissions the App Store forbids.

Build from source

Only needed if you want to change the code. Requires Xcode 26 and xcodegen.

brew install xcodegen
scripts/build.sh --open

This generates the Xcode project, builds, signs with your local identity, and launches the app.

Tests:

cd UisperCore && swift test

All logic lives in the UisperCore package and is tested there. The Uisper app target is a thin shell.

To publish a release: scripts/release.sh <version>.

Known limits

  • On Apple keyboards, F14 and F15 double as brightness keys at a level no app can intercept. Remap them with Karabiner-Elements, for example F15 to F20, and record the mapped key.
  • Cleanup speed depends on how busy your Mac is. On a calm machine it takes well under a second.
  • The built-in speech engine transcribes once you let go, so words do not appear while you speak. Apple's engine shows them live. Pick whichever you prefer in Settings.
  • A single dictation stops itself after ten minutes and inserts what you said.

Roadmap

  • Voice commands while dictating, like "new line" and "delete that".
  • Transcript history.

License

MIT.

Credits

  • The list of common English words that uisper never learns comes from wordfreq by Robyn Speer, licensed CC BY-SA 4.0.
  • The optional name check uses Decider by Mapika, licensed Apache 2.0.

About

Native, fully local dictation for macOS. Hold a key, speak, let go: on-device speech to text and AI cleanup, inserted into any app.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages