macOS only (Apple Silicon recommended). Requires Python 3.11+.
Local-first dictation for macOS. Press a hotkey, talk, text appears at your cursor.
- Parakeet local transcription by default (zero API cost on Apple Silicon).
- OpenAI
gpt-4o-transcribefallback with one env switch. - Automatic paste at cursor (clipboard-safe restore).
pip install talktypeThat's it. On first run, Parakeet model weights (~1.2 GB) download automatically.
git clone https://github.com/strangeloopcanon/talk.git
cd talk
./scripts/install_macos.sh
./scripts/doctor_macos.sh
./scripts/run_macos.shTo build/notarize your own macOS bundle:
export TALK_APP_NAME="Talk" # optional
export TALK_CODE_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export TALK_NOTARY_KEYCHAIN_PROFILE="your-notary-profile"
export TALK_BUNDLE_ID="com.yourname.talk" # required (example)
export NOTARY_TIMEOUT="2h" # optional
./scripts/build_dmg.shTALK_CODE_SIGN_IDENTITY, TALK_NOTARY_KEYCHAIN_PROFILE, and TALK_BUNDLE_ID are required for signing/notarization. TALK_APP_NAME defaults to Talk.
talk run- Press
Ctrl+Shift+Dto start recording. - Press
Ctrl+Shift+Dagain to stop, transcribe, and paste. - Press
Ctrl+Shift+Qto quit.
talk doctortalk transcribe-file /path/to/sample.wavYou must grant Talk (or your terminal app, if using the CLI):
- Microphone -- for audio recording
- Accessibility -- for paste keystroke automation
- Input Monitoring -- for global hotkeys
Go to System Settings > Privacy & Security and enable Talk.app in each section.
If paste fails but transcription works, Accessibility permission is usually the issue.
After rebuilding Talk.app, macOS invalidates the old permissions because the binary changes. You must remove and re-add Talk.app in both Input Monitoring and Accessibility.
Works out of the box with zero configuration. To customize, create ~/.config/talk/.env:
mkdir -p ~/.config/talkKey options (all have sensible defaults):
| Variable | Default | Notes |
|---|---|---|
DICTATE_BACKEND |
parakeet |
parakeet (local) or openai (cloud) |
DICTATE_HOTKEY |
<ctrl>+<shift>+d |
Toggle recording |
DICTATE_QUIT_HOTKEY |
<ctrl>+<shift>+q |
Quit the app |
DICTATE_AUTOPASTE |
true |
Paste transcription at cursor |
PARAKEET_MODEL |
mlx-community/parakeet-tdt-0.6b-v3 |
Local model |
OPENAI_API_KEY |
(empty) | Required if backend=openai |
See .env.example for the full list.
# In ~/.config/talk/.env or as env vars:
DICTATE_BACKEND=openai
OPENAI_API_KEY=sk-...Parakeet model weights are cached in ~/.cache/huggingface/hub/. To reclaim disk space:
rm -rf ~/.cache/huggingface/hub/models--mlx-community--parakeet-tdt-0.6b-v3