Deepseek-Continuity
DeepSeek Harness plugin for local image / voice / music / SFX generation: the same character stays the same character across calls, degenerate output is refused rather than returned, and the GPU is untouched when idle.
Install / Use
claude mcp add linxuhao -- npx -y github:linxuhao/Deepseek-ContinuityIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
OtherSupported Platforms
Skill content
View source on GitHub场记 / 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.
场记 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.
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.
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 |
| Post | remove_bg slice_sheet | real RGBA cutout (CPU), and a grid sheet cut into single frames |
| State | continuity_status | which engines are up, which capabilities are on, where the assets live |
Two of these read in rather than write out, and they are the ones people miss:
import_actor/import_subjectpin something you already have — a real actor's recording, a character sheet drawn elsewhere — and everything downstream is identical to a natively cast one (measured: an imported actor tracks a native one to 11 Hz).transcribecloses the loop. A cloned line that swallowed its last two words sounds completely normal; it is only visible once you read it back and compare it to the script. That is also what fills in an imported recording's transcript when you don't have one (the ASR model loads on demand and unloads with the rest — 3.05 GB while resident, 0.4 s for 9.5 s of audio).
The table above is the short version — all 21 tools, grouped, are in Tools.
Install
uvx --from dsh-continuity continuity-setup
That one command does the whole backend: preflight → build the engines → fetch only the weights this machine can use → start them.
The PyPI distribution is
dsh-continuity(the import name stayscontinuity_mcp). It is notcontinuity-mcp— that name on PyPI belongs to an unrelated project, so do notuvx continuity-mcp.To run from source instead:
uvx --from git+https://github.com/linxuhao/Deepseek-Continuity continuity-setup
Then add the plugin to your dsh profile. dsh plugin shells out to pnpm, so install that
first if you have not (corepack enable pnpm); without it the command stops at
pnpm not found on PATH:
dsh plugin --profile <your-profile> add dsh-plugin-continuity
Add it to a profile that already has an app bundle. If you point it at a new profile, dsh
creates one containing only @deepseek-ai/dsh-base plus this plugin — no app, so booting it
does nothing and hangs. Add the app yourself in
~/.dsh/profiles/<name>/package.json:
"dsh": { "profile": { "bundles": [
"@deepseek-ai/dsh-base", "@deepseek-ai/dsh-headless", "dsh-plugin-continuity"
] } }
The bundle reads its settings from the environment, so export what continuity-setup printed
for your machine before booting the profile:
export CONTINUITY_STATE_DIR=~/.continuity
export CONTINUITY_SD_SERVER=http://127.0.0.1:9020
export CONTINUITY_AUDIO_SERVER=http://127.0.0.1:9021
To wire it by hand instead — continuity-setup prints this block filled in for your machine:
- insert:
- id: continuity
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: continuity
transport: stdio
command: uvx
args: ['--from', 'dsh-continuity', 'continuity-mcp']
env:
CONTINUITY_STATE_DIR: !!js process.env.CONTINUITY_STATE_DIR ?? ''
SD_SERVER: !!js process.env.CONTINUITY_SD_SERVER ?? ''
AUDIO_SERVER: !!js process.env.CONTINUITY_AUDIO_SERVER ?? ''
(the complete row, with every passthrough documented: bundle/cordis.patch.yml)
continuity-setup checks the machine before it downloads anything, and sizes the install to
what it finds. Run continuity-setup --check first to see what it would do — that reads
hardware and changes nothing:
体检结果:
GPU AMD Radeon RX 7800 XT (RADV NAVI32) (16.0 GiB, 此刻可用 15.8 GiB, DISCRETE_GPU, vulkan device 1)
未选 AMD Radeon RX 7900 XTX (RADV NAVI31) (24.0 GiB, 此刻可用 1.4 GiB)
跳过 llvmpipe —— 软件渲染, 不是真显卡
内存 30.9 GiB
磁盘 3118.4 GiB 可用 / 需要 34 GiB
生图 启用
音频 启用
抠图默认档 best
Two details in there that exist because the naive version is wrong:
- It skips
llvmpipe. The software rasterizer advertises 30.9 GiB of "VRAM" (it is your system RAM) and would win any "pick the biggest card" contest. Everything would then run on the CPU — working, looking completely normal, and unusably slow. - It picks by free VRAM, gates by total VRAM. On the machine above the 24 GiB card has 1.4 GiB actually free because another process holds it; picking by size would select it and then OOM. But "is this card good enough" is a hardware question, so that one uses the total — otherwise a 16 GiB card would be rejected for having a game open.
Minimum requirements
| | Minimum | Notes | |---|---|---| | GPU | 8 GiB VRAM | Peak is 6.80 GiB (measured). Requests are serialized, so peak is one model, not the sum. | | GPU API | Vulkan 1.2+ | No CUDA, no ROCm. Kernels are SPIR-V compiled at runtime. | | Disk | 34 GiB during install, 21.8 GiB after | 19.7 weights + 2.1 runtime image + 8.5 build layers (reclaimable) + 4 headroom. | | Host RAM | 16 GiB (8 GiB workable — see below) | Driven by transient peaks, not idle. | | CPU | any x86-64 | Background removal runs on CPU. |
Audio-only installs (see below) need 20 GiB during install, 9.5 GiB after.
Every row above is about the halves you run locally. --image-api-server (or --sd-server)
drops the GPU row to the 4 GiB the audio half needs and leaves 10.1 GiB of weights undownloaded,
--asr-server another 2.3 GiB, and --audio-server the rest — see
Bring your own backend.
All VRAM/RAM figures on this page are GiB (2³⁰ bytes), which is what rocm-smi and
vulkaninfo report. An earlier version of this README labelled them GB; that was wrong and
made the headroom look tighter than it is.
Vulkan instead of CUDA is not a preference — it is why this runs at all. ROCm miscomputes VAE decode on this GPU class (ROCm#6633): five decodes of identical input returned five mutually uncorrelated results. Vulkan/RADV compiles SPIR-V at runtime inste
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
78.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
ruflo
70.8k🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
headroom
69.1kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
46.8kOpen-source super AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-model, multi-channel. Lightweight, extensible, one-line install. (formerly chatgpt-on-wechat)

