OmniVoice Studio — The Open-Source ElevenLabs Alternative for Local Voice Cloning
OmniVoice Studio — The Open-Source ElevenLabs Alternative for Local Voice Cloning
If you've ever tried ElevenLabs, you know how impressive their voice cloning and text-to-speech quality is. But the pricing — $5 to $330 per month — and the fact that your audio goes through their cloud servers can be a dealbreaker for privacy-conscious users and developers.
Enter OmniVoice Studio: a free, open-source desktop app and Docker image that brings professional-grade voice cloning, text-to-speech (TTS), video dubbing, and speech-to-text (STT) entirely to your local machine. No API keys, no subscriptions, no data leaving your computer.
With 7294+ GitHub stars and growing fast, OmniVoice Studio supports 646 languages for TTS, 11 TTS engines, 8 ASR (speech recognition) engines, and includes features like speaker diarization, vocal isolation, and AI audio watermarking. And yes — you can self-host it with Docker.
Why Is It Trending?
Voice AI is exploding. Content creators, indie developers, accessibility teams, and game developers all need high-quality TTS and voice cloning — but the existing options are either expensive (ElevenLabs, PlayHT), locked to the cloud, or limited in language coverage.
OmniVoice fills a massive gap: it's the only open-source tool that combines:
- Zero-shot voice cloning from a 3-second clip
- 646 language TTS (ElevenLabs supports 32)
- A full video dubbing pipeline (transcribe → translate → re-voice → export)
- A desktop app and Docker self-hosting option
- Built-in MCP server for use with Claude, Cursor, and other AI coding agents
Architecture Overview
The architecture is organized into six layers:
- Access Layer — Three entry points: the native desktop app (Tauri), a web browser pointing at a Docker-hosted backend, or an MCP client (Claude, Cursor)
- Frontend Layer — A React SPA with specialized tabs: Voice Console (clone/design), Dubbing Studio (transcribe/dub/export), Stories & Audio (multi-voice audiobooks), and Dictation (system-wide hotkey)
- API Layer — FastAPI backend with 100+ endpoints, SSE + WebSocket streaming for real-time progress, and SQLite for persistence
- Engine Layer — 11 TTS engines (OmniVoice, CosyVoice 3, GPT-SoVITS, VoxCPM2, etc.), 8 ASR engines (WhisperX, Faster-Whisper, MLX Whisper, etc.), Demucs source separation, Pyannote diarization, and AudioSeal watermarking
- Compute Layer — GPU auto-detection across CUDA (NVIDIA), MPS (Apple Silicon), ROCm (AMD), with automatic CPU fallback. No silent CPU fallback — engine routing checks GPU compatibility before dispatch
- Storage Layer — SQLite for projects/settings, voice persona bundles (
.ovsvoice), and Hugging Face model cache (~2.4 GB on first run)
Prerequisites
- Minimum: 8 GB RAM, 4 GB VRAM (auto-offloads TTS to CPU), 10 GB disk
- Recommended: 16 GB RAM, 8 GB VRAM (NVIDIA RTX 3060+), 20 GB SSD
- OS: Windows 10+, macOS 12+, Ubuntu 20.04+
- Docker (for self-hosted mode)
- GPU: Optional — CPU works, just slower
Setup
Option 1: Desktop App (macOS)
# Download the latest DMG from GitHub releases
# First launch: right-click → Open (or System Settings → Privacy & Security → "Open Anyway" on macOS 15)
# No Terminal needed — the app handles everything
Option 2: Docker Self-Hosted
# Pull the image
docker pull ghcr.io/debpalash/omnivoice-studio:latest
# Run (CPU mode)
docker run -d --name omnivoice \
-p 127.0.0.1:3900:3900 \
-v omnivoice-data:/app/omnivoice_data \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/debpalash/omnivoice-studio:latest
Open http://localhost:3900. The first run downloads ~2.4 GB of model weights — follow the logs with docker logs -f omnivoice.
Option 3: Docker Compose (Recommended for Self-Hosting)
# Clone the repository
git clone https://github.com/debpalash/OmniVoice-Studio.git
cd OmniVoice-Studio
# CPU mode
docker compose -f deploy/docker-compose.yml --profile cpu up -d
# NVIDIA GPU mode
docker compose -f deploy/docker-compose.yml --profile gpu up -d
GPU Support
For NVIDIA GPU acceleration, ensure the NVIDIA Container Toolkit is installed:
docker run -d --name omnivoice --gpus all \
-p 127.0.0.1:3900:3900 \
-v omnivoice-data:/app/omnivoice_data \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/debpalash/omnivoice-studio:latest
Configuration
LAN Access
To expose OmniVoice on your LAN (for homelab use), change the port mapping in docker-compose.yml from 127.0.0.1:3900:3900 to 0.0.0.0:3900:3900.
Security note: OmniVoice ships no authentication. On LAN, put it behind a reverse proxy with basic auth (Caddy, nginx + htpasswd) or a private network overlay like Tailscale.
Environment Variables
| Variable | Purpose | Default |
|---|---|---|
OMNIVOICE_BIND_HOST |
Backend bind address | 127.0.0.1 |
OMNIVOICE_SERVER_MODE |
Relax loopback origin gate for Docker | 1 (in Docker) |
OMNIVOICE_PUBLIC_API_BASE |
Set API base URL for reverse proxy | Same origin |
HF_TOKEN |
Hugging Face token for gated models | *** |
OMNIVOICE_TTS_BACKEND |
Override default TTS engine | omnivoice |
OMNIVOICE_ASR_BACKEND |
Override default ASR engine | whisperx |
Persisting Data
Two volumes should be persisted across container restarts:
omnivoice-data:/app/omnivoice_data— Project DB, user voices, settings, encrypted HF token~/.cache/huggingface:/root/.cache/huggingface— Shared HF model cache (saves ~2.4 GB re-download)
Verification Checklist
After deployment, verify everything works:
- Open http://localhost:3900 in a browser — the OmniVoice dashboard loads
- The
/healthendpoint returns{"status": "ok", "device": "...", "version": "..."}:curl http://localhost:3900/health - Voice cloning works: upload a 3-second audio clip and generate speech
- TTS works: type text and hear the synthesized voice
- GPU is detected (if using GPU mode): check
docker logs omnivoicefor GPU info - ASR (speech-to-text) works: upload an audio file and verify transcription
Resources
- GitHub Repository: github.com/debpalash/OmniVoice-Studio
- Docker Images: ghcr.io/debpalash/omnivoice-studio
- Docker Hub: palashdeb/omnivoice-studio
- Documentation: Built-in in the repo's
docs/directory - Discord Community: Join Discord
- License: AGPL-3.0 (commercial use free; commercial license available for proprietary embedding)