Foreword¶
In DeepSeek Harness (DSH), sometimes you need to have AI responses read aloud: while walking, cooking, or simply wanting less screen time. DSH’s built-in reading feature uses system voices or Edge TTS, but they often sound mechanical. General clipboard reading tools require copying text first and switching to another app, disrupting the conversation flow.
dsh-omi-voice addresses this path: within the DSH chat interface, click the 🔊 next to a response to read the final answer using Doubao TTS’s natural Chinese voice. The audio is synthesized locally by the Omi engine, with the Doubao API Key provided by you (BYOK) and stored only in the macOS Keychain—the plugin itself never holds the key.
What This Is¶
dsh-omi-voice is a client-side plugin for DeepSeek Harness, maintained by PolinniZhong. It works with dsh web (including the desktop version) and a resident Omi engine on macOS (v0.1.2+).
The plugin acts like a “remote control”: it fetches response text from DSH and calls the local Omi engine via 127.0.0.1:8765. Text cleaning, segmentation, Doubao TTS streaming synthesis, playback, pause/resume, and caching all happen within the engine. It’s open-sourced under the MIT license.
Core Features¶
Below are the documented capabilities of the plugin, sourced from the project README and package.json (current version 0.1.2).
Click to Read, Pause, Resume¶
- Click the 🔊 next to an AI response to start reading.
- Clicking again during playback = pause; another click = resume from where you paused.
- Clicking the 🔊 of another message interrupts current playback and switches to the new content.
No auto-reading: Only manual clicks on 🔊 trigger synthesis, avoiding unintended billing.
Reads Only Final Answers and Filters Unreadable Content¶
Tool execution logs and thought processes are not read. Code fences, tables, and pure graphics (box drawing/ASCII) are filtered before requests. If the response contains only these, the 🔊 button becomes disabled with a prompt “No readable content.”
Doubao TTS and BYOK¶
Uses Doubao TTS 1.0 (seed-tts-1.0). The API Key is configured in the Omi engine settings and stored in macOS Keychain; the plugin is keyless, and communication is limited to local 127.0.0.1.
Billing is per character, incurred by you in your Volcengine account. The engine includes cost controls: deduplication of identical text within 3 seconds; LRU cache for the last 3 responses (≤5MB, cleared on exit); no requests for invalid content like pure tables or code (invalid_text).
Platforms and Dependencies¶
- DSH:
dsh web(including desktop). - Omi Engine: macOS Apple Silicon, v0.1.2+.
- Windows not supported yet (Omi engine is macOS-only).
Installation and Enabling¶
Installation involves two parts: the DSH plugin and the local Omi engine.
1. Install the DSH Plugin¶
Officially recommended installation from a specific GitHub version:
dsh plugin --profile web add "github:PolinniZhong/dsh-omi-voice#v0.1.2&path:/"
The project is also published to npm, so you can install directly:
dsh plugin --profile web add dsh-omi-voice
For local development, you can install from a directory:
dsh plugin --profile web add /path/to/dsh-omi-voice
2. Build and Run the Omi Engine¶
The engine source is in the engine/ directory of the repository. Follow engine/README.md to run ./engine/build/build-service.sh, then copy the output to ~/Applications/Omi DSH.app. It’s recommended to enable auto-start on boot to avoid the “Omi DSH engine not detected” prompt when clicking 🔊.
3. Configure the Doubao API Key¶
This plugin uses BYOK. You need to enable “Speech Synthesis 1.0” in Volcengine, create and associate an API Key for this service. Three-step summary:
- Log in to the Volcengine Console, go to “Doubao Speech” (Speech Technology).
- Enable “Speech Synthesis Large Model / Speech Synthesis 1.0”.
- Create an Access Key and associate it with the service above; enter the Key in Omi DSH’s “Settings > API Key” and save.
After these steps, you can use 🔊 reading in DSH chats.
Typical Usage¶
The workflow is as follows:
flowchart LR
A[Click 🔊] --> B[Plugin fetches final answer text of response]
B --> C[POST 127.0.0.1:8765/v1/speak]
C --> D[Omi engine cleans + segments]
D --> E[Doubao TTS streaming synthesis]
E --> F[Plays via local speaker]
Daily operations:
- Confirm Omi DSH is running and Doubao API Key is saved.
- Wait for the AI to complete a response in DSH chat.
- Click the 🔊 next to that response; if needed, pause/resume on the same button, or click another message’s 🔊 to switch reading target.
If the engine isn’t running or the Key isn’t configured, clicking provides a clear prompt (including how to open Omi). The voice ID can be changed in Omi settings; the current plugin doesn’t offer a voice UI.
Local HTTP endpoints include /v1/status, /v1/speak, /v1/pause, /v1/resume, /v1/stop, detailed in the repository’s docs/API.md.
Use Cases and Considerations¶
Who It’s For
- Users on macOS who already use DSH desktop or
dsh weband want to listen to AI responses in a more natural Chinese voice. - Those comfortable with BYOK: enabling Doubao speech synthesis yourself and paying per character.
- Prefer “click-to-read” over automatic playback, and mainly want to hear final answers rather than tool logs.
Before Use
- The plugin runs with the permissions of the current
dshprocess; before installation, it’s recommended to review the GitHub source and MIT license. - Requires additional installation and maintenance of the local Omi DSH engine—it’s not “just install the plugin.”
- Trade-off with
dsh-voice-chat: the latter is zero-key and zero-cost, but uses system mechanical voices; this plugin uses Doubao’s natural voice, at the cost of BYOK and per-character billing.
The community directory SkillHub lists this plugin (category: Client); the site is an independent community directory with no official affiliation to DeepSeek or High-Flyer.
Conclusion¶
dsh-omi-voice shifts DSH conversation reading from “system broadcast voice” or “copy and read” to “one click within the chat, Doubao voice, local synthesis”: the plugin handles text fetching and triggering, the Omi engine handles synthesis and playback, and the key stays in your own keychain.
- Community directory: https://www.skillhub.cn/plugins/PolinniZhong/dsh-omi-voice
- GitHub: https://github.com/PolinniZhong/dsh-omi-voice