Skip to content
piedolPublic

About

Offline dictation and file transcription for the Mac, in Rust. Works with NVIDIA's Parakeet models, other Parakeet models from Hugging Face, or Apple Speech. About 0.5 GB of memory with Parakeet Ultra loaded.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

 

History

26 Commits

Folders and files

Repository files navigation

Tamka icon

Tamka

On-device dictation for the Mac, written in Rust.

macOS 26 or later on Apple silicon License: GPL-3.0-or-later

Download for Mac

Tamka's Models settings, its menu with recent dictations, and the listening indicator

Tamka types what you say into any app on your Mac. Press a shortcut, speak, then press the shortcut again, and the text appears at your cursor. Speech recognition runs on the Neural Engine with NVIDIA's Parakeet models, and your audio never leaves the Mac. On a MacBook Pro with an M5 Max, the text arrives about 0.2 seconds after you stop, even after 50 seconds of speech.

Before typing, Tamka removes "um" and "uh", collapses stutters, and turns spoken commands such as "comma", "new line" or "open paren" into the characters they name. With Parakeet Ultra loaded, it uses about 0.5 GB of memory, most of it model weights held by the Neural Engine.

Tamka (TAHM-kah) is Swahili for "to pronounce" or "to utter".

Contents

Dictating

  1. Click where the text should go: an email, a chat, a code editor or a search box.
  2. Press ⌃V and speak. An indicator with a timer shows that Tamka is listening.
  3. Press ⌃V again. Tamka types what you said at the cursor and keeps a copy on the clipboard.

Press Esc while Tamka is listening to throw the recording away.

The indicator while listening: a red dot, a timer at 0:12 and the shortcut hints    The indicator while transcribing

⌃V is the default shortcut. You can pick any combination that includes ⌘, ⌃ or ⌥ in Settings › General.

Transcribing files

Choose Transcribe Files… from the menu to turn recordings into text. The window stays above other apps' windows, which makes dragging files onto it from Finder easy.

  1. Drop audio or video files on the window, or click Choose Files…. Dropping a folder adds the audio and video files inside it.
  2. Tamka transcribes them on your Mac in turn, with the model you've chosen.
  3. Each file's text appears in its own row. Click Copy to put it on the clipboard or Export… to save it as a text file.

Transcribe Files with three transcribed recordings: a video, a voice memo and an MP3
Example recordings

  • Separate shows a row per file. Combined shows all the text together, each file under its name, with a shared Copy and Export…. Switching between them doesn't transcribe anything again.
  • Export All… saves each transcript as a text file named after its recording, in a folder you choose. Existing files are kept: a second Interview.txt becomes Interview 2.txt.
  • Tamka reads the sound from audio files such as M4A (Voice Memos), MP3, WAV, AIFF and FLAC, and from videos such as MOV and MP4. A file without sound is listed with the reason.
  • Stop ends the file in progress and skips the files still waiting.
  • Filler words and stutters are removed as your Settings › Text choices say. Spoken commands aren't applied, because in a recording "comma" is usually a word someone said.
  • The dictation shortcut keeps working while files are transcribed. If a file is in progress, your dictation is transcribed right after that file.
  • A 30-minute recording takes about 4 seconds with Parakeet Ultra on an M5 Max.
  • The text stays in the window until you click Clear or quit Tamka.

Features

The indicator

The indicator never takes focus from the app you're typing in. Drag it anywhere, including onto another display, and it appears there for later dictations. If that display is disconnected, the indicator goes back to the bottom centre of the screen with the pointer. To put it there yourself, click Reset Position in Settings › General.

The menu

The menu bar menu shows your last five dictations. Click a dictation to copy it again.

