1624318455/dsh-plugin-tts

1624318455/dsh-plugin-tts

用免费 Edge TTS 或你自己的 RVC 音色朗读 AI 回复:消息朗读与自动朗读、长文自适应分块渐进播放(无缝衔接)、音色包仓库一键安装、便携 RVC 运行时。

语音与音频deepseek-harnessedge-ttstext-to-speech

dsh-plugin-tts

Links

  • 中文 README(简体中文,与本页逐节对应)
  • User Guide (执行手册) — step-by-step, for first-time users
  • RVC Custom Voice Guide — custom voices · chunked progressive playback · compact index · voice packs · portable runtime
  • Index-TTS2 Guide — local reference-audio voices
  • CosyVoice Guide — local zero-shot prompt cloning (CosyVoice-2.0-0.5B)
  • Cloud TTS Guide — paid Google voices · API key · usage & billing caliber
  • Edge TTS Guide — default online reading
  • Adaptive chunked playback design — how gapless long reads work

dsh-plugin-tts — Edge TTS + RVC / Index-TTS2 / CosyVoice / Cloud voices for DeepSeek Harness

A dual-sided (Host + Web UI) DeepSeek Harness plugin that reads assistant replies aloud — Microsoft Edge's free online TTS out of the box, your own RVC voice models for custom voices, local Index-TTS2 reference-audio voices, local CosyVoice zero-shot prompt clones (CosyVoice-2.0-0.5B), or paid Google Cloud TTS voices (Chinese Standard/Wavenet). Long replies stream with gapless adaptive chunked playback; voices install one-click from a voice-pack registry; a portable RVC runtime means no RVC WebUI install is needed.

📖 First time? See the user guide (执行手册) — every step
covers "what / how / how to tell it worked": read-aloud, RVC voices and
voice-pack downloads.

Features

  1. Read-aloud button on every finalized assistant message (in the

copy / feedback / branch action row): click to speak that message (the button shows an animated equalizer), click again to stop.

  1. Auto-read toggle in the composer tool row (between the command and the

access-mode buttons): when on, every newly completed assistant reply is read aloud automatically (the toggle gets a circular highlight); when off, nothing is auto-read.

  1. Voice settings panel under 设置 → 插件 → 语音:
  • TTS provider: Edge TTS (free, no API key) / custom RVC voice /

local Index-TTS2 voice / local CosyVoice clone / Google Cloud TTS (paid, API key)

  • Voice: 22 live-verified Edge TTS voices (default 晓萱 zh-CN-XiaoxuanNeural);

8 Cloud voices in the cmn-CN group (default cmn-CN-Wavenet-A, free-form id allowed)

  • Sound tuning: rate / pitch / volume (0 = default, shared by Edge & Cloud)
  • RVC config: service URL + model (.pth) / index (.index) picker, base voice,

voice tuning and advanced params — see the RVC Guide

  • Index-TTS2 config: service URL (default 7880) + reference-voice

picker/refresh/upload + clean-text toggle + emotion control + sampling params — see the Index-TTS2 Guide

  • CosyVoice config: service URL (default 7890) + prompt-audio picker/refresh/upload +

prompt transcript (required, in order and in full) + speed (0.5–2.0) + seed (0 = random) — see the CosyVoice Guide

  • Cloud config: API Key (Host-file-only, write-only input) + Project ID (optional) +

test button + this month's local usage per tier (Standard 4M / Wavenet-Neural2-Chirp3 1M) — see the Cloud Guide

  • Voice packs: one-click install of voices from a registry
  • Preview: type text and press the play (triangle) button — a spinning

loader shows while it is synthesizing/playing (click again to stop), failures show an inline message.

  1. RVC custom voices: read with your own trained RVC models, computed

locally (index-free mode, advanced params — see the RVC guide).

  1. Gapless long reads: adaptive chunked progressive playback — probe-calibrated

chunk size, play-while-converting, Web Audio sample-accurate joins, no gaps between chunks (see the design doc).

  1. Mini player while reading: pause / resume + playback speed (1x / 1.25x /

1.5x) on the message's action row; chunked long reads surface a visible "chunk x/y" counter.

  1. Themed tooltips & RVC onboarding: hover tooltips use the app's theme

tokens (--dsw-*); the RVC panel opens with a first-time 3-step guide (per-OS startup commands + one-click diagnostics).

  1. Download audio: a download button on each message saves the synthesized

audio — MP3 for Edge/Cloud reads, WAV for local (RVC/Index-TTS2/CosyVoice) reads — reusing the in-session cache so a just-read message downloads instantly. Long chunked reads have no single output file yet and report "not supported" instead of starting a wasteful re-synthesis.

  1. Read selected text: selecting text in a message shows a floating

"朗读选中" chip — click it to read just that selection.

  1. Streaming long reads (Edge too): long plain-Edge reads also stream

progressively (first chunk plays while the rest synthesize), reusing the gapless chunked pipeline — no more waiting for full synthesis.

  1. Approval voice alerts: optional voice broadcast of Agent approval events.

When enabled, an approval request (approval/asked) is announced aloud and interrupts the current read (the agent is waiting on the decision); an approval result (approval/decided) is announced only when idle. Alerts always use Edge TTS with their own alert voice (independent of the RVC service), are deduplicated by approval id, and off by default. (Scope note: task-completion announcements are deferred to a later phase — the jobs subsystem has no session-event channel this plugin can observe yet.)

  1. Clean reads, quiet RVC: message Markdown (code blocks, tables, links,

quotes, task lists) is cleaned before reading — no symbol soup; an opt-in "read raw Markdown symbols" toggle keeps verbatim reads for source code. With the Edge provider the RVC panel stays fully hidden behind a single "need a cloned voice?" entry, so casual reading is zero-config.

