Skip to main content

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

Menu bar icon (stopped) Menu bar icon (running)

  1. Start the menu bar app.
  2. Optionally choose a max recording length from Duration in the menu.
  3. Click Start daemon (or Stop daemon to stop it).
  4. Press F5 to toggle start/stop dictation (captured globally; other apps will not receive F5 while 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-mlx for on-device audio transcription on Apple Silicon / MLX
  • LLM model: gemini-3.1-flash-lite-preview for optional transcript cleanup (thinking disabled)

High-level pipeline

  1. Capture mic audio with sounddevice
  2. Resample to 16 kHz with soxr (when needed)
  3. Transcribe with parakeet-mlx on-device
  4. Smooth transcription by default with local regex cleanup (remove filler words like um, uh, etc.)
  5. Further smooth with Gemini when GEMINI_API_KEY is set and Gemini mode is enabled (via --gemini for console/transcribe, or via the menu bar toggle)
  6. 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


Download files

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

Source Distribution

minidic-1.0.2.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

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

minidic-1.0.2-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

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

Hashes for minidic-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4cb36877e1d6ebe25d2d46290e13211e2c2cf7a87a26d3c5e5f4b7c2beae1df9
MD5 93c003bf266d8d7574a5b80a66ac6303
BLAKE2b-256 d39b831916b7ce6d8c88e75d7c96a43d269c5765c95a9d127881cb4272e06ce5

See more details on using hashes here.

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

Hashes for minidic-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 31fd4a153fcfbc2c50fce36a98e85636511b9735fe62fc64797c8b4120748c48
MD5 7c67bdd069b1305c0af3175302aed518
BLAKE2b-256 c64600542def2c293e2ac602e4044d3a931c78a45092c880dbabc4e04c711a9f

See more details on using hashes here.

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