The Tamka menu with three recent dictations, the active model and Settings
Example dictations

  • Start Dictation becomes Stop and Paste while you're speaking.
  • Transcribe Files… opens the file window.
  • Transcribe Last Recording Again runs your last recording through the current model, which is useful after switching models.
  • Microphone names the mic the next dictation uses. Choose a mic there, or in Settings › General, and Tamka stays on it whenever it's connected and uses the system default when it isn't. A mic with several channels, such as a DJI Mic receiver in stereo, is mixed down, so both transmitters are heard.
  • Check for Updates… looks for a new version. When a new version is out, the item becomes Update to Tamka X.Y.Z….
  • Problems such as a missing permission or a model that hasn't been downloaded appear as menu items that open the fix.
  • The menu bar icon turns red while Tamka is listening.

Recent dictations are kept in memory only and are gone when Tamka quits.

Speech models

The app doesn't include a speech model. On first launch, Settings › Models opens with Parakeet Ultra marked Recommended. Models work offline after the download, and removing a model moves it to the Trash.

Model Size Speed Accuracy Best for
Parakeet Ultra (recommended) B A A Everyday dictation, with the best punctuation
Parakeet Phonon-2 A A A− Casual, unscripted speech
Parakeet v3 A A A− Speaking any of 25 European languages
Parakeet v2 A A+ B+ The fastest results
Apple Speech A+ B B No separate model download; macOS may fetch its language files first

Size covers the download and the memory the model uses while loaded. Speed is how soon text appears after you stop speaking. Accuracy is the word error rate on everyday speech, measured on the benchmark's clips without its meeting recordings. Hover over a grade in the app to see the measurements behind it.

More Parakeet models

  • Add Model from Hugging Face… in Settings › Models takes a model's link, such as huggingface.co/FluidInference/parakeet-redux-coreml. Tamka reads the model's file list first and downloads the model if it can run it: a Core ML Parakeet model built like v2 or v3, in the layout FluidInference uses. That covers many community models, such as versions tuned for other languages. If Tamka can't run a model, it says why.
  • Tamka looks for new Parakeet models from FluidInference once a day. Ones it can run appear under New from FluidInference in Settings › Models, with a Download button. Check Now looks straight away, and you can turn the daily look off.
  • Added models are listed with your other models and show – for their grades, because Tamka hasn't measured them. Removing an added model moves its files to the Trash.

Text cleanup and spoken commands

Say a command and Tamka types the symbol with the spacing fixed: "call foo open paren bar close paren" becomes call foo (bar).

Say Get Say Get
"comma" , "new line" a line break
"question mark" ? "new paragraph" a blank line
"open quote" … "close quote" " … " "open paren" … "close paren" ( … )
"at sign" @ "em dash" —
"percent sign" % "smiley face" :)

The table shows 10 of the 112 default commands.

Settings, Text tab: cleanup options and a searchable table of spoken commands

In Settings › Text you can turn filler removal and stutter cleanup on or off, write numbers, prices and dates as digits (experimental), and search, add, edit or remove commands. ⌘Z undoes changes, and Restore Defaults… brings back the original list.

Settings

Settings, General tab: shortcut, recording, indicator, paste, startup, permissions and troubleshooting

Settings › General holds the shortcut, the microphone, a recording time limit, the start and stop sounds, the indicator position, whether Tamka pastes the text and keeps it on the clipboard, launch at login, the daily update check, the microphone and Accessibility permissions, and the activity log. Changes apply immediately.

Updates

Choose Check for Updates… in the menu to look for a new version. Tamka also checks about a minute after launch if the last check was more than a day ago, then daily while it runs. To stop these checks, turn off Check for updates automatically in Settings › General.

When a new version is out, a notification says so and the menu shows Update to Tamka X.Y.Z…. The first time this happens, macOS asks whether Tamka may show notifications. Choose the menu item or click the notification to read the release notes, then click Install and Relaunch.

Tamka downloads the release from GitHub and installs it only if the download matches the checksum GitHub lists for it and the app inside is signed by Tamka's developer and notarized by Apple. The old copy goes to the Trash and the new version opens in its place. If you're dictating, the install waits until you finish. If your account can't make changes in the folder Tamka is in, Tamka opens the release page in your browser instead.

Privacy

  • Speech recognition runs entirely on your Mac. Models download once: Parakeet models from Hugging Face, and Apple Speech's language files from Apple.
  • Tamka checks GitHub once a day for a new version. You can turn this off in Settings › General.
  • Tamka asks Hugging Face once a day for FluidInference's list of Parakeet models. The request sends no audio or text. You can turn this off in Settings › Models.
  • Transcribe Files reads your files on your Mac. While a file is being transcribed, its sound is kept in ~/Library/Caches/Tamka/files and deleted when it's done. Transcripts stay in memory until you clear them or quit Tamka.
  • The microphone is on only while you're dictating.
  • Tamka keeps your last recording at ~/Library/Caches/Tamka/last.wav for Transcribe Last Recording Again. Each new dictation replaces it.
  • The log at ~/Library/Logs/Tamka.log records events and timings, never your words.

Accuracy and speed

Parakeet Ultra was tested against Whisper large-v3-turbo on 117 public recordings (32 minutes) of read speech, meetings and earnings calls with human-checked transcripts, on a MacBook Pro with an M5 Max:

Whisper large-v3-turbo Tamka with Parakeet Ultra
Words wrong, all recordings 9.9% 7.7%
Words wrong, without meeting recordings 6.9% 6.2%
Memory 1.2–1.6 GB about 0.5 GB
Wait after a 50-second dictation 471 ms 170 ms

Without the meeting recordings, the difference in accuracy is within the margin of error. The full benchmark compares 11 model configurations. To compare models on your own voice and vocabulary, see eval/README.md.

Install

Download Tamka-macOS-arm64.dmg from the latest release. It needs a Mac with Apple silicon and macOS 26 or later. (The Apple Speech engine uses SpeechAnalyzer, which is new in macOS 26.) Open it, drag Tamka onto the Applications folder in its window, and open Tamka from Applications. Tamka is signed and notarized by Apple.

Build from source

You need:

  • a Mac with Apple silicon and macOS 26 or later;
  • Xcode 26 or later;
  • a current stable Rust toolchain from rustup.
git clone https://github.com/piedol/tamka.git
cd tamka && scripts/bundle.sh --install

The script builds the app and its speech engine, signs both, copies Tamka.app to /Applications and opens it. It signs with TAMKA_SIGN_IDENTITY if that's set, or else with the first Developer ID Application certificate in your keychain. Without either, it uses an ad-hoc signature, and macOS asks for permissions again after every build.

First launch

When Tamka first opens:

  1. Settings › Models opens. Click Download next to Parakeet Ultra (632 MB).
  2. Allow Accessibility so Tamka can paste the text. Without it, Tamka copies the text and you paste it yourself.
  3. Allow the microphone the first time you dictate.

Tamka has no Dock icon. To start it when you log in, turn on Launch Tamka at login in Settings › General.

Uninstall

  1. Turn off Launch Tamka at login in Settings › General, then choose Quit Tamka from the menu.
  2. Move /Applications/Tamka.app to the Trash.
  3. Move these to the Trash: ~/Library/Application Support/Tamka (which also holds models added from Hugging Face), ~/Library/Caches/Tamka and ~/Library/Logs/Tamka.log.
  4. Downloaded models are in ~/Library/Application Support/FluidAudio/Models (about 0.4–0.6 GB each). Other apps built on FluidAudio may share that folder, so remove only the models you no longer want.
  5. Remove Tamka from System Settings › Privacy & Security › Accessibility and Microphone.

Troubleshooting

