Vaani is a minimalist, high-performance Text-to-Speech (TTS) desktop application for macOS. It provides a seamless "Paste & Read Aloud" experience with global shortcuts and an elegant "Ethereal Glass" design.
- Apple Silicon Optimized: Leverages
mlx-audioand the Kokoro-82M model for high-quality, on-device inference. - Seamless Flow: Intelligent text chunking and audio overlapping (150ms) for a natural, gapless speaking experience.
- Ethereal Glass UI: A minimalist, translucent interface inspired by modern macOS aesthetics.
- Global Shortcuts: Summon the app instantly from anywhere with a configurable hotkey (default:
Cmd+Shift+V). - Smart Caching: Reuses audio for unchanged sentences to provide near-instant playback.
- Privacy First: 100% offline. Your text never leaves your machine.
- Framework: Wails v2 (Go + Svelte)
- Frontend: Svelte, Vite, Lucide Icons
- Audio Engine: mlx-audio (Kokoro-82M-bf16 model)
- Native Integration: Gin (REST API), Robotn Hook (Global Shortcuts)
- macOS (Apple Silicon strongly recommended)
- Go 1.21+
- Node.js & npm
- Python 3.10+
- espeak-ng: Required for phonemization.
brew install espeak-ng
Installing via Homebrew handles all system dependencies automatically, including espeak-ng, python, and mlx-audio.
brew tap 4nkitd/vaani
brew install --cask vaani-
Clone the repository:
git clone https://github.com/ankityadav/vaani.git cd vaani -
Setup the Audio Engine: We recommend using
uvfor managed tool installation:uv tool install mlx-audio # Note: The app expects ~/.local/bin/mlx_audio.server to be available -
Install Frontend Dependencies:
cd ui/frontend npm install -
Run in Development Mode:
cd ui wails dev -
Build for Production:
wails build
Open the Settings (gear icon) in the app to configure:
- Model: Change the underlying MLX model.
- Global Shortcut: Define your own trigger keys.
- Emoji Handling: Choose between ignoring or reading out emojis.
MIT © Ankit Yadav