Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
broomva avatar

Omnivoice

  • 4 installs
  • Updated May 26, 2026
  • broomva/omnivoice-skill

OmniVoice is a Claude Code skill that performs local TTS, voice cloning, voice design and video dubbing via the OmniVoice Studio MCP server, an open-source ElevenLabs alternative.

About

This skill generates speech, clones voices, designs voices and dubs video locally through the OmniVoice Studio MCP server, an open-source ElevenLabs alternative. It exposes tools like generate_speech, list_voices and check_health and supports 646 languages. A developer uses it for private, no-API-key narration, multilingual voice work, and batch audio for content pipelines.

  • Local TTS, voice cloning and voice design via the OmniVoice Studio MCP server
  • Supports 646 languages and cloning from a 3-second reference clip
  • Runs on MPS/CUDA/CPU with nothing leaving the machine

Omnivoice by the numbers

  • 4 all-time installs (skills.sh)
  • Ranked #1,139 of 1,335 Generative Media skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

omnivoice capabilities & compatibility

Free and local; no API keys, runs on MPS/CUDA/CPU with a one-time ~2.4 GB model download

Capabilities
text to speech · voice cloning · voice design · video dubbing
Use cases
transcription · translation · video generation · copywriting
Platforms
macOS
Runs
Runs locally
Pricing
Free
From the docs

What omnivoice says it does

Local TTS, voice cloning, voice design, and video dubbing via the OmniVoice Studio MCP server
SKILL.md
The MCP tools all hit `$OMNIVOICE_API_URL` (default `http://localhost:3900`).
SKILL.md
Cloning needs a 3-10 second reference clip the model will use as a speaker embedding.
SKILL.md
npx skills add https://github.com/broomva/omnivoice-skill --skill omnivoice

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs4
Last updatedMay 26, 2026
Repositorybroomva/omnivoice-skill

What it does

Use it to generate local TTS, clone or design voices, and produce multilingual narration for content without cloud API keys.

Who is it for?

Local multilingual narration, cloning a voice from a short clip, and batch audio for blog posts or content pipelines

Skip if: Fast English-only TTS on weak hardware (use kokoro), lowest-friction one-off TTS (Edge TTS), or highest-polish English (ElevenLabs)

When should I use this skill?

Generating speech, cloning a voice, designing a voice, or dubbing a video locally

What you get

Locally generated speech, cloned or designed voices, and dubbed audio with no data leaving the machine

  • generated WAV audio
  • cloned voice profile
  • dubbed video audio

By the numbers

  • 646 languages supported
  • 3-10 second reference clip for cloning
  • ~2.4 GB model download

Files

SKILL.mdMarkdownGitHub ↗

OmniVoice

Overview

Generate audio locally via the OmniVoice Studio MCP server. Tools: generate_speech, list_voices, list_personalities, list_languages, check_health. Resources: voice://{id}, history://recent.

Prerequisites — Backend Must Be Running

