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 time you use the default offline backend, minidic 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 minidic:
- Microphone — needed to capture live audio for dictation
- Accessibility — needed to inject transcribed text into the active app and handle global hotkeys in menu bar mode
Environment variables:
GROQ_API_KEY— required when using--provider groqGEMINI_API_KEY— required when using--enhancement gemini
Console
Run an interactive dictation session in the terminal. It records from your microphone, transcribes speech, and prints the result.
minidic console
minidic console --provider groq
minidic console --enhancement gemini
Use Parakeet for fully local transcription or Groq for cloud-based transcription. Gemini is optional and can improve punctuation and phrasing after transcription. You can combine --provider groq with --enhancement gemini.
Transcribe
Transcribe an existing WAV file from disk instead of recording live microphone input.
minidic transcribe path/to/file.wav
minidic transcribe --provider groq path/to/file.wav
minidic transcribe --enhancement gemini path/to/file.wav
Menu bar
Run minidic in menu bar mode with a background daemon and a global F5 hotkey to toggle dictation.
minidic menubar
The menubar command itself does not accept ASR or enhancement selection flags. Use the menu bar UI to change ASR, enhancement, and duration.
The menu bar UI lets you change settings without restarting the daemon; changes apply on the next transcription:
- Start menu bar mode.
- Optionally choose ASR:
Offline (Parakeet)orOnline (Groq). - Optionally choose Enhancement:
NoneorGemini. - Optionally choose a max recording length from Duration.
- Click Start daemon.
- Press
F5to toggle start/stop dictation.
Groq and Gemini require their respective API keys. If a key is missing, minidic raises an error; in daemon mode, the error is logged to daemon.log.
How it works
minidic captures microphone audio, normalizes it to 16 kHz, and runs speech-to-text plus optional cleanup.
Models used
- Offline ASR:
parakeet-mlxon Apple Silicon via MLX - Online ASR: Groq Whisper (
whisper-large-v3-turbo) - Enhancement model:
gemini-3.1-flash-lite-preview
High-level pipeline
- Capture mic audio with
sounddevice - Resample to 16 kHz with
soxrwhen needed - Transcribe with Parakeet or Groq depending on
asr.provider - Apply local regex cleanup by default to remove filler words like
umanduh - Optionally run Gemini enhancement when enabled
- Inject text into the active app on macOS in daemon mode
The daemon mode is hotkey-driven and lazily loads and unloads the ASR model to reduce idle resource usage.
Directory structure
~/.minidic/
├── settings.json # persisted settings for `asr`, `enhancement`, and `recording`
└── recordings/ # WAV recordings created during dictation/transcription
~/.local/state/minidic/
├── daemon.log # daemon logs
├── daemon.pid # daemon process ID
├── daemon.state # current daemon state: idle, recording, transcribing
├── menubar.log # menu bar mode logs
└── menubar.pid # menu bar process ID
Configuration
minidic stores persistent configuration in ~/.minidic/settings.json.
minidic uses three config groups:
asrprovider:parakeetorgroqmodel: provider-specific internal default; not exposed in the CLI or menu bar UI
enhancementprovider:noneorgemini
recordingduration_seconds
Default settings.json:
{
"asr": {
"model": "mlx-community/parakeet-tdt-0.6b-v3",
"provider": "parakeet"
},
"enhancement": {
"provider": "none"
},
"recording": {
"duration_seconds": 60.0
}
}
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.6.tar.gz.
File metadata
- Download URL: minidic-1.0.6.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0687187f1ab62edce16c8a567eecd6602590cccb93666f1975dc36d2ae879907
|
|
| MD5 |
52d699c55dd7f1038a4d5e2bfd6f8232
|
|
| BLAKE2b-256 |
91bd6ffb5e7ab9b08f0cd84dade59539070fdc3a0c88871b245e2970b1086c3c
|
Provenance
The following attestation bundles were made for minidic-1.0.6.tar.gz:
Publisher:
publish.yml on goofansu/minidic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
minidic-1.0.6.tar.gz -
Subject digest:
0687187f1ab62edce16c8a567eecd6602590cccb93666f1975dc36d2ae879907 - Sigstore transparency entry: 1057547021
- Sigstore integration time:
-
Permalink:
goofansu/minidic@b4d055ed6b887a0559612560d0196e9c5459d254 -
Branch / Tag:
refs/tags/v1.0.6 - Owner: https://github.com/goofansu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b4d055ed6b887a0559612560d0196e9c5459d254 -
Trigger Event:
push
-
Statement type:
File details
Details for the file minidic-1.0.6-py3-none-any.whl.
File metadata
- Download URL: minidic-1.0.6-py3-none-any.whl
- Upload date:
- Size: 30.0 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 |
b38cad7d5339d40079a6efab3bff97dc9b48093a181f9716430c3cdcb206ba35
|
|
| MD5 |
809a36e530248cf67197ca6a125a148e
|
|
| BLAKE2b-256 |
998d59783577a465e70049251b21e818a0e7bdac04df217236d22c473f8afd14
|
Provenance
The following attestation bundles were made for minidic-1.0.6-py3-none-any.whl:
Publisher:
publish.yml on goofansu/minidic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
minidic-1.0.6-py3-none-any.whl -
Subject digest:
b38cad7d5339d40079a6efab3bff97dc9b48093a181f9716430c3cdcb206ba35 - Sigstore transparency entry: 1057547032
- Sigstore integration time:
-
Permalink:
goofansu/minidic@b4d055ed6b887a0559612560d0196e9c5459d254 -
Branch / Tag:
refs/tags/v1.0.6 - Owner: https://github.com/goofansu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b4d055ed6b887a0559612560d0196e9c5459d254 -
Trigger Event:
push
-
Statement type: