<p align="center"><img src="docs/assets/deepseek-mascot-voice-hero.png" alt="DSH Mobile Voice Call" width="100%"></p>
DSH Mobile Voice Call
There is no app to download. Scan a QR code with a phone or tablet and call the DeepSeek mascot directly from the browser. You can chat with her or let her continue using DSH tools to operate the computer and organize files.

简体中文 · [Installation](#install-and-run) · DSHFind
How it works
DSH is already a web application, so mobile access does not need a separate APK. The plugin connects through DSH's supported plugin composition without patching the core. Its phone page is deliberately limited to the call flow, while sessions, archive state, language, and appearance continue to come from DSH. That leaves only a thin compatibility layer to maintain as DSH evolves.
DSH, the authenticated bridge, whisper.cpp, and Hojo-TTS-Light run on the computer. A Cloudflare Quick Tunnel supplies the temporary HTTPS address, while the phone browser captures audio and plays the result. Recordings return to the computer for local transcription, and the text is sent through DSH's native session RPC. Hojo-TTS-Light turns DeepSeek's reply into WAV audio for automatic playback on the phone. Windows system speech remains available while Hojo is preparing or unavailable.
- Lists existing idle top-level sessions instead of exposing the full text-chat interface.
- Requests microphone access and starts the call as soon as a session is selected.
- Supports muting, interrupting speech, hanging up, and cancelling an active turn.
- Hides sessions archived in DSH.
- Follows DSH's English/Chinese preference and light/dark appearance.
- Keeps the one-time pairing token in the URL fragment, then uses an
HttpOnly,SameSite=Strictcookie.
Screenshots
<p align="center"><img src="docs/assets/mobile-voice-call-in-action.jpg" alt="A DeepSeek voice call running in a phone browser" width="390"></p>
<p align="center"><img src="docs/assets/voice-call-pairing-redacted.png" alt="DSH Mobile Voice Call pairing dialog with the QR code redacted" width="640"></p>
Install and run
Requirements
- A working DSH Web profile.
- The default automatic setup targets Windows x64.
- Hojo-TTS-Light requires
uvto be available onPATH; a separately managed system Python installation is not required.
Install from GitHub
Run these commands from the DSH source repository:
pnpm dsh plugin --profile web add "github:SnowfallC/dsh-mobile-voice-call"
pnpm dsh webInstall from a local checkout
git clone https://github.com/SnowfallC/dsh-mobile-voice-call.git "C:/path/to/dsh-mobile-voice-call"
cd "C:/path/to/deepseek-harness"
pnpm dsh plugin --profile web add "C:/path/to/dsh-mobile-voice-call"
pnpm dsh webFirst-time speech recognition and TTS setup
Neither component requires a manual model download, but the first setup needs an internet connection:
- Speech recognition (whisper.cpp): when DSH starts the plugin, it downloads the official Windows x64 build (about 8 MB) and the multilingual
smallmodel (about 466 MiB). Fixed sizes and SHA-256 digests are verified before either file is used. A usable call link appears after this step; later launches reuse the cache. - Speech synthesis (Hojo-TTS-Light 80M): warm-up starts in the background when the Voice call panel is opened. The plugin uses
uvto create an isolated Python 3.12 environment, installs pinned CPU inference packages, and downloads about 348 MB of model files plus the pinned upstream inference script. QR pairing does not wait for this work. If a phone connects early, it displays a voice-engine warm-up message. A failed Hojo setup falls back to Windows system speech. - Cache location: assets are stored under
$DSH_HOME/cache/dsh-mobile-voice-call/; whenDSH_HOMEis unset, the usual location is%USERPROFILE%/.dsh/cache/dsh-mobile-voice-call/. Completed downloads are reused. - Existing local components: set
whisperExecutablePath,whisperModelPath,hojoPythonPath, orhojoModelDirectoryto existing files and directories to bypass the corresponding automatic setup.
Model files and CPU packages need time and disk space on the first run; download speed depends on access to GitHub, Hugging Face, and the Python package indexes. When setup is ready, click Voice call in the lower-right corner, scan the QR code, choose a session, and speak. Revoke the link from the desktop when the call is over.
Browser requirements and limits
- The page must use HTTPS; the Quick Tunnel provides it.
- The browser must support microphone capture and Web Audio; browser speech synthesis is not required. Recent Android Chrome and iOS Safari are recommended.
- Do not remain in the embedded browser supplied by a QR scanner, WeChat, QQ, or Lark. Use its top-right menu to open the page in a system browser.
- Speech recognition runs locally through whisper.cpp on the computer and does not depend on Android
SpeechRecognition. Raw recordings are not submitted to DeepSeek, but they still travel from the phone to the computer through the Cloudflare tunnel, so this is not an end-to-end encrypted path. - Calls are turn-based rather than true full-duplex audio. Handle tool approvals and other sensitive actions on the desktop.
- Running sessions are disabled in the selector to avoid concurrent writes to the same turn.
Local speech configuration
The default setup targets Windows x64. With whisperExecutablePath and whisperModelPath set to auto, the plugin installs both assets automatically. You can instead provide paths to an existing whisper-cli executable and a GGML model. whisperThreads controls transcription threads and defaults to 8.
Speech synthesis now defaults to Hojo-TTS-Light 80M. A bundled synthetic reference clip gives the cloned Chinese voice a cute, lightly tsundere character. On first launch, the plugin creates an isolated Python 3.12 environment in the DSH cache and downloads roughly 348 MB of model files plus the CPU inference runtime; no system Python setup is required. Use hojoReferenceAudioPath together with an exact hojoReferenceText transcript to provide your own voice reference, tune CPU usage with hojoThreads, or point hojoModelDirectory and hojoPythonPath at an existing setup. While Hojo is still preparing, or if synthesis fails, the plugin falls back to Windows system speech. Automatically downloaded model files and official inference source are pinned by version, size, and SHA-256 digest.
The 80M engine loads on demand. DSH startup prepares only the lightweight fallback voice; opening the Voice call panel starts Hojo warm-up in the background. The model is loaded once per DSH process, so closing and reopening the panel does not repeat initialization. Before synthesis, the client removes English and Chinese parenthesized passages so action, tone, and role-play directions are not spoken; the original on-screen reply remains unchanged.
Playback splits replies at periods, question marks, and exclamation marks. The plugin reads native DSH assistant/chunk events every 250 milliseconds, submitting and playing each complete sentence without waiting for the whole turn to finish. The single Hojo model still processes later sentences through a safe queue. Hojo does not expose frame-level audio streaming, so this is sentence-level streaming. Text appears as its corresponding audio begins, and the default runtime uses eight CPU threads.
Once a call starts, the plugin prepends a voice-conversation instruction to the first spoken message only. It asks DSH to keep later replies natural, concise, and suitable for reading aloud, without adding parenthesized actions, role-play narration, or stage directions. The instruction is not injected again on every turn. Markdown cleanup happens locally before playback and does not alter the original reply stored in the session.
> [!WARNING] > This feature is experimental. Traffic is relayed through Cloudflare, and Quick Tunnels provide neither a stable hostname nor a service-level guarantee. Avoid sensitive work and revoke the link after use.
Development
pnpm install
pnpm check
pnpm testSee [cordis.patch.yml](cordis.patch.yml) for configuration. Report security issues according to [SECURITY.md](SECURITY.md). The code is licensed under the [MIT License](LICENSE).
Uninstall
pnpm dsh plugin --profile web remove dsh-mobile-voice-callRestart DSH afterward. The plugin leaves no patch in the DSH core repository.