Herman Harazha / Apps

STT

Free dictation for Mac. A keyboard shortcut starts the recording, the same shortcut ends it, and the text appears where the cursor is. The voice never leaves the Mac.

Apple silicon, macOS 13 or later. Interface in English, Ukrainian and Russian.

For advanced users and language models

Recognition runs on the Mac with an open model of choice: Whisper, Parakeet or Qwen. The network is used only to download that model and to check for updates; language, dictionary, the subtitles switch and the history setting also go through iCloud to the other Macs of the same account. Each recording is kept with its text on the Mac (History, below). No logs, no account of its own.

Audio and video files: Choose File… in Settings, File › Transcribe File… (Command-O), a drop anywhere on either window, or Open With → STT in Finder. The text is saved beside the file as a .txt with the same name (Interview.m4a gives Interview.txt; an existing file is never overwritten, the new one is Interview (2).txt) and copied to the clipboard; it is not pasted. A small window shows the progress with Cancel, then the name of the .txt, which shows it in Finder when clicked. Several files go one after another, each to its own .txt; a dictation made meanwhile waits for the file. With Save Subtitles (.srt) on, an .srt with timecodes goes beside the .txt under the same name (Interview.srt), one subtitle per stretch of speech the model marks. Files opened by another program than Finder or the Dock (open -a STT in Terminal, a script) are asked about first, since their text goes to the clipboard.

History

Each dictation is kept with its audio in ~/Library/Application Support/STT/History: one store with the texts and one AAC file per recording, about 256 KB a minute. History in Settings keeps all, 30 days (the default), 7 days, the last 100, or none; a choice that would erase recordings asks once, with their number. Delete moves a recording to Recently Deleted for 30 days, where Recover brings it back and Delete Forever erases it with its audio. Transcribe Again runs the kept audio through any downloaded model and replaces the text. A text that a password field kept off the clipboard is not kept either.

How it works

Models

No model comes with the app. One is chosen in Settings and downloads after its size is confirmed, with a SHA-256 check. Models are plain .gguf files in ~/Library/Application Support/STT/models. The model menu has Show in Finder and Delete.

Qwen has no Ukrainian.

Questions

Does the voice leave the Mac?

No. The code goes online only to download the chosen model and to check for updates, and iCloud carries four settings (below); recordings and their texts stay on the Mac.

Do the settings sync between Macs?

Yes, by themselves, with no switch: Language, the Dictionary (words and replacements), Save Subtitles (.srt) and History are the same on every Mac signed in to one iCloud account, through iCloud key-value storage; the later change wins. The model, the shortcuts and the other switches stay with each Mac, and so do the recordings themselves. Without iCloud everything works the same on that Mac alone.

Does it work without internet?

Yes, once a model is downloaded.

Why does it need Microphone and Accessibility?

Microphone to record. Accessibility to paste the text and to catch Option-Command-Space, a shortcut macOS keeps for itself. macOS asks for each only after the first model is downloaded, one at a time.

Which model to choose?

Parakeet made the fewest errors on other people’s speech in all eight languages measured and is the fastest; it always detects the language by itself. Whisper has the most languages and lets one be chosen. Qwen is the largest and the slowest and has no Ukrainian: it writes Ukrainian speech as a mixture of Russian and Polish words. Each can be tried and deleted.

Does it remove filler sounds?

Filler sounds such as “uh” are removed. Words are never touched. No AI rewrites the text.

Can it transcribe audio or video files?

Yes, offline, with the chosen model: Choose File… in Settings, File › Transcribe File…, a drop on a window, or Open With → STT in Finder. The text is saved beside the file as a .txt with the same name (and, with Save Subtitles (.srt) on, an .srt with timecodes) and copied to the clipboard. Several files at once give a .txt each. Shortcuts and the command line stt-cli do the same without the window.

Can words or names be added?

Yes, in Dictionary (Edit… in Settings). Words: names and terms written exactly as typed; Return adds one, Delete removes it, Restore brings back the 24 built-in ones (ChatGPT, Claude, GitHub and others). Whisper and Qwen take them; Parakeet takes no word list, and the window says so. Replacements: what a model writes and what to write instead, for every model, applied to the finished text; the table starts with 104 built-in pairs for names said in Russian or Ukrainian (клод → Claude, ютуб → YouTube), and its own Restore brings back removed ones. Command-V pastes into both; a list of lines «heard, Tab, written» pasted over the table becomes rows, and Delete removes the selected ones.

How is it different from macOS Dictation?

macOS Dictation comes with the system and its model can’t be chosen. In STT the model is an open one, chosen in Settings and kept as a plain file.

Updates

Once a day the app reads the feed of its latest GitHub release (appcast.xml) through Sparkle. Nothing about the Mac is sent. When a newer version is out, a window shows it with Install Update, Remind Me Later and Skip This Version; nothing is downloaded before Install Update. Check for Updates, in the STT menu and in Settings, checks at once.

The feed and the disk image are signed with an EdDSA key, and Sparkle installs only an app that carries the same Developer ID signature.

Settings and removal

Settings (model, language, shortcuts, switches, dictionary) and the time of the last update check are in the defaults of com.geragaraza.stt, models in ~/Library/Application Support/STT/models, the history in ~/Library/Application Support/STT/History. The four synced settings are also kept for the iCloud account by the key-value service of macOS; they take no iCloud storage.

To remove STT: Quit in Settings, delete the folder ~/Library/Application Support/STT (models and history), move STT.app to the Trash and run defaults delete com.geragaraza.stt. Its Microphone and Accessibility entries are removed in System Settings, Privacy & Security.

Installed with Homebrew, brew uninstall --zap stt quits it and removes the app, its settings, the models and the history; the Microphone and Accessibility entries stay for System Settings.

Shortcuts

STT adds four actions to the Shortcuts app: Record is one press of the shortcut key (it starts a recording, or stops it and gives the text to the next action); Start Recording and Stop Recording act as the shortcut key does (the text is pasted as usual, and Stop Recording also gives it to the next action), and Transcribe File gives the text of an audio or video file to the next action without saving a .txt. A shortcut made of them can go on a key, a schedule or an automation.

Command line

Homebrew links the command stt-cli; with the disk image, ln -s /Applications/STT.app/Contents/MacOS/STT /usr/local/bin/stt-cli makes it. It uses the model, language and dictionary chosen in Settings.

stt-cli Interview.m4a prints the text of a file, stt-cli --srt Interview.m4a its subtitles, stt-cli --toggle starts or stops a recording.

Files are read with the rights of the program that runs the command, not the app’s. --toggle works the running app as its key does, and only for a program that has the Microphone permission itself (Terminal asks once). Started as an app or a launchd job rather than from a terminal or a script, the command refuses to run, since it would then act with STT’s own permissions.

Details

English Українська Русский