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…

这是什么?BetterVoice 是一款实验性的开源 macOS 菜单栏语音听写应用。它在本地转录语音,还会在你说话时捕捉用指针圈出的屏幕区域,让转录内容附带视觉上下文。
它只是听写工具,还是也能处理屏幕截图?两者都有:它会把语音转录内容插入当前聚焦的文本框,如果你在录音时圈选了屏幕上的内容,它还会把圈选区域的截图粘贴到同一个文本框。
怎么让它运行起来?从 releases 页面下载 Apple Silicon 版本(BetterVoice-macos-arm64.zip),解压后打开 BetterVoice.app;首次启动会引导你完成设置。也可以用本地构建脚本从源码构建,需要 Swift 6/Xcode 命令行工具。
需要授予特殊的 macOS 权限吗?需要——必须授予“麦克风”和“辅助功能”权限,“屏幕录制”是可选的,但要用圈选截图功能就需要开启。
发布版本可以直接安装而不需要额外步骤吗?该构建已签名但尚未用 Developer ID 证书公证,所以 macOS 可能会在首次启动时阻止它,你需要按住 Control 点按并选择“打开”,或在系统设置中允许。
它在 Intel Mac 上也能用吗?不能,目前只支持运行 macOS 14 或更高版本的 Apple Silicon Mac。
听写功能不联网也能工作吗?可以,完成一次性的本地模型下载(约 500 MB)后,语音转录完全在设备上离线运行。
我的音频和屏幕数据会去向哪里?转录完全通过 FluidAudio 在本地运行,临时音频在转录完成后立即删除,保存的会话存放在磁盘的 ~/Desktop/BetterVoice 中,最多保留 7 天(上限 500 MB)。
可以把听写切换成英语以外的语言吗?可以,你可以在菜单栏或设置中选择其他语言;从英语切换出去会触发一次性的单独多语言模型下载,而英语仍使用原来的 Parakeet 模型。
语法清理 beta 是什么?这是一项可选功能,用微小的本地 t5-tiny-gec-hone 模型(约 36 MB)处理转录文本,修正英文的大小写、标点和句子结构;如果模型失败或超时,则回退到原始转录文本。
能教它识别自定义词汇吗,比如内部服务名称?可以,有一个可编辑的词汇表文件(通过菜单栏的 Edit Vocabulary... 打开),把听错的转录短语映射为正确拼写,采用全词、不区分大小写的匹配方式。
录音的默认快捷键是什么?按住 ⌥ 录制快速笔记(松开即停止),按 ⌘⌥ 开始/停止较长的讲解;快捷键和圈选检测阈值都可以在设置中自定义。
Size
5.3 MB
Stars
281
Age
1mo
Commits · 90 Days