install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/aurora2035/xeontts" ~/.claude/skills/openclaw-skills-xeontts && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/aurora2035/xeontts" ~/.openclaw/skills/openclaw-skills-xeontts && rm -rf "$T"
manifest:
skills/aurora2035/xeontts/SKILL.mdsource content
Xeon TTS
基于 OpenVINO Qwen3-TTS Base/Custom 模型的本地语音合成技能,面向 OpenClaw 的 QQBOT 工作流使用。
目标
- 安装本地双服务:5002 Flask TTS,9002 Node TTS Workflow
- 自动配置目标机器自己的 OpenClaw 配置,但只写入
channels.qqbot.xeonTts - 与 xeonasr 共存,不覆盖
或tools.media.audiochannels.qqbot.stt - 支持两个工作流:音色克隆、指定语气 TTS
什么时候应该调用 xeontts
只有在以下场景才使用 xeontts:
- 用户明确要“克隆音色”“克隆声音”“复制我的声音”
- 用户要求“用某种语气朗读/播报/生成语音”
- 用户要把音频生成到本地文件,而不是做转写
以下场景禁止走 xeontts:
- 识别语音
- 语音转文字
- 听写
- STT / ASR
这些请求必须交给 xeonasr,以避免任务冲突。
OpenClaw / QQBOT 使用规则
规则 1:音色克隆必须分两步走
当用户说“我要克隆音色”时:
- 立即把当前会话切到 clone 流程
- 回复用户上传 3 到 5 秒参考音频
- 在收到参考音频前,不要直接开始合成
- 如果机器上已安装 xeonasr,QQBOT 发来的语音会先命中 ASR;此时应由 ASR 把音频转交给 xeontts,而不是按普通转写处理
- 收到音频后必须先校验时长
- 如果时长小于 3 秒或大于 5 秒,直接拒绝并提示重新上传
- 校验通过后,再让用户发送要朗读的文本
- 使用 Base 模型生成音频并落盘
规则 2:指定语气生成默认走 Custom 模型
当用户说“用开心的语气朗读……”“生成语音……”时:
- 解析用户是否指定了语气
- 如果没有指定,默认使用
普通 - 使用 Custom 模型生成音频
- 把结果保存到本地
outputs/ - 回复用户文件路径
规则 3:必须做时长保护
- 参考音频:3 到 5 秒
- Base 克隆输出:最多约 20 秒
- Custom 输出:最多约 30 秒
如果用户显式要求更长时长,或者文本长度估算会明显超过上限,必须直接提示用户拆分内容,而不是盲目提交推理。
规则 4:必须明确告知文件保留期
- 参考音频和生成结果默认只保留 7 天
- 超过保留期后,系统会自动清理
和references/
中的旧文件outputs/ - 在提示用户上传参考音频、以及告知生成完成时,都要明确告诉用户这一点
安装流程
当 OpenClaw、QQBOT 或其他代理被要求安装这个 skill 时,按下面流程执行:
-
安装 skill
clawhub install xeontts cd "$HOME/.openclaw/workspace/skills/xeontts" -
执行安装脚本
bash install.sh -
安装脚本会完成这些事情
- 创建 Python 3.10 环境
- 从 PyPI 安装
xdp-tts-service - 生成
与config.jsontts_config.json - 尝试下载 Base / Custom OV 模型
- 仅在显式提供旧兼容参数时,才额外下载 Base checkpoint
- 配置 OpenClaw 的
channels.qqbot.xeonTts - 启动 5002 与 9002
- 注册用户级 systemd 服务
- 运行
self_check.sh
当前默认模型仓库:
aurora2035/Qwen3-TTS-12Hz-0.6B-Base-OpenVINO-INT8aurora2035/Qwen3-TTS-12Hz-0.6B-CustomVoice-OpenVINO-INT8
运行时端口
| 服务 | 端口 | 作用 |
|---|---|---|
| Flask TTS | 5002 | 真正执行 TTS 推理 |
| Node Workflow | 9002 | 解析 QQBOT 任务、维护会话状态、校验音频/文本时长 |
OpenClaw 配置约定
xeontts 只会写入如下配置块:
{ "channels": { "qqbot": { "xeonTts": { "enabled": true, "baseUrl": "http://127.0.0.1:9002", "cloneModel": "qwen3_tts_0.6b_base_openvino", "customModel": "qwen3_tts_0.6b_custom_openvino" } } } }
这意味着:
- 不会覆盖现有
channels.qqbot.stt - 不会动
tools.media.audio - 不会和 xeonasr 抢同一条 STT 链路
常用命令
cd "$HOME/.openclaw/workspace/skills/xeontts" bash start_all.sh bash stop_tts.sh bash self_check.sh curl http://127.0.0.1:5002/api/health curl http://127.0.0.1:9002/health
关键接口
POST /api/workflow/message- 作用:根据用户消息判断是 clone 还是 custom TTS,或者提示补充参考音频
POST /api/workflow/reference-audio- 作用:上传参考音频,校验 3 到 5 秒后入库
POST /api/tts/custom-speak- 作用:直接调用 Custom 模型生成语音
POST /api/tts/clone-speak- 作用:直接调用 Base 模型做音色克隆
故障排查
- 如果
不通,先检查5002tts.log - 如果
不通,先检查9002skill.log - 如果参考音频总是被拒绝,先确认机器上是否有可用的
;当前版本对 WAV 参考音频也支持无ffprobe
回退校验ffprobe - 如果用户说的是转写意图,不要误用 xeontts
- 如果 Base 模型报错,优先让用户更换更干净的 3 到 5 秒参考音频
- 当前默认发布形态只要求
,不再默认要求原始 Base checkpointQwen3-TTS-12Hz-0.6B-Base-OpenVINO-INT8 - 只有旧导出模型缺少 processor 或 speech tokenizer 权重时,才需要补
BASE_CHECKPOINT_PATH