Problem
The current TTS pipeline (generate_voiceover) only supports remote HTTP API providers (bytedance, minimax, 302). Users who want to generate voiceovers locally — without relying on paid cloud APIs, rate limits, or network latency — have no option.
Local TTS is valuable for:
- Cost: zero per-character charges after the initial model download
- Latency: no round-trip to external APIs (~200–500ms on CPU vs. several seconds over the network)
- Privacy: audio never leaves the machine
- Offline/air-gapped environments
- Batch/render workflows where hundreds of segments make API costs prohibitive
Proposal
Add a new local TTS provider type alongside the existing remote providers. The implementation should:
- Define a local provider interface (model path, voice, language, speed → WAV bytes)
- Ship at least one built-in local engine
- Allow users to select "Local" as the TTS provider in the web UI sidebar, choosing which local engine to use
- Reuse the existing
tts_providers.json parameter schema + config.toml [generate_voiceover.providers.*] pattern so local providers are configured the same way as remote ones
Suggested Local Engines
1. Supertonic (supertone-inc/supertonic)
- Repo: https://github.com/supertone-inc/supertonic
- Install:
pip install supertonic (or pip install 'supertonic[serve]' for HTTP server mode)
- Model: auto-downloads to
~/.cache/supertonic3/ (~400MB)
- Languages: 31 (zh, en, ja, ko, fr, de, es, pt, ru, ar, hi, vi, etc.)
- Voices: 10 built-in styles (M1–M5 male, F1–F5 female), plus zero-shot voice cloning via Voice Builder JSON export
- Expressions:
{{sad}}, {{laugh}}, {{whisper}}, {{shout}}, {{cry}}, etc.
- Output: 44.1kHz 16-bit WAV, no upsampler needed
- Hardware: CPU-only, runs on Raspberry Pi / edge devices. No GPU required.
- Speed: ~200–500ms per sentence on CPU (tested: 10.33s output in 9.61s wall time)
- SDK:
from supertonic import TTS; tts = TTS(); wav, dur = tts.synthesize(text, voice_style=style, total_steps=8)
- HTTP server mode:
supertonic[serve] exposes POST /v1/tts on 127.0.0.1:7788 — can reuse the same HTTP handler pattern as the existing 302/minimax providers
2. Index-TTS (index-tts/index-tts)
- Repo: https://github.com/index-tts/index-tts
- Description: Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System
- Install:
pip install index-tts
- Key feature: voice cloning from a reference audio file — provide a 10–30s clip and it replicates the speaker's voice
- Languages: zh, en, ja, and more
- Speed: GPU-accelerated (CUDA), with CPU fallback
- Model: downloads from HuggingFace (
IndexTeam/Index-TTS)
- Use case: ideal for users who want a specific speaker voice without recording new audio
Acceptance Criteria
Problem
The current TTS pipeline (
generate_voiceover) only supports remote HTTP API providers (bytedance, minimax, 302). Users who want to generate voiceovers locally — without relying on paid cloud APIs, rate limits, or network latency — have no option.Local TTS is valuable for:
Proposal
Add a new local TTS provider type alongside the existing remote providers. The implementation should:
tts_providers.jsonparameter schema + config.toml[generate_voiceover.providers.*]pattern so local providers are configured the same way as remote onesSuggested Local Engines
1. Supertonic (supertone-inc/supertonic)
pip install supertonic(orpip install 'supertonic[serve]'for HTTP server mode)~/.cache/supertonic3/(~400MB){{sad}},{{laugh}},{{whisper}},{{shout}},{{cry}}, etc.from supertonic import TTS; tts = TTS(); wav, dur = tts.synthesize(text, voice_style=style, total_steps=8)supertonic[serve]exposesPOST /v1/ttson127.0.0.1:7788— can reuse the same HTTP handler pattern as the existing 302/minimax providers2. Index-TTS (index-tts/index-tts)
pip install index-ttsIndexTeam/Index-TTS)Acceptance Criteria
voiceover_id/duration/pathcontract ingenerate_voiceover.py)config.tomlunder[generate_voiceover.providers.supertonic]and[generate_voiceover.providers.index_tts]resource/tts/tts_providers.jsonfor each local engine