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

达妮娅语音朗读 xcw520/dsh-dania-voice

DeepSeek Harnessv1.0.0
xcw5209 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 的本地 GPT-SoVITS 语音合成:朗读助手回复,带可拖拽的吉祥物和一键安装器。

43/100
综合分
18
GitHub 星标
1,230
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-dania-voice
npm 源 · dsh-dania-voice 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 9 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-dania-voice @ 1.0.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 04:51:32

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 21 条)
  • 写入本地文件
    index.js:270
    mkdirSync(stateDir, { recursive: true })
  • 写入本地文件
    index.js:291
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    index.js:299
    if (!existsSync(stateFile)) return {}
  • 读取本地文件
    index.js:300
    const parsed = JSON.parse(readFileSync(stateFile, 'utf8'))
  • 写入本地文件
    index.js:316
    mkdirSync(stateDir, { recursive: true })
  • 写入本地文件
    index.js:319
    writeFileSync(temp, `${JSON.stringify(next, null, 2)}\n`, 'utf8')
  • 写入本地文件
    index.js:320
    renameSync(temp, stateFile)
  • 写入本地文件
    index.js:354
    mkdirSync(join(DEFAULTS.cacheDir, 'state'), { recursive: true })
  • 读取本地文件
    index.js:418
    if (!existsSync(p.pythonPath)) {
  • 读取本地文件
    index.js:422
    if (!existsSync(script)) {
  • 执行外部命令来自配置/变量
    index.js:434
    serverChild = spawn(
  • 读取本地文件
    index.js:495
    if (existsSync(target)) return name
  • 发起网络请求
    index.js:519
    response = await fetch(`${cfg.baseUrl.replace(/ $/, '')}/tts`, {
  • 读取本地文件
    index.js:721
    const installed = existsSync(p.pythonPath)
  • 执行外部命令来自配置/变量
    index.js:911
    installChild = spawn(
  • 发起网络请求
    client.js:401
    const response = await fetch(item.url, { cache: 'no-store' })
  • 发起网络请求
    client.js:434
    const res = await fetch(`${ROUTE}/config`, { cache: 'no-store' })
  • 发起网络请求
    client.js:440
    const res = await fetch(`${ROUTE}/status`, { cache: 'no-store' })
  • 发起网络请求
    client.js:447
    const res = await fetch(`${ROUTE}/next`, { cache: 'no-store' })
  • 发起网络请求
    client.js:453
    const res = await fetch(`${ROUTE}/next?since=${since}`, { cache: 'no-store' })
  • 发起网络请求
    client.js:569
    fetch(`${ROUTE}/next`, { cache: 'no-store' })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-dania-voice 给 DeepSeek Harness 用的本地 GPT-SoVITS 语音朗读插件:把助手的回复用达妮娅的音色念出来,旁边挂着一个可拖动的小挂件控制开关。 全部在本机运行,文字和音频都不出本地。 工作原理 DSH 会话事件(assistant/message + turn/end) │ 取最终回复正文:行内代码转成可念的英文, │ 代码块换成一句交代,表格和链接剔掉 ▼ Host:清洗 + 按 90 字聚合分段 │ POST http://127.0.0.1:9880/tts ▼ GPT-SoVITS api_v2.py(本地,GPU) │ wav → 缓存目录 → 队列 ▼ 浏览器:轮询 /dania-voice/next → Web Audio 播放 播放放在浏览器里是刻意的:Host 进程没有声卡,而且声音应该出现在你正坐着的那台机器上。 清洗的时候,反引号包着的行内代码不做删除——ops_bash 会被还原成 ops bash 念出来,过长的全大写词转成小写,免得模型把 EXECUTOR 拆成一个个字母。代码块则换成一句「这里有一段代码。」,不逐行朗读。
展开完整文档(README 剩余 1 节)
dsh-dania-voice

给 DeepSeek Harness 用的本地 GPT-SoVITS 语音朗读插件:把助手的回复用达妮娅的音色念出来,旁边挂着一个可拖动的小挂件控制开关。

全部在本机运行,文字和音频都不出本地。

工作原理

DSH 会话事件(assistant/message + turn/end) │ 取最终回复正文:行内代码转成可念的英文, │ 代码块换成一句交代,表格和链接剔掉 ▼ Host:清洗 + 按 90 字聚合分段 │ POST http://127.0.0.1:9880/tts ▼ GPT-SoVITS api_v2.py(本地,GPU) │ wav → 缓存目录 → 队列 ▼ 浏览器:轮询 /dania-voice/next → Web Audio 播放

播放放在浏览器里是刻意的:Host 进程没有声卡,而且声音应该出现在你正坐着的那台机器上。

清洗的时候,反引号包着的行内代码不做删除——ops_bash 会被还原成 ops bash 念出来,过长的全大写词转成小写,免得模型把 EXECUTOR 拆成一个个字母。代码块则换成一句「这里有一段代码。」,不逐行朗读。

环境要求

| 项目 | 说明 |
| DSH | >= 0.1.7-rc.1 |
| Python | 3.10 – 3.12(安装器只负责找,不负责装) |
| 显卡 | 建议 NVIDIA、8 GB 以上显存;用 CPU 也能跑,但慢好几倍 |
| 磁盘 | 约 5 GB(PyTorch + 底模 + 音色模型) |
| ffmpeg | 多数情况下用不到,装了更保险 |

安装

dsh plugin --profile web add dsh-dania-voice

然后打开挂件面板,点 「一键部署」。安装器是独立进程,进度会实时显示在同一个面板里:

1. 在安装目录下建 Python 虚拟环境
2. 装 PyTorch(检测到 nvidia-smi 就装 CUDA 版)
3. 装推理依赖
4. 下载 GPT-SoVITS 源码(约 50 MB)
5. 下载预训练底模(约 1.6 GB)
6. 下载音色模型与参考音频(约 320 MB)

可以反复重跑:中途失败再点一次,已完成的步骤会自动跳过。第 5 步是 1.6 GB 的下载,这个特性很重要。

默认装在 $DSH_HOME/dania-voice。想放别的盘,改配置里的 installDir。

使用

窗口顶部正中挂着一只达妮娅:

- 单击 —— 开关朗读
- 拖动 —— 挪到任意位置,位置会记住
- 右键 / Shift+单击 —— 打开设置面板
- 正在念的时候会轻轻晃动

面板里可以调音量、语速、温度(越低越稳、气音越少)、句间停顿,还有「重读上一段」和「让她说一句」用于试听。

语速/温度改完对下一条生效;音频按「文本 + 参数」缓存,参数不变时重读是秒回的。

配置

面板写入 $DSH_HOME/dania-voice/config.json。profile patch 里的 config: 段也可以写,会被面板覆盖。

| 键 | 默认 | 含义 |
| enabled | true | 朗读总开关 |
| volume / speed / temperature | 1 / 1 / 0.7 | 播放与采样参数 |
| speakUser | false | 是否也念你自己发的消息 |
| installDir | $DSH_HOME/dania-voice | 引擎安装目录 |
| pythonPath / root / cacheDir | 自动派生 | 只有手动部署过才需要填 |
| baseUrl | http://127.0.0.1:9880 | GPT-SoVITS 地址 |
| autostart | true | 需要时自动拉起服务 |

已知限制

英文短词念得含糊。 长英文句没问题——一整句英文回听几乎全对。但 ops bash、 cut2、sha1 这种短词或者带数字的标识符,念出来会接近中文音,听着像嘴里含了下东西。
这是音色模型和英文音素的匹配问题,插件这边改不了。行内代码还是会转成可念的英文,长标识符比短的好使。

单段最长 90 字。 服务端的生成循环写死 1500 个语义 token,约 30 秒;超了不报错、直接截断,实测 147 字不切段时中间整整少读一句。90 字是留了三成余量的结果,代价是句间停顿比以前多。

网址不念,表格不念。 网址念出来是一串没人听得懂的字母,表格念出来是数字罗列,两者都直接删掉。删掉的地方用句号断开,不会把前后句子粘在一起念。

故障排查

- 挂件是红边 —— 插件路由没响应,检查插件是否启用。
- 提示「还没部署」 —— 点一键部署,或看 $DSH_HOME/dania-voice/install.log。
- 面板显示已就绪但没声音 —— 浏览器拦了自动播放,点一下挂件即可。
- 第一句很慢 —— 模型要 20~40 秒加载进显存,之后每句 1~3 秒。

版权

- GPT-SoVITS(RVC-Boss)—— MIT。
- 达妮娅音色模型来自 ModelScope 上的 villia/dania,安装器从原仓库下载,本仓库不再分发。
- 挂件立绘 © 夜游人(本项目作者);面板背景使用官方宣传素材,按官方第三方使用规范使用。

本项目是同人作品。《鸣潮》及其角色版权归库洛游戏所有。
预览分享卡片长什么样 ↓xcw520/dsh-dania-voice
分享 · DeepSeek Harness Hub
xcw520/dsh-dania-voice

DeepSeek Harness 的本地 GPT-SoVITS 语音合成:朗读助手回复,带可拖拽的吉祥物和一键安装器。

回到顶部