Problem Fix
The text is copied but not pasted Accessibility is off. Click Allow… next to it in Settings › General.
Nothing happens when you press the shortcut Another app may use the same keys. Choose a different shortcut in Settings › General.
The indicator covers what you're typing Drag it somewhere else. It stays where you put it.
Tamka moved to a mic you plugged in macOS makes a new mic the system default. Choose the mic you want under Microphone in the menu, and Tamka stays on it.
The menu says no model is downloaded Choose Download a Speech Model… in the menu.
Transcribe Files says it can't open a file Tamka reads files that macOS can play. Convert the file to M4A or MP3 and try again.
Tamka can't use a model from Hugging Face Tamka runs Core ML Parakeet models built like v2 or v3. Models in other formats, such as ONNX, or other designs, such as the 110M and Unified models, don't load.
An update opens the release page instead of installing Your account can't make changes in the folder Tamka is in. Download the disk image from that page and drag Tamka onto Applications.
Something else goes wrong Open the activity log from Settings › General. It shows events and timings, never your words.

Development

Tamka.app
├── Contents/MacOS/Tamka             Rust: menu bar, shortcut, microphone, text cleanup, paste, Settings
└── Contents/Helpers/tamka-engine    Swift: FluidAudio running the speech model on the Neural Engine

The menu bar app is written in Rust against AppKit through objc2. The speech engine is a Swift helper that keeps the model loaded and talks to the app over stdin and stdout in JSON lines. If the helper stops, Tamka restarts it on the next dictation.

Path What it does
src/app.rs The menu bar and the dictation flow: idle, listening, transcribing, paste
src/hud.rs The draggable indicator and notifications
src/audio.rs Microphone capture through Core Audio's input unit, only while listening
src/engine.rs Starts and supervises the speech helper; dictations go ahead of waiting files
src/files.rs The Transcribe Files window and its queue
src/models.rs The model catalog and grades; download, removal and status; models from Hugging Face
src/text.rs Filler removal, stutter cleanup, spoken commands and spacing
src/paste.rs The clipboard, then ⌘V once your modifier keys are released
src/settings.rs Preferences, saved to ~/Library/Application Support/Tamka/settings.json
src/settings_window.rs The Settings window
src/update/ Update checks against GitHub releases: download, checksum, signature and notarization checks, replacing the app and reopening it
src/update_ui.rs The update menu item, setting, notification and window
engine/ The Swift speech helper
eval/ The benchmark harness
scripts/ Build, sign, icon and README image scripts
cargo test --release                          # unit tests
scripts/bundle.sh                             # build and sign dist/Tamka.app
scripts/bundle.sh --notarize                  # release: notarize, zip for updates, make the .dmg for new installs
target/release/Tamka --transcribe clip.wav    # transcribe a file without the microphone
open "tamka://settings-models"                # open Settings on a tab: settings, settings-models, settings-text
open "tamka://files"                          # open Transcribe Files
target/debug/Tamka --files a.m4a b.mov        # debug builds: open Transcribe Files with these files
open "tamka://hud-demo"                       # show the indicator's states
TAMKA_UPDATE_TEST=install dist/Tamka.app/Contents/MacOS/Tamka   # check now and install a newer release without asking
swift scripts/make-showcase.swift             # redraw docs/images/showcase.png from the screenshots

A release has Tamka-macOS-arm64.zip, which installed copies update from, and Tamka-macOS-arm64.dmg, which opens to a window with Tamka, an arrow and the Applications folder. The disk image needs dmgbuild, installed once with python3 -m venv ~/.local/share/dmgbuild-venv && ~/.local/share/dmgbuild-venv/bin/pip install dmgbuild. scripts/make-dmg.sh and its two helper scripts are shared with piedol's other Mac apps and kept the same in each.

Contributing

Bug reports and pull requests are welcome. Before opening a pull request, run cargo clippy --all-targets -- -D warnings and cargo test --release.

Credits

License

Copyright 2026 piedol.

Tamka is free software under the GNU General Public License v3.0 or later. You can use, study, share and change it, including at work. If you distribute a modified version, you must release its source under the same license.

About

Offline dictation and file transcription for the Mac, in Rust. Works with NVIDIA's Parakeet models, other Parakeet models from Hugging Face, or Apple Speech. About 0.5 GB of memory with Parakeet Ultra loaded.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages