Skip to main content
Glama

场记 / Continuity

DeepSeek Harness 플러그인으로, 에이전트에게 로컬 이미지 / 음성 / 음악 / SFX 생성을 제공하고 만든 것을 기억합니다 — 같은 캐릭터는 모든 호출에서 같은 캐릭터로 유지되며, 실패한 생성이 성공으로 통과되는 일은 절대 없습니다.

로컬에서 실행됩니다. 모델은 요청별로 지연 로드되고 유휴 시 해제되므로, 사용하지 않을 때는 GPU가 전혀 건드려지지 않습니다 — 상주 메모리 0.21GiB, 측정 기준. 같은 카드로 게임을 할 수 있습니다.

场记는 영화 촬영 현장의 연속성 감독입니다. 그들의 임무는 정확히 두 가지입니다: 테이크 사이에 의상, 헤어, 소품이 일치하는지 확인하고, 필름에 편집되기 전에 세트에서 실수를 잡는 것입니다. 이것이 바로 이 플러그인의 임무입니다.

설치

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.9GiB의 "VRAM"을 광고합니다(이는 시스템 RAM입니다) 그리고 "가장 큰 카드 고르기" 경쟁에서 이길 것입니다. 그러면 모든 것이 CPU에서 실행됩니다 — 작동하고, 완전히 정상적으로 보이며, 사용할 수 없을 정도로 느립니다.

  • 무료 VRAM으로 선택하고, 총 VRAM으로 게이트합니다. 위 머신에서 24GiB 카드는 다른 프로세스가 보유하고 있기 때문에 실제로 1.4GiB만 비어 있습니다. 크기로 선택하면 그 카드가 선택되고 OOM이 발생합니다. 그러나 "이 카드가 충분히 좋은가"는 하드웨어 질문이므로 총 VRAM을 사용합니다 — 그렇지 않으면 16GiB 카드가 게임이 열려 있다는 이유로 거부될 것입니다.

최소 요구 사항

최소

참고 사항

GPU

8GiB VRAM

최고 6.80GiB(측정). 요청은 직렬화되므로 최고는 모델 하나의 합이 아니라 하나입니다.

GPU API

Vulkan 1.2+

CUDA 없음, ROCm 없음. 커널은 런타임에 컴파일되는 SPIR-V입니다.

디스크

설치 중 30GiB, 설치 후 19.5GiB

17.4 가중치 + 2.1 런타임 이미지 + 8.5 빌드 레이어(재확보 가능).

호스트 RAM

16GiB(8GiB 작업 가능 — 아래 참조)

유휴가 아니라 일시적 최고치에 의해 결정됩니다.

CPU

모든 x86-64

배경 제거는 CPU에서 실행됩니다.

오디오 전용 설치(아래 참조)는 설치 중 20GiB, 설치 후 9.5GiB가 필요합니다.

이 페이지의 모든 VRAM/RAM 수치는 GiB(2³⁰바이트)이며, rocm-smivulkaninfo가 보고하는 값입니다. 이 README의 이전 버전은 GB로 표시했습니다. 그것은 잘못되었고 헤드룸이 실제보다 더 빡빡해 보이게 만들었습니다.

CUDA 대신 Vulkan을 사용하는 것은 선호의 문제가 아닙니다 — 이것이 실행되는 이유입니다. ROCm은 이 GPU 클래스에서 VAE 디코드를 잘못 계산합니다(ROCm#6633): 동일한 입력의 5번의 디코드가 서로 상관관계가 없는 5개의 결과를 반환했습니다. 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 타겟이 없습니다 — 그리고 ggml의 Vulkan 백엔드는 NVIDIA에서 널리 실행됩니다. 그러나 "널리 실행"은 "제가 확인했다"는 아닙니다.

NVIDIA 경로는 단순히 다른 카드가 아니라 진정으로 다른 배선입니다: NVIDIA의 Vulkan ICD는 호스트 드라이버에 있으며 nvidia-container-toolkit에 의해 주입되어야 하며, NVIDIA_DRIVER_CAPABILITIESgraphics가 포함되어야 합니다 — 기본 compute,utility는 작동하는 CUDA와 Vulkan의 빈 장치 목록을 제공합니다. continuity-setup은 NVIDIA를 감지하고, 올바른 compose 오버레이를 사용하며, 경로가 검증되지 않았음을 알려줍니다. 어느 쪽이든 보고는 환영합니다.

호스트 RAM 상세

유휴는 무시할 수 있습니다. 피크가 머신의 크기를 결정합니다.

작업

피크 RSS

유휴

0.52GiB

음악

0.50GiB

음성

1.63GiB

이미지 (1024²)

4.94GiB

remove_bg quality="best"

7.74GiB

remove_bg quality="fast"

1.33GiB

배경 제거가 최고점이며, 그 비용은 입력 크기와 무관합니다 — 256 / 512 / 1024px 모두 ~6.8GiB에서 피크를 찍습니다. BiRefNet이 고정 내부 해상도에서 실행되기 때문입니다.

16GiB에서는 모든 것이 작동합니다. 12GiB 미만에서는 continuity-setup이 기본값을 quality="fast"(u2netp)로 설정합니다: 피크는 1.33GiB로 떨어지고 7.2초 대신 0.6초에 실행됩니다. 일반적인 게임 스프라이트에서는 두 가지를 눈으로 구분하기 어렵습니다 — 마젠타 배경 위에서 가장자리를 확대하여 나란히 확인했습니다. best는 공간이 있는 곳에서 기본값으로 유지됩니다. 모델은 미세한 가장자리(머리카락, 반투명 프린지)에서 원칙적으로 다르기 때문입니다. 그러나 fast를 저하된 대체가 아닌 정당한 선택으로 취급하십시오.

VRAM에 맞게 조정되는 것과 조정할 수 없는 것

세 가지가 카드에 따라 확장됩니다. 세 가지 임계값은 모두 추측이 아닌 측정된 것입니다:

작은 카드

큰 카드

이유

어느 절반이 설치되는지

오디오만 (<8GiB)

이미지 + 오디오

이미지 생성은 6.80GiB에서 피크를 찍으며 줄일 방법이 없습니다 — 아래 참조

이미지 전에 오디오 언로드

예 (<12GiB)

아니요

오디오 모델은 상주합니다. 이미지가 그 위에 있으면 6.80 대신 7.84GiB에서 피크를 찍습니다.

참조 오디오 제한

15초 (<12GiB)

30초

참조 오디오는 초당 ~0.19GiB의 비용이 듭니다.

오디오 전용 계층은 위로가 아니라 실제 제품입니다: 캐스팅 음성, 대화, 음악, SFX 및 컷아웃이 모두 작동하며 4GiB에 편안하게 들어갑니다.

조정되지 않는 것: 이미지 모델. 양자화해도 VRAM이 전혀 움직이지 않습니다 — Q4_0(2.29GiB 가중치)은 6.60GiB에서 피크, Q8_0(4.01GiB)은 6.59GiB에서 피크, 동일합니다. 해상도를 낮춰도 도움이 되지 않습니다(512 / 768 / 1024 모두 동일하게 피크, 시간만 변경). 병목은 8GiB 비양자화 4B 텍스트 인코더이며, 확산 모델이 아닙니다. 따라서 "중간" 이미지 계층을 제공할 수 없으며, 설치 여부만 있습니다. (Q4_0은 어쨌든 제공됩니다 — 동일한 VRAM, 디스크 1.7GiB 절약.)

이미지에 대해 8GiB 미만으로 내려가면 텍스트 인코더나 모델 계열을 변경해야 합니다. 가능하지만, 정체성 고정을 네이티브 ref_images에서 IP-Adapter로 이동시키며, 이는 여기서 검증되지 않았습니다 — 그리고 정체성 고정이 핵심입니다.

제로 상주

카드에 다른 것이 없는 RX 7800 XT에서 측정:

GPU

유휴

0.21GiB

이미지 생성 중

6.80GiB

완료 후 2초

0.21GiB

TTS 중

2.39GiB

TTS 후 120초

0.21GiB

이미지는 무료입니다: 엔진은 요청별로 가중치를 스트리밍하고 상주시키지 않습니다. 오디오는 유휴 타이머(AUDIO_IDLE_UNLOAD_S, 기본 120초)에 의해 해제됩니다 — 즉시가 아닙니다. 연속으로 열 줄을 말하는 사람이 매번 리로드 비용을 지불하지 않도록 하기 위해서입니다. 리로드는 측정 가능한 비용이 없습니다: 동일한 TTS 요청이 콜드와 웜 모두 3.0초가 걸렸습니다. 가중치가 mmap되고 페이지 캐시에 있기 때문입니다.

요청은 직렬화되므로 피크 = 단일 최대 모델입니다. 에이전트를 닫으면 VRAM도 해제됩니다 — MCP 서버는 엔진이 보유한 채로 종료하는 대신 종료 시 언로드합니다.

실제로 하는 두 가지

1. 정체성은 호출 간에 유지됩니다. 생성 백엔드는 상태가 없습니다: 같은 캐릭터를 두 번 요청하면 서로 닮은 두 사람을 얻습니다. Qwen3-TTS에서 측정, 하나의 음성 설명에서 네 줄:

4줄에 걸친 피치 분포

모델에 직접(기본 샘플링)

125Hz

모델에 직접, 탐욕적 디코딩

242Hz — 더 나쁨

Continuity를 통해(고정 참조)

5Hz

탐욕적 디코딩에서 시드는 증명 가능하게 불활성입니다 — 시드 5 / 99 / 777이 하나의 동일한 sha256을 생성했습니다 — 따라서 무작위성이 완전히 제거되었음에도 242Hz로 드리프트했습니다. 정체성은 입력 텍스트의 함수이지 무작위 추첨의 함수가 아닙니다. temperature=0top_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_actorimport_subject는 제공한 아티팩트를 고정합니다 — 실제 음성 녹음, ElevenLabs 클립, 다른 도구의 캐릭터 시트 — 그리고 모든 다운스트림은 동일하게 동작합니다. 오디오는 24kHz 모노로 정규화됩니다(44.1kHz 스테레오 입력, 검증됨: 참조 f0 동일, 가져온 배우가 네이티브 캐스트 배우를 11Hz로 추적).

2. 퇴화 출력은 거부됩니다. 잘못 계산하는 백엔드는 완벽하게 형성된 all-zero WAV 또는 평평한 회색 PNG를 HTTP 200으로 반환합니다. 모든 아티팩트가 검사됩니다(이미지 표준 편차, 오디오 RMS, 비유한 샘플) 그리고 호출은 쓰레기 위에 성공을 보고하는 대신 크게 실패합니다. 컷아웃은 추가로 품질 보고서를 받습니다 — 대부분 투명, 제거된 것 없음, 조각으로 분해된 주제, 주제를 관통하는 구멍 — 각각 특정 경고와 함께 조용한 통과 대신.

또한 remove_bg: 확산 모델은 "투명 배경"을 불투명 체커보드로 그립니다. 이것은 실제 RGBA 컷아웃으로 변환하며, 스프라이트에 필요합니다. 그리고 gen_sfx는 sfxr 스타일 게임 SFX를 절차적으로 합성합니다 — 주어진 시드에 대해 비트 동일, 밀리초, GPU 없음 — 확산 모델은 40ms 코인 픽업에 잘못된 도구이기 때문입니다.

도구

19개 도구. 모든 것은 절대 로컬 파일 경로를 반환합니다 — URL이 아닙니다. 에이전트와 엔진은 같은 머신에 있으므로 경로는 다운로드 단계 없이 게임 프로젝트에 직접 들어갈 수 있으며, 파일 서버를 실행하거나 잘못 구성할 필요가 없습니다.

voice

create_actor import_actor actor_tts list_actors delete_actor generate_speech

look

create_character create_animal create_object import_subject subject_image list_subjects delete_subject generate_image

audio

generate_music gen_sfx

post

remove_bg slice_sheet

meta

continuity_status

generate_imagegenerate_speech는 일회성 작업을 위해 존재하며, 각자의 설명에도 그렇게 명시되어 있습니다. 즉, 이 도구들이 생성한 결과물은 다음 호출에서 다시 돌아오지 않는다는 것을 에이전트에게 명확히 알려주고, 반복적인 작업이 필요하면 고정(pinning) 도구를 사용하도록 안내합니다.

제한 사항과 각 제한이 존재하는 이유

여기 있는 모든 수치는 정책이 아니라 측정된 실패 경계입니다.

제한

한계를 넘으면 발생하는 상황

줄 길이

200자

600자는 GPU를 멈추게 했습니다: amdgpu GPU reset(6), 장치 손실, 다른 카드에서 실행 중이던 무관한 프로세스까지 종료됨. 200은 알려진 최대 안전 값의 절반입니다.

참조 오디오

15초 / 30초

초당 ~0.19 GiB VRAM: 15초 → 6.59 GiB, 30초 → 9.04 GiB. 이 한계를 넘으면 이미지 대신 음성이 병목이 됩니다.

캐스팅 스크립트

45자

캐스팅 스크립트는 참조 오디오를 생성하며, 이후 모든 라인에서 다시 읽힙니다. 글자 수는 좋은 근사치가 아닙니다(60자는 비율이 예측한 13.7초가 아닌 19.1초로 측정됨). 따라서 실제 길이는 캐스팅 후에 확인되어 보고됩니다.

이미지 크기

1024px

1280은 VRAM을 14.5/16.4 GiB까지 끌어올렸고, 2048은 드라이버를 restore_userptr_worker 스래싱 상태로 만들며 프로세스가 중단 불가능한 D 상태에 빠졌습니다 — 깔끔한 OOM보다 더 나쁩니다.

음악 길이

120초

안전 제한이 아닙니다: 엔진이 120초에서 조용히 잘라내고 성공을 보고합니다. 이 제한은 이를 명시적인 clamped 필드로 바꿉니다.

24kHz 미만으로 가져온 오디오는 허용되지만 플래그가 표시됩니다: 업샘플링은 버려진 옥타브를 복원할 수 없으므로, 클론은 원본 파일보다 탁한 결과물이 됩니다. 이는 조용히 통과시키기보다 경고할 가치가 있습니다 — 이 플러그인이 잡아내기 위해 존재하는 다른 모든 실패와 동일한 형태의 실패이기 때문입니다.

과도하게 큰 입력은 유형별로 의도적으로 다르게 처리됩니다. 너무 큰 이미지는 크기가 조정되고 결과가 보고됩니다 (原图 2400x1600 → 存为 1024x682) — 크기가 조정된 그림도 여전히 같은 대상을 묘사합니다. 너무 긴 참조 오디오는 잘라내지 않고 거부됩니다: 오디오의 끝부분을 잘라내면 트랜스크립트가 더 이상 오디오가 말하지 않는 내용을 설명하게 되며, 그 정렬이 바로 클로닝이 의존하는 핵심입니다. 조용히 잘라내면 성공적으로 가져와졌지만 다른 사람처럼 들리는 액터를 받게 될 것입니다.

자체 백엔드 사용 (선택 사항)

로컬 엔진이 기본값이지만, 모든 백엔드는 URL입니다 (SD_SERVER, AUDIO_SERVER). 이를 자체 서버로 지정하면 로컬 모델은 절대 로드되지 않습니다. 한 가지 제약이 있습니다: 오디오 엔진은 참조 오디오 경로를 자체적으로 해석하므로, 동일한 actors 디렉토리(동일한 머신 또는 공유 마운트)를 볼 수 있어야 합니다.

이미지 백엔드는 참조 이미지를 반드시 수용해야 합니다 (FLUX.2 스타일 네이티브 ref_images, IP-Adapter, 또는 얼굴용 PuLID). 이것이 없으면 신원 고정(identity pinning)이 작동할 수 없습니다 — 그리고 플러그인은 조용히 성능을 저하시키는 대신 그 사실을 명시적으로 알려줍니다.

선행 연구

현재 MCP 생태계에 대한 조사 — MiniMax-MCP, openrouter-mcp-multimodal, AtlasCloud, dsh vision/draw 플러그인, 그리고 4개의 게임 에셋 서버 — 에서 음성 클로닝은 여러 곳에서 발견되었지만, 시각적 대상 고정은 어디에도 없었고, 출력 검증도 어디에도 없었습니다.

레이아웃

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