Skip to main content

Tiny macOS dictation tool on your menubar

Project description

minidic

A tiny vibe coding project for voice dictation on macOS — built as a personal, fast-iteration tool for local use on one machine (not a polished/distributed app).

Install

minidic is published on PyPI for macOS users.

uv tool install minidic

To upgrade an existing install:

uv tool install --reinstall 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.1.tar.gz (19.5 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.1-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file minidic-1.0.1.tar.gz.

File metadata

  • Download URL: minidic-1.0.1.tar.gz
  • Upload date:
  • Size: 19.5 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.1.tar.gz
Algorithm Hash digest
SHA256 575dfcb625ceceb60ed32060b45a6f86d2826793d30ebb435dcc09000cda9b75
MD5 b7e90af0babe1b21d723cb4977c288dd
BLAKE2b-256 663bd6f292d4cc97a4cc1a1e307915acbb1be06426008d338377b9996a8a13d5

See more details on using hashes here.

File details

Details for the file minidic-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: minidic-1.0.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 19f7c7a47f5ec41984f8d555a0a79394480b991deb9570c9de0d294997335919
MD5 26ce4075bfb1cce6d0931b434008364c
BLAKE2b-256 42e760c21bb15f3b48a8fa4aef8dd1823d2debeb428f5ce38a28aed38e353818

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