대상(보존): 컨테이너
C.40368049(베이스vastai/comfy_v0.22.0-cuda-12.9-py312/jupyter:latest) 내부/workspace/zts-comfyui-docker소스 경량본:src-archives/comfyui-zts.tar.gz(+ 커스텀노드comfy-zts_depthface_nodes.tar.gz) 근거: 소스 본문 전체 확보(Dockerfile / compose / entrypoint / provisioning / setup.yaml / 커스텀노드 / 배포스크립트 / README / API매뉴얼 / .env). 따라서 본 문서는 거의 전부 확실. 모델 가중치·HF캐시 등 대용량 데이터만 호스트(.54)에 동결. github 출처:https://github.com/LaDMasC/zts-comfyui-docker.git(README 기재). 자체 git 히스토리 포함(.env에 CIVITAI 토큰 실값 → 외부 공유 금지).
ComfyUI를 "git으로 형상관리되는 상용 이미지/비디오 생성 백엔드"로 올리는 완성형 레퍼런스. config/setup.yaml 한 파일에 커스텀노드 22종·체크포인트/LoRA/VAE/임베딩 모델 ~80개의 URL만 적으면, provisioning.sh가 노드 clone + 모델 다운로드 + setup.yaml에 없는 항목은 자동 삭제(선언형 동기화) 까지 수행. 로컬 Docker(docker-compose.yml)와 Vast.ai(docker-compose.prod.yml = ai-dock/comfyui 베이스) 양쪽 배포, Multi-GPU 로드밸런서(prompt_id 라우팅), systemd 서비스, cron 자동배포, Cloudflare 터널 외부노출, 자체 커스텀노드 2종(Depth/Human-Parsing)까지 갖춘 임차인 운영 스택. 잔여 자산 중 학습가치 1순위.
docs/API_MANUAL.md가 /prompt·/queue·/history·/upload/image·/view·/ws(WebSocket) 사용법과 Python/Node 클라이언트 예제까지 제공 → UI 수동조작이 아니라 프로그램에서 호출하는 생성 서비스가 목적.ZIT V2 ... Z image turbo, wan2.2 i2v, infinite video → txt2img + 이미지→비디오(i2v) + 비디오 업스케일 라인업.setup.yaml로 코드화. 인스턴스를 갈아끼워도 동일 환경 재현(provisioning 한 줄).config/setup.yaml + config/provisioning.sh)이 스택의 정수. setup.yaml = 단일 진실원천(SSOT), provisioning.sh = 그것을 실현하는 idempotent 엔진.
setup.yaml 구조:
custom_nodes: — 외부 git 커스텀노드 22종(Manager, IPAdapter+, controlnet_aux, GGUF, Impact-Pack/Subpack, rgthree, Easy-Use, KJNodes, SeedVR2 VideoUpscaler, Crystools, RMBG, VideoHelperSuite, essentials, Fill-Nodes, Image-Saver, InpaintEasy, MagCache, find-perfect-resolution 등).models: — 타입별(checkpoints / vae / diffusion_models / loras / embeddings / controlnet / upscale_models / clip / sams / ultralytics / bbox / BiRefNet) URL+파일명. Civitai/HuggingFace 혼용. 체크포인트 ~19종, LoRA ~45종(대부분 Z-Image/Illustrious 스타일).hf_snapshots: — 단일파일이 아닌 HF repo 디렉토리 통째 다운로드(allow_patterns로 필요한 파일만). jingheya/lotus-depth-d-v2-0-disparity, fashn-ai/fashn-human-parser → 자체 커스텀노드가 이 디렉토리를 직접 읽음.provisioning.sh 동작(확실):
.env 로드(HF_TOKEN/CIVITAI_TOKEN) → 게이트 모델·Civitai 다운로드에 토큰 주입./app / /workspace / /opt / $HOME) → 로컬/Vast/ai-dock 모두 호환.install_custom_node() — 이미 있으면 SKIP, 없으면 git clone --depth 1 + requirements 설치.download_model() — 이미 있으면 SKIP, HF면 Bearer 토큰, Civitai면 &token= 부착해 wget.download_hf_snapshot() — huggingface_hub.snapshot_download(allow_patterns).sync_local_custom_nodes() — repo의 custom_nodes_local/를 runtime custom_nodes/로 복사(매니페스트 기반 추가/삭제 반영, 외부노드와 이름충돌 시 에러로 중단).SYNC_CLEANUP=true) — ★차별점: setup.yaml에 없는 모델파일·hf_snapshot·커스텀노드를 디스크에서 삭제. 즉 yaml이 곧 상태. 모델을 빼고 싶으면 yaml에서 줄을 지우면 다음 실행에 사라짐.→ "ComfyUI 환경을 Infrastructure-as-Code로 다룬다"가 이 레포의 본질.
로컬(docker-compose.yml + Dockerfile) |
Vast/클라우드(docker-compose.prod.yml) |
|
|---|---|---|
| 베이스 | 자체 빌드: nvidia/cuda:12.1.1-cudnn8 → ComfyUI git clone + torch cu121 + Manager |
기성 ghcr.io/ai-dock/comfyui:latest-cuda |
| entrypoint | 자체 docker-entrypoint.sh |
ai-dock 내장(AUTO_UPDATE/WEB_PASSWORD/PROVISIONING 환경변수로 제어) |
| 영구스토리지 | 로컬 볼륨 | /workspace(Vast 영구) → models/output/input/custom_nodes 마운트 |
| 포트 | 8188 | 8188(ComfyUI)/8888(Jupyter)/22(SSH) |
docker-entrypoint.sh(로컬용) 동작: ① AUTO_UPDATE 시 git reset --hard origin/master로 ComfyUI 본체 갱신 → ② /mnt/models/* 하위폴더와 필수폴더(checkpoints/loras/vae/...)를 심볼릭 링크로 ComfyUI에 연결(데이터/코드 분리) → ③ custom_nodes 볼륨 교체 + local node 동기화 → ④ 공통 pip 패키지 + 각 노드 requirements 설치 → ⑤ provisioning.sh 실행 → ⑥ python main.py.
zts_depthface_nodes (임차인 고유 코드)custom_nodes_local/zts_depthface_nodes/(소스 comfy-zts_depthface_nodes.tar.gz와 동일). 2개 노드 제공, 카테고리 ZTS/DepthFace:
LotusDepthDisparity — jingheya/lotus-depth-d-v2-0-disparity(Lotus depth diffusion) 모델로 이미지→깊이맵(disparity) 추정. hf_snapshots에서 받은 로컬 스냅샷을 직접 로드(_get_snapshot_dir), precision/invert_output 옵션, ComfyUI model_management로 디바이스/캐시 관리. depth 컨디셔닝(ControlNet류)·입체 효과용.FashnHumanParsing — fashn-ai/fashn-human-parser로 인물 세그멘테이션(human parsing), label_schema 선택. 의류/신체 부위 분할 → 가상피팅·인페인팅·부위별 편집용(패션 도메인 정황).핵심 패턴: 모델을 런타임 다운로드가 아니라 provisioning 단계 hf_snapshots로 미리 받아두고, 노드는 로컬 디렉토리만 읽는다(없으면 친절한 에러로 provisioning 유도). 의존성 diffusers>=0.28 / transformers>=4.42 / fashn-human-parser==0.1.1.
scripts/setup-multi-gpu.sh)임대 멀티GPU 인스턴스에서 처리량 극대화:
loadbalancer.py(FastAPI)가 prompt_id 기반 라우팅으로 18200에서 단일 진입점 제공. supervisor로 comfyui-gpu0..N + comfyui-lb 관리.--highvram 자동 적용(모델 스왑 최소화), comfy-monitor 모니터링 명령.→ "단일 ComfyUI"가 아니라 여러 GPU에 수평확장한 생성 팜을 구성하는 실전 스크립트. (.54가 4×RTX3090 수냉 노드인 것과 정확히 맞물림.)
scripts/auto-deploy-vast.sh — Vast on-start 스크립트/cron에 등록. git fetch 후 origin/main과 해시 비교 → 변경 시 git pull --ff-only → provisioning 재실행. GitOps형 무중단 갱신(레포에 모델 한 줄 추가 → 재배포 시 자동 반영).scripts/cron-install.sh — 위 배포 스크립트를 cron 등록.comfyui.service(systemd) — docker compose up -d/down oneshot. WorkingDir /home/alphavillage/develop/zts-comfyui-docker(개발 호스트명 = alphavillage).*.trycloudflare.com 제시 → 임대 GPU의 ComfyUI를 터널로 외부 공개(아래 on-host C.41508997의 cloudflared 자격증명과 동일 운영방식).ZIT V2 CIV Workflow(Z-Image-Turbo txt2img), wan2.2 14B i2v(이미지→비디오), wan2.2 infinite video lightning(장편 비디오) → 실제 운영 파이프라인..env에 CIVITAI_TOKEN 실값 포함 → 외부 공유 절대 금지(이 토큰으로 Civitai 다운로드 과금/계정 식별 가능). .env.example은 안전..git/ 히스토리 포함(과거 커밋에 다른 토큰·HF_TOKEN 흔적 가능성). 학습 후 폐기 시 이 아카이브도 함께.→ 이 레포는 우리가 직접 ComfyUI 기반 생성 서비스를 사내 표준으로 올릴 때의 베이스라인 템플릿으로 그대로 쓸 수 있다(시크릿만 교체).