The MCP tools all hit $OMNIVOICE_API_URL (default http://localhost:3900). If the backend is down, every tool returns a connection error. Install + boot:

git clone https://github.com/debpalash/OmniVoice-Studio.git "$OMNIVOICE_HOME"
cd "$OMNIVOICE_HOME"
uv sync
VIRTUAL_ENV="$(pwd)/.venv" uv pip install 'mcp[cli]'

Then:

scripts/check-health.sh        # exit 0 if up
scripts/start-backend.sh       # boot in background (MPS/CUDA auto-detected)

First synthesis call lazy-downloads the k2-fsa/OmniVoice model (~2.4 GB) from HuggingFace — cached on subsequent boots.

Task Index — Pick the Right Tool

TaskToolNotes
Verify backend is upcheck_healthReturns `{"status":"ok","device":"mps
Text → audio with a saved voicegenerate_speech(text, profile_id)Returns base64 WAV. profile_id="demo0001" is the bundled demo voice
Text → audio without a clone (voice design)generate_speech(text, instruct="…")Omit profile_id; pass an instruct like "warm middle-aged female narrator, calm pace"
Multilingual narrationgenerate_speech(text, language="es")Any ISO 639 code or "Auto"
List existing voiceslist_voicesReturns id, name, type, personality
List personality presetslist_personalitiesReturns narrator / casual / news-anchor / etc. with their instruct strings
List supported languageslist_languages646 total; returns 20 popular + the full count

For non-trivial decisions (which engine to use, when to pick OmniVoice over kokoro / Edge TTS / ElevenLabs), see references/engines-comparison.md.

For MCP wiring details, backend lifecycle, troubleshooting, and a clean teardown, see references/mcp-setup.md.

Common Workflows

1. One-shot narration with the demo voice

# As called through the MCP client (your agent will do this for you):
result = generate_speech(
    text="Hello — this is OmniVoice generating speech locally.",
    profile_id="demo0001",
    language="English",
    steps=16,                   # 8 = fast/draft · 16 = balanced · 32 = quality
)
# result is JSON with audio_id, generation_time_s, audio_duration_s, format, wav_base64

Benchmark: 4.2 s of audio in ~24 s server-side on Apple Silicon MPS at 16 diffusion steps.

2. Save the WAV to disk and play

Tool returns base64 PCM WAV (16-bit, mono, 24 kHz). Decode + write:

import base64, json
payload = json.loads(result_text)            # parse JSON the tool returns
open("out.wav","wb").write(base64.b64decode(payload["wav_base64"]))

On macOS: afplay out.wav. Convert to MP3 with ffmpeg -i out.wav -codec:a libmp3lame -b:a 128k out.mp3.

3. Voice clone — end-to-end recipe

Cloning needs a 3-10 second reference clip the model will use as a speaker embedding. The MCP server does NOT expose profile creation — it only reads existing profiles. Two paths to create one:

Path A — bundled helper (macOS, recommended for fresh clones):

scripts/record-reference.sh ~/Downloads/my-ref.wav 12 1
# args: output_path raw_duration_sec mic_index
# Default mic_index=1 (MacBook built-in); list devices via:
#   ffmpeg -f avfoundation -list_devices true -i ""

The script gives audible countdown + start/stop cues via macOS say + /System/Library/Sounds/Ping.aiff so the user knows when to speak (terminal stdout is buffered — text "speak now" prompts arrive too late). It records a longer raw window, then trims to ~10 seconds of speech via silenceremove + atrim, plays back for verification, and prints the next-step curl command.

Path B — manual:

# 1. Record (mono, 24 kHz native — matches model's internal rate)
ffmpeg -f avfoundation -i ":1" -t 12 -ac 1 -ar 24000 raw.wav

# 2. Trim leading silence + take first 10 sec of speech
ffmpeg -i raw.wav \
  -af "silenceremove=start_periods=1:start_silence=0.05:start_threshold=-40dB,atrim=end=10" \
  -ac 1 -ar 24000 ref.wav

# 3. Verify
ffmpeg -i ref.wav -af volumedetect -f null - 2>&1 | grep volume   # max should be > -20 dB
afplay ref.wav

POST to /profiles (multipart/form-data — required fields: name, ref_audio):

curl -X POST http://127.0.0.1:3900/profiles \
  -F "name=carlos-clone" \
  -F "ref_audio=@ref.wav" \
  -F "ref_text=The exact text spoken in the clip" \
  -F "language=English" \
  | python3 -m json.tool
# returns { "id": "abc12345", "name": "carlos-clone" }

Once created, pass profile_id to generate_speech (via MCP) or directly via POST /generate. Profiles persist in SQLite + reference-audio files at ~/Library/Application Support/OmniVoice/voices/<id>.<ext> (the backend preserves the uploaded extension — .wav if you uploaded a WAV, .mp3 if MP3, etc.). State persists across backend restarts.

Reference clip tips that materially affect quality:

FactorWhy it matters
Single speakerMixed speakers blur the embedding
Clean speech, no music/noiseModel embeds the noise too
Natural prosody (avoid pangrams)Diffusion samples replicate prosody, not just timbre
3-10 sec is the sweet spot< 3 s lacks information; > 10 s adds compute without quality gain
Match ref_text to what's spokenImproves alignment, especially on noisy refs
language correctWrong language → cross-lingual transfer artifacts
Loudness peak ≥ -15 dBQuiet refs work but normalize poorly

4. Voice design (no reference clip)

Skip profile_id; provide an instruct string describing the desired voice:

generate_speech(
    text="Welcome to the future of agentic systems.",
    instruct="warm middle-aged female narrator, calm authoritative pace, documentary style",
)

Get pre-made instructs via list_personalities and copy the one matching the brief (narrator, casual, news-anchor, etc.).

5. Video dubbing (web UI only)

The MCP server does not expose the dubbing endpoint. The full transcribe → translate → re-voice → mux pipeline lives behind the desktop UI (bun run desktop in $OMNIVOICE_HOME) and the /dub/* REST routes. When the user asks to dub a video, point them to the UI; surface this skill only for the synthesis primitives above.

When NOT to use OmniVoice

  • Fast English-only narration on weak hardwarekokoro-tts is ~10× smaller and 2× realtime on CPU (see references/engines-comparison.md)
  • Lowest-friction one-off TTS → Edge TTS needs no install or backend
  • Highest possible quality regardless of cost → ElevenLabs still wins on English narration polish; OmniVoice ties or wins on multilingual + cloning
  • Real-time streaming dictation → use the OmniVoice desktop widget (⌘+⇧+Space), not the MCP server

Resources

  • references/engines-comparison.md — Decision tree across OmniVoice / kokoro / Voicebox / Edge TTS / ElevenLabs / cloud APIs
  • references/mcp-setup.md — MCP wiring, backend lifecycle, env vars, troubleshooting
  • scripts/check-health.shcurl /health, exit 0/1
  • scripts/start-backend.sh — Start uvicorn on 127.0.0.1:3900 with health probe
  • scripts/stop-backend.sh — Clean shutdown via kill -TERM on the bound PID
  • scripts/record-reference.sh — macOS-only: record + trim + verify a reference clip for cloning, with audible cues (say + system beeps) that bypass terminal output buffering

Backend Swagger / OpenAPI: http://127.0.0.1:3900/docs (when backend is up).

Upstream: github.com/debpalash/OmniVoice-Studio — FSL-1.1-ALv2 (free for personal/internal/non-commercial; auto-converts to Apache-2.0 two years after each release).

Related skills

FAQ

Does the backend need to run?

Yes. The MCP tools hit the OmniVoice backend at localhost:3900; if it is down every tool returns a connection error, so start it first.

How many languages are supported?

646 languages total; list_languages returns the 20 most popular plus the full count.

Can the MCP server create a voice clone?

No. The MCP server only reads existing profiles; you create a clone by POSTing a reference clip to /profiles or using the bundled record-reference script.

Generative Mediallmautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.