Voice dictation daemon using NVIDIA Parakeet on Apple Silicon
Project description
🐦 Birdword
Contextual voice dictation for macOS. Powered by NVIDIA Parakeet running locally on Apple Silicon via MLX.
Press a hotkey, speak, and your words are transcribed and pasted into whatever app is focused. A small LLM (Qwen2.5-0.5B) post-processes the transcription to fix errors, optionally using project-specific context from a BIRDWORD.md file.
Install
pip install birdword
Or run without installing:
uvx birdword
Requires macOS on Apple Silicon (M1+) and Python 3.10+.
Usage
# Run in the foreground
birdword
# Run in the background
birdword start
birdword stop
birdword status
Hotkeys
| Action | Default |
|---|---|
| Toggle recording | Right ⌘ + Space |
| Hold to record | Hold Right ⌘ for >1s, release to transcribe |
Options
--model MODEL Transcription model (default: mlx-community/parakeet-tdt-0.6b-v2)
--fix-model MODEL Post-processor model (default: mlx-community/Qwen2.5-0.5B-Instruct-4bit)
--no-fix Disable LLM post-processing
--hold-key KEY Hold key (default: rcmd). Options: rcmd, lcmd, ralt, lalt, rshift, lshift, rctrl, lctrl
--toggle-key KEY Toggle key (default: space). Options: space, return, tab, escape
Permissions
Birdword needs three macOS permissions, granted to your terminal app:
- Microphone — to record your voice
- Accessibility — to paste text and intercept the hotkey
- Input Monitoring — to detect the global hotkey
Birdword checks these on startup and tells you what's missing.
Context-aware correction
Drop a BIRDWORD.md file in your project directory with domain-specific terms, names, and jargon:
This is a Rust networking project using tokio and hyper.
Key terms: epoll, mio, AsyncRead, TcpListener
Names: Till
When you dictate into a Terminal tab whose shell is in that directory (or a child), birdword feeds this context to the post-processor so it knows not to "correct" your domain terms.
Menu bar
Birdword shows a bird icon in the menu bar:
- White — idle
- Yellow — connecting mic
- Red — listening
- ✨ Sparkles — transcribing
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file birdword-0.1.0.tar.gz.
File metadata
- Download URL: birdword-0.1.0.tar.gz
- Upload date:
- Size: 211.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdf92091f2c1d3c6d9243a13e0a1d637e9e5d77b3828394cf8e2819b8abba28a
|
|
| MD5 |
0933f7d4adbc19763a9ed63464cc74fc
|
|
| BLAKE2b-256 |
dca375465ca122e3b89a5c01442c2c47aff2e84a53d5ec7acd0030a252ab3a33
|
Provenance
The following attestation bundles were made for birdword-0.1.0.tar.gz:
Publisher:
main.yaml on tillahoffmann/birdword
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
birdword-0.1.0.tar.gz -
Subject digest:
fdf92091f2c1d3c6d9243a13e0a1d637e9e5d77b3828394cf8e2819b8abba28a - Sigstore transparency entry: 1099515822
- Sigstore integration time:
-
Permalink:
tillahoffmann/birdword@55fcd8911c9db9c43b97ae796200c70683b7aff5 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tillahoffmann
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yaml@55fcd8911c9db9c43b97ae796200c70683b7aff5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file birdword-0.1.0-py3-none-any.whl.
File metadata
- Download URL: birdword-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6461e41b1520bb06c91c1f64c1c56b482e43dc751251495377968371391003ca
|
|
| MD5 |
69b6ae014ddae74abaf0481e380be45e
|
|
| BLAKE2b-256 |
112bd3b0d10e768b887e8b5e6b9c45cfccb5c68ecf4679e4aae16a181184e1e3
|
Provenance
The following attestation bundles were made for birdword-0.1.0-py3-none-any.whl:
Publisher:
main.yaml on tillahoffmann/birdword
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
birdword-0.1.0-py3-none-any.whl -
Subject digest:
6461e41b1520bb06c91c1f64c1c56b482e43dc751251495377968371391003ca - Sigstore transparency entry: 1099515918
- Sigstore integration time:
-
Permalink:
tillahoffmann/birdword@55fcd8911c9db9c43b97ae796200c70683b7aff5 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tillahoffmann
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yaml@55fcd8911c9db9c43b97ae796200c70683b7aff5 -
Trigger Event:
push
-
Statement type: