better-voice README

The project's README from github.com/TarunTomar122/better-voice. As one markdown file: README.md.

BetterVoice

Voice dictation with the screen context you point at.

BetterVoice is an experimental, open-source macOS menu-bar app. It transcribes speech locally and captures the full screen whenever you circle something with your pointer, leaving a restrained blue highlight around the referenced area.

BetterVoice settings overview

Use it

Each circle captures the complete display beneath the pointer. Multiple circles produce screenshots in the same order you referenced them.

Open Settings… from the menu-bar icon to choose a microphone, change the dictation language, tune the circle threshold, and customize the shortcuts. In Shortcuts, click the current key, wait for Listening…, and press the exact combination you want. It appears in place immediately; click Done when finished. Reset shortcuts to defaults restores both shortcut bindings and trigger styles. Quick notes support hold, tap-to-toggle, and double-tap-to-toggle when the shortcut is modifier-only; long explanations support press-to-toggle and double-tap-to-toggle for modifier-only shortcuts. Hold delay is adjustable from 50–500 ms (140 ms by default). The defaults are 340° for circle detection, hold ⌥ for quick notes, and press ⌘⌥ for long explanations.

Dictation language

BetterVoice dictates in English by default and nothing about that flow changed. Pick another language under Dictation Language in the menu bar, or in Settings….

English keeps the English-only Parakeet model it has always used, so an existing install downloads nothing new and its transcription is unchanged. Choosing any other language pulls the multilingual model instead, a separate one-time download of roughly the same size. Switching back to English returns to the model already on disk.

Two things follow from the language you pick:

Grammar cleanup (Beta)

Grammar cleanup is off by default. To try the beta, open Settings…, turn on Grammar cleanup (Beta), and press Download. BetterVoice then runs each transcript through the tiny, English-focused t5-tiny-gec-hone model. Its quantized ONNX weights and tokenizer are about 36 MB, stored in ~/Library/Application Support/BetterVoice, and run locally. When enabled, BetterVoice preloads the cached model in the background after launch so the first recording does not pay the initialization cost. The status bar shows “Polishing transcript locally…” while this step runs. If the model cannot download, exceeds its context limit, or returns an incomplete result, BetterVoice keeps the raw transcript so recording still completes.

This is intentionally experimental: the model fixes capitalization, punctuation, and sentence structure, and it can occasionally change wording. Delete the t5-tiny-gec-hone folder to force a fresh download.

Developer vocabulary (Beta)

BetterVoice also includes a fast, zero-download developer pass inspired by WhisperDictation and Dictate. It fixes common casing such as github → GitHub, javascript → JavaScript, and json → JSON, and recognizes spoken acronyms such as “n p m” in terminals and editors. It preserves the transcript’s wording and runs locally in milliseconds. The pass is enabled by default and can be turned off from Settings…. The generic grammar model remains an independent, opt-in beta.

Your own vocabulary

The developer pass ships with a fixed table, and it will never cover kubectl, an internal service name, or a colleague's surname. Those live in a file you edit:

~/Library/Application Support/BetterVoice/vocabulary.json

Open it from the menu bar with Edit Vocabulary…. The key is what the transcript says, the value is what you meant, and phrases of several words work:

{
  "terms": {
    "cube cuttle": "kubectl",
    "engine x": "nginx"
  }
}

Saving is enough; the file is re-read on your next recording. Longer sources are applied first, so a phrase wins over a word inside it, and matching is whole-word and case-insensitive, so filenames, domains, and paths are left alone. A source you list replaces the built-in spelling for that same term.

One rule is worth respecting: never use an ordinary word as a key. Mapping read me to README rewrites every sentence containing "read me". The file ships with no terms for that reason, and it is ignored entirely while Developer vocabulary (Beta) is off. A malformed file is ignored rather than failing the recording.

Download

Download the latest Apple Silicon build from the BetterVoice releases page. Choose BetterVoice-macos-arm64.zip, unzip it, and open BetterVoice.app:

unzip BetterVoice-macos-arm64.zip
open BetterVoice.app

The release targets macOS 14+ on Apple Silicon. This experimental build is signed with an Apple Development certificate and is not notarized with a Developer ID certificate yet. On the first launch, macOS may require you to Control-click the app, choose Open, and confirm. If macOS still blocks it, use System Settings → Privacy & Security → Open Anyway. Then approve Microphone and Accessibility when BetterVoice asks; Screen Recording is optional for visual context. The local speech model downloads once (about 500 MB).

The first launch opens a guided setup: download the local model, grant microphone and Accessibility access, optionally enable Screen Recording for visual context, choose your microphone, and review the shortcut walkthrough. After setup, open Settings… from the menu bar any time to revisit these choices.

BetterVoice stays available in the menu bar and Dock while it is running. Choose Quit BetterVoice from either menu before deleting the app. If the UI is unavailable, run pkill -x BetterVoice, then move BetterVoice.app to the Trash.

