노드 그래프로 조립하는 가장 강력한 AI 창작 엔진comfy_extras 128개 · aiohttp 서버 :8188 · 최신 커밋 2026-08-09 · comfy.org / docs.comfy.org · TrendShift Daily #9)
ComfyUI를 한 문장으로 줄이면 각각의 작업(모델 로드, 프롬프트 인코딩, 노이즈 제거, 디코딩)을 '노드'라는 상자로 만들고, 그 상자들을 선으로 이어 '워크플로'를 그리면, 그 그림 그대로 확산 모델이 실행되어 결과물이 나오는 시스템이다.
보통 Stable Diffusion을 쓴다고 하면 웹UI 화면에서 프롬프트를 적고 "생성" 버튼을 누른다. ComfyUI는 그 "생성" 버튼 안에서 벌어지는 일 — 체크포인트 로드 → 텍스트 인코딩 → 샘플러가 20스텝 노이즈 제거 → VAE 디코딩 → 저장 — 을 전부 눈에 보이는 노드로 펼쳐 놓는다. 그래서 각 단계 사이에 원하는 처리를 끼워 넣거나, 한 모델의 출력을 다른 모델의 입력으로 자유롭게 연결할 수 있다.
일반 생성 도구가 '자판기'라면, ComfyUI는 '레고 공장 라인'이다. 자판기는 버튼 하나로 정해진 음료가 나오지만 내부를 못 바꾼다. ComfyUI는 컨베이어 벨트(선) 위에 기계(노드)를 원하는 순서로 배치해, "여기서 색을 빼고, 저기서 크기를 키우고, 마지막에 두 라인을 합쳐라" 같은 나만의 조립 공정을 직접 설계한다.
그리고 이 공장은 똑똑해서, 바꾼 기계와 그 뒤 공정만 다시 돌리고 앞쪽은 지난번 결과를 그대로 재사용한다(캐싱). 그래서 프롬프트 한 글자만 고치면 전체가 아니라 바뀐 부분부터만 재실행된다.
ComfyUI는 이미 수년째 확산 모델 커뮤니티의 사실상 표준 백엔드다. 그럼에도 트렌딩 상위에 계속 다시 오르는 이유는, 새 모델이 세상에 나오는 속도와 거의 같은 속도로 ComfyUI가 그 모델을 '노드'로 흡수하기 때문이다. 실제로 이 저장소의 최신 커밋(2026-08-09)은 방금 공개된 MiniMax-H3 영상 모델의 VAE 최적화였다.
| 비교 축 | 일반 웹UI (A1111 계열) | ComfyUI |
|---|---|---|
| 구성 방식 | 고정된 탭·슬라이더 화면 | 노드를 자유 조립하는 그래프 — 파이프라인을 내가 설계 |
| 재실행 비용 | 보통 전체 파이프라인 재실행 | 입력이 바뀐 노드와 그 이후만 재실행(캐싱) |
| VRAM 관리 | 확장에 의존, OOM 잦음 | 엔진 내장 스마트 오프로딩 — 저사양 GPU도 구동 |
| 모델 범위 | 주로 이미지 확산 | 이미지·영상·3D·오디오·텍스트 + 폐쇄형 API 노드 |
| 자동화·배포 | 제한적 | 워크플로 JSON, 로컬 API, App Mode, 데스크톱/클라우드 |
① 최신 모델 즉시 지원. 이미지(SDXL·SD3.5·Flux.1/2·Qwen Image·Z-Image·HiDream), 영상(Wan 2.1/2.2·HunyuanVideo 1.5·LTX-Video·CogVideoX), 3D(Hunyuan3D·TripoSplat), 오디오(ACE-Step·Stable Audio), 텍스트(Gemma·Qwen3-VL)까지 한 엔진에서 돈다. 새 모델은 대개 comfy_extras/nodes_<모델명>.py 하나가 추가되며 붙는다.
② 저사양에서도 돈다. 뒤에서 다룰 스마트 VRAM 관리 덕에, 수십 GB짜리 모델도 VRAM이 부족하면 가중치를 CPU 램으로 밀어냈다 필요할 때만 GPU로 올리는 식으로 굴러간다. "내 그래픽카드로도 Flux가 돌아간다"는 경험이 확산의 큰 동력이다.
③ 완전 오프라인 코어. 코어는 사용자가 요청하지 않는 한 아무것도 다운로드하지 않는다. --disable-api-nodes로 유료 API 노드를 끄면 프론트엔드의 인터넷 통신까지 차단된다. 프라이버시·보안이 중요한 환경에서 특히 선호된다.
④ 회사·데스크톱·클라우드로의 제품화. 순수 오픈소스 프로젝트를 넘어 Comfy-Org라는 조직이 데스크톱 앱, 클라우드, 워크플로 템플릿, 주간 릴리스 체계를 운영한다. "취미 도구"에서 "프로덕션 파이프라인"으로 넘어간 것이 최근 모멘텀의 배경이다.
텍스트→이미지 워크플로를 한번 잘 만들어 두면, 체크포인트 로더 노드만 다른 모델로 바꿔 끼워 곧바로 새 모델을 시험할 수 있다. 도구를 다시 배우는 게 아니라 부품 하나만 교체하는 감각 — 이 모듈성이 ComfyUI가 모델 생태계의 '공용 실험대'가 된 이유다.
ComfyUI는 크게 세 덩어리로 나뉜다. (1) 브라우저에서 도는 노드 에디터(프론트엔드), (2) 파이썬 aiohttp 웹서버 + 그래프 실행 엔진(백엔드), (3) PyTorch로 모델을 실제로 돌리는 ML 코어. 흥미로운 점은 이 셋이 서로 다른 저장소로 관리되며 조립된다는 것이다.
| 구성요소 | 무엇을 하는가 |
|---|---|
| Python 3.10+ | 전체 백엔드 언어. 노드는 전부 파이썬 클래스로 정의된다. |
| PyTorch | 실제 신경망 추론 엔진. torch·torchsde·torchvision·torchaudio. 확산 모델의 순전파·샘플링이 여기서 돈다. |
| aiohttp | 비동기 웹서버(server.py). HTTP 라우트 + WebSocket으로 진행률·미리보기를 실시간 스트리밍. |
| safetensors | 모델 가중치 파일 포맷. pickle보다 안전하고 빠른 로딩. |
| transformers·tokenizers·sentencepiece | 텍스트 인코더(CLIP·T5 등)와 토크나이저. 프롬프트를 임베딩으로 변환. |
| numpy·einops·scipy·kornia | 텐서 조작·이미지 연산의 수학 토대. |
| Pillow·av | 이미지 입출력(Pillow), 영상 인코딩/디코딩(av = FFmpeg 바인딩). |
| spandrel | 업스케일 모델(ESRGAN 계열)을 통일된 인터페이스로 로드. |
| SQLAlchemy 2.0 + alembic | 사용자·모델 메타데이터 DB와 마이그레이션. 최근 버전에서 도입된 상태 저장 계층. |
| pydantic·simpleeval·blake3 | 스키마 검증(pydantic), 안전한 수식 평가(simpleeval), 빠른 해시(blake3 — 캐시 키 계산). |
핵심 반전은 프론트엔드가 이 저장소 안에 없다는 점이다. requirements.txt를 보면 comfyui-frontend-package==1.48.7이라는 파이썬 패키지로 프론트엔드가 배포된다. UI 개발은 Comfy-Org/ComfyUI_frontend(litegraph.js 기반 노드 에디터 + Vue)에서 이뤄지고, 2주마다 코어로 병합돼 고정 버전으로 딸려 온다.
| 패키지 | 역할 |
|---|---|
| comfyui-frontend-package | 브라우저 노드 에디터 본체(litegraph 캔버스·위젯·설정 화면). |
| comfyui-workflow-templates | 바로 실행 가능한 예제 워크플로 묶음. |
| comfyui-embedded-docs | 노드 설명을 UI 안에서 보여주는 내장 문서. |
ComfyUI는 세 저장소가 맞물린 릴리스 체계로 운영된다. 이 분리가 "코어는 안정적으로, UI는 빠르게"를 동시에 달성하는 열쇠다.
| 저장소 | 역할 | 릴리스 주기 |
|---|---|---|
| comfyanonymous/ComfyUI | 코어(엔진 + 내장 노드) | 대략 2주마다 안정 버전(예 v0.31.0) |
| Comfy-Org/Comfy-Desktop | 데스크톱 앱(Electron 기반 설치형) | 최신 안정 코어로 빌드 |
| Comfy-Org/ComfyUI_frontend | 브라우저 노드 에디터 | 2주+마다 코어로 병합 |
이 외에 Windows 포터블 패키지, Comfy Cloud(로컬 하드웨어가 부족한 사용자용 유료 클라우드)까지 제공한다. 다양한 가속기(NVIDIA·AMD·Intel·Apple Silicon·Ascend)를 모두 지원한다.
사용자가 노드를 이어 붙이고 실행을 누르면, 프론트엔드는 그래프를 JSON 프롬프트로 직렬화해 POST /prompt로 서버에 보낸다. 서버는 이를 검증해 큐에 넣고, 별도 워커 스레드가 하나씩 꺼내 실행한다. 그 실행의 심장이 execution.py의 PromptExecutor다.
ComfyUI의 확장성은 전부 이 단순한 규약에서 나온다. 노드는 그냥 파이썬 클래스인데, 정해진 클래스 속성 몇 개만 갖추면 엔진이 자동으로 인식한다.
class CheckpointLoaderSimple:
@classmethod
def INPUT_TYPES(s): # 입력 소켓 정의(타입 + 위젯)
return {"required": {
"ckpt_name": (folder_paths.get_filename_list("checkpoints"),)
}}
RETURN_TYPES = ("MODEL", "CLIP", "VAE") # 출력 소켓의 타입들
FUNCTION = "load_checkpoint" # 실제로 호출될 메서드 이름
CATEGORY = "model/loaders" # UI 메뉴에서의 위치
def load_checkpoint(self, ckpt_name):
ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name)
out = comfy.sd.load_checkpoint_guess_config(ckpt_path, ...)
return out[:3] # (MODEL, CLIP, VAE) 튜플 반환
엔진은 모든 노드를 NODE_CLASS_MAPPINGS라는 딕셔너리에 모아 두고, 서버의 GET /object_info가 이 정보를 JSON 스키마로 프론트엔드에 넘긴다. 프론트엔드는 이 스키마만으로 노드의 생김새(입력 슬롯·위젯·색)를 자동 렌더링한다 — UI에 노드를 하드코딩하지 않는다.
MODEL·CLIP·VAE·LATENT·CONDITIONING·IMAGE·INT·FLOAT 같은 문자열. 두 노드의 출력·입력 타입이 같아야만 선을 연결할 수 있다. 즉 이 타입 문자열이 그래프의 '타입 안전성'을 만든다 — VAE 출력을 실수로 샘플러의 모델 입력에 꽂을 수 없다.ComfyUI가 체감상 빠른 진짜 이유가 여기 있다. 실행 엔진은 각 노드의 출력을 입력 서명(input signature)을 키로 캐싱한다. 서명은 그 노드의 입력값 + 상류(上流)의 모든 입력을 해시한 값이라, 노드 하나의 값이 바뀌면 그 노드와 하류(下流)만 서명이 달라져 재실행되고, 상류는 지난 실행 결과를 캐시에서 그대로 꺼내 쓴다.
요리 레시피에서 "마지막 소스만 바꿨다"면, 육수를 처음부터 다시 우릴 필요는 없다. 이미 끓여 둔 육수(상류 캐시)를 쓰고 소스 단계부터(하류)만 다시 하면 된다. ComfyUI의 캐시가 정확히 이렇게 동작한다 — 그래서 프롬프트 한 단어, seed 하나만 바꿔 다시 돌리면 무거운 모델 로딩·인코딩은 건너뛴다.
캐시 전략도 갈아 끼울 수 있다. 기본 HierarchicalCache 외에 --cache-lru N(최근 N개 유지), --cache-none(캐시 끔, RAM 절약), RAMPressureCache(램 압박 시 자동 축출)를 CLI로 선택한다. 캐시 키 계산에 앞서 본 blake3 해시가 쓰인다.
comfy/model_management.py(2,100줄)는 ComfyUI에서 가장 값진 코드다. VRAM 상태를 NO_VRAM · LOW_VRAM · NORMAL_VRAM · HIGH_VRAM · SHARED 다섯 단계로 두고, 실행 시점에 필요한 모델만 GPU로 올리고 쓰지 않는 모델은 CPU 램으로 내린다(offload).
| 상태 | 동작 | 적합한 상황 |
|---|---|---|
| HIGH_VRAM | 쓴 모델도 GPU에 계속 상주 | VRAM 여유가 큰 고사양 |
| NORMAL_VRAM | 기본값. 쓰고 나면 CPU로 내림, 필요 시 다시 올림 | 대부분의 데스크톱 GPU |
| LOW/NO_VRAM | 가중치를 층 단위로 스트리밍, 텍스트 인코더는 CPU 실행 | VRAM이 모델보다 작을 때 |
여기에 --fp16 / --bf16 / --fp8_e4m3fn 같은 정밀도 다운캐스팅과 --reserve-vram(OS 몫 예약), --disable-smart-memory(공격적 오프로딩)까지 더해, "이 카드에서 이 모델을 어떻게든 돌린다"는 목표를 집요하게 달성한다. 이 계층 덕분에 같은 워크플로가 24GB 카드에서도, 6GB 노트북 GPU에서도 (느리지만) 돌아간다.
custom_nodes/ 폴더에 파이썬 모듈을 넣으면 시작 시 자동 로드된다(load_custom_node). 각 커스텀 노드는 NODE_CLASS_MAPPINGS로 새 노드를 등록하고, WEB_DIRECTORY를 지정하면 프론트엔드에 자기만의 위젯(JS)까지 주입할 수 있다. 내장 노드팩 comfy_extras/의 128개 nodes_*.py도 사실 같은 메커니즘으로 로드되는 — 말하자면 '공식 커스텀 노드'다.
읽는 순서를 추천하면 이렇다. ① main.py로 부팅 흐름을 잡고 → ② nodes.py에서 노드 계약을 익히고 → ③ execution.py로 그래프가 어떻게 도는지 보고 → ④ comfy/model_management.py로 VRAM 마술을 이해하면, 나머지 comfy_extras/ 128개 파일은 전부 같은 패턴의 반복이라 술술 읽힌다.
이 저장소에는 .js UI 코드가 거의 없다. 노드 에디터는 comfyui-frontend-package pip 패키지로 들어오기 때문이다. UI를 고치려면 이 저장소가 아니라 Comfy-Org/ComfyUI_frontend를 봐야 한다. 커스텀 노드가 UI 위젯을 붙일 때만 WEB_DIRECTORY로 예외적으로 JS를 주입한다.
노드 하나하나가 확산 파이프라인의 실제 단계다. 체크포인트 로더(MODEL·CLIP·VAE 분리) → CLIP 텍스트 인코딩(CONDITIONING) → KSampler(LATENT를 노이즈에서 복원) → VAE 디코드(LATENT→IMAGE). 이 흐름을 노드로 눈으로 보면, "Stable Diffusion이 내부에서 무엇을 하는지"가 추상 개념이 아니라 데이터 흐름으로 손에 잡힌다.
IMAGE가 아니라 대부분 LATENT다.comfy/samplers.py에는 euler · euler_ancestral · heun · dpmpp_2m · dpmpp_2m_sde · dpmpp_3m_sde · ddpm · lcm · uni_pc · res_multistep 등 40여 종의 샘플러가 있다. 스케줄러(normal·karras·exponential·sgm_uniform·beta 등)는 "매 스텝 노이즈를 얼마나 걷어낼지"의 일정표다. 이 조합이 속도·품질·화풍을 바꾼다 — 생성 AI의 '하이퍼파라미터 감각'을 여기서 기른다.
"클래스 속성 규약 + 자동 등록 + 스키마를 클라이언트로 전송해 UI 자동 생성"이라는 패턴은 ComfyUI만의 것이 아니다. 이 구조를 이해하면 임의의 앱에 '서드파티가 안전하게 기능을 꽂는 확장 시스템'을 설계하는 법을 배운다 — VS Code 익스텐션, 블렌더 애드온과 같은 계보다.
aiohttp 라우트, WebSocket으로 진행률·미리보기 push, 무거운 작업을 별도 워커 스레드로 분리하고 큐로 직렬화하는 구조는 모든 '오래 걸리는 작업을 웹에서 돌리는 서비스'의 정석이다. /prompt로 제출 → /ws로 상태 구독 → /history로 결과 회수하는 흐름을 그대로 다른 프로젝트에 옮길 수 있다.
모델은 커지는데 소비자 GPU의 VRAM은 한정적이다. ComfyUI의 오프로딩·정밀도 캐스팅·층 단위 스트리밍은 "메모리보다 큰 것을 어떻게 돌리는가"라는 시스템 문제의 실전 답안이다. 이 사고방식은 LLM 추론 최적화에도 그대로 이어진다.
| 항목 | 내용 |
|---|---|
| 운영체제 | Windows · Linux · macOS (데스크톱 앱은 Windows·macOS) |
| Python | 3.10 이상 |
| GPU | NVIDIA(CUDA) · AMD(ROCm) · Intel(XPU) · Apple Silicon(MPS) · Ascend. CPU만으로도(매우 느리게) 구동 가능. |
| VRAM | 모델마다 다름. SDXL은 8GB급에서 쾌적, Flux·영상 모델은 더 큼. --lowvram/--novram으로 6GB 이하에서도 구동(속도 희생). |
| 디스크 | 모델 가중치가 큰 편(체크포인트 2~12GB, 영상 모델은 수십 GB). models/ 하위에 넉넉한 공간 필요. |
| 네트워크 | 코어는 오프라인. 모델 다운로드·API 노드 사용 시에만 필요. |
ComfyUI의 존재 이유 중 하나가 바로 이것이다. --lowvram이면 텍스트 인코더를 CPU로 돌리고 확산 모델 가중치를 층 단위로 스트리밍한다. 24GB가 없어도 최신 모델을 '느리지만 확실히' 돌려볼 수 있다. VRAM이 정말 부족하면 --novram, 그래도 안 되면 정밀도를 --fp8_e4m3fn-unet으로 낮춘다.
ComfyUI를 설치하고 기본 워크플로를 연다. 각 노드를 하나씩 클릭하며 어떤 타입이 어디로 흐르는지 추적하라. CheckpointLoaderSimple → CLIPTextEncode(2개, positive/negative) → KSampler → VAEDecode → SaveImage. seed만 바꿔 다시 실행해 캐시가 어떤 노드를 건너뛰는지 콘솔 로그로 확인한다.
같은 프롬프트·seed로 euler · dpmpp_2m · dpmpp_3m_sde · lcm을 각각 실행해 결과를 비교하라. 스케줄러도 normal vs karras로 바꿔 본다. "왜 LCM은 스텝이 적어도 되는가"를 직접 눈으로 확인하며 샘플러 감각을 익힌다.
custom_nodes/에 파이썬 파일을 하나 만들어, INPUT_TYPES / RETURN_TYPES / FUNCTION / CATEGORY를 갖춘 노드를 등록하라. 예: 입력 IMAGE에 워터마크를 합성하거나, LATENT의 통계를 텍스트로 뽑는 노드. NODE_CLASS_MAPPINGS에 넣고 재시작하면 메뉴에 뜬다. ComfyUI 확장 생태계의 시작점.
워크플로를 API 포맷 JSON으로 저장한 뒤, 파이썬 스크립트에서 POST /prompt로 제출하고 /ws로 진행률을 받아 /history로 결과를 회수하는 파이프라인을 짜라. 프롬프트 리스트를 순회하며 수백 장을 무인 생성하는 배치 잡을 만들어 본다. script_examples/가 출발점이다.
execution.py의 PromptExecutor.execute_async와 comfy_execution/caching.py를 읽으며 입력 서명이 어떻게 계산되는지 추적하라. 로그를 심어 어떤 노드가 캐시 히트/미스인지 계측하고, --cache-lru vs 기본 계층 캐시의 메모리·속도 차이를 측정해 본다. ComfyUI가 빠른 이유를 데이터로 증명하는 과제.
| 주차 | 주제 | 무엇을 하는가 |
|---|---|---|
| 1주차 | 확산 모델 기초 | DDPM·잠재확산(LDM)의 원리, VAE·U-Net·노이즈 스케줄 개념. ComfyUI 노드와 논문 용어를 1:1로 매칭한다. |
| 2주차 | 조건화와 제어 | CLIP/T5 텍스트 인코딩, ControlNet, LoRA, IP-Adapter를 노드로 실습하며 "출력을 통제하는 법"을 익힌다. |
| 3주차 | 확장 개발 | 커스텀 노드 + WEB_DIRECTORY JS 위젯으로 UI까지 확장. comfy_api 버전드 인터페이스 이해. |
| 4주차 | 추론 최적화 | model_management·양자화(fp8)·어텐션 최적화(sage/flash) 코드를 읽고, VRAM 제약 하 최적화를 실측한다. |
이 코스를 마치면 확산 모델을 '쓰는 사람'이 아니라 '파이프라인을 설계하고 최적화하는 사람'이 된다. 다음 갈래는 두 방향이다 — 영상·3D 생성 모델의 시간축/기하 조건화로 넘어가거나, 여기서 익힌 추론 최적화 감각을 LLM 서빙(vLLM·양자화)으로 확장하거나.
models/checkpoints/에 넣는다.model_patcher가 이를 '패치'로 얹는다.공식
· 코어 저장소: github.com/comfyanonymous/ComfyUI
· 공식 사이트: comfy.org · 문서: docs.comfy.org
· 프론트엔드: github.com/Comfy-Org/ComfyUI_frontend
· 데스크톱 앱: comfy.org/download · 클라우드: comfy.org/cloud
학습·예제
· 워크플로 템플릿 라이브러리: comfy.org/workflows
· 예제 모음: comfyanonymous.github.io/ComfyUI_examples
· 저장소 내 script_examples/ — 로컬 API 호출 예제
· 저장소 내 openapi.yaml — REST API 전체 스펙
생태계
· ComfyUI-Manager — 커스텀 노드 설치·관리 도구(사실상 필수 확장)
· Discord: discord.com/invite/comfyorg