Skip to main content

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 post-processes the transcription to fix errors, using project-specific context from a BIRDWORD.md file.

Getting started

Requires macOS on Apple Silicon (M1+) and Python 3.10+.

# Run with uvx (no install needed)
uvx birdword

# Or run in the background
uvx birdword start
uvx birdword stop
uvx birdword status

Context-aware correction

The key idea behind birdword is contextual transcription correction. When dictating into Terminal.app, birdword detects the focused tab's working directory and looks for a BIRDWORD.md file up the directory tree. This lets you teach birdword your project's domain:

Note: Context detection currently only works with Terminal.app. Transcription and pasting work in any app, but BIRDWORD.md is only picked up when dictating from a Terminal window.

uvx birdword init

This creates a BIRDWORD.md with the default prompt template. Edit it to add your project's terms, names, and jargon:

---
transcription_model: mlx-community/parakeet-tdt-0.6b-v2
fix_model: mlx-community/Qwen2.5-1.5B-Instruct-4bit
---

Fix transcription errors. Output only the corrected text.

Example 1:
Input: "the java script function isnt working"
Output: "The JavaScript function isn't working."

Example 2:
Input: "check the get ignore file for the repo"
Output: "Check the .gitignore file for the repo."

Example 3:
Input: "we need to refactor the a p i endpoint"
Output: "We need to refactor the API endpoint."

Key terms: MyClass, some_function, PostgreSQL
Names: Alice, Bob

Input: "{{ transcript }}"
Output:

The file is a Jinja template. {{ transcript }} is replaced with the raw transcription. If omitted, the transcript is appended automatically.

The YAML front matter lets you override models per-project. When you dictate into a Terminal tab whose shell is in that directory (or a child), birdword picks up the nearest BIRDWORD.md and uses it.

Hotkeys

Action Default
Toggle recording Right ⌘ + Space
Hold to record Hold Right ⌘ for >1s, release to transcribe

Hotkeys are configurable:

--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

Options

--model MODEL        Transcription model (default: mlx-community/parakeet-tdt-0.6b-v2)
--fix-model MODEL    Post-processor model (default: mlx-community/Qwen2.5-1.5B-Instruct-4bit)
--no-fix             Disable LLM post-processing

Menu bar

Birdword shows a bird icon in the menu bar:

  • White — idle
  • 🟡 Yellow — connecting mic
  • 🔴 Red — listening
  • Sparkles — transcribing

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.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

birdword-0.1.2.tar.gz (359.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

birdword-0.1.2-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file birdword-0.1.2.tar.gz.

File metadata

  • Download URL: birdword-0.1.2.tar.gz
  • Upload date:
  • Size: 359.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for birdword-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e4b1156413c9a28e83754b63d301a0183a683f5d9f71c6735da152d5863d71f9
MD5 77936e15722e3ac3d4d3337b52695a8d
BLAKE2b-256 0b79744ea0420858d76fcb19d87af5622c26daeec3cc25b135073aef63d29db9

See more details on using hashes here.

Provenance

The following attestation bundles were made for birdword-0.1.2.tar.gz:

Publisher: main.yaml on tillahoffmann/birdword

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file birdword-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: birdword-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for birdword-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b863463cb348c1323e85187fd0e273fdb7693ca895c0a2de9eab0a9d2e5d1333
MD5 1b65cdc8878fb6123fc5179f3fc62a0c
BLAKE2b-256 16f119a176c547d987dfcd8294336f3e6811d919e5175c511ef7a3b790dfd7f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for birdword-0.1.2-py3-none-any.whl:

Publisher: main.yaml on tillahoffmann/birdword

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page