@memef1f1y/dsh-plugin-tts 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +51 -51
  2. package/.github/ISSUE_TEMPLATE/config.yml +2 -2
  3. package/.github/ISSUE_TEMPLATE/feature_request.yml +28 -28
  4. package/.github/pull_request_template.md +7 -7
  5. package/.github/workflows/contrib-triage.yml +66 -66
  6. package/.github/workflows/linked-issue.yml +21 -21
  7. package/.github/workflows/publish.yml +63 -0
  8. package/.github/workflows/stale.yml +30 -30
  9. package/.github/workflows/test.yml +33 -33
  10. package/.github/workflows/welcome.yml +22 -22
  11. package/ANALYSIS.md +205 -205
  12. package/PR-REVIEW.md +74 -74
  13. package/README.md +335 -335
  14. package/TODO.md +34 -34
  15. package/docs/HOST-CONTRACT.md +36 -36
  16. package/docs/RVC-GUIDE.md +390 -390
  17. package/docs/USER-GUIDE.md +389 -389
  18. package/docs/acceptance-checklist.md +147 -147
  19. package/docs/adaptive-chunked-playback.md +194 -194
  20. package/docs/macos-test-prompt.md +230 -230
  21. package/docs/windows-gpu-verify-prompt.md +151 -151
  22. package/lib/client.js +7164 -7164
  23. package/lib/index.mjs +3374 -3374
  24. package/package.json +51 -51
  25. package/rvc-server.py +564 -564
  26. package/tests/README.md +45 -45
  27. package/tests/client-load.mjs +406 -406
  28. package/tests/e2e-compact-index.mjs +86 -86
  29. package/tests/e2e-index-ab.mjs +138 -138
  30. package/tests/e2e-real-rvc.mjs +122 -122
  31. package/tests/i18n-keys.mjs +82 -82
  32. package/tests/package-runtime-patch.mjs +88 -88
  33. package/tests/rvc-server-live.mjs +230 -230
  34. package/tests/smoke.mjs +1284 -1284
  35. package/tools/gen-ui-preview.mjs +174 -174
  36. package/tools/mac-verify.sh +158 -158
  37. package/tools/package-runtime.py +214 -214
