Skip to main content
Glama

场记 / Continuity

Плагин для DeepSeek Harness, который даёт агенту локальную генерацию изображений / речи / музыки / звуковых эффектов и запоминает, что он создал — один и тот же персонаж остаётся тем же самым персонажем в каждом вызове, а неудачная генерация никогда не выдаётся за успешную.

Работает локально. Модели лениво загружаются по запросу и освобождаются в простое, поэтому когда вы не используете его, GPU не тронут — 0,21 ГиБ в памяти, измерено. Можно играть в игру на той же карте.

场记 — это супервайзер непрерывности на съёмочной площадке. Его работа сводится к двум вещам: следить, чтобы костюм, причёска и реквизит совпадали между дублями, и ловить ошибку на площадке до того, как она попадёт в фильм. Именно это и делает данный плагин.

Установка

uvx --from continuity-mcp continuity-setup      # preflight → build engines → fetch weights → start
dsh plugin --profile <your-profile> add dsh-plugin-continuity

continuity-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 ГиБ «VRAM» (это ваша системная оперативная память) и выиграл бы любой конкурс «выбери самую большую карту». Тогда всё работало бы на CPU — работало, выглядело совершенно нормально и было бы неприемлемо медленным.

  • Он выбирает по свободной VRAM, а пропускает по общей VRAM. На машине выше у карты на 24 ГиБ фактически свободно 1,4 ГиБ, потому что другой процесс удерживает её; выбор по размеру выбрал бы её и затем словил бы OOM. Но вопрос «достаточно ли хороша эта карта» — это вопрос об оборудовании, поэтому тут используется общая: иначе карта на 16 ГиБ была бы отклонена из-за открытой игры.

Минимальные требования

Минимум

Примечания

GPU

8 ГиБ VRAM

Пик — 6,80 ГиБ (измерено). Запросы сериализованы, так что пик — одна модель, а не сумма.

GPU API

Vulkan 1.2+

Ни CUDA, ни ROCm. Ядра компилируются в SPIR-V во время выполнения.

Диск

30 ГиБ во время установки, 19,5 ГиБ после

17,4 весов + 2,1 образ среды выполнения + 8,5 слоёв сборки (можно вернуть).

RAM хоста

16 ГиБ (8 ГиБ рабочий вариант — см. ниже)

Определяется кратковременными пиками, а не простоем.

CPU

любой x86-64

Удаление фона работает на CPU.

Установки только с аудио (см. ниже) требуют 20 ГиБ во время установки, 9,5 ГиБ после.

Все значения VRAM/RAM на этой странице указаны в ГиБ (2³⁰ байт), именно их сообщают rocm-smi и vulkaninfo. В более ранней версии этого README они были обозначены как ГБ; это было неверно и заставляло запас выглядеть теснее, чем он есть.

