dsh-plugin-continuity
本地生成图像/配音/音乐/音效并听写,同一性锁定:角色、动物、道具与配音角色定妆定声一次,之后每次调用复用同一份参考;退化产物(接近纯色的图、静音的音频)被拒绝而不是当成成功返回;生成的台词可以听写回文字,好让吞掉结尾的克隆暴露出来。空闲时引擎卸载显存,生图与听写也可改指向任意 OpenAI 形状的 API 而不用本地 Vulkan 后端。
安装
dsh plugin --profile web add dsh-plugin-continuity
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
场记 / Continuity
A DeepSeek Harness plugin that gives an
agent local image / speech / music / SFX generation, the transcription to hear its own output
back, and a memory of what it made — the same character stays the same character across
every call, and a failed generation is never allowed to pass as a success.
Runs locally. Models are lazy-loaded per request and released when idle, so **when you are
not using it the GPU is untouched** — 0.21 GiB resident, measured. You can play a game on
the same card.
Or keep only the half you want local: image generation speaks any OpenAI-shaped /v1/images/*
API and transcription any OpenAI-shaped /v1/audio/transcriptions, and telling continuity-setup
so means that half's engine and weights are never downloaded — the 8 GiB VRAM gate leaves with the
image half. See [Bring your own backend](#bring-your-own-backend-optional).
场记 is the continuity supervisor on a film set. Their entire job is two things: make sure
the costume, hair and props match between takes, and catch the mistake on set before it is
cut into the film. That is exactly this plugin's job.
What it looks like
One create_character call fixed this face. Everything after it is a single subject_image
call carrying nothing but a scene — no reference image passed by hand, no re-describing the
character, no retouching. These are the files the tools returned.
<table>
<tr>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-00-reference.jpg" width="100%" alt="the create_character reference image"><br><sub><code>create_character</code> — the reference every later call is held against</sub></td>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-01-lantern-closeup.jpg" width="100%" alt="“close-up portrait, lit from below by a lantern”"><br><sub>“close-up portrait, lit from below by a lantern”</sub></td>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-02-cliff-profile.jpg" width="100%" alt="“strict side profile, on a cliff edge at dusk”"><br><sub>“strict side profile, on a cliff edge at dusk”</sub></td>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-03-snow-behind.jpg" width="100%" alt="“from behind, looking back over her shoulder, snow”"><br><sub>“from behind, looking back over her shoulder, snow”</sub></td>
</tr>
<tr>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-04-campfire.jpg" width="100%" alt="“sitting by a campfire, cleaning her gauntlet, low angle”"><br><sub>“sitting by a campfire, cleaning her gauntlet, low angle”</sub></td>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-05-red-armour.jpg" width="100%" alt="“wearing heavy red lacquered plate armour”"><br><sub>“wearing heavy red lacquered plate armour”</sub></td>
<td width="25%"><img src="https://raw.githubusercontent.com/linxuhao/Deepseek-Continuity/main/assets/kestrel-06-woodcut.jpg" width="100%" alt="“as a stark black and white woodcut print”"><br><sub>“as a stark black and white woodcut print”</sub></td>
</tr>
</table>
The blind right eye, the scar through the brow, the bone pendant and the brass gauntlet come
through all seven. That is the entire point: the same description through generate_image
gives you a different woman every time, which is how a game ends up with three protagonists.
Two things it did not do, kept here because a demo that only shows the wins teaches you
nothing about the tool:
- Style requests only partly take. The woodcut landed. "Pixel-art sprite" was asked for
twice and ignored both times — the reference image dominates the style of the output, which
is exactly the mechanism that makes the face hold.
- The armour is layered, not swapped. The face and the gauntlet held, but the red plate
went on over the grey coat instead of replacing it.
The same for voices
create_actor once, then one actor_tts call per line. Each line comes back as its own
24 kHz mono WAV; they are joined here into one clip because GitHub will not play a .wav
inline.

▶ Play the 19-second clip — GitHub strips <video> out of a
README, so the picture above is a still and the link opens GitHub's own player.
别碰那扇门。上一个碰它的人,我埋在山下第三棵松树底下。
我这只眼睛看不见,可另一只看得比你清楚。
拿上灯,跟紧我。这条路我走过十七次,没有哪一次是一样的。
Three different lines, three different lengths, one voice. Through generate_speech — the
same voice description, no actor — those three lines are three different people; the
measurement behind that claim is in [Two things it actually does](#two-things-it-actually-does).
What it can do
· tools ·
Look · create_character create_animal create_object import_subject subject_image · pin a character, animal or prop once; every later image is that one
Voice · create_actor import_actor actor_tts · cast a voice once; every later line is that voice
Hearing · transcribe · read a WAV back as text — including one this plugin just made
Music · generate_music · Stable Audio, up to 120 s, no loop points — score a scene, not a BGM loop
SFX · gen_sfx sfx_presets · procedural sfxr: milliseconds, byte-identical for a given seed, no model and no VRAM at all
One-offs · generate_image generate_speech · for things that never recur; their own descriptions say so and point back at the pinning tools
**P
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:10,最后更新 2026-09-17