
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-fish-tts
Advanced tools
Text-to-speech (TTS) plugin for DeepSeek Harness — Fish Audio API only, bring your own key. Per-message read-aloud, auto-read toggle in the composer, settings for model / voice / encrypted API key / proxy. Third-party, not affiliated with Fish Audio.
中文 | English
English: dsh-fish-tts is a third-party TTS plugin for the DeepSeek Harness Web GUI — Fish Audio API only, bring your own key: a per-message "Read aloud" action, an auto-read toggle in the composer, and a settings page for model / voice / encrypted API key / proxy. Bilingual UI (zh/en). See README.en.md for the full English version.
面向 DeepSeek Harness(DSH)Web GUI 的第三方语音合成(TTS)插件:为每条助手回复提供一键朗读,输入栏带自动朗读开关,模型 / 音色 / 加密 Key / 代理均可配置。仅支持 Fish Audio API,需自备 API Key。 使用你自己的 Fish 音色(reference_id,含自行克隆的音色)——朗读、试听都走你配置的语音。
| 对比项 | dsh-fish-tts(本插件) | 常见 Edge TTS 朗读插件 |
|---|---|---|
| 合成引擎 | Fish Audio 官方 API(仅支持;需自备 Key) | 微软 Edge 内置语音 |
| 音色 | 你自己的音色 reference_id(含自行克隆的音色,须有使用权限) | Edge 内置固定音色库 |
| API Key | 必须自备(设置页 AES-256-GCM 加密保存) | 无需 |
| 适合谁 | 已有 Fish Audio 账号、想要自己或克隆音色的用户 | 想免费快速试用、固定音色即可的用户 |
reference_id(可直接输入、修改或清空,无须收藏;合成需要有效 ID,插件不提供默认音色)$DSH_HOME/fish-tts/settings.json,密钥文件 key.bin 自动生成并在 Windows 上收紧 ACL;Key 不会出现在任何 GET 响应、日志或仓库中)http://127.0.0.1:7890,直连不通时可填)

消息操作条上的「朗读」按钮

输入栏的自动朗读开关

