Voices¶
Voices¶
A voice is written engine:voice, and the default is kokoro:af_heart. It is chosen by --voice first, then series.json, then MANIMVOX_VOICE. If a voice is missing, not installed or lacks its key, the render stops with a one-line reason; manimvox never switches voice silently.
| Engine | Voice example | Install | Runs | Licence |
|---|---|---|---|---|
| Kokoro (default) | kokoro:af_heart |
kokoro |
offline, 354 MB model | Apache-2.0 weights, MIT runtime |
| Piper | piper:en_US-libritts_r-medium |
piper |
offline, ~80 MB per voice | GPL-3.0 package; each voice's licence is saved beside it as <voice>.MODEL_CARD (CC BY 4.0 for the default) |
| macOS say | say:Samantha |
built in, macOS only | offline | macOS licence: personal, non-commercial voice output |
| edge-tts | edge:en-US-AriaNeural |
edge |
online, no key; text goes to Microsoft | LGPL-3.0 package; Microsoft service terms |
| OpenAI | openai:alloy, openai:tts-1-hd/onyx |
cloud + OPENAI_API_KEY |
online, paid | OpenAI terms; disclose that the voice is AI-generated |
| ElevenLabs | elevenlabs:<voice id> |
cloud + ELEVENLABS_API_KEY |
online, paid or free tier | ElevenLabs terms; the free tier requires attribution |
| Sarvam AI | sarvam:shubh, sarvam:anushka@hi-IN |
cloud + SARVAM_API_KEY |
online, paid; 11 Indian languages | Sarvam AI terms |
| Gnani.ai | gnani:Kaveri, gnani:Shivani@ta-IN |
cloud + GNANI_API_KEY |
online, paid; 10 Indian languages and Hinglish | Gnani.ai terms |
| XTTS-v2 | xtts:clone=voice.wav |
xtts |
offline, ~1.9 GB + PyTorch | non-commercial (Coqui Public Model License) |
| F5-TTS | f5:clone=voice.wav with voice.txt |
f5 |
offline, ~1.3 GB + PyTorch | non-commercial weights (CC-BY-NC) |
Notes on particular engines:
- Voice cloning: the engines clone from a 6–30 second recording of the speaker. F5-TTS also needs a transcript of that recording: voice.txt, beside voice.wav, holding exactly what is said in it.
- Paths: clone= recordings and local Piper .onnx voices are resolved from the project root.
- Indian languages: Sarvam AI and Gnani.ai voices are written [model/]voice[@language]. With no model, the one that has the voice is used. With no language, Sarvam uses en-IN and Gnani detects it. For example, sarvam:bulbul:v4-flash/simran_en_customer or gnani:timbre-v3.0/Avinash@hi-IN. manimvox voices sarvam and manimvox voices gnani list the voices and languages. Sarvam takes speed 0.5 to 2.0 (0.3 to 3.0 on bulbul:v2), and Gnani takes 0.85 to 1.15.
- Even loudness: every voice is levelled to the same loudness (loudness in series.json, −16 LUFS by default), so switching voices doesn't change the volume.
- Online engines receive only the narration text. manimvox voices edge and manimvox voices elevenlabs go online to list their voices.
- Downloads happen only after you confirm (or pass --yes). Kokoro and Piper files are verified by hash.
Licences were summarised on 2026-10-16 and have not been legally reviewed. Verify them upstream before any commercial use.