Vulkan вместо CUDA — не предпочтение; это причина, по которой всё вообще работает. ROCm неверно вычисляет декодирование VAE на этом классе GPU (ROCm#6633): пять декодирований одинаковых входных данных вернули пять взаимно некоррелированных результатов. Vulkan/RADV компилирует SPIR-V во время выполнения вместо поиска по таблице ядер для каждой архитектуры и здесь работает правильно и быстрее. Побочный эффект — переносимость на все три вендора.

Производители GPU

Как контейнер получает GPU

Статус

AMD

/dev/dri + mesa RADV внутри образа

Проверено (RX 7800 XT, RX 7900 XTX)

Intel

/dev/dri + mesa ANV внутри образа — тот же механизм

Не проверено

NVIDIA

nvidia-container-toolkit внедряет драйвер хоста (docker-compose.nvidia.yml)

Не проверено

У меня есть только видеокарты AMD, поэтому я не буду утверждать большего. В коде нет ничего специфичного для AMD — ни CUDA, ни ROCm, ни HIP, ни /dev/kfd, ни целей gfx — а Vulkan-бэкенд ggml широко используется на NVIDIA. Но «широко используется» — это не «я это проверил».

Путь NVIDIA — это действительно другая разводка, а не просто другая карта: Vulkan ICD от NVIDIA живёт в драйвере хоста и должен внедряться nvidia-container-toolkit с NVIDIA_DRIVER_CAPABILITIES, включающим graphics; значение по умолчанию compute,utility даёт вам работающий CUDA и пустой список устройств в Vulkan. continuity-setup обнаруживает NVIDIA, использует правильный compose-оверлей и сообщает, что путь не проверен. Отчёты в любую сторону приветствуются.

Оперативная память хоста: подробности

Простой пренебрежимо мал; пики определяют размер машины.

операция

пиковый RSS

простой

0.52 ГиБ

музыка

0.50 ГиБ

речь

1.63 ГиБ

изображение (1024²)

4.94 ГиБ

remove_bg quality="best"

7.74 ГиБ

remove_bg quality="fast"

1.33 ГиБ

Удаление фона — это потолок, и его стоимость не зависит от размера входного изображения — 256 / 512 / 1024 px дают пик около 6,8 ГиБ, потому что BiRefNet работает с фиксированным внутренним разрешением.

На 16 ГиБ работает всё. Ниже 12 ГиБ continuity-setup устанавливает по умолчанию quality="fast" (u2netp): пик падает до 1,33 ГиБ, и это выполняется за 0,6 с вместо 7,2 с. На типичном игровом спрайте их трудно отличить на глаз — проверено бок о бок на пурпурном фоне с увеличением краёв. best остаётся значением по умолчанию там, где есть место, потому что модели в принципе различаются на тонких краях (волосы, полупрозрачная бахрома), но относитесь к fast как к законному выбору, а не как к ухудшенному запасному варианту.

Что адаптируется к вашей VRAM, а что нет

Три вещи масштабируются вместе с картой. Все три порога измерены, а не угаданы:

Маленькая карта

Большая карта

Почему

Какая половина устанавливается

только аудио (<8 ГиБ)

изображение + аудио

Генерация изображений достигает пика 6,80 ГиБ, и её невозможно уменьшить — см. ниже

Выгрузка аудио перед изображением

да (<12 ГиБ)

нет

Аудиомодели остаются в памяти; изображение поверх них даёт пик 7,84 ГиБ вместо 6,80

Лимит референсного аудио

15 с (<12 ГиБ)

30 с

Референсное аудио стоит ~0,19 ГиБ за секунду

Уровень только с аудио — это полноценный продукт, а не утешительный приз: кастинг голосов, диалоги, музыка, SFX и вырезание — всё работает и легко умещается в 4 ГиБ.

Что не адаптируется: модель изображений. Квантование вообще не двигает VRAM: Q4_0 (2,29 ГиБ весов) даёт пик 6,60 ГиБ, Q8_0 (4,01 ГиБ) — 6,59 ГиБ, одинаково. Снижение разрешения тоже не помогает (512 / 768 / 1024 дают один и тот же пик; меняется только время). Узкое место — 8-гигабайтный неквантованный текстовый энкодер 4B, а не диффузионная модель. Поэтому предлагать «средний» уровень изображений нечего — только установлен или нет. (Q4_0 поставляется в любом случае — та же VRAM, на 1,7 ГиБ меньше на диске.)

Опуститься ниже 8 ГиБ для изображений означает сменить текстовый энкодер или семейство моделей. Это возможно, но тогда закрепление идентичности переходит с нативных ref_images на IP-Adapter, который здесь не проверен — а закрепление идентичности и есть весь смысл.

Нулевое пребывание в памяти

Измерено на RX 7800 XT, когда на карте больше ничего нет:

GPU

простой

0.21 ГиБ

во время генерации изображения

6.80 ГиБ

через 2 с после завершения

0.21 ГиБ

во время TTS

2.39 ГиБ

через 120 с после TTS

0.21 ГиБ

Изображения бесплатны: движок потоково передаёт веса на каждый запрос и никогда не держит их в памяти. Аудио освобождается по таймеру простоя (AUDIO_IDLE_UNLOAD_S, по умолчанию 120 с) — не сразу, потому что человек, озвучивающий десять реплик подряд, не должен платить перезагрузкой каждый раз. Перезагрузка не стоит ничего измеримого: один и тот же TTS-запрос занял 3,0 с и на холодную, и на тёплую, потому что веса отображены через mmap и лежат в страничном кеше.

Запросы сериализованы, поэтому пик = одна самая большая модель. Закрытие агента также освобождает VRAM — MCP-сервер выгружает всё при выходе, а не оставляет движки удерживающими её.

Две вещи, которые он действительно делает

1. Идентичность сохраняется между вызовами. Бэкенды генерации не имеют состояния: попросите одного и того же персонажа дважды — и вы получите двух людей, которые просто похожи друг на друга. Измерено на Qwen3-TTS: четыре реплики из одного описания голоса:

разброс высоты тона по 4 репликам

напрямую в модель (сэмплирование по умолчанию)

125 Гц

напрямую в модель, жадное декодирование

242 Гц — хуже

через Continuity (закреплённый референс)

5 Гц

При жадном декодировании зерно доказуемо инертно — зерна 5 / 99 / 777 дали один идентичный sha256, — так что случайность была полностью устранена, и всё равно дрейф составил 242 Гц. Идентичность — функция входного текста, а не случайного розыгрыша. 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

Идентичность и гардероб разделены: закрепите лицо и телосложение, затем меняйте одежду в промпте сцены. Референс в тёмно-синей мантии, если попросить wearing heavy red armor, вернётся в доспехах с тем же лицом.

Уже подобрали персонажа где-то ещё? import_actor и import_subject закрепляют предоставленный вами артефакт — реальную запись голоса, клип из ElevenLabs, лист персонажа из другого инструмента, — и всё дальнейшее поведение идентично. Аудио нормализуется для вас в 24 кГц моно (на входе 44,1 кГц стерео; проверено: эталонная f0 идентична, а импортированный актёр сходится с локально созданным до 11 Гц).

2. Вырожденный вывод отклоняется. Бэкенд, который неправильно считает, возвращает совершенно корректный WAV из одних нулей или плоский серый PNG с HTTP 200. Каждый артефакт проверяется (стандартное отклонение изображения, RMS аудио, неконечные сэмплы), и вызов громко завершается ошибкой, а не сообщает об успехе поверх мусора. Вырезания дополнительно получают отчёт о качестве — в основном прозрачное, ничего не удалено, объект разбит на фрагменты, в объекте проедены дыры — каждый случай с конкретным предупреждением вместо молчаливого пропуска.

Плюс remove_bg: диффузионные модели рисуют «прозрачный фон» как непрозрачную шахматную доску; она превращает это в настоящий RGBA-вырез, который требуется спрайтам. И gen_sfx, который процедурно синтезирует игровые SFX в стиле sfxr — бит-в-бит одинаковые для заданного зерна, миллисекунды, без GPU — потому что диффузионная модель — неправильный инструмент для 40-миллисекундного подбора монеты.

Инструменты

19 инструментов. Всё возвращает абсолютные локальные пути к файлам, а не URL, — агент и движки находятся на одной машине, поэтому путь может попасть прямо в ваш игровой проект без шага загрузки, и не нужно запускать или настраивать файловый сервер.

голос

create_actor import_actor actor_tts list_actors delete_actor generate_speech

внешность

create_character create_animal create_object import_subject subject_image list_subjects delete_subject generate_image

аудио

generate_music gen_sfx

пост

remove_bg slice_sheet

мета

continuity_status

generate_image и generate_speech существуют для разовых задач и сами говорят об этом в своих описаниях: они явно сообщают агенту, что их результат не вернётся при следующем вызове, и указывают на инструменты закрепления для всего повторяющегося.

Ограничения и почему каждое из них существует

Каждое число здесь — это измеренная граница отказа, а не политика.

ограничение

значение

что происходит за его пределами

длина строки

200 символов

600 символов заклинили GPU: amdgpu GPU reset(6), устройство потеряно, убит посторонний процесс на другой карте. 200 — это половина максимального известного безопасного значения.

референсное аудио

15 с / 30 с

~0.19 ГиБ VRAM в секунду: 15 с → 6.59 ГиБ, 30 с → 9.04 ГиБ. Дальше голос становится потолком вместо изображения.

сценарий кастинга

45 символов

Он создаёт референсное аудио, которое затем перечитывается на каждой последующей строке. Количество символов — плохой прокси (60 символов дали 19.1 с, а не 13.7 с, как предсказывает пропорция), поэтому реальная длительность проверяется после кастинга и сообщается.

размер изображения

1024 px

1280 подняли VRAM до 14.5/16.4 ГиБ; 2048 отправили драйвер в thrashing restore_userptr_worker, и процесс застрял в неперебиваемом состоянии D — хуже, чем чистый OOM.

длительность музыки

120 с

Это не ограничение безопасности: движок молча обрезает на 120 с и сообщает об успехе. Ограничение превращает это в явное поле clamped.

Импортированное аудио ниже 24 кГц принимается, но помечается: повышение частоты дискретизации не может восстановить выброшенную октаву, поэтому клон получается тусклее, чем файл, который вы дали. Это заслуживает предупреждения, а не молчаливого пропуска — это та же форма отказа, что и всё остальное, для чего существует этот плагин.

Слишком большие входные данные обрабатываются по-разному в зависимости от типа — и это намеренно. Слишком большое изображение масштабируется, и результат сообщается вам обратно (原图 2400x1600 → 存为 1024x682) — масштабированная картинка всё равно изображает то же самое. Слишком длинное референсное аудио отклоняется, а не обрезается: обрезка хвоста аудио оставила бы транскрипт, описывающий то, чего в аудио больше нет, а это соответствие — ровно то, на чём держится клонирование. Молчаливая обрезка дала бы вам актёра, который импортировался успешно, но звучит как кто-то другой.

Свой бэкенд (необязательно)

Локальные движки используются по умолчанию, но каждый бэкенд — это URL (SD_SERVER, AUDIO_SERVER). Укажите их на свой сервер — и локальные модели никогда не загружаются. Одно ограничение, если вы это сделаете: аудиодвижок сам разрешает путь к референсному аудио, поэтому он должен видеть тот же каталог актёров (та же машина или общий ресурс).

Изображенческий бэкенд обязан принимать референсное изображение (нативное ref_images в стиле FLUX.2, IP-Adapter или PuLID для лиц). Без этого закрепление личности не работает — и плагин говорит об этом, а не молча деградирует.

Существующие наработки

Обзор текущей экосистемы 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

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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