Requirements

  • DeepSeek Harness web profile (dsh web)
  • Node.js >= 22 (the worker uses the native WebSocket)
  • For local-voice providers only (nothing to install for Edge/Cloud):
  • RVC custom voices: a local RVC inference environment (an RVC WebUI

or the portable runtime) and a running rvc-server.py — see the RVC Guide → "启动本地 RVC 服务" and the User Guide §4.2. macOS users start there too.

  • Index-TTS2 voices: the local index-tts2-nvidia bundle's API service

(启动api服务.bat, default port 7880) — see the Index-TTS2 Guide.

  • CosyVoice clones: the local CosyVoice-2.0-0.5B bundle's cosy-server.py

(启动cosy服务.bat, default port 7890) — see the CosyVoice Guide.

Install

Four equivalent ways (pick any one):

# dsh-market UI: search the market for the plugin name and install
# npm package:
dsh plugin --profile web add "@memef1f1y/dsh-plugin-tts"
# GitHub source:
dsh plugin --profile web add "github:1624318455/dsh-plugin-tts#main"
# or local development:
dsh plugin --profile web add "file:/path/to/dsh-plugin-tts/plugin"

Restart dsh web; the plugin then loads automatically as a profile bundle. Uninstalling any one of the above first is required before installing another: they all register the same loader entry id (tts), and the installer refuses duplicates (it rolls back instead of overwriting).

Voices (live-verified, Edge TTS)

Region · Voices Simplified Chinese · Xiaoxuan 晓萱 · Xiaoyi 晓伊 · Yunxi 云希 · Yunyang 云扬 · Xiaoxiao 晓晓 · Yunjian 云健 · Yunxia 云夏 · liaoning-Xiaobei 晓北 · shaanxi-Xiaoni 晓妮 Taiwan · HsiaoChen 曉臻 · HsiaoYu 曉雨 · YunJhe 雲哲 Hong Kong · HiuGaai 曉佳 · HiuMaan 曉曼 · WanLung 雲龍 English · Aria · Jenny · Guy · Sonia (UK) Other · Nanami 七海 (ja-JP) · SunHi (ko-KR) · Denise (fr-FR)

Note: legacy voices such as Xiaohan / Xiaomeng / Xiaorui / Xiaoshuang were
removed by the Edge endpoint (1007 Unsupported voice) and are not listed.

Architecture

Layer · Location · Role Host · lib/index.mjs · Registers webServer routes: /dsh-tts-api/speak (synthesis / chunk queue, all providers), /dsh-tts-audio/ (audio bytes), /dsh-tts-api/rvc-next (next chunk / job cancel), /dsh-tts-api/rvc-files + /rvc-compact-index + /rvc-packs* (RVC service proxy / packs), /dsh-tts-api/index-* and /dsh-tts-api/cosy-* (local service proxy + config), /dsh-tts-api/cloud-* (Cloud key/usage/test), /dsh-tts-api/notify (approval-alert queue), /dsh-tts-api/diagnose (one-click diagnostics); runs a zero-dependency Edge worker via node -e Client · lib/client.js · Web Audio chunk player (sample-accurate joins, ` fallback) in shell.overlay + the UI entries (read-aloud button / auto-read toggle / settings panel); talks to the Host through fetch`

The TTS worker mirrors node-edge-tts@1.2.10: Sec-MS-GEC query params (ticks rounded to the 5-minute boundary), Sec-MS-GEC-Version=1-143.0.3650.75, Path:audio binary framing, xml:lang derived from the voice locale, one retry on abnormal (1006) closures. Audio is audio-24khz-48kbitrate-mono-mp3.

Edge cases handled

  • Clicking the read button of the message being auto-read stops it; another

message's button switches to manual reading.

  • Disabling auto-read never interrupts a manual read; it stops auto reads.
  • A newly completed message (auto on) interrupts the current read; text-less

messages are skipped; session switches only stop auto reads.

  • Stopping / switching messages eagerly cancels the active RVC chunked job on

the Host, so the local conversion service stops scheduling new chunks and releases GPU/memory promptly (no waiting for the lazy GC).

  • Repeatedly reading the same text + voice reuses the in-session audio cache

(no re-synthesis); if the cached backing file was cleaned by the OS, it transparently re-synthesizes instead of serving a stale 404 URL.

  • If an Edge voice was removed by the endpoint (1007 Unsupported voice), the

voice is pruned from the picker and the plugin auto-falls back to the default.

  • Audio is autoplay-unlocked on the first user gesture (Web Audio context

resumed + silent clip) so reads aren't silently blocked by browser policy.

  • Esc / S (outside an input) stops the current read-aloud.
  • Synthesis / playback failures surface a themed toast (message read-aloud and

auto-read no longer fail silently; the preview panel keeps its inline error). In RVC mode the error toast carries a one-click "read with Edge TTS instead" action; with the opt-in toggle "auto-switch to Edge TTS when RVC fails" in the RVC settings (off by default — RVC is fully local, auto-fallback sends the text to Microsoft's endpoint), a failed RVC read silently retries with the RVC base voice via Edge TTS and shows a warn toast.

  • Smart chunking never splits URLs / emails / decimals / versions ("3.14")