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

语音合成客户端 jwilson411/dsh-kokoro

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

把文本发给本地 Kokoro 服务并取回语音文件路径

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 写入本地文件
    src/client.js:286
    await mkdir(directory, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/client.js:287
    await writeFile(path, bytes, { mode: 0o600 })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 发送文本至本地服务
  • 获取语音文件路径

DeepSeek Harness 插件:对接 jwilson411/kokoro-tts-api 的 HTTP TTS 客户端,无需模型权重。

README

由 DeepSeek 最新模型翻译生成
dsh-kokoro 一个小型 DeepSeek Harness 函数插件,可以将文本朗读出来。它只注册一个面向模型的工具——kokoro_tts——该工具将文本 POST 到本地的 Kokoro TTS 服务器,写入返回的 wav 文件,并报告路径。 此处不附带任何权重。 没有 ONNX,没有 .pt,没有语音 bin,没有嵌入——本仓库中没有任何模型数据,安装时也不会下载任何内容。模型位于服务器之后;本包只是通往它的连接线。它确实包含的是十九个语音名称的列表和两个数值边界,这些是从该服务器镜像过来的,这样错误的参数会在这里失败,而不是浪费一次往返。 它也不是一个音频工具包。没有播放、没有格式转换、没有混音、没有流式传输、没有缓存、没有转录。它只回答一个问题——这段文本听起来会是什么样?——然后返回一个文件路径。 没有 API 密钥,没有凭据,没有状态。
展开完整文档(README 剩余 1 节)
dsh-kokoro

一个小型 DeepSeek Harness 函数插件,可以将文本朗读出来。它只注册一个面向模型的工具——kokoro_tts——该工具将文本 POST 到本地的 Kokoro TTS 服务器,写入返回的 wav 文件,并报告路径。

此处不附带任何权重。 没有 ONNX,没有 .pt,没有语音 bin,没有嵌入——本仓库中没有任何模型数据,安装时也不会下载任何内容。模型位于服务器之后;本包只是通往它的连接线。它确实包含的是十九个语音名称的列表和两个数值边界,这些是从该服务器镜像过来的,这样错误的参数会在这里失败,而不是浪费一次往返。

它也不是一个音频工具包。没有播放、没有格式转换、没有混音、没有流式传输、没有缓存、没有转录。它只回答一个问题——这段文本听起来会是什么样?——然后返回一个文件路径。

没有 API 密钥,没有凭据,没有状态。

安装

dsh plugin --profile web add github:jwilson411/dsh-kokoro

dsh plugin 会转发到 $DSH_HOME/profiles/web 内的 pnpm,然后根据已安装状态协调 profile:由于本包的清单声明了 dsh.bundle.patch,它会被追加到 profile 清单有序的 dsh.profile.bundles 列表中,其补丁成为一个层。

移除方式相同,只需将 add 换成 remove。

将其指向服务器

插件的内置默认基础 URL 是 http://127.0.0.1:8000。

配套服务器 [jwilson411/kokoro-tts-api][api] 默认监听 8765 端口(KOKORO_PORT)。所以如果你运行的正是该服务器——很可能就是——请将基础 URL 设置为 http://127.0.0.1:8765。可以通过补丁行:

- id: kokoro
config:
baseURL: http://127.0.0.1:8765

或通过环境变量:

export DSH_KOKORO_BASE_URL=http://127.0.0.1:8765

顺序为最具体者优先:插件的补丁行,然后是 DSH_KOKORO_BASE_URL,最后是默认值。指定了 baseURL 的行会按其字面值采用,即使为空——写入该键却留空是一种错误配置,它会在加载时失败,而不是悄悄地去连接一个你并未指定的服务器。无论最终采用哪个值,都会立即进行规范化(去除末尾斜杠)并检查协议:任何不是 http: 或 https: 的都会被拒绝,因此 file: 基础地址无法将这一次出站请求变成一次本地读取。

请先启动服务器——权重步骤请参阅其 README,那是在那边进行的,不是在这里:

KOKORO_PORT=8765 make run # 在 jwilson411/kokoro-tts-api 的检出目录中
curl -s http://127.0.0.1:8765/health

固定版本的 DSH 候选发布版

本包是针对固定版本的候选发布版 0.1.1-rc.2 编写和测试的——即当前的 @deepseek-ai/dsh 发布版以及匹配的 @deepseek-ai/dsh-tools@0.1.1-rc.2,后者被精确固定在 devDependencies 中,以便测试针对一个已知的 API 运行。peer 范围是 ^0.1.1-rc.2,与 harness 自身工具包的声明方式一致。

请注意,@deepseek-ai/dsh-tools 的 npm latest 标签仍指向较旧的 0.0.1-rc.1;0.1.1-rc.2 系列发布在 next 下。请显式固定版本,而不要依赖标签。

没有运行时依赖。

它注册了什么

| Cordis 插件 id | kokoro(cordis.patch.yml 中的行 id) |
| 注入 | tools —— 一项硬依赖;插件会等待,而不是降级 |

| 工具 | 参数 | 返回 |
| kokoro_tts | text(字符串,必填,1–8000 个字符)、voice(字符串,可选,在白名单内,默认 am_michael)、speed(数字,可选,0.5–2.0,默认 1.0) | { path, voice, speed, bytes, text_chars, plugin } |

{
"path": "/tmp/dsh-kokoro/kokoro-am_michael-0f9c1f2e-....wav",
"voice": "am_michael",
"speed": 1,
"bytes": 122444,
"text_chars": 41,
"plugin": "dsh-kokoro"
}

不会自动播放任何内容。路径会被报告出来,以便调用方可以打开它。

语音

共十九种,在白名单内。am_/af_ 是美式男声和女声,bm_/bf_ 是英式男声和女声:

am_michael(默认)、am_adam、am_liam、am_eric、am_james、 am_william、am_caleb、am_david、am_ethan、bm_daniel、bm_george、 bm_lewis、bm_oliver、af_heart、af_nova、af_sarah、af_bella、 bf_emma、bf_isabella。

任何其他名称都会在套接字打开之前以 KOKORO_BAD_VOICE 被拒绝。

wav 文件去向何处——以及为什么你无法选择

该工具没有 path、output 或 filename 参数,并且将来也不会增加。
让模型选择字节落地的位置,是一种披着文本转语音外衣的文件写入原语;如果这个工具上有 path 参数,那么任何能触达它的提示词都可以将攻击者构造的字节写入攻击者选定的位置。因此由插件来选择:一个名为 kokoro--.wav 的文件,位于它拥有的目录内——默认是
os.tmpdir()/dsh-kokoro,以 0700 模式创建,文件以 0600 模式写入——然后
在事后告诉你路径。运维人员可以通过补丁行中的 config.outputDir 移动该目录。调用方则不能。

不会替你清理任何内容;这些文件位于你的临时目录下,它们的生命周期是你的系统的事。

与 Kokoro 通信

只会发出恰好一个请求,发往恰好一个 URL:POST {baseURL}/tts,以 JSON
形式携带 {text, voice, speed},并期望返回 audio/wav。不会跟随
重定向——3xx 会被报告为 KOKORO_HTTP_ERROR,而不是把正在朗读的文本带到 Location 头所指定的任何主机。

每个请求都受到双重限制,并且任一限制触发时都会失败关闭:一个 AbortSignal 截止时间(30 秒——合成并非瞬时完成)和一个响应字节上限(10 MiB),后者在响应体流式传输时强制执行,因此超大响应会被放弃,而不是被缓冲。两者都可以从补丁行配置:

- insert:
- id: kokoro
name: dsh-kokoro
config:
baseURL: http://127.0.0.1:8765
timeoutMs: 30000yaml
maxBytes: 10485760
outputDir: /var/tmp/dsh-kokoro

针对 id 的补丁会替换该行的整个 config,而不是合并到其中,因此覆盖必须重新声明其保留的字段。

在任何内容写入磁盘之前都会对其进行检查:内容类型必须是 audio/*,并且前十二个字节必须是声明 WAVE 的 RIFF 容器。以 200 状态返回的代理登录页面或 JSON 错误正文会以 KOKORO_BAD_AUDIO 失败,而不会以 .wav 名称落到磁盘上。

失败会携带稳定的 code —— KOKORO_BAD_TEXT、KOKORO_BAD_VOICE、KOKORO_BAD_SPEED、KOKORO_BAD_BASE_URL、KOKORO_HTTP_ERROR、KOKORO_BAD_AUDIO、KOKORO_RESPONSE_TOO_LARGE、KOKORO_TIMEOUT、KOKORO_UNREACHABLE、KOKORO_WRITE_FAILED —— 因此调用方无需匹配文字描述就能区分端口失效和被拒绝的语音。请求通过一个标明插件和此仓库的 User-Agent 来标识自身。

无头使用

工具工厂同时接受两个接缝——要使用的 fetch 和要写入的目录——因此你可以在不启动配置文件的情况下从普通 Node 脚本驱动它: js // say.mjs — node say.mjs
import { createKokoroTtsTool } from 'dsh-kokoro'

// 省略 fetch 以使用全局的,并与真实服务器通信。
const tts = createKokoroTtsTool({ baseURL: 'http://127.0.0.1:8765' })

const { path, bytes } = await tts.execute(
{ text: 'The kettle is on.', voice: 'bm_george' },
{ signal: AbortSignal.timeout(60_000) },
)
console.log(${bytes} bytes at ${path})

KOKORO_STUB=1

当环境中存在 KOKORO_STUB=1 且没有注入 fetch 时,完全不会发出请求:会在本地生成一个短的静音 wav,以便在没有服务器运行的情况下走完管道的其余部分——验证、写入、报告路径。它是静音,不是语音;这里没有任何内容合成音频,也不涉及任何模型。把它当作演示和冒烟测试的入口,而不是回退方案:当提供了 fetch 时它永远不会触发,也永远不会掩盖真实故障。

测试 sh
npm install
npm test

该测试套件离线运行,不需要 Kokoro 服务器。每个请求都由注入的 fetch 替身应答,并且每个测试文件都会用一个会抛错的守卫替换 globalThis.fetch,因此任何触及真实网络的代码路径都会作为测试失败而不是真实请求而失败。文件会写入 os.tmpdir() 下的一个临时目录,每个测试一个,测试结束时删除。CI 在 Node 22.x 和 24.x 上运行它,使用 contents: read 且没有机密。

许可证

MIT —— 见 LICENSE。版权所有 (c) 2026 Justin Wilson。

Kokoro-82M 模型及其权重不属于此包,也不受此许可证覆盖;请参阅 [jwilson411/kokoro-tts-api][api] 了解这些内容。

[api]: https://github.com/jwilson411/kokoro-tts-api
预览分享卡片长什么样 ↓jwilson411/dsh-kokoro
分享 · DeepSeek Harness Hub
jwilson411/dsh-kokoro

把文本发给本地 Kokoro 服务并取回语音文件路径

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