docs/cli_v2_usage.md
本文档面向用户级 indextts2 命令行入口。CLI v2 是 IndexTTS2-first 的专用入口, 可安装到用户环境后从任意目录运行, 不依赖仓库根目录作为当前工作目录。它不会替换已有 indextts 命令。indextts 仍保留现有 IndexTTS1 行为。
当前 CLI v2 提供以下子命令:
indextts2 init: 创建持久化配置和默认模型资源目录, 不下载模型资源。indextts2 config: 查看或修改持久化配置。indextts2 download: 显式下载 IndexTTS2 模型资源。indextts2 check: 检查本地模型资源, Python 包和设备可用性。indextts2 synth: 使用 IndexTTS2 合成单条文本音频。indextts2 batch: 读取 JSON Lines 批量清单, 串行合成多条独立音频, 或合成后拼接为一个 WAV 文件。indextts2 concat: 读取 JSON Lines 拼接清单, 将已有 WAV 片段拼接为一个 WAV 文件。以后可能会提供,但暂不包括:
uv run webui.py。batch 的 --continue-on-error。batch 的并发执行。top_p, top_k, temperature 等。项目在 pyproject.toml 中注册了两个命令:
indextts = "indextts.cli:main"
indextts2 = "indextts.cli_v2:main"
普通用户推荐使用用户级安装方式注册 CLI。当前仓库包如果尚未发布到 PyPI 或默认包 registry, 需要在仓库根目录从本地源码安装:
uv tool install --python 3.10 .
也可以使用 pipx 从本地源码安装:
pipx install .
在仓库开发和调试时, 可使用 editable 安装方式注册 CLI:
uv tool install --python 3.10 -e .
安装后可查看帮助:
indextts2 --help
indextts2 init --help
indextts2 config --help
indextts2 download --help
indextts2 check --help
indextts2 synth --help
indextts2 batch --help
indextts2 concat --help
未安装入口时, 也可以在仓库根目录用 Python 模块方式调用。该入口保留给开发和调试使用, 不作为普通用户主路径:
python -m indextts.cli_v2 --help
indextts2 init 会创建平台标准配置目录, config.toml 和默认模型资源目录。它只准备本地状态, 不会自动联网下载模型资源。
indextts2 init
指定模型资源目录并写入持久化配置(请将 D:/models/IndexTTS-2 替换为你的目标模型目录):
indextts2 init --model-dir D:/models/IndexTTS-2
check, synth 和 batch 在运行前也会执行首次初始化, 因此首次运行这些命令会创建配置文件和默认模型资源目录, 但仍不会自动下载模型资源。concat 不需要模型资源, 不执行模型资源检查。
CLI v2 使用“模型资源目录”保存 IndexTTS2 的模型文件和配套资源。
平台默认模型资源目录:
| 平台 | 默认模型资源目录 |
|---|---|
| Windows | %LOCALAPPDATA%\IndexTTS\models\IndexTTS-2 |
| macOS | ~/Library/Application Support/IndexTTS/models/IndexTTS-2 |
| Linux | ${XDG_DATA_HOME:-~/.local/share}/indextts/models/IndexTTS-2 |
持久化配置位置:
| 平台 | 持久化配置 |
|---|---|
| Windows | %APPDATA%\IndexTTS\config.toml |
| macOS | ~/Library/Application Support/IndexTTS/config.toml |
| Linux | ${XDG_CONFIG_HOME:-~/.config}/indextts/config.toml |
模型资源目录解析优先级:
--model-dir PATH。INDEXTTS2_MODEL_DIR。model_dir。CLI 内部固定使用:
{model-resource-directory}/config.yaml
模型资源目录必须包含以下关键资源:
config.yaml
bpe.model
gpt.pth
s2mel.pth
wav2vec2bert_stats.pt
feat1.pt
feat2.pt
qwen0.6bemo4-merge
hf_cache/w2v-bert-2.0
hf_cache/semantic_codec_model.safetensors
hf_cache/campplus_cn_common.bin
hf_cache/bigvgan/config.json
hf_cache/bigvgan/bigvgan_generator.pt
查看持久化配置文件位置:
indextts2 config path
查看当前持久化配置:
indextts2 config get
写入模型资源目录:
indextts2 config set model_dir D:/models/IndexTTS-2
可配置键:
| 键 | 用途 |
|---|---|
model_dir | 持久化模型资源目录。 |
default_device | 持久化默认运行设备, 例如 cpu, cuda, cuda:0, mps, xpu。 |
use_fp16 | 持久化是否启用 FP16, 值为 true 或 false。 |
use_deepspeed | 持久化是否启用 DeepSpeed, 值为 true 或 false。 |
use_cuda_kernel | 持久化是否启用 CUDA kernel, 值为 true 或 false。 |
普通 check, synth 和 batch 参数只覆盖本次运行, 不会写回持久化配置。配置写入只通过 indextts2 init --model-dir PATH, indextts2 config set KEY VALUE, 以及成功的 indextts2 download --model-dir PATH 完成。download --no-save 不写回。
推荐通过 CLI 显式下载模型资源:
indextts2 download
默认下载源是 HuggingFace。选择下载源:
indextts2 download --source huggingface
indextts2 download --source modelscope
指定下载目标目录:
indextts2 download --source huggingface --model-dir D:/models/IndexTTS-2
download --model-dir PATH 下载成功并通过资源检查后, 默认会把 PATH 写入持久化配置的 model_dir, 后续 check, synth 和 batch 会默认使用该目录。临时下载或预热其他目录时使用 --no-save:
indextts2 download --source modelscope --model-dir D:/tmp/IndexTTS-2 --no-save
下载命令通过 Python API 下载资源, 不依赖外部 hf 或 modelscope 可执行文件在 PATH 中。目标目录已有文件时, CLI 不会清空目录, 下载器可以增量补齐。下载完成后, CLI 会复用模型资源检查判断目录是否可用。
运行:
indextts2 check
指定设备检查:
indextts2 check --device cuda:0
check 会检查:
torch, torchaudio, indextts。cuda, xpu, mps, cpu。--device 时, 该设备是否可用。示例成功输出:
Checking model directory: <resolved-model-resource-directory>
OK: model directory <resolved-model-resource-directory>
OK: required model files
OK: python packages
cuda: available
xpu: unavailable
mps: unavailable
cpu: available
最小命令:
indextts2 synth --text "你好, IndexTTS2。" --voice examples/voice_01.wav --output outputs/hello.wav
从 UTF-8 文本文件读取:
indextts2 synth --text-file input.txt --voice examples/voice_01.wav --output outputs/hello.wav
从标准输入读取:
echo "从标准输入读取文本。" | indextts2 synth --stdin --voice examples/voice_01.wav --output outputs/stdin.wav
文本来源必须三选一:
--text TEXT--text-file PATH--stdinCLI 会去除文本首尾空白, 去除后不能为空。--text-file 按 UTF-8 读取。
--output 必填。默认不覆盖已有文件:
indextts2 synth --text "测试覆盖。" --voice examples/voice_01.wav --output outputs/hello.wav
如需覆盖已有输出, 使用 --force:
indextts2 synth --text "测试覆盖。" --voice examples/voice_01.wav --output outputs/hello.wav --force
输出路径的父目录会自动创建。合成成功时, 标准输出会打印:
Generated: outputs/hello.wav
--voice 必填, 指向音色参考音频:
indextts2 synth --text "保持音色。" --voice examples/voice_01.wav --output outputs/voice.wav
使用情感参考音频:
indextts2 synth --text "使用情感参考音频。" --voice examples/voice_01.wav --emotion-audio examples/emo_sad.wav --emotion-weight 0.75 --output outputs/emotion_audio.wav
使用情感描述文本:
indextts2 synth --text "使用情感描述文本。" --voice examples/voice_01.wav --emotion-text "warm and calm" --emotion-weight 0.6 --output outputs/emotion_text.wav
使用 8 维情感向量:
indextts2 synth --text "使用情感向量。" --voice examples/voice_01.wav --emotion-vector 0,0,0.8,0,0,0,0,0 --emotion-weight 1.0 --output outputs/emotion_vector.wav
8 维情感向量的顺序固定为: 高兴, 愤怒, 悲伤, 害怕, 厌恶, 忧郁, 惊讶, 平静。
--emotion-vector 接受两种格式:
0,0,0.8,0,0,0,0,0[0, 0, 0.8, 0, 0, 0, 0, 0]规则:
--emotion-vector, --emotion-audio 和 --emotion-text 三者互斥, 每次只能选择一种情感来源。--emotion-text 不能为空字符串。--emotion-vector 必须正好包含 8 个数字。--emotion-vector 每个值必须在 0.0..1.0 范围内。--emotion-vector 的总和必须小于等于 0.8。--emotion-weight 必须是浮点数, 默认值为 1.0。--emotion-weight 会传给 IndexTTS2 的 emo_alpha。用于 --emotion-vector 时, 它会整体缩放 8 维情感向量的强度。indextts2 batch 是当前 CLI v2 的批量合成子命令。它读取一份 JSON Lines 批量清单, 先预检整份清单, 再只初始化一次模型。默认模式按清单顺序串行生成多份独立音频文件。传入 --concat 时, CLI 会先为每条任务生成临时 WAV 片段, 再按清单顺序拼接成一个最终 WAV 文件。
batch 是新增子命令, 不会改变 indextts2 synth 的单条合成契约。
只校验批量清单和模型资源, 不加载模型, 不生成音频:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --dry-run
--dry-run 成功时输出:
Batch file OK: 4 tasks
真实批量合成:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --device cuda:0 --fp16
合成成功时会逐条输出生成路径, 最后输出汇总:
Generated: examples/batch/out/001.wav
Generated: examples/batch/out/002.wav
Generated: examples/batch/out/003.wav
Generated: examples/batch/out/004.wav
Batch complete: 4 tasks generated
batch 支持三种输出模式。
逐行输出是默认模式。清单中每行必须提供 output:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav
自动命名输出使用 --output-dir, 清单中不能提供 output。输出文件按任务顺序命名为 0001.wav, 0002.wav:
indextts2 batch --batch-file examples/batch/auto-output.jsonl --voice examples/voice_01.wav --output-dir examples/batch/out/auto --dry-run
如需文件名前缀, 加 --output-prefix。前缀不能包含路径分隔符或文件扩展名:
indextts2 batch --batch-file examples/batch/auto-output.jsonl --voice examples/voice_01.wav --output-dir examples/batch/out/auto --output-prefix chapter --dry-run
上例真实执行时会生成:
examples/batch/out/auto/chapter-0001.wav
examples/batch/out/auto/chapter-0002.wav
examples/batch/out/auto/chapter-0003.wav
拼接输出使用 --concat --output <final.wav>, 清单中不能提供逐行 output:
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav --dry-run
--dry-run 成功时输出:
Batch concat OK: 3 tasks
真实执行时, CLI 会创建内部临时目录, 逐条合成 WAV 片段, 拼接为 --output 指定的最终 WAV, 然后默认删除临时目录:
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav
成功时输出:
Generated: <resolved-output.wav>
如需保留内部临时 WAV 片段用于排查问题, 加 --keep-temp:
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav --keep-temp
成功时会额外输出临时目录:
Generated: <resolved-output.wav>
Temp dir: <resolved-temp-dir>
批量清单每个非空行是一条 JSON object。空行会被忽略, 不计入任务数。当前不支持注释行或行内注释。
示例 examples/batch/demo.jsonl:
{"text": "第一句直接写在批量清单里。", "output": "out/001.wav"}
{"text_file": "texts/second.txt", "emotion_audio": "../emo_sad.wav", "emotion_weight": 0.75, "output": "out/002.wav"}
{"text": "第三句使用 JSON array 格式的情感向量。", "emotion_vector": [0, 0, 0.6, 0, 0, 0, 0, 0], "output": "out/003.wav"}
{"text": "第四句使用 CLI 字符串格式的情感向量。", "emotion_vector": "0,0,0,0,0,0,0,0.5", "emotion_weight": "0.4", "output": "out/004.wav"}
每行支持的字段:
| 字段 | 必填 | 说明 |
|---|---|---|
text | 与 text_file 二选一 | 直接传入待合成文本, 去除首尾空白后不能为空。 |
text_file | 与 text 二选一 | 从 UTF-8 文本文件读取待合成文本, 整个文件作为一条任务文本。 |
voice | 有命令级 --voice 时可省略 | 音色参考音频路径。 |
output | 默认逐行输出模式必填 | 输出音频路径。使用 --output-dir 或 --concat 时不能提供。 |
emotion_audio | 否 | 情感参考音频路径。 |
emotion_text | 否 | 情感描述文本。 |
emotion_vector | 否 | 8 维情感向量, 支持 JSON array 或 CLI 风格字符串。 |
emotion_weight | 否 | 情感权重, 必须可解析为浮点数。 |
silence_after_ms | 否 | 拼接模式下, 在当前片段后追加的静音毫秒数。只能与 --concat 一起使用。 |
规则:
text 和 text_file 必须二选一, 不能同时提供, 也不能都不提供。stdin。voice 可逐行提供, 也可用命令级 --voice 作为默认值。output 必须解析为每条任务的唯一输出路径。--output-dir 时, output 由 CLI 自动生成, 清单中不能出现 output。--concat 时, 最终输出来自命令级 --output, 清单中不能出现逐行 output。silence_after_ms 必须是非负整数, 默认值为 0。批量清单中的相对路径按批量清单文件所在目录解析, 包括 text_file, voice, 默认逐行输出模式下的 output 和 emotion_audio。
命令行参数路径仍按当前工作目录解析, 包括 --batch-file, 显式传入的 --model-dir, 命令级 --voice, 命令级 --emotion-audio, --output-dir 和拼接模式的 --output。
例如从仓库根目录运行:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --dry-run
如果 examples/batch/demo.jsonl 某行写入 "output": "out/001.wav", 实际输出路径会解析为 examples/batch/out/001.wav。
如果使用:
indextts2 batch --batch-file examples/batch/auto-output.jsonl --voice examples/voice_01.wav --output-dir examples/batch/out/auto --dry-run
自动输出目录 examples/batch/out/auto 会按当前工作目录解析, 不会按 auto-output.jsonl 所在目录再次拼接。
默认不覆盖已有输出文件。如果任一任务的输出文件已存在, 且没有传 --force, 命令会在模型初始化前失败:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --force
覆盖规则:
--force 只允许覆盖批量运行开始前已经存在的外部输出文件。output 始终是输入错误, 即使传入 --force 也会失败。--output-dir 时, 自动生成的输出文件如果已存在, 仍需传入 --force 才能覆盖。--concat 时, 最终 --output 如果已存在, 仍需传入 --force 才能覆盖。--output-dir 或 --concat 时, CLI 会拒绝把生成输出写到批量清单, text_file, voice 或 emotion_audio 等受保护输入路径上。--continue-on-error。--keep-temp 时会保留临时目录并把路径写入输出。Generated: <path>。Batch complete: <n> tasks generated。Generated: <path>, 不逐条打印临时片段。命令行可以提供公共默认值:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --emotion-text "warm and calm" --emotion-weight 0.6
批量清单每行可以用同名 snake_case 字段覆盖命令级默认值:
--voice 对应逐行 voice。--emotion-audio 对应逐行 emotion_audio。--emotion-text 对应逐行 emotion_text。--emotion-vector 对应逐行 emotion_vector。--emotion-weight 对应逐行 emotion_weight。情感规则:
emotion_audio, emotion_text 和 emotion_vector 是互斥的情感来源, 每行最多提供一种。emotion_weight, 会继承命令级 --emotion-weight, 默认是 1.0。emotion_weight, 它会继承命令级情感来源并只覆盖强度。emotion_weight 是输入错误。synth 一致, 情感跟随 voice 参考音频。批量清单中的 emotion_vector 接受两种格式:
{"text": "JSON array 格式。", "voice": "../voice_01.wav", "emotion_vector": [0, 0, 0.8, 0, 0, 0, 0, 0], "output": "out/vector-array.wav"}
{"text": "CLI 字符串格式。", "voice": "../voice_01.wav", "emotion_vector": "0,0,0.8,0,0,0,0,0", "output": "out/vector-string.wav"}
emotion_vector 的顺序和校验规则与 synth --emotion-vector 相同: 必须正好 8 个数字, 每个值在 0.0..1.0 范围内, 总和必须小于等于 0.8。
indextts2 concat 用于拼接已经存在的 WAV 文件。它不会加载模型, 也不会执行 TTS 推理。它只读取拼接清单, 校验每个 WAV 片段, 再按清单顺序写出一个新的 WAV 文件。
只校验拼接清单, 不创建输出文件:
indextts2 concat --concat-file examples/batch/concat-audio.jsonl --output examples/batch/out/emotion_joined.wav --dry-run
--dry-run 成功时输出:
Concat file OK: 2 segments
真实拼接:
indextts2 concat --concat-file examples/batch/concat-audio.jsonl --output examples/batch/out/emotion_joined.wav
成功时输出:
Generated: <resolved-output.wav>
默认不覆盖已有输出。如需覆盖, 加 --force:
indextts2 concat --concat-file examples/batch/concat-audio.jsonl --output examples/batch/out/emotion_joined.wav --force
拼接清单每个非空行是一条 JSON object。空行会被忽略, 不计入片段数。当前不支持注释行或行内注释。
示例 examples/batch/concat-audio.jsonl:
{"audio": "../emo_hate.wav", "silence_after_ms": 300}
{"audio": "../emo_sad.wav", "silence_after_ms": 500}
每行支持的字段:
| 字段 | 必填 | 说明 |
|---|---|---|
audio | 是 | 待拼接 WAV 文件路径。 |
silence_after_ms | 否 | 当前片段后追加的静音毫秒数, 必须是非负整数, 默认 0。 |
规则:
audio 必须是非空字符串, 并且扩展名必须是 .wav, 大小写不敏感。audio 相对路径按拼接清单文件所在目录解析。--concat-file 和 --output 相对路径按当前工作目录解析。--output 必须是 .wav 文件, 不能与 --concat-file 相同, 也不能与任何 audio 输入相同。silence_after_ms 指定的静音。单条合成示例:
indextts2 synth --text "运行参数示例。" --voice examples/voice_01.wav --output outputs/runtime.wav --device cuda:0 --fp16 --deepspeed --cuda-kernel --verbose
批量合成示例:
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --device cuda:0 --fp16 --deepspeed --cuda-kernel --verbose
批量合成后拼接示例:
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav --device cuda:0 --fp16
参数说明:
| 参数 | 说明 |
|---|---|
--model-dir PATH | 本次运行使用的模型资源目录, 覆盖 INDEXTTS2_MODEL_DIR, 持久化配置和平台默认值。 |
--device DEVICE | 本次运行设备, 例如 cpu, cuda, cuda:0, mps, xpu; 未传时可使用持久化配置 default_device。 |
--fp16 / --no-fp16 | 本次运行是否启用 FP16 半精度推理; 未传时可使用持久化配置 use_fp16。 |
--deepspeed / --no-deepspeed | 本次运行是否启用 DeepSpeed; 未传时可使用持久化配置 use_deepspeed。 |
--cuda-kernel / --no-cuda-kernel | 本次运行是否启用 CUDA kernel 路径; 未传时可使用持久化配置 use_cuda_kernel。 |
--verbose | 显示模型运行输出, 并向 IndexTTS2.infer 传入 verbose=True。 |
默认情况下, CLI 会隐藏模型初始化和推理过程中的普通标准输出。synth 成功后打印 Generated: <path>; batch 每条成功任务打印 Generated: <path>, 全部成功后再打印 Batch complete: <n> tasks generated。需要调试时使用 --verbose。
concat 不加载模型, 因此不支持 --model-dir, --device, --fp16, --deepspeed, --cuda-kernel 或 --verbose。
indextts2 init| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--model-dir PATH | 否 | 平台默认模型资源目录 | 创建本地状态并把模型资源目录写入持久化配置。 |
indextts2 config| 命令 | 说明 |
|---|---|
indextts2 config path | 输出持久化配置文件位置。 |
indextts2 config get | 输出当前持久化配置。 |
indextts2 config set KEY VALUE | 写入一个配置值。KEY 可为 model_dir, default_device, use_fp16, use_deepspeed, use_cuda_kernel。 |
indextts2 download| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
| `--source huggingface | modelscope` | 否 | huggingface |
--model-dir PATH | 否 | 解析后的模型资源目录 | 下载目标目录。成功后默认写入持久化配置。 |
--no-save | 否 | False | 与 --model-dir 一起使用时, 禁止下载成功后写回 model_dir。 |
indextts2 check| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--model-dir PATH | 否 | 解析后的模型资源目录 | 本次检查使用的 IndexTTS2 模型资源目录。 |
--device DEVICE | 否 | 无 | 要求可用的运行设备, 例如 cuda:0。 |
indextts2 synth| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--text TEXT | 三选一 | 无 | 直接传入待合成文本。 |
--text-file PATH | 三选一 | 无 | 从 UTF-8 文本文件读取待合成文本。 |
--stdin | 三选一 | False | 从标准输入读取待合成文本。 |
--voice PATH | 是 | 无 | 音色参考音频路径。 |
--emotion-audio PATH | 否 | 无 | 情感参考音频路径, 与 --emotion-vector 和 --emotion-text 互斥。 |
--emotion-text TEXT | 否 | 无 | 情感描述文本, 与 --emotion-vector 和 --emotion-audio 互斥。 |
--emotion-vector VECTOR | 否 | 无 | 8 维情感向量, 支持逗号分隔或带方括号的列表格式, 与其他情感来源互斥。 |
--emotion-weight FLOAT | 否 | 1.0 | 情感权重, 映射到 emo_alpha, 可缩放情感向量强度。 |
--output PATH | 是 | 无 | 输出音频路径。 |
--force | 否 | False | 允许覆盖已有输出文件。 |
--model-dir PATH | 否 | 解析后的模型资源目录 | 本次合成使用的 IndexTTS2 模型资源目录。 |
--device DEVICE | 否 | 持久化配置或无 | 运行设备。 |
--fp16 / --no-fp16 | 否 | 持久化配置或 False | 启用或禁用 FP16 推理。 |
--deepspeed / --no-deepspeed | 否 | 持久化配置或 False | 启用或禁用 DeepSpeed。 |
--cuda-kernel / --no-cuda-kernel | 否 | 持久化配置或 False | 启用或禁用 CUDA kernel。 |
--verbose | 否 | False | 显示详细运行输出。 |
indextts2 batch| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--batch-file PATH | 是 | 无 | JSON Lines 批量清单路径。 |
--dry-run | 否 | False | 只校验批量清单和模型资源, 不加载模型, 不生成音频。 |
--output-dir PATH | 否 | 无 | 自动命名输出目录。传入后清单中不能提供逐行 output。 |
--output-prefix TEXT | 否 | 无 | 自动命名输出文件前缀, 需与 --output-dir 一起使用。 |
--concat | 否 | False | 合成后拼接为一个最终 WAV 文件。 |
--output PATH | --concat 模式必填 | 无 | 拼接模式的最终 WAV 输出路径。只可与 --concat 一起使用。 |
--keep-temp | 否 | False | 拼接模式下保留内部临时 WAV 片段目录。 |
--voice PATH | 否 | 无 | 每条任务的默认音色参考音频, 可被逐行 voice 覆盖。 |
--emotion-audio PATH | 否 | 无 | 默认情感参考音频, 与 --emotion-vector 和 --emotion-text 互斥。 |
--emotion-text TEXT | 否 | 无 | 默认情感描述文本, 与 --emotion-vector 和 --emotion-audio 互斥。 |
--emotion-vector VECTOR | 否 | 无 | 默认 8 维情感向量, 支持逗号分隔或带方括号的列表格式, 与其他情感来源互斥。 |
--emotion-weight FLOAT | 否 | 1.0 | 默认情感权重, 可被逐行 emotion_weight 覆盖。 |
--force | 否 | False | 允许覆盖批量运行开始前已经存在的输出文件。 |
--model-dir PATH | 否 | 解析后的模型资源目录 | 本次批量合成使用的 IndexTTS2 模型资源目录。 |
--device DEVICE | 否 | 持久化配置或无 | 运行设备。 |
--fp16 / --no-fp16 | 否 | 持久化配置或 False | 启用或禁用 FP16 推理。 |
--deepspeed / --no-deepspeed | 否 | 持久化配置或 False | 启用或禁用 DeepSpeed。 |
--cuda-kernel / --no-cuda-kernel | 否 | 持久化配置或 False | 启用或禁用 CUDA kernel。 |
--verbose | 否 | False | 显示详细运行输出。 |
indextts2 concat| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--concat-file PATH | 是 | 无 | JSON Lines 拼接清单路径。 |
--output PATH | 是 | 无 | 拼接后的 WAV 输出路径。 |
--force | 否 | False | 允许覆盖已有输出文件。 |
--dry-run | 否 | False | 只校验拼接清单和输入 WAV, 不生成输出音频。 |
| 返回码 | 含义 | 常见场景 |
|---|---|---|
0 | 成功 | 初始化完成, 配置更新, 下载检查通过, 环境检查通过或合成成功。 |
1 | 输入错误 | 文本来源不唯一, 文本为空, 缺少 --output, 输出已存在但未传 --force, 情感参数冲突, 批量清单字段错误, 拼接清单字段错误, WAV 格式不匹配。 |
2 | 本地资源缺失 | 模型资源目录不存在, 必需模型资源缺失, 文本文件不存在, 音色参考音频不存在, 情感参考音频不存在, 批量清单不存在, 拼接清单不存在, 拼接音频不存在。 |
3 | 运行环境不可用 | 必需 Python 包缺失, 下载源 Python 包缺失, 指定设备不可用, IndexTTS2 runtime 导入失败。 |
4 | 推理或拼接失败 | 模型初始化, infer 执行或 WAV 写入替换过程中抛出异常。批量合成会停在第一条失败任务。 |
错误信息写入 stderr, 成功信息写入 stdout。
文本来源冲突:
ERROR: provide exactly one text source: --text, --text-file or --stdin
处理方式: 只保留 --text, --text-file, --stdin 中的一个。
模型资源目录不存在:
ERROR: model directory does not exist: <resolved-model-resource-directory>
Model directory: <resolved-model-resource-directory>
Missing resources: model directory does not exist
Download with HuggingFace:
huggingface-cli download IndexTeam/IndexTTS-2 --local-dir "<resolved-model-resource-directory>"
Download with ModelScope:
modelscope download --model IndexTeam/IndexTTS-2 --local_dir "<resolved-model-resource-directory>"
Persist a different model resource directory:
indextts2 config set model_dir <resolved-model-resource-directory>
Hint: rerun indextts2 download or choose a different model resource directory.
处理方式: 按输出中的目标目录下载模型资源。推荐先使用 CLI 下载:
indextts2 download --model-dir <resolved-model-resource-directory>
如果模型资源已经在其他目录, 写入持久化配置:
indextts2 config set model_dir <existing-model-resource-directory>
模型资源缺失:
ERROR: missing required model files: bpe.model, gpt.pth
Model directory: <resolved-model-resource-directory>
Missing resources: bpe.model, gpt.pth
Download with HuggingFace:
huggingface-cli download IndexTeam/IndexTTS-2 --local-dir "<resolved-model-resource-directory>"
Download with ModelScope:
modelscope download --model IndexTeam/IndexTTS-2 --local_dir "<resolved-model-resource-directory>"
Persist a different model resource directory:
indextts2 config set model_dir <resolved-model-resource-directory>
Hint: rerun indextts2 download or choose a different model resource directory.
处理方式: 重新运行 indextts2 download --model-dir <resolved-model-resource-directory> 补齐资源, 或使用 indextts2 config set model_dir <existing-model-resource-directory> 指向已有完整模型资源目录, 然后重新运行 indextts2 check。
输出文件已存在:
ERROR: output file already exists: outputs/hello.wav
处理方式: 更换 --output 路径, 或确认可覆盖后加 --force。
情感向量数量错误:
ERROR: --emotion-vector must contain exactly 8 values; got 7
处理方式: 按高兴, 愤怒, 悲伤, 害怕, 厌恶, 忧郁, 惊讶, 平静的顺序传入 8 个数字。
批量清单字段错误:
ERROR: batch file line 2 has unknown fields: prompt_audio
处理方式: 使用 voice, emotion_audio, emotion_text, emotion_vector 等 CLI v2 字段名, 不要使用底层 API 或旧样例字段名。
批量输出重复:
ERROR: batch file line 3 has duplicate output path: examples/batch/out/001.wav
处理方式: 为同一批量清单中的每条任务设置不同的 output。--force 不允许批次内部互相覆盖。
批量拼接清单包含逐行输出:
ERROR: batch file line 1 field 'output' is not allowed with --concat
处理方式: 使用 --concat --output final.wav 指定最终输出, 并从批量清单中删除逐行 output。
未开启批量拼接却提供静音字段:
ERROR: batch file line 1 field 'silence_after_ms' is only valid with --concat
处理方式: 删除 silence_after_ms, 或在命令中加入 --concat --output final.wav。
拼接清单中的 WAV 格式不一致:
ERROR: concat file line 2 WAV format does not match baseline line 1
处理方式: 确认所有输入 WAV 的采样率, 声道数和采样宽度一致后再拼接。
拼接输出已存在:
ERROR: output file already exists: examples/batch/out/emotion_joined.wav
处理方式: 更换 --output 路径, 或确认可覆盖后加 --force。
设备不可用:
ERROR: requested device is not available: cuda:0
处理方式: 使用 indextts2 check 查看当前设备可用性, 或改用 --device cpu。如果希望长期使用某个设备, 可写入持久化配置:
indextts2 config set default_device cuda:0
下载源 Python 包缺失:
ERROR: runtime unavailable for huggingface download source: No module named 'huggingface_hub'
Install download support with: pip install huggingface_hub
处理方式: 为当前环境安装提示中的 Python 包, 或改用另一个下载源:
indextts2 download --source modelscope
普通用户首次运行:
indextts2 init
indextts2 download
indextts2 check
indextts2 synth --text "你好, IndexTTS2。" --voice examples/voice_01.wav --output outputs/hello.wav
使用已有模型资源目录:
indextts2 config set model_dir D:/models/IndexTTS-2
indextts2 check
GPU 环境:
indextts2 config set default_device cuda:0
indextts2 config set use_fp16 true
indextts2 check
indextts2 synth --text "GPU 推理测试。" --voice examples/voice_01.wav --output outputs/gpu.wav
一次性覆盖模型资源目录或运行参数:
indextts2 check --model-dir D:/models/IndexTTS-2 --device cuda:0
indextts2 synth --text "GPU 推理测试。" --voice examples/voice_01.wav --output outputs/gpu.wav --device cuda:0 --fp16
调试模型输出:
indextts2 synth --text "调试输出。" --voice examples/voice_01.wav --output outputs/debug.wav --verbose
批量合成:
indextts2 check
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav --dry-run
indextts2 batch --batch-file examples/batch/demo.jsonl --voice examples/voice_01.wav
自动命名批量输出:
indextts2 batch --batch-file examples/batch/auto-output.jsonl --voice examples/voice_01.wav --output-dir examples/batch/out/auto --dry-run
indextts2 batch --batch-file examples/batch/auto-output.jsonl --voice examples/voice_01.wav --output-dir examples/batch/out/auto --output-prefix chapter
批量合成后拼接:
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav --dry-run
indextts2 batch --batch-file examples/batch/batch-concat.jsonl --voice examples/voice_01.wav --concat --output examples/batch/out/story.wav
拼接已有 WAV:
indextts2 concat --concat-file examples/batch/concat-audio.jsonl --output examples/batch/out/emotion_joined.wav --dry-run
indextts2 concat --concat-file examples/batch/concat-audio.jsonl --output examples/batch/out/emotion_joined.wav
开发和调试 CLI v2:
python -m indextts.cli_v2 --help
python -m indextts.cli_v2 check