Repository navigation
Releases: opennookorg/betterwispr
Release list
BetterWispr 0.1.5
Added
- Meeting notes can tell the people on the other side of a call apart. Download Speaker detection (about 21 MB) under Meeting speakers in Models. When a meeting ends, BetterWispr listens back to the call audio on this Mac and labels each line Speaker 1, Speaker 2 and so on, in the order they first spoke. The notes model gets the same labels, so the summary can say who said what. While it works, the notetaker shows "Telling the speakers on the call apart" with a Skip button that goes straight to the notes. It needs macOS 15 or later and the call audio the notetaker records on macOS 14.2 or later. When the voice changes partway through a line, BetterWispr cuts the line there and transcribes each part again, so a quick reply goes to the person who gave it. On six recorded two-person calls, 93% of words went to the right person, against 85% without the cut, and on four recorded four-person meetings 82% against 77%. The shorter parts cost a little accuracy, about 4 more wrong words in every 1,000, and with an API speech connection each part is sent again. Turns shorter than a second stay with the line around them, and when two people talk at once the part goes to whoever spoke longer. Your microphone is still Me, so people in the room with you are not separated. Meetings recorded before the download keep Them.
- Name the speakers. Fields above the transcript let you type a name for each detected speaker, and the name replaces "Speaker 2" in the transcript, in Copy and Copy transcript, and in notes you generate after that. Renaming marks the summary as out of date so you can regenerate it with the names.
BetterWisprCLI --download-speaker-detectioninstalls the speaker detection models.--meeting PATHplays an audio file through the notetaker's chunking, transcribes it as a meeting does and prints each line with its speaker as JSON, and--meeting LINES.jsonl --notes OUT.mdwrites notes from an earlier run without transcribing again.scripts/fetch_bench_corpus.py --meetingsdownloads four recorded AMI meetings and six EdAcc video calls with who spoke when, andscripts/evaluate_meetings.pyscores the words and the speaker labels.- Writing modes, under Style > Modes. A mode sets its own cleanup, tone and screen context, and with Medium cleanup it can add instructions for your notes model, such as "Use British spelling." Anything left as "Same as default" follows your defaults. A mode applies in the apps you add, on the websites you add, or when you start or end a dictation with its trigger word, which BetterWispr removes from the text. With the trigger "casual", "Let's keep it casual." types "Let's keep it.", so pick a phrase you wouldn't otherwise say, such as "casual mode". A trigger word wins over a website, and a website wins over an app. A trigger word can turn screen context off but not on.
- Website modes match a site and its subdomains, plus an optional path.
github.comalso covers gist.github.com but not notgithub.com, and*.github.comandgithub.com/apple/*work too. They work in Safari, Chrome, Arc, Dia, Edge, Brave, Opera, Vivaldi, Comet, Orion and Yandex Browser, not Firefox. BetterWispr reads the address through Accessibility when you start dictating, so there is no Automation prompt, and it never saves or sends it. While an enabled mode lists a website, the capsule can take up to half a second longer to show recording in a browser, and no audio is lost. - Use screen context, under Style, off by default. With Medium cleanup it sends your selected text, your clipboard and the text of the window you dictate into to your notes model, so it can spell what you see. Your notes model may be a cloud service. Nothing is read while a password field is active, and clipboard items marked as passwords are skipped. Read window text from the screen, also off by default, reads the window from a screenshot when an app shares under 200 characters through Accessibility. It needs Screen Recording, and dictation never asks for it.
- Show words as you speak, in Settings > App and on by default. With a Parakeet model the capsule shows your words while you record, confirmed words bright and the newest guess dimmed, two lines at a time. The pasted text is still the recognition of the whole recording, and the preview never reaches History or correction learning.
BetterWisprCLI --live-file PATH [--model ID] [--language en]plays an audio file through the live preview in real time with a Parakeet model, prints each confirmed and provisional update with the time its pass took, then prints the full transcription.- Spoken language in Settings offers Turkish, for Apple on-device, Whisper and OpenAI-compatible connections. Parakeet models do not list it, and Sarvam and Smallest AI do not support it.
- Show in Dock, in Settings > App and off by default. BetterWispr runs from the menu bar without a Dock icon: your dictation shortcut still works, and the menu bar icon opens the dashboard or quits. Turn it on to bring the Dock icon back. The change applies right away and stays after a restart.
Changed
- Parakeet Ultra is now the recommended model in setup and is listed above Parakeet TDT v3 in Models. Before cleanup, on 300 recorded video-call segments in Indian, Nigerian and US English, it got 14.45% of words wrong against 15.96% for Parakeet TDT v3 (14.95% against 15.66% after Light cleanup), at the same speed, with the same 25 languages. On 597 more Indian English segments it got 11.5% wrong against 12.3% before cleanup, but after Light cleanup the two were level at 12.05% and 12.11%, because cleanup removes more of the fillers v3 writes. On four recorded meetings cut into chunks as in 0.1.4, it got 22.8% wrong against 25.7%. With this version's cut at voice changes Ultra got 23.2%, and v3 was not run that way. Dictation and meeting notes both use it once selected. The model you use now does not change on its own. If you use Parakeet TDT v3 or v2, Home suggests trying Parakeet Ultra and Models marks it Recommended; download it in Models and choose it to switch.
- Learn from my corrections asks your notes model first. With Medium cleanup, English text and a ready notes model, each fix the rules would learn goes to the model with up to three words on each side, and only the fixes it confirms are learned. The model is asked to turn down everyday word swaps such as "meet" to "meat", while a misheard name such as "post hog" to "PostHog" stays allowed. If the model gives an invalid reply or isn't running, BetterWispr learns by its rules as before. The "Learned" toast has an Undo button that removes the words it just added.
- Medium cleanup uses a new edit prompt. Vocabulary is given as the spelling to use, and a mode's instructions go with it. With llama3.1:8b through Ollama, 18 of 18 test edits came back as plain edits, in 0.55 to 1.86 seconds. With Apple Intelligence, lists come back numbered and "no wait" and "sorry I mean" are resolved, but each dictation takes 0.5 to 0.8 seconds longer, and "actually scratch that" stayed in the text in 2 of 2 runs, where the old prompt removed it.
- When a Medium edit times out or hits a passing network error, BetterWispr tries up to three times, allowing 7 seconds plus 1 for every 10 words each time. Notes CLIs get one try of 10 seconds plus 1 for every 10 words. If every try fails, the dictation keeps Light cleanup.
- With Ollama, BetterWispr loads the notes model 450 ms into a recording, at the size the edit needs. When the model wasn't loaded yet, the wait before an edit fell from 0.91 to 0.06 seconds with llama3.1:8b. Apple Intelligence is prepared the same way. Dictation edits ask known API services for low reasoning effort, Claude Code gets
--effort lowand Codex getsmodel_reasoning_effort="low". - The local speech model runs a one-second practice transcription of quiet noise after it loads, after you switch models and 3 seconds after wake or unlock. A dictation started meanwhile cancels it. On the Mac it was tested on, the gain was within measurement noise.
make shippackages DMGs with macOS'sdiskutil imageinstead of thecreate-dmgtool, so it no longer printshdiutildeprecation warnings on macOS 27 and no longer needsbrew install create-dmg. The disk image is APFS instead of HFS+ and keeps the same window layout. Packaging DMGs now needs macOS 27 or later; the DMGs still open on macOS 14.
Fixed
- Light cleanup now turns "I live in Delhi no sorry I live in Ahmedabad" into "I live in Ahmedabad". A "no sorry" or "sorry, no" counts as a correction even when the speech model writes no commas, and a correction can restart on "I" or "we" when the word after it repeats too. "Should we go, no, we should stay" and "I said no sorry I can't come" stay as you said them.
- Light cleanup no longer deletes words when a "no" or "I mean" only looks like a correction. "We read it in the last book, no, the whole thing with the houses was different" lost "in the last book". A correction now has to end about as soon as the words it replaces, as "Let's meet at 5, no, at 6 pm" does.
- Light cleanup keeps repeats said for emphasis. "Drinking more and more and more" lost its last "and more", and "again and again and again" lost one "and again", as if they were stutters. "And then and then we shipped it" still becomes "and then we shipped it".
- The Parakeet phrase booster no longer replaces correctly spelled words with a vocabulary term that sounds like them. With Claude in Vocabulary it wrote "Claude" when you said "cloud", and on 597 recorded Indian English segments with 20 terms nobody said, it made 9 of those segments worse with Parakeet TDT v3 and 10 with Parakeet Ultra. A word that is spelled correctly and looks clearly different from every term now stays, which made none of them worse, while a misheard name such as "Rivali" still becomes "Diwali". Spelling is checked with the macOS English dictionary.
- Meeting notes stick to what was said. T...
BetterWispr 0.1.4
Added
- English dictation writes spoken numbers as digits with every speech model, including Parakeet models that write numbers as words. "Two hundred and fifty thousand" becomes 250,000, "one hundred or two hundred" becomes "100 or 200", "two point five million" becomes "2.5 million" and "zero point one point one" becomes 0.1.1. A lone small number ("give me five minutes"), "a hundred times", ordinals, years said as pairs ("nineteen ninety nine") and digit-by-digit phone numbers stay as spoken.
- Spoken numbers understand Indian English "lakh" and "crore": "one lakh" becomes "1 lakh", "two lakh fifty thousand" becomes 2,50,000 and "two point five crore" becomes "2.5 crore". "Twelve hundred" becomes 1200, and a phrase that is not one number keeps its readable part as digits, so "ten thousand hundred followers" becomes "10,000 hundred followers".
- English dictation writes spoken symbols. "At the rate" or "at sign" writes @ ("ping at the rate KV" becomes "ping @ KV", "name at the rate gmail dot com" becomes name@gmail.com), "hashtag launch" becomes #launch, "issue hash forty two" becomes "issue #42" and "ten percent" or "ten percentage" becomes 10%. Saying only "at the rate", "hash", "hashtag", "percent" or "percentage" writes just the symbol. Phrases like "hash out a plan" and "what percentage of users" stay as words. An address the model hears as "gmail. com" or "at the rategmail.com" is joined back into one address.
- Vocabulary can fix a voice command the speech model mishears in your accent. Add what it wrote as the spoken phrase and the command as "Write as", such as "Kocia Mark" written as "question mark", "Coma" as "comma", "at the Red" as "at the rate" or "Hai fun" as "hyphen". These entries run before voice commands, so the dictation gets "?", a comma, "@" or "-". They are not sent to the phrase booster, because boosting command words dropped neighbouring words in testing.
- Settings has a Vocabulary row under Microphone and language that explains how your word list helps and opens it. With a Parakeet model it tells you when the phrase booster isn't downloaded yet, since Parakeet needs it to use your words while recognizing speech.
- When a call starts in Zoom, Google Meet, Microsoft Teams, a Slack huddle, Webex, FaceTime, Discord, WhatsApp, Signal, Telegram, Whereby or Jitsi Meet, the pill offers Start notetaker. It asks once per call and the offer goes away after 30 seconds. Calls in a browser are recognized by their window title, which needs Accessibility. Turn it off with Detect meetings in Settings or from the offer's menu. It needs macOS 14.2 or later.
- Settings has an Appearance section with a Theme choice of System, Light or Dark. BetterWispr now starts in Dark; choose System to follow your Mac as before.
- "Exclamatory mark" writes "!", and saying only "hyphen", "colon" or "dash" writes just that mark.
- Say "write an email to Sarah saying I will be on holiday tomorrow, thanks, best regards, Kartik" and BetterWispr types it laid out as an email: "Hi Sarah," then the body, then "Best regards," and your name on their own lines. "Draft" and "compose" work too, as do "that", "telling her" and "letting him know". It works on this Mac without a notes model, in English or Auto, and skips the tone and the Medium edit so the layout stays. If the speech model misspells your name, add it to Vocabulary.
- Style lists the apps you recently dictated into under each context, so you can see which tone each one gets. T3 Code, Chrome, Brave and other apps outside the lists use Other apps, which is Formal until you change it.
- Smoother motion. Capsule cards and pills grow out of the pill as they fade in, the dashboard cross-fades between pages, the toast slides back up as it leaves and Style reveals the notes model picker smoothly. With Reduce Motion on, these are plain fades.
- Spoken language lists the languages the selected model understands. Parakeet TDT v3 and Parakeet Ultra now offer all 25 of their European languages, such as Polish, Dutch, Ukrainian and Greek, instead of a fixed list of 11 that included five they cannot recognize (Hindi, Japanese, Korean, Chinese and Arabic). A language you chose earlier that the model does not support stays visible and is marked as not supported.
BetterWisprCLI --bench MANIFEST.jsonltranscribes a list of clips with one loaded model and prints each transcript with its recognition time, optionally after the app's Light or Medium cleanup or with a--vocabularylist for the phrase booster.scripts/evaluate_transcripts.py --group languagescores each language separately, andscripts/fetch_bench_corpus.pydownloads a small LibriSpeech and Multilingual LibriSpeech test set to run them on, or with--accentsconversational Indian, Nigerian and US English from EdAcc.
Changed
- The dashboard opens on a new Home page. It shows your shortcut and a button to start dictating, your words, speaking time, pace and streak, your most recent dictations, and whether your speech model, microphone and pasting are ready, each one a click away from fixing it. The sidebar groups pages under Personalize and App.
- Settings is laid out as cards (Shortcut, Microphone and language, After you speak, App, Permissions and Voice commands), and each option has a short line explaining what it does.
- Style shows what each cleanup level does to a sample sentence as you switch levels. Each app context has its own card with an icon, its tone choices and a preview of the tone, and the apps it covers are listed underneath.
- While a dictation is being transcribed, the pill shows a spinner instead of the moving bars.
- The notetaker window is calmer. The date and speech model share one line under the title, the tabs are plain text with an underline that slides to the open tab, and the transcript tools sit on the page instead of in a gray box. While recording, the bottom of the window is one bar with the timer, live Me and Them waveforms, a microphone menu and a red Stop button, with the consent reminder underneath. Before the first words arrive, the transcript says it is listening instead of showing an empty box.
- Recording waveforms in the pill, the notetaker and Home now scroll from right to left with your voice. Each bar is a moment of sound, louder syllables stand taller and pauses drop flat, instead of a fixed shape that wobbled at one height.
- Automatic microphone follows Sound settings again, so AirPods and other Bluetooth headsets are used when macOS picks them, with the lid open or closed. A chosen microphone that is disconnected now falls back to the same macOS default instead of skipping a connected headset. Recording from a Bluetooth headset's microphone still drops its playback to call quality until you stop; choose your Mac's own microphone in Settings to avoid that.
Fixed
- A new version no longer arrives silently. When BetterWispr finds an update while you are working in another app, a toast offers Update and the menu bar shows "Install BetterWispr" with the new version, instead of Sparkle's window opening behind your other windows. With automatic installs on, a downloaded update shows a Restart toast and menu item, because the update otherwise waited until you quit BetterWispr.
- With Spoken language set to Detect automatically and words in Vocabulary, Parakeet no longer rewrites other languages into your vocabulary terms. The phrase booster understands only English, and it turned German "meine" into "Mike". It now runs automatically only when the transcript reads as English.
- The Parakeet phrase booster no longer swaps everyday words for your vocabulary. It turned "not like" into "Notion" and "Thank" into "Thai", and on 300 recorded conversation clips with 20 unspoken terms it changed 44 of them and raised the error rate from 16.2% to 17.4%. A word must now sound closer to a listed term before it is replaced, which changed 5 of those clips. It also no longer drops the word next to a term, as when "seven Harry Potter movies" became "Harry Potter movies".
- Light cleanup resolves a correction after a lone "sorry" that restarts on in, at, on, from, near, into, by or with. "I live in Ahmedabad sorry in Delhi" becomes "I live in Delhi" and "meet at 5 sorry at 6" becomes "meet at 6". Apologies such as "sorry for the wait", "so sorry in advance" and "sorry, the train was late" stay.
- Cleanup no longer drops a repeated number word as a stutter, so "twenty twenty five" and "fifty fifty" keep both words.
- Meeting notes no longer lag while recording. The Me and Them meters used to redraw the whole notetaker window and the floating pill on every audio buffer, about 140 times a second. Now the levels update at most 30 times a second and only the meters and the clock redraw.
- The pill no longer keeps spinning for about three quarters of a second after your words are pasted, and the next dictation can start right away. BetterWispr used to wait in place before putting your previous clipboard back. It now restores the clipboard in the background, and when you dictate again before that happens, the clipboard you had before the first dictation is the one that comes back.
- Tapping the notetaker pill while a meeting is still starting no longer silently cancels it. A tap stops a meeting only once it is recording; Cancel in the notetaker window, the pill's menu and the menu bar still cancel a meeting that is starting.
- Meeting notes no longer wait up to 30 seconds to show what you said, and no longer cut your sentences in half. BetterWispr ended a microphone chunk at a pause only when the level fell below a fixed threshold, which steady room or AirPods noise never did, so chunks ran to 30 seconds. A pause now counts when the level falls back to the background noise of the last 10 seconds, which also ignores the short silent gaps AirPods leave in their signal, and chunks are 3 to 20 seconds long.
- Meeting transcripts no longer repea...
BetterWispr 0.1.3
Fixed
- Videos and music in AirPods and other Bluetooth headphones keep their full sound quality while you dictate. Recording from a Bluetooth headset's microphone switches its playback to call quality, so Automatic now uses your Mac's built-in microphone instead while the lid is open. With the lid closed, or on a Mac without a microphone, Automatic follows Sound settings. If you chose your headphones in Settings, they are still used, so switch Microphone to Automatic to keep full sound quality.
- Successful dictation plays only the recording-stop sound; insertion and copying no longer play a second completion sound. Notetaker remains silent.
- Microphone callbacks explicitly avoid inheriting MainActor isolation, preventing the capture-start crash reported on the audio worker queue.
- Quick taps in Hold to talk start hands-free dictation with compact cancel and finish controls. Cancellation offers Undo with a countdown; successful insertion returns to idle without a completion message. The notetaker pill has more waveform width while keeping its compact height.
- Dictation feedback uses only locally installed sounds. The earlier sound packs and all fallback cues have been removed.
- Dictation and meeting notes wait for microphone audio before reporting readiness and finish the in-flight audio buffer before transcription. Both use input-only Core Audio capture with 20 ms buffers instead of the audio engine tap's larger batches. Dictation starts capturing without waiting for the speech model to prepare. Bluetooth startup runs off the UI thread, and a running input queue handles Bluetooth rate changes without a second restart.
- Quiet, brief speech is checked in small windows so larger Bluetooth audio buffers do not dilute it below the silence threshold. Waveforms respond after digital silence from noise-cancelling headsets and show the latest delivered level without replaying a buffered delay.
- Dictation and meeting notes recover microphone capture after AirPods and other external microphones change the device's audio configuration. Device changes are allowed to settle, and a failed restart is retried before reporting an error.
- Automatic microphone selection follows device changes during dictation as well as meetings. Audio recorded before a switch is kept, including when the new microphone uses a different sample rate or channel count; meeting system audio continues independently.
- Changing the microphone in Settings also applies to a dictation already in progress. Pending device changes are cancelled when recording stops or is cancelled.
BetterWispr 0.1.2
Full Changelog: v0.1.1...v0.1.2
BetterWispr v0.1.1
BetterWispr 0.1.1 adds writing styles per app, adjustable cleanup, an Insights page and more local speech models.
Download
Requires macOS 14 or later. Choose the build for your Mac:
| Mac | Download |
|---|---|
| Apple Silicon (M-series chips) | BetterWispr-arm64.dmg |
| Intel | BetterWispr-x86_64.dmg |
Both downloads are signed with Developer ID, notarized by Apple, and include a stapled notarization ticket. appcast.xml is the feed used by the app's updater; you only need to download a DMG. If you already run 0.1.0, use Check for Updates… in the app.
Highlights
- Styles per app. Pick a tone for personal messages, work messages, email and everything else: Formal, Casual, Very casual or Excited. BetterWispr chooses the tone from the app you dictate into. Styles change English dictation only, run on your Mac, and default to Formal, which leaves your text as it was.
- Auto cleanup levels. None keeps your words as recognized. Light, the default, removes fillers and stutters, and now also resolves spoken corrections such as "Pune, sorry, no, to Delhi". Medium edits English dictation for clarity with the notes model you chose in Models; Apple Intelligence and Ollama run on your Mac, while Claude Code, Codex and API connections send the dictation to that provider.
- Insights. Words per minute against average typing speed, words cleaned up, vocabulary fixes, total words, the kinds of apps you dictate into, and a streak calendar. Computed on your Mac from saved history.
- More local models. Parakeet Ultra, Parakeet TDT-CTC 110M (English), Parakeet Japanese, Whisper Large v3 Turbo (compressed) and Whisper Small. Each downloads only when you choose Download.
- Faster, friendlier downloads. Parakeet installs in one pass with the phrase booster alongside it. You can keep dictating while a model downloads, progress covers the whole install, and Cancel and Retry are available everywhere.
- Use Original in History restores what you said when cleanup or a style changed it.
Fixes
- A dictation that can't be pasted, because you switched apps or the app quit, now opens a card with your text and a Copy button instead of a brief toast.
- Learn from corrections works in Electron apps such as Claude and T3 Code, and catches fixes sent right away in chat apps that clear the field on send.
- Smallest AI connections ask for the spoken language when you add them, instead of failing after you start dictating.
- The welcome guide's model download no longer stops when a dictation is cancelled, and a failed download shows its error.
- Parakeet Japanese never applies the English phrase booster.
Dictations saved by 0.1.0 load unchanged. The welcome guide's completion now lives with your workspace, and the 0.1.0 preference is migrated once.
Validation
- Native automated checks, evaluation checks and release-script checks passed.
- Both packaged architectures were signed, notarized, stapled and accepted by Gatekeeper, and the appcast carries a Sparkle EdDSA signature for each DMG.
- Physical Intel hardware and minimum-supported-macOS testing remain pending.
BetterWispr v0.1.0 — First public release
BetterWispr's first public release brings local dictation and meeting notes to macOS.
Download
Requires macOS 14 or later. Choose the build for your Mac:
| Mac | Download |
|---|---|
| Apple Silicon — M-series chips | BetterWispr-arm64.dmg |
| Intel | BetterWispr-x86_64.dmg |
Both downloads are signed with Developer ID, notarized by Apple, and include a stapled notarization ticket. appcast.xml is the feed used by the app's updater; you only need to download a DMG.
Highlights
- Dictate into your apps. Hold Option–Space to speak and release to finish, or choose toggle mode and your own shortcut. A compact recording overlay stays nearby, with transcript history and clipboard controls.
- Local speech recognition. Choose Apple on-device speech, Parakeet TDT v3/v2, or Whisper large-v3 turbo. Model downloads are explicit, and installed built-in models load locally without a cloud fallback.
- Vocabulary and corrections. Add spelling hints and phrase replacements, optionally install the English Parakeet phrase booster, and learn vocabulary from corrections. English voice commands handle punctuation, new lines and sentence removal.
- Meeting notes. Capture microphone and system audio, follow the transcript, add your own thoughts, and export notes as Markdown. Summaries include key points, decisions and action items.
- Choose your notes model. Use Apple Intelligence on a supported Mac or an installed Ollama model locally. Signed-in Claude Code, Codex and custom API connections are optional, explicitly selected alternatives; speech and notes providers are chosen independently.
- Native setup and updates. A first-launch guide helps with permissions and models. Signed in-app updates use Sparkle and select the correct download for Apple Silicon or Intel.
This version also improves cancellation, preserves existing notes when summary generation fails, and hides matching microphone echoes of system-audio transcript entries while retaining the originals.
Install and start dictating
- Open the DMG for your Mac and drag BetterWispr into Applications.
- Open BetterWispr from Applications and follow the welcome guide. Grant microphone access and Accessibility access for automatic paste.
- Choose a speech provider and explicitly install its model if needed. Hold Option–Space, speak, then release.
Built-in speech recognition stays on your Mac. Optional API speech providers and remote notes services are used only when you select them.
Compatibility and validation
- System-audio meeting capture requires macOS 14.2+. Apple Intelligence summaries require a supported Mac running macOS 26+; transcripts and personal notes remain available without it.
- Native automated checks, release-script checks and website checks passed. Both packaged architectures, code signatures, notarization tickets and Sparkle update signatures were verified.
- The Intel build passed offline speech and silence smoke tests under Rosetta. Physical Intel hardware and minimum-supported-macOS testing remain pending; the Intel unit suite could not run with this development machine's ARM-only test runner.