Yuwp is local dictation for macOS. Press a hotkey, speak, and Yuwp inserts the text into the app you were already using.
- Runs locally on Apple Silicon with Swift + MLX (Qwen3-ASR)
- Uses a global hotkey to start/stop dictation
- Injects text into most apps (AX API, terminal key events, clipboard fallback)
- No cloud API required after model download
- macOS 14+
- Apple Silicon
Download the latest notarized release assets:
Build from source:
git clone https://github.com/duh17/yuwp.git
cd yuwp
xcodebuild -downloadComponent MetalToolchain # one-time on fresh machines
scripts/run.shscripts/run.sh builds a signed app bundle and launches it from /Applications/Yuwp.app.
- Open Yuwp from the menu bar.
- Click Grant Accessibility Permission and allow Yuwp in Privacy & Security.
- Press the hotkey once to trigger the Microphone permission prompt.
- Open Settings… → Transcription and download/select a model.
- Default shortcut: Ctrl+`
- Press once to start dictation, press again to stop
- Configure shortcut, model, server mode, recording, mic panel, and chimes in Settings…
Build CLIs:
swift build -c release --product yuwp-asr
swift build -c release --product yuwp-tts
bash scripts/build_mlx_metallib.sh releaseFresh app-bundle / DMG installs also include:
/Applications/Yuwp.app/Contents/MacOS/yuwp-asr
/Applications/Yuwp.app/Contents/MacOS/yuwp-ttsTranscribe a file:
.build/arm64-apple-macosx/release/yuwp-asr transcribe Tests/fixtures/jfk.wav
# or from an installed app bundle / DMG
/Applications/Yuwp.app/Contents/MacOS/yuwp-asr transcribe Tests/fixtures/jfk.wavRun standalone ASR HTTP server (default transport is stdio, so pass --transport http):
.build/arm64-apple-macosx/release/yuwp-asr serve --model <asr-model-dir> --transport http --host 127.0.0.1 --port 7936
curl -sf http://127.0.0.1:7936/v1/info | jq .Run standalone TTS HTTP server:
.build/arm64-apple-macosx/release/yuwp-tts serve --transport http --model <qwen3-tts-model-dir> --host 127.0.0.1 --port 7937
curl -sf http://127.0.0.1:7937/v1/info | jq .Generate speech directly from the CLI:
.build/arm64-apple-macosx/release/yuwp-tts --model <qwen3-tts-model-dir> --text "Hello from Yuwp" --out /tmp/hello.wav
# or from an installed app bundle / DMG
/Applications/Yuwp.app/Contents/MacOS/yuwp-tts --model <qwen3-tts-model-dir> --text "Hello from Yuwp" --out /tmp/hello.wavTTS exposes POST /v1/audio/speech for full WAV responses and POST /v1/audio/speech/stream for chunked NDJSON audio events (metadata, audio, done, error) with base64 pcm_s16le chunks.
swift build
swift test
scripts/build.sh
scripts/run.shFresh clone note: swift test works on a clean clone. scripts/build.sh / scripts/run.sh require the Metal toolchain to produce mlx.metallib.
Benchmark tooling lives under benchmarks/.
uv run benchmarks/cli.py --help- Private by default: audio processing and transcription run locally on your Mac.
- Recording is off by default. Audio is only saved if you explicitly enable Save Recordings.
- Diagnostic logging is off by default and can be enabled manually in Settings when troubleshooting.
- Qwen3-ASR
- MLX and mlx-swift
- qwen-asr (streaming reference ideas)
- Silero VAD
- MIT
- Third-party notices
- Binary app bundles and release DMGs include these notices plus vendored upstream license texts under
OpenSource/