设置页:直接应用音色 ID、按名称切换收藏并试听;连接设置可折叠,播放偏好无须保存。截图中的音色仅用于展示,不随插件提供。
开发侧于 2026-09-30 报告:dsh-fish-tts 0.2.11 在 DSH 0.2.0-rc.2 与同版本桌面客户端中可用。插件沿用 Web 客户端接口;桌面客户端中的插件界面不需要另一份桌面专用包。
0.2.12 为插件管理页增加随客户端语言切换的中英文名称与简介,合成和设置逻辑不变。更新说明见 CHANGELOG.md。
0.2.13 新增常用音色收藏,重新整理设置页流程与视觉风格,并修复播放归属、设置失败恢复和试听反馈。停止或切换会取消客户端请求,但不保证 Fish 上游已停止处理或计费。
此说明依据维护者的使用反馈,不代表所有操作系统或所有 Fish 模型均经过验证。在线合成仍需有效 API Key、可用音色和网络;宿主接口发生变化时需重新验证。
一条命令,从 npm 安装(推荐):
npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts
然后重启 dsh web(关掉终端重新运行 dsh web)并刷新页面,打开 Settings → 语音朗读。
其他安装方式:
# 从 GitHub 安装(git-hosted 插件会在安装时构建)
npx @deepseek-ai/dsh plugin --profile web add github:MaRi23333/dsh-fish-tts
# 从本地目录安装
git clone https://github.com/MaRi23333/dsh-fish-tts.git
cd dsh-fish-tts
pnpm install && pnpm run build
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/dsh-fish-tts
仓库已提交
lib/构建产物,git 安装无需本地构建;改源码后运行pnpm run build再重启即可。
从 GitHub 版换到 npm 源:裸包名
add dsh-fish-tts对已装的 git 版是静默空操作(pnpm 判定同名依赖已满足)。请改用npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts@latest,或先remove再add。
安装刚发布的 npm 版本时,pnpm 的供应链保护可能自动在 profile 的
pnpm-workspace.yaml写入minimumReleaseAgeExclude: [dsh-fish-tts@…],属正常行为,不影响使用。
reference_id,点击「应用音色」(无须填写名称或收藏);「试听当前音色」使用已保存的音色和连接设置,不会保存表单草稿;会请求试听音频,缓存未命中时调用 Fish Audio API。音色为空或没有可用 Key 时不可试听,等待和播放中均可停止。
「音色 ID」始终显示,可以直接粘贴、修改并点击「应用音色」;删空输入后点击「清空音色」即可停用当前音色。这些操作只修改当前 ID,不要求收藏,也不影响已有收藏。ID 有未应用的修改时,先应用再试听。
收藏是可选的快捷切换方式。当前 ID 匹配收藏时显示名称和备注;在「切换音色」下拉列表选择名称即可立即切换,并将 ID 输入框更新为该音色。点击「收藏音色」或「给当前音色命名」打开独立表单,填写名称、ID 和可选备注,再点「添加并使用」。已有音色 ID 会继续保留,收藏最多 100 项。
展开「管理常用音色」可使用、编辑或移除音色。编辑只修改名称和备注,不会切换正在使用的音色;移除需确认,且不会清空当前音色。添加、编辑和切换都不会保存模型、代理或 API Key 的连接草稿。连接设置独立保存;播放偏好无须保存,音量和倍速用于后续朗读。
首次使用:打开 Settings → 语音朗读,先保存连接设置(Fish Audio API Key、模型和可选代理),再输入并应用音色 ID,最后试听验证。保存后的设置立即生效,无需再次重启。
也可以在 profile 的 cordis.patch.yml 里给 fish-tts 行加 config(会被设置页保存的值覆盖):
- id: fish-tts
config:
model: s2.1-pro-free
format: wav
stateDir: /custom/state/dir
| Key | 默认 | 说明 |
|---|---|---|
model | '' | 默认模型(设置页保存值优先) |
voice | '' | 默认音色 reference_id(设置页保存值优先) |
format | wav | wav / mp3 / opus / pcm |
apiKey | '' | 一般不填;优先使用设置页加密保存的 Key,其次环境变量 FISH_API_KEY |
apiKeyFile | '' | 读取指定 dotenv 文件的 FISH_API_KEY |
proxy | '' | HTTP(S) 代理(设置页保存值优先) |
stateDir | $DSH_HOME/fish-tts | 设置/密钥文件目录 |
key.bin,0600/ACL 收紧),不写入仓库、日志或任何 GET 响应。application/json 并校验同源/loopback Origin,杜绝跨站表单盗刷。/fish-tts/* 路由拒绝非 loopback(127.0.0.1 / ::1 / ::ffff:127.0.0.1)来源的请求(403),即使宿主监听在 0.0.0.0 也不开放远程访问。http://user:pass@host:port 会在保存时被拒绝);环境变量 HTTPS_PROXY/HTTP_PROXY 若带凭据同样会被忽略(不泄露、无回退),请改用无凭据的代理或直连。pnpm install
pnpm run typecheck
pnpm run test # node:test 单元/集成测试(上游 Fish API 使用本地 mock,不触网)
pnpm run build # host: lib/index.js;client: lib/client.js(ModuleLoader CJS closure)
pnpm run smoke # host 入口 + client ModuleLoader 冒烟
pnpm run check:pack # npm pack 内容白名单校验
要求 Node >= 22(Node 20 已 EOL)。CI(
.github/workflows/ci.yml)在 Node 22 与 24 上执行全部门禁,并校验lib/构建产物与提交一致。
src/index.ts(Node,注册 /fish-tts/* 路由与设置存储)src/client/(React,注册 conversation.chat.assistant-actions、conversation.input.left、settings.section 三个 slot)0.1.2-rc.1,其中的会话 API 与界面图标适配保留;当前宿主使用反馈见上方「宿主与桌面端兼容」。其他版本如接口漂移请对照 deepseek-harness 仓库 相应 tag 调整。独立社区项目,与 DeepSeek 无隶属关系,亦未经其认可。DeepSeek 与 DeepSeek Harness 商标归各自所有者所有。 Independent community project — not affiliated with or endorsed by DeepSeek.
FAQs
Text-to-speech (TTS) plugin for DeepSeek Harness — Fish Audio API only, bring your own key. Per-message read-aloud, auto-read toggle in the composer, settings for model / voice / encrypted API key / proxy. Third-party, not affiliated with Fish Audio.
The npm package dsh-fish-tts receives a total of 303 weekly downloads. As such, dsh-fish-tts popularity was classified as not popular.
We found that dsh-fish-tts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.