🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

本地语音桥接 naili0712/dsh-gsv-local

DeepSeek Harness
naili071210 天前有提交已提供中文文档扫描:含敏感能力

把本机 GPT-SoVITS 接入对话,随启停合成并播放语音

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add naili0712/dsh-gsv-local
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 23 处,展示前 20 条)
  • 读取本地文件
    index.js:64
    if (!existsSync(gzPath)) return null
  • 读取本地文件
    index.js:69
    const wav = gunzipSync(readFileSync(gzPath))
  • 读取本地文件
    index.js:71
    if (!existsSync(wavPath) || readFileSync(wavPath).length !== wav.length) {
  • 读取本地文件
    index.js:71
    if (!existsSync(wavPath) || readFileSync(wavPath).length !== wav.length) {
  • 写入本地文件
    index.js:72
    mkdirSync(outDir, { recursive: true })
  • 写入本地文件
    index.js:73
    writeFileSync(wavPath, wav)
  • 读取本地文件
    index.js:80
    const promptText = existsSync(txtPath) ? readFileSync(txtPath, 'utf8').trim() : ''
  • 读取本地文件
    index.js:80
    const promptText = existsSync(txtPath) ? readFileSync(txtPath, 'utf8').trim() : ''
  • 写入本地文件
    index.js:104
    mkdirSync(PREFS_DIR, { recursive: true })
  • 写入本地文件
    index.js:105
    writeFileSync(PREFS_FILE, JSON.stringify(next, null, 2), 'utf8')
  • 执行外部命令固定命令
    index.js:133
    execFile('taskkill', ['/PID', String(pid), '/T', '/F'], { windowsHide: true }, () => {})
  • 执行外部命令来自配置/变量
    index.js:202
    child = spawn(
  • 发起网络请求
    index.js:299
    const upstream = await fetch(`http://127.0.0.1:${cfg.enginePort}/tts`, {
  • 发起网络请求
    index.js:335
    const upstream = await fetch(`http://127.0.0.1:${cfg.enginePort}/tts`, {
  • 发起网络请求
    client.js:43
    void fetch('/dsh-gsv-local/log', {
  • 发起网络请求
    client.js:131
    const res = await fetch('/dsh-gsv-local/state')
  • 发起网络请求
    client.js:171
    const res = await fetch('/dsh-gsv-local/state')
  • 发起网络请求
    client.js:205
    const res = await fetch('/dsh-gsv-local/enabled', {
  • 发起网络请求
    client.js:241
    const latest = await fetch(
  • 发起网络请求
    client.js:251
    const tts = await fetch('/dsh-gsv-local/tts', {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-gsv-local AI 辅助声明:本插件由 DeepSeek Harness 辅助创建—— 代码、文档与内置音色素材均在与 DSH 的会话协作中产出,由仓库所有者审核后发布。 使用前请自行验证是否适合你的环境。 把本机 GPT-SoVITS 接进 DeepSeek Harness 的语音插件。它是一层桥,不是一个完整的 TTS 引擎。 装上之后:DSH 启动 → 它顺手把引擎拉起来 → 我答完话,浏览器把那句该说出口的话合成成语音播出来 → DSH 关掉,引擎一起退出,显存还回去。 它解决什么 GPT-SoVITS 的 api_v2.py 只会说 /tts(自己的参数名),而 DSH 这边的 TTS 客户端只会说 OpenAI 的 /v1/audio/speech。两边方言不通。
展开完整文档(README 剩余 1 节)
dsh-gsv-local

AI 辅助声明:本插件由 DeepSeek Harness 辅助创建—— 代码、文档与内置音色素材均在与 DSH 的会话协作中产出,由仓库所有者审核后发布。
使用前请自行验证是否适合你的环境。

把本机 GPT-SoVITS 接进 DeepSeek Harness 的语音插件。它是一层桥,不是一个完整的 TTS 引擎。

装上之后:DSH 启动 → 它顺手把引擎拉起来 → 我答完话,浏览器把那句该说出口的话合成成语音播出来 → DSH 关掉,引擎一起退出,显存还回去。

它解决什么

GPT-SoVITS 的 api_v2.py 只会说 /tts(自己的参数名),而 DSH 这边的 TTS 客户端只会说 OpenAI 的 /v1/audio/speech。两边方言不通。

这个插件做三件事:

1. 生命周期:跟着 DSH 起停,引擎不常驻,不白占显存
2. 翻译:在 9881 开一个 OpenAI 兼容端点,把请求翻成 GPT-SoVITS 的 /tts
3. 说话:浏览器侧盯住「一轮对话结束」那一刻,挑出该念的那一句去合成、播放

DSH 启动 ──► 插件 ──► 拉起 api_v2.py (9880) └──► 监听 9881(OpenAI 兼容) ▲ 一轮对话结束 ──► client.js ──────┘ 挑一行、合成、播放 DSH 关闭 ──► 插件 ──► taskkill /T /F,引擎连带子进程一起退出

它不是

- 不是一个能独立工作的语音合成器。没有 GPT-SoVITS 运行时,它什么也念不出来。
- 不打包任何模型权重。几十 GB 的东西不该塞进 git。
- 不负责听写。听写请用 DSH 自带的语音输入插件。

安装

从 GitHub(推荐)

git clone https://github.com/naili0712/dsh-gsv-local.git D:/app/dsh-gsv-local
dsh plugin --profile <你的 profile> add D:/app/dsh-gsv-local

⚠️ clone 下来的目录不要删。 dsh plugin add <本地目录> 装的是链接(Windows 上是 junction),不是复制。
删掉源目录,插件当场断掉,报错还看不出原因。别 clone 到临时目录。

从 profile 目录

dsh plugin add dsh-gsv-local

装完重启 DSH。

装完自检

node <clone 目录>/scripts/setup.mjs

它会逐项告诉你缺什么。正常情况下只有 runtimeDir 一项待补 —— 参考音色是包内自带的,不用你准备。

配置(只有一项必填)

装完只要能说话,你只需要填 runtimeDir。参考音频和台本都不用准备 ——包里自带三段默认音色,第一次启动时自动解压到 ~/.dsh/gsv-local/voices/。

编辑你的 profile 的 cordis.patch.yml,按 id: gsv-local 覆盖:

- id: gsv-local
config:
runtimeDir: 'D:/path/to/GPT-SoVITS' # 唯一必填:含 api_v2.py 的目录

想换音色就加一行(ja 默认 / female / male):

voice: male

要换成自己的声音,才需要这两个,而且必须成对:

refAudio: 'D:/path/to/voice.wav' # 8–10 秒单人干净录音 promptText: '参考音频里逐字说的那句话' # 差一个字音色就漂

| 字段 | 说明 |
| runtimeDir | ★ 唯一必填。GPT-SoVITS 运行时根目录,里面要有 api_v2.py 和 runtime/python.exe |
| voice | 内置音色:ja(默认,日语)/ female / male(后两个是中文)。填了 refAudio 就忽略它 |
| refAudio | 留空 = 用内置音色。填自己的:8–10 秒单人干净录音 |
| promptText | 留空 = 用内置台本。填自己的:refAudio 里逐字说的内容,必须一字不差 |
| promptLang | 参考音频的语言(zh / ja / en),默认 ja |
| textLang | 合成文本的语言,默认 ja |
| enginePort | 默认 9880 |
| proxyPort | 默认 9881 |

内置音色是哪来的

三段都不是真人录音,完整来源与定性见 assets/default-voice/NOTICE.md。

- ja(默认,9.68 秒日语):本仓库用 GPT-SoVITS 生成的,音色参考自一段第三方素材。它是演绎物,不是「无版权素材」——自身很可能无著作权,但音色来源的权利人仍在。
- female / male(约 6 秒,中文):由 MOSS-VoiceGenerator(Apache-2.0)按文字描述合成,未参考任何人的录音,来源链条最短。

要完全干净的来源,请用后两个,或自己录一段。三段都只作默认参考音色,不用于训练任何模型。

关于语言的坑

textLang 必须和你要念的文本语言一致。用日语模型念中文,汉字会被读成音读 —— 念出来不像日语,像机器出错。

这也是为什么 client 只念 〔声〕 那一行:见下。

运行时从哪来

GPT-SoVITS 本体请从上游取:

- 项目主页:<https://github.com/RVC-Boss/GPT-SoVITS>
- 权重(s1v3.ckpt、gsv-v5-pretrained/s2Gv5*.pth)在上游 releases / HuggingFace

配置里的 runtimeDir 指向任何一份能跑 api_v2.py 的安装即可。它不必和本插件同目录。

仓库里附了一个 scripts/setup.mjs,用来检查配置是否指向一个真能跑起来的运行时:

node scripts/setup.mjs

它只做检测和报告,不下载大文件 —— 几十 GB 的运行时该由你决定装在哪、用哪个版本。

说什么由谁决定

浏览器侧不念整篇回复。它只认一行:

〔声〕これで、ちゃんと喋れるよ。
〔译〕这样就能好好说话了。

- 〔声〕 那一行被送去合成,其余一律不念
- 〔译〕 是给人看的,不参与合成
- 没有 〔声〕 行 → 这一轮不出声

这条约定是刻意的:三分钟的路径、表格和数字读出来只是噪音;而日语模型也念不了中文正文。

已知限制

- 只在 Windows 上验证过(taskkill /T /F、windowsHide)。理论上 macOS / Linux 可行,但没测。
- 引擎加载约 20–30 秒。这段时间 DSH 已经能用,只是第一句话要等。
- DSH 如果是崩溃退出而不是正常关闭,引擎进程可能残留。下次启动时插件会检测端口,已在跑就直接复用,不会起第二个。
- 参考音频的质量直接决定音色像不像。没有第二次机会。

许可

MIT。client.js 里挑选发声行的规则思路参考了社区里同类插件的做法,实现是独立的。
预览分享卡片长什么样 ↓naili0712/dsh-gsv-local
分享 · DeepSeek Harness Hub
naili0712/dsh-gsv-local

把本机 GPT-SoVITS 接入对话,随启停合成并播放语音

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部