Free, private voice-to-text for macOS (menu bar) and Linux (F9).
Press a hotkey, speak, get text in any app — no account, no cloud when using local MLX on Apple Silicon.
Русский README · Troubleshooting · Contributing
Default branch: product-unified (legacy branches).
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/FUYOH666/VoiceToText.git
cd VoiceToText
git checkout product-unified
uv sync --extra mac --extra local-mlx
uv run python scripts/prefetch_mlx_model.py # optional: download MLX model once
./.venv/bin/python src/vtt2/main.pyPress Option+Space to record; Whisper runs on your Mac (MLX q4 turbo); text is pasted into the active app.
After changing config.yaml, restart the app. Startup log must show engine=mlx_whisper, not remote_asr_engine.
cd VoiceToText
./.venv/bin/python src/vtt2/main.py # default: mac-m1-local
./.venv/bin/python src/vtt2/main.py --profile mac-m1-local --healthStop with Ctrl+C or quit from the menu-bar icon.
For a private ASR server (your GPU, Tailscale):
cp .env.example .env.local
# LOCAL_AI_ASR_BASE_URL=http://YOUR_TAILSCALE_HOST:8001
./.venv/bin/python src/vtt2/main.py --profile mac-m1-remote.env.local is not required for mac-m1-local / mac-m4-local.
See Enterprise Edge · Install guide.
| Profile | Use case |
|---|---|
mac-m1-local |
M1 offline MLX, turbo-q4 (default) |
mac-m1-remote |
M1 → private ASR |
mac-m4-local |
M4 offline MLX (large-v3) |
mac-m4-remote |
M4 → private ASR |
linux-f9-local |
Linux F9 → localhost ASR |
linux-f9-edge |
Linux F9 → ASR on Tailnet |
Details: Product matrix
| Setup | Command |
|---|---|
| Mac + local MLX | uv sync --extra mac --extra local-mlx |
| Mac + remote only | uv sync --extra mac |
| Linux F9 | uv sync |
config/base.yaml— shared defaults (no secrets)config/profiles/<profile>.yaml— engine tuningconfig.yaml—active_profile.env.local— ASR URL for remote profiles only (gitignored)
Microphone, Accessibility (hotkey), Input Monitoring (paste).
vtt profiles list
vtt validate-config
vtt doctor
vtt mac run --profile mac-m1-localuv sync --extra dev --extra mac --extra local-mlx
uv run pytestMIT — use freely, no telemetry by design for local profiles.