A macOS-native, GPU-accelerated, streaming speech-to-text menu bar app.
Features • Installation • Usage • Configuration • Tech Stack
OpenFlow is an open-source, local-first alternative to Wispr Flow. It provides instant voice dictation into any application using Apple Silicon's Neural Engine (via MLX) for ultra-low latency transcription. All processing happens on-device—no audio ever leaves your Mac.
| Feature | Description |
|---|---|
| Ultra-Low Latency | Optimized for Apple Silicon using MLX (Metal) and faster-whisper. Sub-300ms transcription with the default tiny model. |
| Private & Local | All processing happens on-device. No audio ever leaves your Mac. |
| Voice-Reactive UI | Floating overlay that responds to your voice in real-time. |
| Universal Dictation | Inserts text directly into any active application via Accessibility APIs. |
| Smart Denoising | Integrated RNNoise for crystal-clear audio capture even in noisy environments. |
| Easy Installation | Simple setup with make install and make run. |
- macOS (Apple Silicon recommended)
- Python 3.11 or later
- PortAudio (
brew install portaudio)
git clone https://github.com/sammy4321/OpenFlow.git
cd OpenFlow
make installThe installer creates a virtual environment, compiles RNNoise, downloads Whisper models, and installs dependencies.
make runOn first run, grant Accessibility permissions when prompted so OpenFlow can insert text into applications. The app runs in your menu bar—click to start dictating.
By default, OpenFlow uses the tiny model for maximum speed. You can switch to larger models for better accuracy:
make run MODEL=base
make run MODEL=small
make run MODEL=mediumSupported models: tiny, base, small, medium, large-v3 (availability depends on your machine's memory).
OpenFlow/
├── openflow/
│ ├── main.py # Entry point, accessibility checks
│ ├── app.py # Menu bar app, rumps integration
│ ├── whisper_engine.py # MLX / faster-whisper transcription
│ ├── audio.py # PortAudio capture pipeline
│ ├── streamer.py # Streaming audio chunks to engine
│ ├── overlay.py # Voice-reactive floating UI
│ ├── statusbar.py # Menu bar status icon
│ ├── hotkey.py # Global shortcut handling
│ ├── accessibility.py # Text insertion via AX APIs
│ ├── config.py # User preferences, model paths
│ ├── rnnoise.py # RNNoise denoising wrapper
│ └── updater.py # Update checks
├── scripts/
│ ├── install.sh # Main installer
│ ├── bootstrap_python.sh
│ ├── install_rnnoise.sh
│ └── install_models.sh
├── resources/
│ └── icon.png
├── Makefile
├── setup.py
├── requirements.txt
└── README.md
- MLX — Apple Silicon–optimized ML framework
- faster-whisper — Whisper transcription (CPU fallback)
- mlx-whisper — MLX-native Whisper for lowest latency
- RNNoise — Real-time noise suppression
- rumps — Minimal macOS menu bar app framework
- sounddevice — PortAudio bindings for audio capture
Contributions are welcome. Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Licensed under the Apache License 2.0.
macos speech-to-text dictation whisper mlx apple-silicon menu-bar local-first privacy