Piano performance plugin: ask the agent to play a piece and it renders on a Canvas2D grand piano with real Salamander Grand samples, an immersive stage, and an interactive 88-key keyboard.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-pianist
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Laplace-bit/dsh-pianist
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
dsh-pianist brings a piano-playing Agent to the DeepSeek Harness (dsh) Web UI: tired of coding? Ask the AI to play a tune and relax. How well it plays is entirely up to the model. A toy — and also an exam.
Project home page: https://laplace-bit.github.io/dsh-pianist/
The result
Click the cover above to watch the showreel (docs/showreel.mp4), or visit the online demo, pick a piece, and hear it rendered in real time.
What it sounds like
- The timbre comes from real recorded samples of Salamander Grand Piano V3 — six velocity layers, key release, string resonance, pedal action — not synth "beeps".
- Two swappable skins: Obsidian & Gold (a black glossy grand with warm gold trim; keys flash gold on impact) and Sakura Pearl (a pearl-white body with rose-gold details under a sakura-tinted skylight).
- A full-screen immersive stage with waterfall notes, rippling reflections, shooting stars and mist that rise and fall with the performance.
- All 88 keys are playable: mouse glissando, computer keyboard, arrow-key note selection — play it yourself if you like.
- Underneath it all is a deterministic timeline. Pause, scrub, replay — the same score plays back identically every time. That is what makes it an exam paper: whether the model can really play becomes obvious the moment it tries.
Installation
In the DeepSeek Harness source repository:
pnpm dsh plugin --profile web add dsh-pianist
If dsh is already on your PATH:
dsh plugin --profile web add dsh-pianist
The npm package ships prebuilt artifacts — usable right after install.
Then start the UI:
pnpm dsh web
To uninstall: pnpm dsh plugin --profile web remove dsh-pianist.
Kernel Compatibility
| DSH kernel | This plugin |
|---|---|
| 0.1.0-rc.5 - 0.1.0-rc.7 | ✅ all versions |
| 0.1.1-rc.2 | ✅ all versions |
| 0.1.2-alpha.1 - 0.1.2-alpha.3 | ✅ 0.1.0 (build with the 2026-09-01 compat fix); earlier releases fail to load on 0.1.2 |
- ✅ = compatible.
0.1.2-alpha.3is the current host kernel and has been verified live (built-artifact import + test suites); the remaining kernels are covered by the dual-kernel-compatible design (one build, one API surface). - Kernel 0.1.2 removed the
settingsNamespace()runtime helper (on ≤ 0.1.1 it was a validating identity function; 0.1.2 keeps only the same-named type). This plugin does not statically import that symbol any more — it inlines its namespace constant locally and asserts it as theSettingsNamespacetype, which works on both old and new kernels. - The current build no longer statically imports
settingsNamespace(); earlier releases only work on kernels ≤ 0.1.1 — rebuild or update to a build that contains the fix. - Never statically import runtime symbols from
@deepseek-ai/*packages. The host CLI starts vianode --import tsx/esm, and tsx applies the hosttsconfigpathsmapping, so a bare@deepseek-ai/*import from an external plugin may be redirected into the host's own sources — any host-side rename or removal then explodes at boot as a module instantiation error. Type-only imports (import type) are unaffected.
Usage
Once installed, just request a song in natural language; the Agent hands the full score to the piano:
Play the first eight bars of Ode to Joy, both hands, with sustain pedal.
A C-major scale at 100 BPM, slowed down a little.
Improvise something light and cheerful to help me unwind.
The browser may require one manual click on the play button before sound comes out — that is the browser's autoplay policy, not a bug.
The Settings → Plugins → Pianist card lets you adjust at any time:
- Enable/disable the plugin and switch skins (Obsidian & Gold / Sakura Pearl);
- Immersive stage or chat-card form; it returns to the card automatically when a piece ends;
- Quality (low/medium/high), volume, waterfall notes, pedal and particle-effect toggles.
Changes apply as soon as you save.
License
Plugin code is MIT. The bundled piano recordings come from Salamander Grand Piano V3 (CC BY 3.0); see THIRD_PARTY_NOTICES.md for attribution.
A standalone web page can import the package via npm and register the Web Component:
import { registerDshPianoView } from 'dsh-pianist/demo';
registerDshPianoView();
// <dsh-piano-view> exposes public APIs such as setScore / setPianistSettings /
// play / pause / seek / setRate / requestImmersive.
The settings card is registered under Settings → Plugins via settings.plugin.item. For a local preview landing page, see docs/index.html: pnpm run build && pnpm dlx serve ..
Links
More in this category
PolinniZhong/dsh-omi-voice★ 76
In-chat read-aloud for DeepSeek Harness: tap to read, pause and resume AI replies with natural Doubao TTS voices (BYOK), reading only the final answer with code, tables and diagrams filtered; local engine, plugin keeps no API key.
PensiveFei/dsh-voice-scribe★ 36
Voice input for the web UI: tap Alt (or Alt+Space) to start/stop dictation, browser Web Speech (zero-config) or OpenAI-compatible cloud ASR, optional polish through DSH-configured LLM, settings UI.
beiyege-01/dsh-voice-ai-girlfriend-plugin★ 32
Voice AI girlfriend for the Web UI: FunASR mic input, Qwen3-TTS spoken replies, companion animation window, and two-way QQ chat (text/voice/image push) via NapCat.
1624318455/dsh-plugin-tts★ 25
Reads assistant replies aloud via free Edge TTS or your own RVC voice models: read-aloud buttons + auto-read, adaptive chunked progressive playback (gapless long reads), one-click voice-pack installs from a registry, and a portable RVC runtime.
ppy-web/dsh-plugin-xiaomi-mimo-tts★ 25
Adds Xiaomi MiMo text-to-speech to DSH Web with assistant-message read-aloud, PCM streaming, preset and custom voice design, browser speech fallback, playback controls, and optional UI sounds.
WizisCool/dsh-ears★ 24
Voice input plugin for DeepSeek Harness (dsh): a microphone button in the composer turns speech into a draft transcript, with a choice of speech-recognition backends, optional polish through dsh own LLM routes, and a native settings page.

Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.