- Inicio
- Plugins
- Visión, voz y multimodal
- creating (plugin)
creating (plugin)
zsenpro/creating/plugin
GPT-SoVITS voice output for DSH: a speak tool and /voice command, a read-aloud speaker button under each reply, and a settings tab to switch voices, tune synthesis, manage the local service and one-click install a voice pack. Windows only; needs a local GPT-SoVITS checkout with trained weights and its Python environment.
Instalar
dsh plugin --profile web add github:zsenpro/creatingEste plugin se encuentra en el subdirectorio plugin del repositorio.
README
Aemeath 语音输出(GPT-SoVITS → DeepSeek Harness)
把你自己训练的 GPT-SoVITS 音色做成一个本地 HTTP 语音服务,DeepSeek(DSH)通过一条命令就能把文字念出来。
这一整套已经打包成 DSH 插件 dsh-yourself-voice(你的语音):
设置页在「设置 → 插件 → 你的语音」,助手回复下方还有一个喇叭按钮可以手动朗读/停止。
插件源码就是本目录的 plugin\,上架材料见 plugin\PUBLISH.md。
当前默认音色:Aemeath.3.0(v4 模型),参考音频 ref/aemeath_ref.wav。
想把这一整套音色给别人用:plugin\dist\aemeath3-1.0.0.tar.gz(203 MB,权重 + 参考音频 + 参考原文)一个包搞定,
插件的「音色包」tab 里点一下就装好并自动切换 —— 主 npm 包因此不用背着 200 MB 的权重。
做法与托管见 plugin\README.md 的「音色包」一节。
0. 三种用法
| 用法 | 入口 | 适合 |
|---|---|---|
| DSH 插件 · 工具与命令(推荐) | 模型工具 voice_speak / voice_settings,输入框命令 /voice | 让模型自己开口;每轮回复自动朗读 |
| DSH 插件 · 网页按钮 | 每条助手回复下方的喇叭图标(点一下朗读、再点停止) | 手动挑一条重听,不影响自动朗读开关 |
| DSH 插件 · 设置页 | 「设置 → 插件 → 你的语音」 | 可视化切音色 / 调参数 / 试听 / 看服务状态,不用手改 json |
| 命令行脚本 | speak.ps1 | 不经过 DSH 手动试音、批处理、别的程序调用 |
插件源码在 plugin\,装法/改法/设置项见 plugin\README.md。
两者共用同一份 settings.json 与同一个推理服务(端口 9880),可以同时用。
1. 目录结构
| 路径 | 作用 |
|---|---|
settings.json | 唯一事实来源:模型、参考音频、语速、播放、自动朗读等 29 项(插件写) |
tts_config.yaml | 服务用的模型配置,由 settings.json 自动生成,不要手改(会被覆盖) |
start_server.ps1 | 启动推理服务,监听 http://127.0.0.1:9880 |
speak.ps1 | 合成 + 播放一条文本(服务没开会自动拉起) |
plugin\ | DSH 插件 dsh-yourself-voice:宿主半边 index.mjs/api.mjs/engine.mjs/models.mjs/settings.mjs/voicepack.mjs、浏览器半边 client.js、自带资产 assets\ |
plugin\dist\ | 音色包产物(scripts\build-voicepack.mjs 生成;203 MB,不进 npm 包也不进 git) |
install\ | 插件的安装 / 卸载脚本与 profile patch 片段 |
ref/aemeath_ref.wav | 参考音频(3.7 秒,来自 Aemeath.3.0 训练集的 32k 切片) |
ref/prompt.txt | 参考音频对应的原文 |
out/ | 输出:last.wav、server.log、两个插件挂载标记 |
tmp/、numba_cache/ | 运行时临时目录(见「坑」一节,不要删) |
2. 怎么用
# 说话
cd C:\Users\森\Documents\deepseek-harness\default-workspace\aemeath-voice
powershell -ExecutionPolicy Bypass -File .\speak.ps1 "你好,我是爱弥斯。"
# 只合成不播放(拿到 wav 文件)
.\speak.ps1 "只出声不播放" -NoPlay -OutFile .\out\demo.wav
# 英文
.\speak.ps1 "Hello, I am Aemeath." -TextLang en -PromptLang en
# 语速
.\speak.ps1 "说慢一点" -Speed 0.85
-ExecutionPolicy Bypass不能省:系统默认禁止运行.ps1脚本。 服务没启动时speak.ps1会自动拉起(实测约 16 秒),不想自动启动就加-NoAutoStart。
单独启动 / 重启服务:
powershell -ExecutionPolicy Bypass -File .\start_server.ps1 # 前台,日志同时写到 out\server.log
powershell -ExecutionPolicy Bypass -File .\start_server.ps1 -Port 9881
3. 换成别的已训练模型
最省事:打开 设置 → 插件 → 你的语音 → 音色与模型,插件会把权重目录里能配成一对的 GPT+SoVITS 权重列成音色卡片,点卡片即切换(卡片上有 ▶ 可直接试听),下面还有高级区可以手填 单侧权重。切完的合成参数会按音色分别记住。
也可以走工具/命令或直接改 settings.json 里的 version / gptWeights / sovitsWeights 三项
(tts_config.yaml 会按它自动重新生成):
voice_settings {action:"set", changes:{"version":"v4","gptWeights":"GPT_weights_v4/Aemeath.3.0-e15.ckpt","sovitsWeights":"SoVITS_weights_v4/Aemeath.3.0_e2_s214_l32.pth"}}
只换权重(version 不变)会自动走服务端热切换,不重启;换世代则自动重启服务。
没用插件时,直接编辑 tts_config.yaml 的 custom: 段(路径都相对 GPT-SoVITS 根目录)再重启服务也行:
custom:
version: v4 # v1 v2 v2Pro v2ProPlus v3 v4
t2s_weights_path: GPT_weights_v4/Aemeath.3.0-e15.ckpt # GPT 权重
vits_weights_path: SoVITS_weights_v4/Aemeath.3.0_e2_s214_l32.pth
bert_base_path: GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large
cnhuhbert_base_path: GPT_SoVITS/pretrained_models/chinese-hubert-base
device: cuda
is_half: true
本机已有的训练成果:
| 模型 | GPT 权重 | SoVITS 权重 | version |
|---|---|---|---|
| Aemeath.3.0(当前) | GPT_weights_v4/Aemeath.3.0-e{5,10,15}.ckpt | SoVITS_weights_v4/Aemeath.3.0_e{1_s107,2_s214}_l32.pth | v4 |
| Aemeath.2.1 | GPT_weights_v2ProPlus/Aemeath.2.1-e{5,10,15}.ckpt | SoVITS_weights_v2ProPlus/Aemeath.2.1_e{4_s108,8_s216}.pth | v2ProPlus |
| Aemeath.2.0 | GPT_weights_v2Pro/Aemeath.2.0-e{5,10,15}.ckpt | SoVITS_weights_v2Pro/Aemeath.2.0_e{4_s108,8_s216}.pth | v2Pro |
| Aemeath_v2Pro_01 | GPT_weights_v2Pro/Aemeath_v2Pro_01-e{5,10,15}.ckpt | SoVITS_weights_v2Pro/Aemeath_v2Pro_01_e{4_s72,8_s144}.pth | v2Pro |
e5/e10/e15 是训练轮数,一般 e15 效果最好但更容易过拟合;换成别的版本时 version 必须同步改,否则加载会报维度不匹配。
不重启服务换模型(服务已跑起来时):
Invoke-RestMethod "http://127.0.0.1:9880/set_gpt_weights?weights_path=GPT_weights_v2ProPlus/Aemeath.2.1-e15.ckpt"
Invoke-RestMethod "http://127.0.0.1:9880/set_sovits_weights?weights_path=SoVITS_weights_v2ProPlus/Aemeath.2.1_e8_s216.pth"
4. 换参考音频(决定音色与语气)
ref_audio_path 的音频是「音色模板」,prompt_text 必须与它逐字对应。换音色:
.\speak.ps1 "测试" -RefAudio "D:\...\logs\Aemeath.3.0\5-wav32k\source.wav_0000000000_0000121600.wav" `
-PromptText "椿姐姐和我一起在冰原上追着隧群跑过."
参考音频建议 3–10 秒、干净无 BGM(logs\<模型名>\5-wav32k\ 下就是训练用的 32k 切片,2-name2text.txt 里有每条的原文)。三版模型的切片都在,可混用。
5. 直接调 HTTP 接口
$body = @{
text = "你好"; text_lang = "zh"
ref_audio_path = "C:\...\aemeath-voice\ref\aemeath_ref.wav"
prompt_text = "陆医生是个有能力的好人,学生们大多都很喜欢他."; prompt_lang = "zh"
text_split_method = "cut5"; media_type = "wav"; streaming_mode = $false
} | ConvertTo-Json -Compress
Invoke-WebRequest "http://127.0.0.1:9880/tts" -Method Post -ContentType "application/json" `
-Body ([Text.Encoding]::UTF8.GetBytes($body)) -OutFile out\http.wav
接口文档:服务启动后打开 http://127.0.0.1:9880/docs。
6. 两个必须知道的坑
import librosa会永久挂死。numba 用tempfile探测缓存目录,如果TMP/TEMP指向不可写的位置,api_v2.py会卡在 import 阶段——没有报错、没有输出、端口永远不监听。start_server.ps1里已经把TMP/TEMP/NUMBA_CACHE_DIR指到本目录的tmp/、numba_cache/,别把它们删掉或改成别处。.ps1必须是 UTF-8 with BOM。Windows PowerShell 5.1 对无 BOM 的.ps1按 GBK 解码,中文注释会串行、把下一行代码吞进注释里,表现为「$PSScriptRoot 是空的」之类的怪错。用文本编辑器改这两个脚本后,请确认保存为 UTF-8 带 BOM。
7. 环境
- GPT-SoVITS:
D:\Aemeath\AI GPT-SoVITS\GPT-SoVITS-v2pro-20250604(内置runtime\python.exe,Python 3.9 + torch 2.0.0+cu118) - GPU:RTX 4060 Laptop(8 GB)
- 实测速度:13.6 秒语音约 16 秒合成(首句含预热约 12–20 秒)
Plugins relacionados
dsh-web-ui (dsh-tool-describe-image)
zhu1090093659/dsh-web-ui
modlens
liustack/modlens
ipollowork
devin-axis/ipollowork
dsh-vision-router
ysr666/dsh-vision-router