Install from source

Requirements: macOS 14+, Swift 6/Xcode command-line tools, and a local Apple code-signing identity.

git clone https://github.com/TarunTomar122/better-voice.git
cd better-voice
./scripts/build-app.sh

The script builds, signs, and opens .build/BetterVoice.app. BetterVoice then walks through:

  1. The one-time local Parakeet model download (~500 MB)
  2. Microphone permission
  3. Accessibility permission for global shortcuts and returning text to the selected field
  4. Optional Screen Recording permission for circles and visual context
  5. Microphone selection and the shortcut walkthrough

Automatic microphone selection prefers a connected external input and falls back to the system input. You can choose a specific device during setup or from the menu bar.

To keep macOS permissions attached to the same identity across rebuilds, explicitly select your certificate when needed:

BETTERVOICE_SIGNING_IDENTITY="Apple Development: Your Name (TEAMID)" ./scripts/build-app.sh

If something is not working

Open the menu-bar icon and choose Settings…. It shows the live state of the microphone, Screen Recording, Accessibility, selected input, local transcription model, and the grammar cleanup toggle. Errors stay visible in a small recovery window with a path back to setup instead of disappearing as a system beep.

Clipboard behavior

macOS lets one clipboard contain text, rich text, and image representations, but each destination decides which representation to accept. For either mode, BetterVoice captures the focused app and field when recording stops, puts the transcript on the clipboard, and sends one ⌘V directly to that captured app. When both transcript and screen context exist, it then puts the captured images on the clipboard and sends a second ⌘V to the same app. Long explanations leave those images available on the clipboard; quick ⌥ notes restore the clipboard you had before recording. If the clipboard changes during the handoff, image insertion is skipped to avoid overwriting user data.

Privacy and storage

A session contains:

<timestamp>-<id>/
├── context.md
├── context-1.png
└── context-2.png

Development

swift test -Xswiftc -strict-concurrency=complete

See docs/ARCHITECTURE.md for the implementation map.

Contributing

New to the project? Start with the contribution guide. It covers the local setup, test command, architecture boundaries, and the kinds of changes that are useful to BetterVoice.

Current scope: English transcription by default with other languages behind the picker, Apple Silicon macOS 14+, and an experimental downloadable release. The release is not notarized with a Developer ID certificate yet. Circle recognition is intentionally forgiving; you do not need to draw a perfect circle.

Inspired by the fluidity of Wispr Flow. BetterVoice is not affiliated with Wispr Flow.

better-voice (TarunTomar122/better-voice)

Searching Database…

What is this?BetterVoice is an experimental, open-source macOS menu-bar app for voice dictation. It transcribes speech locally and also captures the screen area you circle with your pointer while talking, so the transcript comes with visual context.
Is this just a dictation tool, or does it also handle screenshots?Both: it inserts the voice transcript into the focused text field, and if you circled something on screen while recording, it also pastes a screenshot of the circled area into the same field.
How do I get it running?Download the Apple Silicon build (BetterVoice-macos-arm64.zip) from the releases page, unzip it, and open BetterVoice.app; the first launch walks you through a guided setup. Alternatively, build from source with a local build script that requires Swift 6/Xcode command-line tools.
Do I need to grant any special macOS permissions?Yes — Microphone and Accessibility permissions are required, and Screen Recording is optional but needed if you want the circle-to-screenshot feature.
Is the release ready to install without extra steps?The build is signed but not notarized with a Developer ID certificate yet, so macOS may block it on first launch and you'll need to Control-click and choose Open, or allow it via System Settings.
Does it work on Intel Macs too?No, currently only Apple Silicon Macs running macOS 14 or later are supported.
Does dictation work without internet?Yes, after the one-time local model download (~500 MB), speech transcription runs fully offline on-device.
Where does my audio and screen data go?Transcription runs entirely locally via FluidAudio, temporary audio is deleted right after transcription, and saved sessions live on disk in ~/Desktop/BetterVoice for at most 7 days (capped at 500 MB).
Can I switch dictation to another language besides English?Yes, you can pick another language from the menu bar or Settings; switching away from English triggers a one-time download of a separate multilingual model, while English keeps using the original Parakeet model.
What is the Grammar cleanup beta?An opt-in feature that runs transcripts through a tiny local t5-tiny-gec-hone model (~36 MB) to fix capitalization, punctuation, and sentence structure for English text; it falls back to the raw transcript if the model fails or times out.
Can I teach it custom words like internal service names?Yes, there's an editable vocabulary file (opened via Edit Vocabulary... in the menu bar) that maps misheard transcript phrases to the correct spelling, applied with whole-word, case-insensitive matching.
What are the default shortcuts for recording?Hold ⌥ for a quick note (stops on release), and press ⌘⌥ to start/stop a longer explanation; both the shortcuts and the circle-detection threshold are customizable in Settings.
Size
5.3 MB
Stars
281
Age
1mo
Commits · 90 Days