IndexTTS 本地部署¶
IndexTTS 通过 OpenTalking 的 indextts provider 接入,适合可控配音、情绪控制和复刻音色。本文覆盖同机 HTTP sidecar 方式。
适用场景¶
- 需要比默认 Edge TTS 更强的音色控制。
- 希望把 IndexTTS runtime 与 OpenTalking 主进程隔离。
- 需要本地部署而不是托管 TTS API。
权重准备¶
终端
cd "$OPENTALKING_HOME"
mkdir -p ./avatar_models/local-audio
export HF_ENDPOINT="${HF_ENDPOINT:-https://hf-mirror.com}"
uv sync --extra dev --extra models --extra local-audio --python 3.11
python scripts/download_local_audio_models.py \
--root ./avatar_models/local-audio \
--model indextts2 \
--model indextts2-w2v-bert \
--model indextts2-maskgct \
--model indextts2-campplus \
--model indextts2-bigvgan
准备 runtime:
终端
mkdir -p ./avatar_models/local-audio/runtime
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/index-tts/index-tts.git ./avatar_models/local-audio/runtime/index-tts
cd ./avatar_models/local-audio/runtime/index-tts
uv sync --python 3.11
uv pip install fastapi "uvicorn[standard]" soundfile
配置项¶
.env
OPENTALKING_TTS_DEFAULT_PROVIDER=indextts
OPENTALKING_TTS_INDEXTTS_BACKEND=local
OPENTALKING_TTS_INDEXTTS_SERVICE_URL=http://127.0.0.1:19190/synthesize
如果使用 OmniRT 承载 IndexTTS runtime,OpenTalking 仍只暴露
provider=indextts,由 backend=omnirt 切换到远端 resident service。
OmniRT 负责模型加载、分窗流式和 token-window streaming:
.env
OPENTALKING_TTS_DEFAULT_PROVIDER=indextts
OPENTALKING_TTS_INDEXTTS_BACKEND=omnirt
OPENTALKING_TTS_OMNIRT_INDEXTTS_SERVICE_URL=http://127.0.0.1:9012/v1/text2audio/indextts
OPENTALKING_TTS_OMNIRT_INDEXTTS_STREAMING_MODE=token_window
OPENTALKING_TTS_OMNIRT_INDEXTTS_TOKEN_WINDOW_SIZE=40
启动命令¶
先启动 IndexTTS sidecar,再启动 OpenTalking。具体 sidecar 命令取决于 IndexTTS runtime 版本;确保它暴露与 OPENTALKING_TTS_INDEXTTS_SERVICE_URL 匹配的 HTTP 接口。
终端
cd "$OPENTALKING_HOME"
cd ./models/local-audio/runtime/index-tts
cd "$OPENTALKING_HOME"
./models/local-audio/runtime/index-tts/.venv/bin/python scripts/local_indextts_service.py --host 127.0.0.1 --port 19092
再启动 OpenTalking:
终端
cd "$OPENTALKING_HOME"
bash scripts/start_unified.sh --backend local --model quicktalk --api-port 8000 --web-port 5173
验证命令¶
终端
curl -fsS http://127.0.0.1:8000/health
curl -fsS --max-time 300 http://127.0.0.1:8000/runtime/status | jq '.tts_providers.indextts.backend, .tts_providers.indextts.resolved_provider'
创建 mock 会话后调用 /speak 验证 TTS provider 是否返回音频。
常见错误¶
| 现象 | 处理 |
|---|---|
| sidecar 接口不匹配 | 检查 IndexTTS runtime 暴露的路径是否与 SERVICE_URL 一致。 |
| 下载缺文件 | 重新运行下载脚本,确认五个 indextts2* 模型目录都存在。 |
| 依赖冲突 | 将 IndexTTS runtime 保持在独立 venv 中。 |
| 首次启动慢 | 下载脚本支持断点续传;确认模型目录完整后重启 sidecar。 |