Tiny macOS dictation tool on your menubar
Project description
minidic
A tiny macOS dictation tool for fast voice input from the menu bar or terminal.
Install
minidic is published on PyPI for macOS users.
uv tool install minidic
To upgrade an existing install:
uv tool upgrade minidic
The first run will download mlx-community/parakeet-tdt-0.6b-v3.
uv tool installs minidic to ~/.local/bin/minidic.
Make sure ~/.local/bin is on your PATH.
Usage
On first use, macOS will prompt for the permissions required by minidic. In general, you need to grant these permissions to the terminal app you use to run the commands:
- Microphone — needed to capture live audio for dictation
- Accessibility — needed to inject the transcribed text into the active app and handle global hotkeys in menu bar mode
To use --gemini, set GEMINI_API_KEY in your environment before running minidic.
Console
Run an interactive dictation session in the terminal. This records from your microphone, transcribes locally, and inserts the final text into the active app.
minidic console
minidic console --gemini
Transcribe
Transcribe an existing audio file from disk instead of recording live microphone input.
minidic transcribe path/to/file.wav
minidic transcribe --gemini path/to/file.wav
Menubar
Run minidic as a menu bar app with a background daemon and global F5 hotkey for push-to-toggle dictation.
minidic menubar
- Start the menu bar app.
- Optionally choose a max recording length from Duration in the menu.
- Click Start daemon (or Stop daemon to stop it).
- Press
F5to toggle start/stop dictation (captured globally; other apps will not receiveF5while daemon is running).
Technique overview
minidic captures microphone audio, normalizes it to 16 kHz, and runs local speech-to-text with streaming-style decoding.
Models used
- ASR model:
parakeet-mlxfor on-device audio transcription on Apple Silicon / MLX - LLM model:
gemini-3.1-flash-lite-previewfor optional transcript cleanup (thinking disabled)
High-level pipeline
- Capture mic audio with
sounddevice - Resample to 16 kHz with
soxr(when needed) - Transcribe with
parakeet-mlxon-device - Smooth transcription by default with local regex cleanup (remove filler words like
um,uh, etc.) - Further smooth with Gemini when
GEMINI_API_KEYis set and Gemini mode is enabled (via--geminiforconsole/transcribe, or via the menu bar toggle) - Inject text into the active app on macOS
The daemon mode is hotkey-driven and lazily loads/unloads the model to reduce idle resource usage.
Directory structure
~/.minidic/
└── recordings/ # saved WAV recordings captured during dictation/transcription
~/.local/state/minidic/
├── config.json # persisted runtime config such as Gemini and duration settings
├── daemon.log # daemon logs
├── daemon.pid # daemon process ID
├── daemon.state # current daemon state: idle, recording, transcribing
├── menubar.log # menu bar app logs
└── menubar.pid # menu bar process ID
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 minidic-1.0.2.tar.gz.
File metadata
- Download URL: minidic-1.0.2.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb36877e1d6ebe25d2d46290e13211e2c2cf7a87a26d3c5e5f4b7c2beae1df9
|
|
| MD5 |
93c003bf266d8d7574a5b80a66ac6303
|
|
| BLAKE2b-256 |
d39b831916b7ce6d8c88e75d7c96a43d269c5765c95a9d127881cb4272e06ce5
|
File details
Details for the file minidic-1.0.2-py3-none-any.whl.
File metadata
- Download URL: minidic-1.0.2-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31fd4a153fcfbc2c50fce36a98e85636511b9735fe62fc64797c8b4120748c48
|
|
| MD5 |
7c67bdd069b1305c0af3175302aed518
|
|
| BLAKE2b-256 |
c64600542def2c293e2ac602e4044d3a931c78a45092c880dbabc4e04c711a9f
|