Continuity
场记 / Continuity
一个 DeepSeek Harness 插件,为智能体提供本地图像 / 语音 / 音乐 / 音效生成能力,并记住它生成的内容 —— 同一个角色在每次调用中始终保持一致,且失败的生成永远不会被当作成功结果通过。
本地运行。模型按请求懒加载,空闲时释放,因此当你不用它时 GPU 完全不被占用 —— 实测常驻内存 0.21 GiB。你可以在同一张显卡上玩游戏。
场记是电影片场上的连续性监督员。他们的全部工作只有两件事:确保服装、发型和道具在不同镜头之间保持一致,以及在问题被剪进成片之前当场发现错误。这正是这个插件的职责。
安装
uvx --from continuity-mcp continuity-setup # preflight → build engines → fetch weights → start
dsh plugin --profile <your-profile> add dsh-plugin-continuitycontinuity-setup 在下载任何东西之前先检查机器,并根据检测结果调整安装规模。先运行 continuity-setup --check 查看它会做什么 —— 该命令只读取硬件信息,不改变任何东西:
体检结果:
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 可用 / 需要 30 GiB
生图 启用
抠图默认档 best
参考音上限 30s (每秒约 0.19 GiB 显存)其中有两个细节,因为朴素的方案是错误的:
它会跳过
llvmpipe。 软件光栅化器宣称拥有 30.9 GiB 的“显存”(实际上是你的系统内存),会在任何“选最大显卡”的竞争中胜出。然后一切都会在 CPU 上运行 —— 能工作,看起来完全正常,但慢得无法使用。它按空闲显存选择,按总显存设门槛。 在上面的机器上,24 GiB 的显卡实际只有 1.4 GiB 空闲,因为另一个进程占用了它;按容量选择会选中它然后内存耗尽。但“这张卡够不够好”是硬件问题,所以那个判断使用总显存 —— 否则 16 GiB 的显卡会因为开着游戏而被拒绝。
最低要求
最低要求 | 说明 | |
GPU | 8 GiB 显存 | 峰值 6.80 GiB(实测)。请求串行化,因此峰值是单个模型,而不是总和。 |
GPU API | Vulkan 1.2+ | 不支持 CUDA,不支持 ROCm。 内核在运行时编译为 SPIR-V。 |
磁盘 | 安装期间 30 GiB,安装后 19.5 GiB | 17.4 权重 + 2.1 运行时图像 + 8.5 构建层(可回收)。 |
内存 | 16 GiB(8 GiB 可用 —— 见下文) | 由瞬时峰值决定,而非空闲状态。 |
CPU | 任意 x86-64 | 背景移除在 CPU 上运行。 |
仅音频安装(见下文)需要 安装期间 20 GiB,安装后 9.5 GiB。
本页所有显存/内存数字均为 GiB(2³⁰ 字节),与 rocm-smi 和 vulkaninfo 报告的一致。本 README 的早期版本将其标为 GB;那是错误的,会让余量看起来比实际更紧张。
选择 Vulkan 而非 CUDA 不是偏好问题 —— 这正是它能运行的原因。ROCm 在这类 GPU 上错误计算 VAE 解码(ROCm#6633):对相同输入进行五次解码,返回了五个互不相关的结果。Vulkan/RADV 在运行时编译 SPIR-V,而不是查找按架构划分的内核表,在这里既正确又更快。副作用是跨三家厂商的可移植性。
GPU 厂商
容器如何获得 GPU | 状态 | |
AMD |
| 已测试(RX 7800 XT,RX 7900 XTX) |
Intel |
| 未测试 |
NVIDIA |
| 未测试 |
我只有 AMD 显卡,所以不会声称更多。代码中没有任何 AMD 特有的内容 —— 没有 CUDA、ROCm、HIP、/dev/kfd 或 gfx 目标 —— 而且 ggml 的 Vulkan 后端在 NVIDIA 上被广泛使用。但“广泛使用”不等于“我验证过”。
NVIDIA 路径是真正不同的接线方式,而不仅仅是不同的显卡:NVIDIA 的 Vulkan ICD 位于宿主机驱动中,必须由 nvidia-container-toolkit 注入,且 NVIDIA_DRIVER_CAPABILITIES 必须包含 graphics —— 默认的 compute,utility 会给你可用的 CUDA 和 Vulkan 中的空设备列表。continuity-setup 会检测 NVIDIA,使用正确的 compose 覆盖层,并告知你该路径未经验证。无论哪种情况,欢迎报告。
内存详细说明
空闲时占用可忽略不计;峰值才是决定机器配置的因素。
操作 | 峰值 RSS |
空闲 | 0.52 GiB |
音乐 | 0.50 GiB |
语音 | 1.63 GiB |
图像(1024²) | 4.94 GiB |
| 7.74 GiB |
| 1.33 GiB |
背景移除是上限,其成本与输入大小无关 —— 256 / 512 / 1024 像素的峰值均为约 6.8 GiB,因为 BiRefNet 以固定的内部分辨率运行。
在 16 GiB 上一切正常。 低于 12 GiB 时,continuity-setup 将默认值设为 quality="fast"(u2netp):峰值降至 1.33 GiB,运行时间从 7.2 秒缩短到 0.6 秒。在典型的游戏精灵图上,两者肉眼几乎无法区分 —— 在洋红色背景上并排检查,边缘放大。在空间允许的情况下,best 仍是默认值,因为模型在精细边缘(头发、半透明边缘)上确实存在差异,但请将 fast 视为合理选择,而非降级方案。
哪些会随显存调整,哪些不能
三件事随显卡扩展。所有三个阈值都是实测而非猜测:
小显存卡 | 大显存卡 | 原因 | |
安装哪部分 | 仅音频(<8 GiB) | 图像 + 音频 | 图像生成峰值 6.80 GiB,且无法缩小 —— 见下文 |
音频在图像前卸载 | 是(<12 GiB) | 否 | 音频模型保持常驻;图像叠加在它们之上时峰值 7.84 GiB,而非 6.80 |
参考音频限制 | 15 秒(<12 GiB) | 30 秒 | 参考音频每秒约消耗 0.19 GiB |
仅音频层级是真正的产品,而非安慰奖:角色配音、对话、音乐、音效和抠图都能工作,且轻松适配 4 GiB。
不能自适应:图像模型。 量化它完全不会改变显存 —— Q4_0(2.29 GiB 权重)峰值 6.60 GiB,Q8_0(4.01 GiB)峰值 6.59 GiB,完全相同。降低分辨率也无济于事(512 / 768 / 1024 峰值相同;只有时间变化)。瓶颈是 8 GiB 未量化的 4B 文本编码器,而非扩散模型。因此没有“中等”图像层级可提供,只有安装或不安装。(Q4_0 仍然提供 —— 显存相同,磁盘少 1.7 GiB。)
低于 8 GiB 的图像生成意味着更换文本编码器或模型家族。这是可能的,但会将身份固定从原生 ref_images 转移到 IP-Adapter,而后者在此处未经验证 —— 而身份固定正是整个插件的核心。
零常驻
在 RX 7800 XT 上实测,显卡上无其他负载:
GPU | |
空闲 | 0.21 GiB |
图像生成期间 | 6.80 GiB |
完成后 2 秒 | 0.21 GiB |
TTS 期间 | 2.39 GiB |
TTS 后 120 秒 | 0.21 GiB |
图像是免费的:引擎按请求流式加载权重,从不常驻。音频由空闲定时器释放(AUDIO_IDLE_UNLOAD_S,默认 120 秒)—— 不是立即释放,因为连续配音十行的人不应每次重新加载。重新加载成本可忽略不计:同一个 TTS 请求冷启动和热启动都耗时 3.0 秒,因为权重被 mmap 并驻留在页面缓存中。
请求串行化,因此峰值 = 单个最大模型。关闭智能体也会释放显存 —— MCP 服务器在退出时卸载,而不是让引擎持有它。
它实际做的两件事
1. 身份跨调用保持。 生成后端是无状态的:两次请求同一个角色,你会得到两个只是相似的人。在 Qwen3-TTS 上实测,来自一个语音描述的四行:
4 行之间的音高跨度 | |
直接给模型(默认采样) | 125 Hz |
直接给模型,贪心解码 | 242 Hz —— 更差 |
通过 Continuity(固定参考) | 5 Hz |
在贪心解码下,种子被证明是无效的 —— 种子 5 / 99 / 777 产生了相同的 sha256 —— 因此随机性被完全消除,仍然漂移了 242 Hz。身份是输入文本的函数,而非随机抽取的函数。 temperature=0 和 top_k=1 无法修复。只有固定到参考工件才能。
create_actor(name, voice) -> audition clip; listen before you commit
actor_tts(actor, text) -> same timbre every line
create_character / create_animal / create_object (name, appearance)
subject_image(subject, scene) -> same look, new scene / angle / outfit身份和服装是分开的:固定面部和体型,然后在场景提示中更换衣服。一个穿着靛蓝长袍的参考,被要求“穿着厚重的红色盔甲”,会以相同的面部穿着盔甲返回。
已经在别处选好了角色? import_actor 和 import_subject 固定你提供的工件 —— 真实的语音录音、ElevenLabs 片段、来自其他工具的角色表 —— 所有下游行为完全相同。音频会为你归一化为 24 kHz 单声道(44.1 kHz 立体声输入,已验证:参考 f0 相同,导入的角色与原生角色跟踪到 11 Hz)。
2. 拒绝退化输出。 计算错误的后端会返回格式完全正确的全零 WAV,或纯灰色 PNG,并返回 HTTP 200。每个工件都会被检查(图像标准差、音频 RMS、非有限样本),调用会大声失败,而不是在垃圾数据上报告成功。抠图还会额外获得质量报告 —— 大部分透明、未移除任何内容、主体碎裂成碎片、主体被穿透 —— 每个都有特定的警告,而不是静默通过。
另外还有 remove_bg:扩散模型将“透明背景”绘制为不透明的棋盘格;这个工具将其转换为真正的 RGBA 抠图,这是精灵图所必需的。还有 gen_sfx,它程序化地合成 sfxr 风格的游戏音效 —— 对于给定种子,比特级一致,毫秒级,无需 GPU —— 因为扩散模型不是 40 毫秒金币拾取音效的正确工具。
工具
19 个工具。所有工具都返回绝对本地文件路径,而非 URL —— 智能体和引擎在同一台机器上,因此路径可以直接进入你的游戏项目,无需下载步骤,也没有文件服务器需要运行或配置。
voice |
|
look |
|
audio |
|
post |
|
meta |
|
generate_image 和 generate_speech 的存在是为了处理一次性任务,其自身描述中也有说明:它们明确告知代理,它们生成的内容不会在下次调用时返回,并针对任何重复性需求指向固定(pinning)工具。
限制,以及每项限制存在的原因
这里的每个数字都是实测的失败边界,而非政策。
限制 | 值 | 超过限制会发生什么 |
行长度 | 200 字符 | 600 个字符导致 GPU 卡死: |
参考音频 | 15 秒 / 30 秒 | 约 0.19 GiB 显存/秒:15 秒 → 6.59 GiB,30 秒 → 9.04 GiB。超过此限制后,声音而非图像成为瓶颈。 |
配音脚本 | 45 字符 | 它生成参考音频,之后每一行都会重新读取该音频。字符数不是一个好的代理指标(实测 60 个字符耗时 19.1 秒,而非按比例预测的 13.7 秒),因此实际时长会在转换后检查并报告。 |
图像大小 | 1024 像素 | 1280 将显存推至 14.5/16.4 GiB;2048 使驱动陷入 |
音乐长度 | 120 秒 | 这不是安全限制:引擎会在 120 秒处静默截断并报告成功。该限制将其变为显式的 |
低于 24 kHz 的导入音频会被接受,但会被标记:上采样无法恢复已丢弃的八度音程,因此克隆结果会比您提供的文件更沉闷。这值得警告而不是静默通过——这与本插件存在所要捕获的其他失败形态相同。
超大输入按类型有意区别处理。 过大的图像会被调整大小,并将结果报告给您(原图 2400x1600 → 存为 1024x682)——缩放后的图片仍然描绘相同的内容。过长的参考音频会被拒绝,而非裁剪:截断音频尾部会导致转录文本描述的内容与音频不再匹配,而这种对齐正是克隆所依赖的。静默裁剪会交给您一个导入成功但听起来像别人的角色。
自带后端(可选)
本地引擎是默认选项,但每个后端都是一个 URL(SD_SERVER、AUDIO_SERVER)。将它们指向您自己的服务器,就不会加载本地模型。如果这样做,有一个限制:音频引擎自行解析参考音频路径,因此它必须看到相同的角色目录(同一台机器,或共享挂载)。
图像后端必须接受参考图像(FLUX.2 风格的原生 ref_images、IP-Adapter 或用于人脸的 PuLID)。没有它,身份固定(identity pinning)就无法工作——插件会明确说明,而不是静默降级。
先前工作
对当前 MCP 生态系统的调查——MiniMax-MCP、openrouter-mcp-multimodal、AtlasCloud、dsh vision/draw 插件以及四个游戏资产服务器——发现多个项目支持语音克隆,但没有一个支持视觉主体固定,也没有一个支持输出验证。
布局
bundle/ dsh bundle (npm) — one plugin row; dsh spawns and supervises the MCP server
src/ the MCP server: pinning, guardrails, verification, cutout, VRAM lifecycle
src/continuity_mcp/deploy/ compose + engine Dockerfile + weight manifest许可证
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Wan AI video generation
MCP server for Hailuo (MiniMax) AI video generation
MCP server for MiniMax H3 multimodal video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/linxuhao/Deepseek-Continuity'
If you have feedback or need assistance with the MCP directory API, please join our Discord server