Install any skill in seconds. Free to start, no credit card required.
Get Started Free →围绕 Qwen3-TTS 提供本地 TTS 工作流。支持:单句语音生成(CustomVoice/VoiceDesign/VoiceClone)、长文稿批量配音生成(文章→配音稿JSON→批量TTS→合并)。适用场景:生成语音、有声书配音、视频旁白、多角色对话朗读、语音克隆。
.claude/skills/itamarzand88-qwen3-tts-skills/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 175% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 285% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 52% | 0% |
<!-- source: qwen3-tts-voice — https://raw.githubusercontent.com/mu-zi-lee/qwen3-tts-skill/main/SKILL.md -->
将文本转换为高质量语音的完整工作流。
直接调用脚本生成语音:
bash# 中文语音(默认 Vivian 女声) uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \ --language Chinese \ --text "你好,欢迎使用语音合成。" \ --out-dir outputs # 英文语音(默认 Ryan 男声) uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \ --language English \ --text "Hello, welcome to text-to-speech." \ --out-dir outputs
将文章转换为完整语音文件:
用户文稿 → [AI分析生成配音稿] → [用户审核] → [批量TTS] → 完整语音.wav详见下方 长文稿批量配音 章节。
根据需求选择合适的模型:
| 模式 | 模型 | 适用场景 | 命令 | |------|------|----------|------| | CustomVoice | Qwen3-TTS-12Hz-1.7B-CustomVoice | 使用内置音色 + 情感控制 | custom-voice | | VoiceDesign | Qwen3-TTS-12Hz-1.7B-VoiceDesign | 用自然语言描述想要的音色 | voice-design | | VoiceClone | Qwen3-TTS-12Hz-1.7B-Base | 克隆参考音频的声音 | voice-clone | | Tokenizer | Qwen3-TTS-Tokenizer-12Hz | 音频编解码 | tokenizer-roundtrip |
| 语言 | 默认 Speaker | 说明 | |------|-------------|------| | Chinese | Vivian | 女声,自然 | | English | Ryan | 男声 | | Japanese | Ono_Anna | 女声 | | Korean | Sohee | 女声 |
使用内置音色,可选情感控制:
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \ --language Chinese \ --text "其实我真的有发现,我是一个特别善于观察别人情绪的人。" \ --speaker Vivian \ --instruct "轻松愉快的语气" \ --out-dir outputs
参数说明:
--language:Chinese / English / Japanese / Korean--speaker:可选,不填则按语言自动选默认--instruct:可选,情感/语气控制(如"开心地说"、"低沉缓慢")--output:可选,指定输出文件名(默认自动生成时间戳文件名)用自然语言描述想要的音色:
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py voice-design \ --language Chinese \ --text "哥哥,你回来啦,人家等了你好久好久了,要抱抱!" \ --instruct "体现撒娇稚嫩的萝莉女声,音调偏高且起伏明显。" \ --out-dir outputs
注意:VoiceDesign 的 --instruct 是必填的,用于描述音色特征。
克隆参考音频的声音:
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py voice-clone \ --language English \ --ref-audio "path/to/reference.wav" \ --ref-text "参考音频的文本内容" \ --text "要合成的新文本" \ --out-dir outputs
参数说明:
--ref-audio:参考音频文件路径或 URL--ref-text:参考音频对应的文本(必填)--x-vector-only-mode:可选,仅使用说话人特征(质量可能降低)⚠️ 注意:VoiceClone 不支持 --instruct 情感控制。
用于音频的编码和解码验证:
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py tokenizer-roundtrip \ --audio "path/to/audio.wav" \ --out-dir outputs
将长文章、剧本、有声书内容转换为完整语音文件。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Step 1 │ │ Step 2 │ │ Step 3 │ │ 输出 │
│ AI分析文稿 │ ──→ │ 用户审核修改 │ ──→ │ 批量生成语音 │ ──→ │ 完整语音.wav │
│ 生成配音稿JSON │ │ 保存.json文件 │ │ FFmpeg合并 │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘向 AI 说:"把下面这篇文章转成语音" + 贴上文章内容
AI 会按 dubbing-skills/SKILL.md 的规则:
【旁白】、【小明】 等)instruct检查 JSON 并调整:
instruct 是否合适保存为 article.dubbing.json 文件。
bashuv run qwen3-tts-skills/scripts/batch_dubbing.py \ --input article.dubbing.json \ --out-dir outputs
参数说明:
| 参数 | 说明 | 默认值 | |------|------|--------| | --input | 配音稿 JSON 文件 | 必填 | | --out-dir | 输出目录 | outputs | | --silence-gap | 普通段落间静音(秒)| 0.3 | | --character-switch-gap | 角色切换时静音(秒)| 0.5 | | --clean-segments | 合并后删除中间片段 | 保留 |
outputs/
├── segments/
│ ├── seg_001_旁白.wav
│ ├── seg_002_小明.wav
│ └── ...
├── article.dubbing.json # 配音稿备份
└── article_final.wav # 最终完整语音| 模式 | 说明 | 适用场景 | |------|------|----------| | custom-voice | 内置音色 + 情感指令 | 大多数场景(默认)| | voice-design | 自然语言描述音色 | 需要特定音色(萝莉、大叔等)| | voice-clone | 克隆参考音频 | 需要真人/特定人声音 |
脚本内已声明依赖,无需手动安装:
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py -h
bashuv venv --python 3.12 .\.venv\Scripts\activate uv pip install -U qwen-tts
bashuv pip install -U flash-attn --no-build-isolation # 内存 < 96GB 时限制并行任务 MAX_JOBS=4 uv pip install -U flash-attn --no-build-isolation
使用条件:
torch.float16 或 torch.bfloat16 加载Windows:
powershellchoco install ffmpeg -y
验证安装:
bashffmpeg -version
bashuv pip install -U modelscope modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base modelscope download --model Qwen/Qwen3-TTS-Tokenizer-12Hz --local_dir ./Qwen3-TTS-Tokenizer-12Hz
bashuv pip install -U "huggingface_hub[cli]" huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local-dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local-dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir ./Qwen3-TTS-12Hz-1.7B-Base huggingface-cli download Qwen/Qwen3-TTS-Tokenizer-12Hz --local-dir ./Qwen3-TTS-Tokenizer-12Hz
bash# 查看帮助 qwen-tts-demo --help # 启动 CustomVoice qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000 # 启动 VoiceDesign qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --ip 0.0.0.0 --port 8000
bash# 生成自签名证书 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" # 启用 HTTPS qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base \ --ip 0.0.0.0 --port 8000 \ --ssl-certfile cert.pem \ --ssl-keyfile key.pem \ --no-ssl-verify
| 文档 | 说明 | |------|------| | dubbing-skills/SKILL.md | 配音稿生成规范(AI 阅读用) | | dubbing-skills/references/dubbing_format.md | 配音稿 JSON 格式详细规范 | | dubbing-skills/references/examples.md | 各种场景的配音稿示例 | | references/python_api.md | Python API 集成指南 |
bashuv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \ --device-map cuda:0 \ --dtype bfloat16 \ --attn flash_attention_2 \ --language Chinese \ --text "测试文本" \ --out-dir outputs
| 参数 | 说明 | |------|------| | --device-map | 指定 GPU(如 cuda:0)或 CPU | | --dtype | 数据类型:auto / bfloat16 / float16 / float32 | | --attn | 注意力实现:auto / flash_attention_2 |
绝对路径需要用双引号包裹:
bashuv run "C:/Users/lee/.config/alma/skills/qwen3-tts-skills/scripts/run_qwen3_tts.py" -h
如果看到 SoX could not be found!,安装 SoX(不影响功能,只是消除警告):
powershellchoco install sox.portable -y
优先使用 ModelScope(中国大陆)或提前下载到本地目录。
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,103 | 5,829 | -42% | 1 | 1 | 0% | 1,854 | 4,245 | +129% | 0 | 0 | — |
case-02 | fail→pass | 7,793 | 4,771 | -39% | 1 | 1 | 0% | 1,447 | 3,981 | +175% | 0 | 0 | — |
case-03 | fail→pass | 11,144 | 2,760 | -75% | 1 | 1 | 0% | 1,788 | 3,667 | +105% | 0 | 0 | — |
case-04 | fail→pass | 12,170 | 3,587 | -71% | 1 | 1 | 0% | 1,728 | 3,833 | +122% | 0 | 0 | — |
case-05 | pass→pass | 13,837 | 6,927 | -50% | 1 | 1 | 0% | 2,052 | 4,464 | +118% | 0 | 0 | — |
case-06 | pass→pass | 9,277 | 28,865 | +211% | 1 | 1 | 0% | 1,643 | 3,737 | +127% | 0 | 0 | — |
case-07 | fail→pass | 5,781 | 2,843 | -51% | 1 | 1 | 0% | 970 | 3,733 | +285% | 0 | 0 | — |
case-08 | pass→pass | 9,689 | 4,635 | -52% | 1 | 1 | 0% | 1,744 | 4,085 | +134% | 0 | 0 | — |
case-09 | pass→pass | 8,488 | 4,688 | -45% | 1 | 1 | 0% | 1,510 | 4,058 | +169% | 0 | 0 | — |
case-10 | fail→fail | 14,255 | 8,973 | -37% | 1 | 1 | 0% | 2,310 | 4,901 | +112% | 0 | 0 | — |
case-11 | pass→pass | 11,199 | 4,379 | -61% | 1 | 1 | 0% | 1,949 | 3,926 | +101% | 0 | 0 | — |
case-12 | fail→pass | 15,916 | 5,409 | -66% | 1 | 1 | 0% | 2,617 | 3,975 | +52% | 0 | 0 | — |
case-13 | fail→pass | 12,778 | 8,400 | -34% | 1 | 1 | 0% | 2,202 | 4,925 | +124% | 0 | 0 | — |
case-14 | pass→pass | 11,616 | 7,127 | -39% | 1 | 1 | 0% | 2,028 | 4,595 | +127% | 0 | 0 | — |
case-15 | fail→pass | 12,643 | 2,190 | -83% | 1 | 1 | 0% | 2,144 | 3,540 | +65% | 0 | 0 | — |
case-16 | fail→pass | 9,872 | 3,083 | -69% | 1 | 1 | 0% | 1,543 | 3,697 | +140% | 0 | 0 | — |
case-17 | fail→pass | 77,609 | 2,240 | -97% | 1 | 1 | 0% | 2,564 | 3,610 | +41% | 0 | 0 | — |
case-18 | fail→pass | 6,927 | 2,069 | -70% | 1 | 1 | 0% | 1,521 | 3,554 | +134% | 0 | 0 | — |
case-19 | fail→pass | 8,283 | 9,350 | +13% | 1 | 1 | 0% | 1,501 | 3,580 | +139% | 0 | 0 | — |
case-20 | fail→pass | 13,987 | 5,931 | -58% | 1 | 1 | 0% | 2,373 | 4,362 | +84% | 0 | 0 | — |
case-21 | fail→fail | 13,803 | 15,291 | +11% | 1 | 1 | 0% | 2,547 | 6,182 | +143% | 0 | 0 | — |
case-22 | fail→fail | 21,036 | 19,320 | -8% | 1 | 1 | 0% | 3,970 | 7,115 | +79% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.