@@ -1,389 +1,389 @@
1
- # dsh-plugin-tts 使用手册(执行手册)
2
-
3
- > 这本手册写给"不想看技术文档"的人。每一步都写明:**做什么 → 为什么 → 怎么做 → 怎么知道成功了**。
4
- > 你可以只读自己需要的部分:
5
- > - **只想让 AI 回复能朗读** → 看第 3 节(约 5 分钟)
6
- > - **想用自己训练的音色朗读** → 看第 4 节(约 30 分钟,含 4.2 的服务启动)
7
- > - **想用一段录音克隆声音**(本机参考音频 / 提示音频)→ 看第 5 节(Index-TTS2)或第 6 节(CosyVoice)(约 15 分钟)
8
- > - **想用谷歌付费音色** → 看第 7 节(约 10 分钟,需自备 API Key)
9
- > - **想下载别人分享的音色** → 看第 8 节(约 10 分钟)
10
- > - 出问题 → 看第 10 节(按症状查)和第 11 节(术语字典)
11
-
12
- ---
13
-
14
- ## 0. 这个插件到底做什么?
15
-
16
- 一句话:**让你的 AI 回复能被读出来,而且能把朗读的声音换成你喜欢的音色。**
17
-
18
- - 每条 AI 回复下面多一个 🔈 喇叭按钮:点一下朗读,再点一下停止;
19
- - 输入框左边有一个喇叭开关:打开后,每条新回复**自动朗读**;
20
- - 朗读的声音可以是微软的免费音色(Edge TTS),也可以是**你自己训练的 RVC 音色**、
21
- **一段录音还原的本地音色**(Index-TTS2 参考音频 / CosyVoice 提示音频零样本克隆),
22
- **谷歌付费音色**,或**从网上下载的音色包**。
23
-
24
- 全程在你自己的电脑上运行(除了微软 / 谷歌在线朗读本身),你的声音模型与参考音频不会上传到任何地方。
25
-
26
- ---
27
-
28
- ## 1. 安装(只有第一次需要)
29
-
30
- **前提**:你已经在用 DeepSeek Harness 的网页版(`dsh web`)。
31
-
32
- 1. 打开一个终端(PowerShell 或命令提示符),执行:
33
-
34
- ```sh
35
- dsh plugin --profile web add "github:1624318455/dsh-plugin-tts#main"
36
- ```
37
-
38
- 2. **完全关闭再重新启动 `dsh web`**(不是刷新页面)。
39
- 3. 验证成功:打开网页 → 侧边栏 **设置 → 插件**,出现「**语音**」标签页。
40
-
41
- > 想开发/本地安装:`dsh plugin --profile web add "file:D:/Work/ForAI/dsh-plugin-TTS/plugin"`
42
- > (Windows 下是复制安装,改代码后要把 `lib/` 再复制进 profile 副本并重启,详见 README「开发」)。
43
-
44
- ---
45
-
46
- ## 2. 先认识界面上的三个地方
47
-
48
- | 位置 | 长什么样 | 干什么 |
49
- |---|---|---|
50
- | 每条 AI 回复左下角 | 🔈 喇叭按钮 | 朗读这一条 / 再点停止 |
51
- | 输入框左下角(命令按钮旁边) | 🔈 喇叭开关 | 开启后新回复自动朗读(有圆环高亮 = 已开) |
52
- | 侧边栏 设置 → 插件 → 语音 | 设置面板 | 换声音、调语速、试听、配 RVC、下载音色包 |
53
-
54
- ---
55
-
56
- ## 3. 第一步:让回复能朗读(Edge TTS,开箱即用)
57
-
58
- 1. 打开任意对话,问一句话,等 AI 回复完成。
59
- 2. 在回复的左下角找到 🔈 按钮,**点一下**。
60
- - 成功:开始朗读,按钮变成跳动的音柱;再点一下停止。
61
- 3. 试试自动朗读:输入框左边点 🔈 开关(出现高亮 = 已开启)。
62
- 之后每条新回复完成时会自动朗读。
63
- 4. 想换声音 / 调快慢:**设置 → 插件 → 语音** →
64
- - 「朗读音色」:下拉选一个喜欢的声音(中文/英文/日文…都有);
65
- - 「声音调节」:语速 / 音调 / 音量,0 表示默认;
66
- - 最下面「试听测试」:输入一句话点 ▶,马上听效果。
67
-
68
- > 到这里,基本功能已经会用了。如果只想朗读,可以不用看后面。
69
-
70
- ---
71
-
72
- ## 4. 第二步:用你自己的音色(RVC)
73
-
74
- > RVC 是什么:一个"声音转换"工具。你的 AI 先让 Edge TTS 朗读(这是"原声"),
75
- > 然后 RVC 把这段朗读**换声**成你训练的模型音色。全程在你自己的电脑上完成。
76
-
77
- ### 4.1 你需要先有的东西
78
-
79
- | 需要 | 是什么 | 必须吗 |
80
- |---|---|---|
81
- | RVC 模型文件(`.pth`) | 你的音色本体(通常几 MB~几十 MB) | ✅ 必须 |
82
- | 索引文件(`.index`) | 让音色更像原声的辅助文件(几百 MB,可压缩) | ❌ 可选 |
83
- | RVC WebUI 安装 **或便携运行时** | 转换服务要跑在它里面;没有 RVC WebUI 也能用便携运行时 | ✅ 二选一 |
84
-
85
- ### 4.2 启动"转换服务"(一次性;每次想用时都要先启动)
86
-
87
- **没有装 RVC WebUI?** 可以下载别人做好的**便携运行时**(一个免安装的文件夹,
88
- 含转换所需的一切,Windows 双击 `启动服务.bat`,macOS/Linux 运行 `start-rvc-server.sh`;
89
- 详见手册末尾「便携运行时」)。
90
-
91
- 按你的系统操作:
92
-
93
- #### Windows(已装 RVC WebUI)
94
-
95
- 1. 找到你的 RVC WebUI 安装目录(里面能看到 `runtime` 文件夹和 `assets` 文件夹)。
96
- 2. 打开 **PowerShell 或命令提示符**,启动服务(**不需要指定模型/索引**——模型在设置面板里点「浏览」选择,
97
- 首次朗读自动加载;`--model/--index` 只是可选的预载参数):
98
-
99
- - **推荐**:把 `rvc-server.py` 复制到 RVC 根目录(与 `runtime/` 同级),然后:
100
-
101
- ```powershell
102
- <你的RVC目录>\runtime\python.exe <你的RVC目录>\rvc-server.py --port 4892
103
- ```
104
-
105
- - 或者 rvc-server.py 放在别处时,用 `--rvc-dir` 指定 RVC 根目录:
106
-
107
- ```powershell
108
- <你的RVC目录>\runtime\python.exe <rvc-server.py的路径> --rvc-dir "<你的RVC目录>" --port 4892
109
- ```
110
-
111
- #### macOS / Linux
112
-
113
- - **最省事:便携运行时**。解压后运行:
114
-
115
- ```bash
116
- <你的便携包目录>/start-rvc-server.sh
117
- ```
118
-
119
- - **已有自己搭好的 RVC 环境**:
120
-
121
- ```bash
122
- <你的工作目录>/venv/bin/python <你的工作目录>/rvc-server.py --port 4892
123
- ```
124
-
125
- - **已有 RVC WebUI 目录**(含 `runtime/` 和 `infer/`):
126
-
127
- ```bash
128
- <你的RVC目录>/runtime/bin/python <你的RVC目录>/rvc-server.py --port 4892
129
- ```
130
-
131
- #### 通用
132
-
133
- - `<你的RVC目录>` = RVC WebUI 根目录(含 `runtime`/`assets`/`logs`);`<rvc-server.py的路径>` = rvc-server.py
134
- 文件所在位置(插件源码目录,或从 GitHub 仓库 `1624318455/dsh-plugin-tts` 下载,**不在** node_modules 里)。
135
- - 想要"启动即预载某个音色"再额外加:
136
- `--model "<RVC目录>/assets/weights/xxx.pth" --index "<RVC目录>/logs/xxx.index"`。
137
-
138
- 3. **成功的样子**:终端/命令行窗口里出现一行
139
- `dsh-plugin-tts RVC server: http://127.0.0.1:4892 ...`,
140
- 然后**这个窗口别关**(关了服务就停了)。
141
- 4. 想换模型时:关掉窗口,换 `--model` 再启动一次。
142
-
143
- ### 4.3 在插件里填配置
144
-
145
- 打开 **设置 → 插件 → 语音**:
146
-
147
- 1. 「TTS提供者」选 **自定义音色(RVC)**;
148
- 2. 「服务地址」:**保持默认** `http://127.0.0.1:4892`(就是刚才那个服务的地址);
149
- 3. 「模型路径 (.pth)」:填模型文件的**完整路径**,或点「浏览」从电脑上选;
150
- 4. 「索引路径 (.index)」:**可留空**(免索引,效果略降但能用);有就填上。
151
-
152
- ### 4.4 测试
153
-
154
- 1. 回到最下面「试听测试」,输入一句话,点 ▶。
155
- 2. **成功**:几秒后(首次可能十几秒,是在加载模型+自动测速)听到**你的音色**在朗读。
156
- 3. **失败**:出现红字提示 → 对照第 10 节的排查表。
157
-
158
- ### 4.5 长文本自动分段
159
-
160
- 选 RVC 后读很长的回复,插件会自动**分段边合成边播放**:先转换前几段立刻开播,
161
- 其余段在播放的同时后台转换,段与段之间**没有停顿**(右上角按钮会显示「第 x/y 段」)。
162
- 首次长文本会做一次约 5~7 秒的自动测速(决定分段大小),之后 7 天内不再重复。
163
-
164
- ---
165
-
166
- ## 5. 用一段录音还原声音(Index-TTS2,本机)
167
-
168
- **给谁用**:有一段几秒~几十秒的清晰人声(wav/mp3),想让朗读直接用这个声音,
169
- 不想训练模型的人。
170
-
171
- 1. 双击本地包里的「**启动api服务.bat**」,黑窗口**别关**(默认端口 `7880`)。
172
- 2. 设置 → 插件 → 语音 → TTS提供者切到「**本地音色(Index-TTS2)**」→
173
- 点「**刷新音色**」,下拉里选你的参考音频(没有就用「上传参考音频」传一段)。
174
- 3. 回到底部「试听测试」输一句话点 ▶,听到参考音频的音色即成功。
175
- 4. 长文本同样自动分段(一格约 15 秒音频的块),其余与 RVC 一致。
176
-
177
- > 情感、清洗文本等细项见 [《Index-TTS2 指南》](INDEX-TTS2-GUIDE.md);连不上服务
178
- > 先看那份指南的疑难排查。
179
-
180
- ---
181
-
182
- ## 6. 用提示音频零样本克隆(CosyVoice,本机)
183
-
184
- **给谁用**:有一段 5~20 秒的人声,想零样本克隆(连参考音频都不用"注册",即选即用)的人。
185
-
186
- 1. 双击本地包里的「**启动cosy服务.bat**」,黑窗口**别关**(默认端口 `7890`)。
187
- 2. 设置 → 插件 → 语音 → TTS提供者切到「**本地克隆(CosyVoice)**」→
188
- 点「**刷新音色**」选提示音频(没有就上传一段)。
189
- 3. **最关键一步**:「提示音频文字稿」必须把提示音频里说的内容**按顺序全文填写**
190
- (中英日混的提示音三段都要写;缺一段,模型会把缺的那段复读一遍再读新文字)。
191
- 4. 回到底部试听,听到克隆音色即成功;语速 0.5~2.0,种子填 0 为每次随机。
192
-
193
- > 细节见 [《CosyVoice 指南》](COSYVOICE-GUIDE.md),尤其是「提示音频与文字稿」一节。
194
-
195
- ---
196
-
197
- ## 7. 用谷歌付费音色(Cloud TTS)
198
-
199
- **给谁用**:想要中文标准/波形音色、愿意自备 API Key 并按量付费的人
200
- (中文标准音色每月前 400 万字符免费,Wavenet/Neural2 每月前 100 万字符免费)。
201
-
202
- 1. 在 Google Cloud Console 建项目 → 启用 Text-to-Speech API → 创建 API Key。
203
- 2. 设置 → 插件 → 语音 → TTS提供者切到「**Cloud TTS**」→ 粘贴 Key 点「**保存配置**」
204
- (输入框会清空;Key 只存本机 Host 文件,可点「测试连接」验证)。
205
- 3. 选音色试听即成功;用量在「本月用量(本地计数)」里按档查看,
206
- 每月 1 号清零(官方账单以 Google Cloud Billing 为准)。
207
-
208
- > Key 与计费细节见 [《Cloud 指南》](CLOUD-GUIDE.md)。
209
-
210
- ---
211
-
212
- ## 8. 第三步:下载别人分享的音色(音色包)
213
-
214
- > 音色包 = 模型 + 可选的紧凑索引 + 说明,打成一个"仓库",一个网址就能分享。
215
-
216
- 1. 从音色作者那里拿到一个**仓库地址**(形如 `https://example.com/tts-packs` 的网址)。
217
- 2. 打开 **设置 → 插件 → 语音 → 音色包**:
218
- - 「仓库地址」粘贴网址 → 点「**获取列表**」;
219
- - 出现一张张音色卡片(名称 / 描述 / 大小 / 许可 / 作者)。
220
- 3. 点「**下载并启用**」:插件自动下载(并自动核对文件是否完整、有没有被改坏),
221
- 完成后**自动填好模型和索引路径**,直接去试听即可。
222
- 4. 已安装的包会显示版本号;重复下载会自动跳过。
223
- 5. ⚠️ 注意:只看「许可」允许分发的音色。演示音色 azusa-test 受版权限制,
224
- 不会出现在公开仓库里;你自己训练的模型也可以做成音色包分享。
225
-
226
- > 本地测试仓库:`node tests/mock-registry.mjs <目录> [端口]` 可以把一个文件夹当成仓库起起来。
227
-
228
- ---
229
-
230
- ## 9. 日常使用小知识
231
-
232
- - **停止朗读**:再点一次喇叭按钮;关闭自动朗读开关会停止自动朗读(不影响手动)。
233
- - **长回复**:自动分段、边读边合成,进度显示「第 x/y 段 · 边播边合成」。
234
- - **换会话 / 关页面**:自动朗读会停止。
235
- - **设置不保存**:声音/开关等设置存在内存里,刷新页面会恢复默认(音色包安装的文件会保留)。
236
-
237
- ---
238
-
239
- ## 10. 出问题了?按症状查
240
-
241
- | 症状 | 最常见原因 | 怎么办 |
242
- |---|---|---|
243
- | 点朗读没声音 | 浏览器自动播放限制 | 先在页面任意处点一下再试;检查系统音量 |
244
- | 点「浏览」提示"浏览文件需要先启动本地 RVC 服务" | 4.2 那个服务没启动 / 服务地址不对 | 按 4.2 启动并保留窗口;确认「服务地址」是 `http://127.0.0.1:4892` |
245
- | 提示"无法连接本地 RVC 推理服务" | 4.2 那个服务窗口没开 / 被关了 | 重新启动服务窗口(4.2),别关它 |
246
- | 提示"未配置 RVC 模型路径" | 4.3 没填模型 | 填 .pth 路径(或点浏览) |
247
- | 首次朗读等十几秒 | 正常:加载模型 + 自动测速 | 等它;之后会快 |
248
- | 音色不够像 | 没填索引,或索引权重太低 | 填 .index;「索引权重」调向 100% |
249
- | 报 403 / 合成失败(Edge 模式) | 微软端点临时限制 | 过一会儿重试;看 README 疑难排查 |
250
- | 试听按钮一直转 | 网络或服务没起来 | 看红字提示;RVC 确认 4.2 窗口在运行,Index/Cosy 确认各自的启动窗口在运行 |
251
- | 提示"无法连接本地 Index-TTS2 / CosyVoice 服务" | 对应的 `.bat` 窗口没开 / 被关了 | 按第 5 节(Index)/ 第 6 节(Cosy)启动并保留窗口;确认「服务地址」端口(7880/7890) |
252
- | Cloud 提示 Key 无效 / 未启用接口 | Key 贴错,或 Text-to-Speech API 没启用 | 重贴完整 Key;去 Cloud Console 启用接口;见第 7 节 |
253
-
254
- ### 10.1 反馈朗读问题时请附带这两样
255
-
256
- 1. 在出问题的页面按 F12 打开控制台,把 `[tts]` 开头的行复制发过来;
257
- 2. 在控制台运行 `copy(JSON.stringify(__dshTtsDebug.dump()))`,把剪贴板内容一并发过来。
258
-
259
- 这两样只含键名和数量、不含消息正文,但能直接看出插件读到的数据形状,是定位最快的方式。顺手确认第一行是 `[tts] client build … loaded`(没有它说明页面跑的还是旧包,先硬刷新或重启 `dsh web`)。
260
-
261
- ---
262
-
263
- ## 11. 术语小字典(看见不懂的词查这里)
264
-
265
- | 词 | 是什么意思 |
266
- |---|---|
267
- | Edge TTS | 微软的免费在线朗读服务(本插件默认的声音来源) |
268
- | RVC | 一个"声音转换"工具:把朗读声换成目标音色 |
269
- | 模型(.pth) | 你的音色本体文件 |
270
- | 索引(.index) | 让音色更像原声的可选文件;很大,但可以压缩 |
271
- | 紧凑索引 | 把几百 MB 的索引缩到几 MB(设置里「压缩索引」按钮) |
272
- | 免索引 | 不填索引直接用(效果略降,但省事) |
273
- | 音色包 | 模型+索引+说明打包,一个网址即可分享(见第 8 节) |
274
- | 仓库地址 | 音色包清单(manifest.json)所在的网址 |
275
- | sha256 | 文件的"指纹";下载后自动核对,防止文件损坏或被改 |
276
- | 原声 | 转换前的朗读(Edge TTS 按消息文本自动合成) |
277
- | 底噪 | 上面"原声"的技术叫法;界面里已改成"原声" |
278
- | 参考音频(Index-TTS2) | 决定朗读是谁的声音的那段音频,存在本机包的 api/ckyp 目录,可上传新增(见第 5 节) |
279
- | 提示音频(CosyVoice) | 同上,但存在 prompts 目录;必须配"提示音频文字稿"且按顺序全文填写(见第 6 节) |
280
- | SSML 计费口径 | Cloud 按实际发送的 SSML 字符数(含标签)计费,本地按此计数(见第 7 节) |
281
- | 预热(prewarm) | 长文本开播前先合成好的前几段;Edge/Cloud 只等第 1 段就开播,本地链路等 2 段防卡顿 |
282
-
283
- ---
284
-
285
- ## 12. 进阶:给音色作者 —— 怎么做一个音色包
286
-
287
- 1. **准备文件**:模型 `model.pth`;可选一个紧凑索引(用设置里「压缩索引」生成,
288
- 10k ≈ 31MB)。
289
- 2. **建一个目录**(例如 `my-voice/`),放入 `model.pth`、索引文件,
290
- 再建一个 `manifest.json`(清单/菜单),内容如下(把尖括号替换成你自己的值):
291
-
292
- ```json
293
- {
294
- "schema": 2,
295
- "packs": [ {
296
- "id": "my-voice",
297
- "name": "我的音色",
298
- "description": "一句话介绍这个音色",
299
- "version": "1.0.0",
300
- "author": "你的名字",
301
- "license": "MIT",
302
- "baseVoice": "zh-CN-YunyangNeural",
303
- "f0Method": "rmvpe",
304
- "indexRate": 0.75,
305
- "model": { "url": "my-voice/model.pth", "size": 55270272, "sha256": "..." },
306
- "indexes": [ { "id": "c10k", "name": "紧凑 10k(推荐)",
307
- "url": "my-voice/index.index", "size": 6144045, "sha256": "..." } ]
308
- } ]
309
- }
310
- ```
311
-
312
- - `url` 用**相对路径**(相对 manifest.json 所在目录)即可,放哪都通用;
313
- - `indexes` 是索引变体数组(可以放多个,用户在界面里选);只想要一个也可以;
314
- - `size`:文件字节数(右键文件属性可见);
315
- - `sha256`:在 PowerShell 里执行 `Get-FileHash 文件路径 -Algorithm SHA256` 得到;
316
- - 免索引的音色包:不写 `indexes` 即可。
317
- 3. 把整个目录放到**任意静态托管**(GitHub Pages / 对象存储 / 网盘直链等),
318
- 保证上面 url 能直接下载。
319
- 4. 把仓库地址(manifest.json 所在目录的网址)发给用户,他们按第 8 节操作。
320
- 5. ⚠️ 版权:只发布你有权分发的音色(自己训练的、或已获授权的)。
321
-
322
- ---
323
-
324
- ## 13. 便携运行时(免装 RVC WebUI 也能用)
325
-
326
- **给谁用**:只有音色模型、但不想装整套 RVC WebUI 的人(比如收到别人分享的音色包)。
327
-
328
- **是什么**:一个免安装的文件夹,里面装好了转换服务需要的一切
329
- (Python + torch + 推理核心 + hubert/rmvpe 模型 + ffmpeg + `rvc-server.py`)。
330
-
331
- **下载**:点作者 B站介绍视频,**简介里含便携运行时网盘链接**:
332
-
333
- - **B站视频**:https://www.bilibili.com/video/BV1ukbQ6qECo/
334
-
335
- 便携运行时约 **4.35GB**(torch 2.7.0+cu128,支持 RTX 50 系);网盘链接如果失效,
336
- 可在视频评论区/私信联系作者,或按下方「怎么制作」用自己机器现打一个。
337
-
338
- **怎么用**:
339
- 1. 解压到任意位置(Windows 例如 `D:\rvc-portable`;macOS/Linux 例如 `~/rvc-portable`);
340
- 2. 启动服务:
341
- - Windows:双击里面的 **`启动服务.bat`**(会弹出一个小窗口);
342
- - macOS/Linux:在终端运行 **`<你的便携包目录>/start-rvc-server.sh`**;
343
- - 都会显示 `dsh-plugin-tts RVC server: http://127.0.0.1:4892`;
344
- 3. 这个窗口/终端**别关**,回到插件设置按第 4.3 节填模型/索引即可。
345
- 4. 想停止:关掉那个窗口/按 `Ctrl+C`。
346
-
347
- **怎么制作(给打包者)**:在已装 RVC WebUI 的机器上执行:
348
-
349
- ```powershell
350
- E:\...\RVC20240604Nvidia\runtime\python.exe `
351
- tools\package-runtime.py `
352
- --rvc-dir "E:\...\RVC20240604Nvidia" `
353
- --out "D:\rvc-portable" --skip-torch
354
- ```
355
-
356
- - 脚本复制已验证的 Python 环境 + 推理核心 + hubert/rmvpe + ffmpeg + rvc-server.py,
357
- **不下载任何东西**,成品立即可用(已在本机实测:RTX 5070 上模型加载与转换正常);
358
- - **RTX 50 系列(Blackwell)可选的提速升级**:官方 pytorch CDN 对部分网络很慢
359
- (实测 31KB/s,3.3GB 要 29 小时),用国内镜像在**可见的终端窗口**里跑(能看到进度条):
360
-
361
- ```powershell
362
- D:\rvc-portable\runtime\python.exe -m pip install --upgrade `
363
- --extra-index-url https://mirrors.aliyun.com/pytorch-wheels/cu128 `
364
- torch==2.7.0+cu128 torchaudio==2.7.0+cu128
365
- ```
366
-
367
- (或给打包脚本加 `--index-url https://mirrors.aliyun.com/pytorch-wheels`;
368
- 不升级也能用,只是老 torch 在 50 系显卡上有 sm_120 兼容警告、性能略降)
369
- - 成品文件夹约 7-9GB,压缩后 3-4GB(超出 GitHub 附件 2GB 上限,
370
- 用网盘/对象存储分发,或只把脚本分享出去让各自本机生成);
371
- - 便携目录内用 `runtime\python.exe rvc-server.py --port 4892` 启动同样可行;
372
- - **跨平台**:脚本支持 `--platform auto|windows|linux|darwin`——Windows 生成
373
- `启动服务.bat`,Linux/macOS 生成 `start-rvc-server.sh`(macOS 无 CUDA,自动跳过
374
- torch 升级)。**macOS(Apple Silicon)已实测通过**,详见《RVC 指南》的 macOS 注意事项;
375
- Linux 仍建议先在目标平台验证。
376
-
377
- ---
378
-
379
- ## 附:开发/测试命令
380
-
381
- ```sh
382
- node tests/smoke.mjs # 冒烟测试(126 项)
383
- node tests/mock-registry.mjs <目录> [端口] # 本地音色包仓库
384
- node tests/e2e-real-rvc.mjs # 真实 RVC 端到端(需 4892 服务)
385
- node tests/e2e-compact-index.mjs # 紧凑索引端到端(需 4892 服务)
386
- ```
387
-
388
- 详细架构与设计见 [`README.md`](../README.md)(或[中文版](../README.zh.md))、
389
- [`RVC 指南`](RVC-GUIDE.md) 与 [`adaptive-chunked-playback.md`](adaptive-chunked-playback.md)。
1
+ # dsh-plugin-tts 使用手册(执行手册)
2
+
3
+ > 这本手册写给"不想看技术文档"的人。每一步都写明:**做什么 → 为什么 → 怎么做 → 怎么知道成功了**。
4
+ > 你可以只读自己需要的部分:
5
+ > - **只想让 AI 回复能朗读** → 看第 3 节(约 5 分钟)
6
+ > - **想用自己训练的音色朗读** → 看第 4 节(约 30 分钟,含 4.2 的服务启动)
7
+ > - **想用一段录音克隆声音**(本机参考音频 / 提示音频)→ 看第 5 节(Index-TTS2)或第 6 节(CosyVoice)(约 15 分钟)
8
+ > - **想用谷歌付费音色** → 看第 7 节(约 10 分钟,需自备 API Key)
9
+ > - **想下载别人分享的音色** → 看第 8 节(约 10 分钟)
10
+ > - 出问题 → 看第 10 节(按症状查)和第 11 节(术语字典)
11
+
12
+ ---
13
+
14
+ ## 0. 这个插件到底做什么?
15
+
16
+ 一句话:**让你的 AI 回复能被读出来,而且能把朗读的声音换成你喜欢的音色。**
17
+
18
+ - 每条 AI 回复下面多一个 🔈 喇叭按钮:点一下朗读,再点一下停止;
19
+ - 输入框左边有一个喇叭开关:打开后,每条新回复**自动朗读**;
20
+ - 朗读的声音可以是微软的免费音色(Edge TTS),也可以是**你自己训练的 RVC 音色**、
21
+ **一段录音还原的本地音色**(Index-TTS2 参考音频 / CosyVoice 提示音频零样本克隆),
22
+ **谷歌付费音色**,或**从网上下载的音色包**。
23
+
24
+ 全程在你自己的电脑上运行(除了微软 / 谷歌在线朗读本身),你的声音模型与参考音频不会上传到任何地方。
25
+
26
+ ---
27
+
28
+ ## 1. 安装(只有第一次需要)
29
+
30
+ **前提**:你已经在用 DeepSeek Harness 的网页版(`dsh web`)。
31
+
32
+ 1. 打开一个终端(PowerShell 或命令提示符),执行:
33
+
34
+ ```sh
35
+ dsh plugin --profile web add "github:1624318455/dsh-plugin-tts#main"
36
+ ```
37
+
38
+ 2. **完全关闭再重新启动 `dsh web`**(不是刷新页面)。
39
+ 3. 验证成功:打开网页 → 侧边栏 **设置 → 插件**,出现「**语音**」标签页。
40
+
41
+ > 想开发/本地安装:`dsh plugin --profile web add "file:D:/Work/ForAI/dsh-plugin-TTS/plugin"`
42
+ > (Windows 下是复制安装,改代码后要把 `lib/` 再复制进 profile 副本并重启,详见 README「开发」)。
43
+
44
+ ---
45
+
46
+ ## 2. 先认识界面上的三个地方
47
+
48
+ | 位置 | 长什么样 | 干什么 |
49
+ |---|---|---|
50
+ | 每条 AI 回复左下角 | 🔈 喇叭按钮 | 朗读这一条 / 再点停止 |
51
+ | 输入框左下角(命令按钮旁边) | 🔈 喇叭开关 | 开启后新回复自动朗读(有圆环高亮 = 已开) |
52
+ | 侧边栏 设置 → 插件 → 语音 | 设置面板 | 换声音、调语速、试听、配 RVC、下载音色包 |
53
+
54
+ ---
55
+
56
+ ## 3. 第一步:让回复能朗读(Edge TTS,开箱即用)
57
+
58
+ 1. 打开任意对话,问一句话,等 AI 回复完成。
59
+ 2. 在回复的左下角找到 🔈 按钮,**点一下**。
60
+ - 成功:开始朗读,按钮变成跳动的音柱;再点一下停止。
61
+ 3. 试试自动朗读:输入框左边点 🔈 开关(出现高亮 = 已开启)。
62
+ 之后每条新回复完成时会自动朗读。
63
+ 4. 想换声音 / 调快慢:**设置 → 插件 → 语音** →
64
+ - 「朗读音色」:下拉选一个喜欢的声音(中文/英文/日文…都有);
65
+ - 「声音调节」:语速 / 音调 / 音量,0 表示默认;
66
+ - 最下面「试听测试」:输入一句话点 ▶,马上听效果。
67
+
68
+ > 到这里,基本功能已经会用了。如果只想朗读,可以不用看后面。
69
+
70
+ ---
71
+
72
+ ## 4. 第二步:用你自己的音色(RVC)
73
+
74
+ > RVC 是什么:一个"声音转换"工具。你的 AI 先让 Edge TTS 朗读(这是"原声"),
75
+ > 然后 RVC 把这段朗读**换声**成你训练的模型音色。全程在你自己的电脑上完成。
76
+
77
+ ### 4.1 你需要先有的东西
78
+
79
+ | 需要 | 是什么 | 必须吗 |
80
+ |---|---|---|
81
+ | RVC 模型文件(`.pth`) | 你的音色本体(通常几 MB~几十 MB) | ✅ 必须 |
82
+ | 索引文件(`.index`) | 让音色更像原声的辅助文件(几百 MB,可压缩) | ❌ 可选 |
83
+ | RVC WebUI 安装 **或便携运行时** | 转换服务要跑在它里面;没有 RVC WebUI 也能用便携运行时 | ✅ 二选一 |
84
+
85
+ ### 4.2 启动"转换服务"(一次性;每次想用时都要先启动)
86
+
87
+ **没有装 RVC WebUI?** 可以下载别人做好的**便携运行时**(一个免安装的文件夹,
88
+ 含转换所需的一切,Windows 双击 `启动服务.bat`,macOS/Linux 运行 `start-rvc-server.sh`;
89
+ 详见手册末尾「便携运行时」)。
90
+
91
+ 按你的系统操作:
92
+
93
+ #### Windows(已装 RVC WebUI)
94
+
95
+ 1. 找到你的 RVC WebUI 安装目录(里面能看到 `runtime` 文件夹和 `assets` 文件夹)。
96
+ 2. 打开 **PowerShell 或命令提示符**,启动服务(**不需要指定模型/索引**——模型在设置面板里点「浏览」选择,
97
+ 首次朗读自动加载;`--model/--index` 只是可选的预载参数):
98
+
99
+ - **推荐**:把 `rvc-server.py` 复制到 RVC 根目录(与 `runtime/` 同级),然后:
100
+
101
+ ```powershell
102
+ <你的RVC目录>\runtime\python.exe <你的RVC目录>\rvc-server.py --port 4892
103
+ ```
104
+
105
+ - 或者 rvc-server.py 放在别处时,用 `--rvc-dir` 指定 RVC 根目录:
106
+
107
+ ```powershell
108
+ <你的RVC目录>\runtime\python.exe <rvc-server.py的路径> --rvc-dir "<你的RVC目录>" --port 4892
109
+ ```
110
+
111
+ #### macOS / Linux
112
+
113
+ - **最省事:便携运行时**。解压后运行:
114
+
115
+ ```bash
116
+ <你的便携包目录>/start-rvc-server.sh
117
+ ```
118
+
119
+ - **已有自己搭好的 RVC 环境**:
120
+
121
+ ```bash
122
+ <你的工作目录>/venv/bin/python <你的工作目录>/rvc-server.py --port 4892
123
+ ```
124
+
125
+ - **已有 RVC WebUI 目录**(含 `runtime/` 和 `infer/`):
126
+
127
+ ```bash
128
+ <你的RVC目录>/runtime/bin/python <你的RVC目录>/rvc-server.py --port 4892
129
+ ```
130
+
131
+ #### 通用
132
+
133
+ - `<你的RVC目录>` = RVC WebUI 根目录(含 `runtime`/`assets`/`logs`);`<rvc-server.py的路径>` = rvc-server.py
134
+ 文件所在位置(插件源码目录,或从 GitHub 仓库 `1624318455/dsh-plugin-tts` 下载,**不在** node_modules 里)。
135
+ - 想要"启动即预载某个音色"再额外加:
136
+ `--model "<RVC目录>/assets/weights/xxx.pth" --index "<RVC目录>/logs/xxx.index"`。
137
+
138
+ 3. **成功的样子**:终端/命令行窗口里出现一行
139
+ `dsh-plugin-tts RVC server: http://127.0.0.1:4892 ...`,
140
+ 然后**这个窗口别关**(关了服务就停了)。
141
+ 4. 想换模型时:关掉窗口,换 `--model` 再启动一次。
142
+
143
+ ### 4.3 在插件里填配置
144
+
145
+ 打开 **设置 → 插件 → 语音**:
146
+
147
+ 1. 「TTS提供者」选 **自定义音色(RVC)**;
148
+ 2. 「服务地址」:**保持默认** `http://127.0.0.1:4892`(就是刚才那个服务的地址);
149
+ 3. 「模型路径 (.pth)」:填模型文件的**完整路径**,或点「浏览」从电脑上选;
150
+ 4. 「索引路径 (.index)」:**可留空**(免索引,效果略降但能用);有就填上。
151
+
152
+ ### 4.4 测试
153
+
154
+ 1. 回到最下面「试听测试」,输入一句话,点 ▶。
155
+ 2. **成功**:几秒后(首次可能十几秒,是在加载模型+自动测速)听到**你的音色**在朗读。
156
+ 3. **失败**:出现红字提示 → 对照第 10 节的排查表。
157
+
158
+ ### 4.5 长文本自动分段
159
+
160
+ 选 RVC 后读很长的回复,插件会自动**分段边合成边播放**:先转换前几段立刻开播,
161
+ 其余段在播放的同时后台转换,段与段之间**没有停顿**(右上角按钮会显示「第 x/y 段」)。
162
+ 首次长文本会做一次约 5~7 秒的自动测速(决定分段大小),之后 7 天内不再重复。
163
+
164
+ ---
165
+
166
+ ## 5. 用一段录音还原声音(Index-TTS2,本机)
167
+
168
+ **给谁用**:有一段几秒~几十秒的清晰人声(wav/mp3),想让朗读直接用这个声音,
169
+ 不想训练模型的人。
170
+
171
+ 1. 双击本地包里的「**启动api服务.bat**」,黑窗口**别关**(默认端口 `7880`)。
172
+ 2. 设置 → 插件 → 语音 → TTS提供者切到「**本地音色(Index-TTS2)**」→
173
+ 点「**刷新音色**」,下拉里选你的参考音频(没有就用「上传参考音频」传一段)。
174
+ 3. 回到底部「试听测试」输一句话点 ▶,听到参考音频的音色即成功。
175
+ 4. 长文本同样自动分段(一格约 15 秒音频的块),其余与 RVC 一致。
176
+
177
+ > 情感、清洗文本等细项见 [《Index-TTS2 指南》](INDEX-TTS2-GUIDE.md);连不上服务
178
+ > 先看那份指南的疑难排查。
179
+
180
+ ---
181
+
182
+ ## 6. 用提示音频零样本克隆(CosyVoice,本机)
183
+
184
+ **给谁用**:有一段 5~20 秒的人声,想零样本克隆(连参考音频都不用"注册",即选即用)的人。
185
+
186
+ 1. 双击本地包里的「**启动cosy服务.bat**」,黑窗口**别关**(默认端口 `7890`)。
187
+ 2. 设置 → 插件 → 语音 → TTS提供者切到「**本地克隆(CosyVoice)**」→
188
+ 点「**刷新音色**」选提示音频(没有就上传一段)。
189
+ 3. **最关键一步**:「提示音频文字稿」必须把提示音频里说的内容**按顺序全文填写**
190
+ (中英日混的提示音三段都要写;缺一段,模型会把缺的那段复读一遍再读新文字)。
191
+ 4. 回到底部试听,听到克隆音色即成功;语速 0.5~2.0,种子填 0 为每次随机。
192
+
193
+ > 细节见 [《CosyVoice 指南》](COSYVOICE-GUIDE.md),尤其是「提示音频与文字稿」一节。
194
+
195
+ ---
196
+
197
+ ## 7. 用谷歌付费音色(Cloud TTS)
198
+
199
+ **给谁用**:想要中文标准/波形音色、愿意自备 API Key 并按量付费的人
200
+ (中文标准音色每月前 400 万字符免费,Wavenet/Neural2 每月前 100 万字符免费)。
201
+
202
+ 1. 在 Google Cloud Console 建项目 → 启用 Text-to-Speech API → 创建 API Key。
203
+ 2. 设置 → 插件 → 语音 → TTS提供者切到「**Cloud TTS**」→ 粘贴 Key 点「**保存配置**」
204
+ (输入框会清空;Key 只存本机 Host 文件,可点「测试连接」验证)。
205
+ 3. 选音色试听即成功;用量在「本月用量(本地计数)」里按档查看,
206
+ 每月 1 号清零(官方账单以 Google Cloud Billing 为准)。
207
+
208
+ > Key 与计费细节见 [《Cloud 指南》](CLOUD-GUIDE.md)。
209
+
210
+ ---
211
+
212
+ ## 8. 第三步:下载别人分享的音色(音色包)
213
+
214
+ > 音色包 = 模型 + 可选的紧凑索引 + 说明,打成一个"仓库",一个网址就能分享。
215
+
216
+ 1. 从音色作者那里拿到一个**仓库地址**(形如 `https://example.com/tts-packs` 的网址)。
217
+ 2. 打开 **设置 → 插件 → 语音 → 音色包**:
218
+ - 「仓库地址」粘贴网址 → 点「**获取列表**」;
219
+ - 出现一张张音色卡片(名称 / 描述 / 大小 / 许可 / 作者)。
220
+ 3. 点「**下载并启用**」:插件自动下载(并自动核对文件是否完整、有没有被改坏),
221
+ 完成后**自动填好模型和索引路径**,直接去试听即可。
222
+ 4. 已安装的包会显示版本号;重复下载会自动跳过。
223
+ 5. ⚠️ 注意:只看「许可」允许分发的音色。演示音色 azusa-test 受版权限制,
224
+ 不会出现在公开仓库里;你自己训练的模型也可以做成音色包分享。
225
+
226
+ > 本地测试仓库:`node tests/mock-registry.mjs <目录> [端口]` 可以把一个文件夹当成仓库起起来。
227
+
228
+ ---
229
+
230
+ ## 9. 日常使用小知识
231
+
232
+ - **停止朗读**:再点一次喇叭按钮;关闭自动朗读开关会停止自动朗读(不影响手动)。
233
+ - **长回复**:自动分段、边读边合成,进度显示「第 x/y 段 · 边播边合成」。
234
+ - **换会话 / 关页面**:自动朗读会停止。
235
+ - **设置不保存**:声音/开关等设置存在内存里,刷新页面会恢复默认(音色包安装的文件会保留)。
236
+
237
+ ---
238
+
239
+ ## 10. 出问题了?按症状查
240
+
241
+ | 症状 | 最常见原因 | 怎么办 |
242
+ |---|---|---|
243
+ | 点朗读没声音 | 浏览器自动播放限制 | 先在页面任意处点一下再试;检查系统音量 |
244
+ | 点「浏览」提示"浏览文件需要先启动本地 RVC 服务" | 4.2 那个服务没启动 / 服务地址不对 | 按 4.2 启动并保留窗口;确认「服务地址」是 `http://127.0.0.1:4892` |
245
+ | 提示"无法连接本地 RVC 推理服务" | 4.2 那个服务窗口没开 / 被关了 | 重新启动服务窗口(4.2),别关它 |
246
+ | 提示"未配置 RVC 模型路径" | 4.3 没填模型 | 填 .pth 路径(或点浏览) |
247
+ | 首次朗读等十几秒 | 正常:加载模型 + 自动测速 | 等它;之后会快 |
248
+ | 音色不够像 | 没填索引,或索引权重太低 | 填 .index;「索引权重」调向 100% |
249
+ | 报 403 / 合成失败(Edge 模式) | 微软端点临时限制 | 过一会儿重试;看 README 疑难排查 |
250
+ | 试听按钮一直转 | 网络或服务没起来 | 看红字提示;RVC 确认 4.2 窗口在运行,Index/Cosy 确认各自的启动窗口在运行 |
251
+ | 提示"无法连接本地 Index-TTS2 / CosyVoice 服务" | 对应的 `.bat` 窗口没开 / 被关了 | 按第 5 节(Index)/ 第 6 节(Cosy)启动并保留窗口;确认「服务地址」端口(7880/7890) |
252
+ | Cloud 提示 Key 无效 / 未启用接口 | Key 贴错,或 Text-to-Speech API 没启用 | 重贴完整 Key;去 Cloud Console 启用接口;见第 7 节 |
253
+
254
+ ### 10.1 反馈朗读问题时请附带这两样
255
+
256
+ 1. 在出问题的页面按 F12 打开控制台,把 `[tts]` 开头的行复制发过来;
257
+ 2. 在控制台运行 `copy(JSON.stringify(__dshTtsDebug.dump()))`,把剪贴板内容一并发过来。
258
+
259
+ 这两样只含键名和数量、不含消息正文,但能直接看出插件读到的数据形状,是定位最快的方式。顺手确认第一行是 `[tts] client build … loaded`(没有它说明页面跑的还是旧包,先硬刷新或重启 `dsh web`)。
260
+
261
+ ---
262
+
263
+ ## 11. 术语小字典(看见不懂的词查这里)
264
+
265
+ | 词 | 是什么意思 |
266
+ |---|---|
267
+ | Edge TTS | 微软的免费在线朗读服务(本插件默认的声音来源) |
268
+ | RVC | 一个"声音转换"工具:把朗读声换成目标音色 |
269
+ | 模型(.pth) | 你的音色本体文件 |
270
+ | 索引(.index) | 让音色更像原声的可选文件;很大,但可以压缩 |
271
+ | 紧凑索引 | 把几百 MB 的索引缩到几 MB(设置里「压缩索引」按钮) |
272
+ | 免索引 | 不填索引直接用(效果略降,但省事) |
273
+ | 音色包 | 模型+索引+说明打包,一个网址即可分享(见第 8 节) |
274
+ | 仓库地址 | 音色包清单(manifest.json)所在的网址 |
275
+ | sha256 | 文件的"指纹";下载后自动核对,防止文件损坏或被改 |
276
+ | 原声 | 转换前的朗读(Edge TTS 按消息文本自动合成) |
277
+ | 底噪 | 上面"原声"的技术叫法;界面里已改成"原声" |
278
+ | 参考音频(Index-TTS2) | 决定朗读是谁的声音的那段音频,存在本机包的 api/ckyp 目录,可上传新增(见第 5 节) |
279
+ | 提示音频(CosyVoice) | 同上,但存在 prompts 目录;必须配"提示音频文字稿"且按顺序全文填写(见第 6 节) |
280
+ | SSML 计费口径 | Cloud 按实际发送的 SSML 字符数(含标签)计费,本地按此计数(见第 7 节) |
281
+ | 预热(prewarm) | 长文本开播前先合成好的前几段;Edge/Cloud 只等第 1 段就开播,本地链路等 2 段防卡顿 |
282
+
283
+ ---
284
+
285
+ ## 12. 进阶:给音色作者 —— 怎么做一个音色包
286
+
287
+ 1. **准备文件**:模型 `model.pth`;可选一个紧凑索引(用设置里「压缩索引」生成,
288
+ 10k ≈ 31MB)。
289
+ 2. **建一个目录**(例如 `my-voice/`),放入 `model.pth`、索引文件,
290
+ 再建一个 `manifest.json`(清单/菜单),内容如下(把尖括号替换成你自己的值):
291
+
292
+ ```json
293
+ {
294
+ "schema": 2,
295
+ "packs": [ {
296
+ "id": "my-voice",
297
+ "name": "我的音色",
298
+ "description": "一句话介绍这个音色",
299
+ "version": "1.0.0",
300
+ "author": "你的名字",
301
+ "license": "MIT",
302
+ "baseVoice": "zh-CN-YunyangNeural",
303
+ "f0Method": "rmvpe",
304
+ "indexRate": 0.75,
305
+ "model": { "url": "my-voice/model.pth", "size": 55270272, "sha256": "..." },
306
+ "indexes": [ { "id": "c10k", "name": "紧凑 10k(推荐)",
307
+ "url": "my-voice/index.index", "size": 6144045, "sha256": "..." } ]
308
+ } ]
309
+ }
310
+ ```
311
+
312
+ - `url` 用**相对路径**(相对 manifest.json 所在目录)即可,放哪都通用;
313
+ - `indexes` 是索引变体数组(可以放多个,用户在界面里选);只想要一个也可以;
314
+ - `size`:文件字节数(右键文件属性可见);
315
+ - `sha256`:在 PowerShell 里执行 `Get-FileHash 文件路径 -Algorithm SHA256` 得到;
316
+ - 免索引的音色包:不写 `indexes` 即可。
317
+ 3. 把整个目录放到**任意静态托管**(GitHub Pages / 对象存储 / 网盘直链等),
318
+ 保证上面 url 能直接下载。
319
+ 4. 把仓库地址(manifest.json 所在目录的网址)发给用户,他们按第 8 节操作。
320
+ 5. ⚠️ 版权:只发布你有权分发的音色(自己训练的、或已获授权的)。
321
+
322
+ ---
323
+
324
+ ## 13. 便携运行时(免装 RVC WebUI 也能用)
325
+
326
+ **给谁用**:只有音色模型、但不想装整套 RVC WebUI 的人(比如收到别人分享的音色包)。
327
+
328
+ **是什么**:一个免安装的文件夹,里面装好了转换服务需要的一切
329
+ (Python + torch + 推理核心 + hubert/rmvpe 模型 + ffmpeg + `rvc-server.py`)。
330
+
331
+ **下载**:点作者 B站介绍视频,**简介里含便携运行时网盘链接**:
332
+
333
+ - **B站视频**:https://www.bilibili.com/video/BV1ukbQ6qECo/
334
+
335
+ 便携运行时约 **4.35GB**(torch 2.7.0+cu128,支持 RTX 50 系);网盘链接如果失效,
336
+ 可在视频评论区/私信联系作者,或按下方「怎么制作」用自己机器现打一个。
337
+
338
+ **怎么用**:
339
+ 1. 解压到任意位置(Windows 例如 `D:\rvc-portable`;macOS/Linux 例如 `~/rvc-portable`);
340
+ 2. 启动服务:
341
+ - Windows:双击里面的 **`启动服务.bat`**(会弹出一个小窗口);
342
+ - macOS/Linux:在终端运行 **`<你的便携包目录>/start-rvc-server.sh`**;
343
+ - 都会显示 `dsh-plugin-tts RVC server: http://127.0.0.1:4892`;
344
+ 3. 这个窗口/终端**别关**,回到插件设置按第 4.3 节填模型/索引即可。
345
+ 4. 想停止:关掉那个窗口/按 `Ctrl+C`。
346
+
347
+ **怎么制作(给打包者)**:在已装 RVC WebUI 的机器上执行:
348
+
349
+ ```powershell
350
+ E:\...\RVC20240604Nvidia\runtime\python.exe `
351
+ tools\package-runtime.py `
352
+ --rvc-dir "E:\...\RVC20240604Nvidia" `
353
+ --out "D:\rvc-portable" --skip-torch
354
+ ```
355
+
356
+ - 脚本复制已验证的 Python 环境 + 推理核心 + hubert/rmvpe + ffmpeg + rvc-server.py,
357
+ **不下载任何东西**,成品立即可用(已在本机实测:RTX 5070 上模型加载与转换正常);
358
+ - **RTX 50 系列(Blackwell)可选的提速升级**:官方 pytorch CDN 对部分网络很慢
359
+ (实测 31KB/s,3.3GB 要 29 小时),用国内镜像在**可见的终端窗口**里跑(能看到进度条):
360
+
361
+ ```powershell
362
+ D:\rvc-portable\runtime\python.exe -m pip install --upgrade `
363
+ --extra-index-url https://mirrors.aliyun.com/pytorch-wheels/cu128 `
364
+ torch==2.7.0+cu128 torchaudio==2.7.0+cu128
365
+ ```
366
+
367
+ (或给打包脚本加 `--index-url https://mirrors.aliyun.com/pytorch-wheels`;
368
+ 不升级也能用,只是老 torch 在 50 系显卡上有 sm_120 兼容警告、性能略降)
369
+ - 成品文件夹约 7-9GB,压缩后 3-4GB(超出 GitHub 附件 2GB 上限,
370
+ 用网盘/对象存储分发,或只把脚本分享出去让各自本机生成);
371
+ - 便携目录内用 `runtime\python.exe rvc-server.py --port 4892` 启动同样可行;
372
+ - **跨平台**:脚本支持 `--platform auto|windows|linux|darwin`——Windows 生成
373
+ `启动服务.bat`,Linux/macOS 生成 `start-rvc-server.sh`(macOS 无 CUDA,自动跳过
374
+ torch 升级)。**macOS(Apple Silicon)已实测通过**,详见《RVC 指南》的 macOS 注意事项;
375
+ Linux 仍建议先在目标平台验证。
376
+
377
+ ---
378
+
379
+ ## 附:开发/测试命令
380
+
381
+ ```sh
382
+ node tests/smoke.mjs # 冒烟测试(126 项)
383
+ node tests/mock-registry.mjs <目录> [端口] # 本地音色包仓库
384
+ node tests/e2e-real-rvc.mjs # 真实 RVC 端到端(需 4892 服务)
385
+ node tests/e2e-compact-index.mjs # 紧凑索引端到端(需 4892 服务)
386
+ ```
387
+
388
+ 详细架构与设计见 [`README.md`](../README.md)(或[中文版](../README.zh.md))、
389
+ [`RVC 指南`](RVC-GUIDE.md) 与 [`adaptive-chunked-playback.md`](adaptive-chunked-playback.md)。