TrendShift 딥다이브 · 2026-08-10 · Daily #9

ComfyUI 딥다이브
— 확산 모델을 노드 그래프로 조립하는 가장 강력한 AI 창작 엔진

Comfy-Org/ComfyUI는 이미지·영상·3D·오디오·텍스트를 만드는 확산(diffusion) 모델을, 코드 대신 노드 그래프를 그려서 조립·실행하는 오픈소스 AI 엔진이다. 포토샵의 레이어처럼 부품을 눈으로 이어 붙이는 GUI인 동시에, 그 뒤에는 PyTorch로 모델을 직접 로드하고 스마트하게 VRAM을 관리하며 그래프를 위상정렬해 실행하는 본격 추론 백엔드가 숨어 있다. "쉬운 도구"가 아니라 "모든 모델·파라미터·출력을 손끝까지 제어하려는 사람"을 위한 엔진이다. 최신 오픈 모델(Flux.2·Qwen Image·Wan 비디오·HunyuanVideo 등)을 나오는 족족 지원하고, 폐쇄형 모델(Nano Banana·Seedance)은 API 노드로 끌어오며, 데스크톱 앱·클라우드·로컬 설치를 모두 제공한다. (저장소: comfyanonymous/ComfyUI · Python 3.10+ / PyTorch · v0.31.0 · 라이선스 GPL-3.0 · 파이썬 파일 737개 · 내장 노드팩 comfy_extras 128개 · aiohttp 서버 :8188 · 최신 커밋 2026-08-09 · comfy.org / docs.comfy.org · TrendShift Daily #9)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

"AI 이미지·영상 생성을 코드 없이 '부품을 선으로 잇는 그림'으로 만들되, 뒤에서는 진짜 추론 엔진이 돌아간다"

ComfyUI를 한 문장으로 줄이면 각각의 작업(모델 로드, 프롬프트 인코딩, 노이즈 제거, 디코딩)을 '노드'라는 상자로 만들고, 그 상자들을 선으로 이어 '워크플로'를 그리면, 그 그림 그대로 확산 모델이 실행되어 결과물이 나오는 시스템이다.

보통 Stable Diffusion을 쓴다고 하면 웹UI 화면에서 프롬프트를 적고 "생성" 버튼을 누른다. ComfyUI는 그 "생성" 버튼 안에서 벌어지는 일 — 체크포인트 로드 → 텍스트 인코딩 → 샘플러가 20스텝 노이즈 제거 → VAE 디코딩 → 저장 — 을 전부 눈에 보이는 노드로 펼쳐 놓는다. 그래서 각 단계 사이에 원하는 처리를 끼워 넣거나, 한 모델의 출력을 다른 모델의 입력으로 자유롭게 연결할 수 있다.

비유로 이해하기

일반 생성 도구가 '자판기'라면, ComfyUI는 '레고 공장 라인'이다. 자판기는 버튼 하나로 정해진 음료가 나오지만 내부를 못 바꾼다. ComfyUI는 컨베이어 벨트(선) 위에 기계(노드)를 원하는 순서로 배치해, "여기서 색을 빼고, 저기서 크기를 키우고, 마지막에 두 라인을 합쳐라" 같은 나만의 조립 공정을 직접 설계한다.

그리고 이 공장은 똑똑해서, 바꾼 기계와 그 뒤 공정만 다시 돌리고 앞쪽은 지난번 결과를 그대로 재사용한다(캐싱). 그래서 프롬프트 한 글자만 고치면 전체가 아니라 바뀐 부분부터만 재실행된다.

핵심 용어
확산 모델 (Diffusion Model)
순수한 노이즈(모래폭풍 같은 이미지)에서 시작해, 학습된 신경망이 "이 노이즈에서 무엇을 덜어내야 그림에 가까워지는가"를 여러 스텝(보통 20~30번) 반복하며 점점 선명한 이미지를 빚어내는 방식. Stable Diffusion·Flux·Wan 등 오늘날 이미지·영상 생성 모델의 공통 원리다.
핵심 용어
노드 그래프 (Node Graph)
작업 단위를 상자(노드)로, 데이터의 흐름을 선(엣지)으로 표현한 그림. 언리얼 엔진의 블루프린트, 블렌더의 셰이더 에디터와 같은 계열의 "비주얼 프로그래밍"이다. ComfyUI에서는 이 그래프 자체가 곧 실행 가능한 프로그램이다.

2왜 지금 주목받는가

TrendShift Daily #9 — 별 개수가 아니라 '지금 이 순간의 모멘텀'으로 상위에 오른 이유

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가 모델 생태계의 '공용 실험대'가 된 이유다.

3기술 스택 전체 지도

겉은 브라우저 노드 에디터, 속은 PyTorch 추론 엔진 — 백엔드·프론트엔드·인프라를 나눠서 본다

ComfyUI는 크게 세 덩어리로 나뉜다. (1) 브라우저에서 도는 노드 에디터(프론트엔드), (2) 파이썬 aiohttp 웹서버 + 그래프 실행 엔진(백엔드), (3) PyTorch로 모델을 실제로 돌리는 ML 코어. 흥미로운 점은 이 셋이 서로 다른 저장소로 관리되며 조립된다는 것이다.

백엔드 (Python)

구성요소무엇을 하는가
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 — 캐시 키 계산).

프론트엔드 (별도 저장소, pip 패키지로 탑재)

핵심 반전은 프론트엔드가 이 저장소 안에 없다는 점이다. 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)를 모두 지원한다.

4아키텍처 심화 분석

"Queue Prompt" 버튼 하나 뒤에서 벌어지는 일 — 그래프 실행·캐싱·스마트 VRAM의 3중주

사용자가 노드를 이어 붙이고 실행을 누르면, 프론트엔드는 그래프를 JSON 프롬프트로 직렬화해 POST /prompt로 서버에 보낸다. 서버는 이를 검증해 큐에 넣고, 별도 워커 스레드가 하나씩 꺼내 실행한다. 그 실행의 심장이 execution.pyPromptExecutor다.

┌─────────────────────────────────────────────────────────────┐ │ 브라우저 프론트엔드 (ComfyUI_frontend · litegraph.js + Vue) │ │ 노드를 드래그해 그래프를 그림 → "Queue Prompt" 클릭 │ └──────────────┬───────────────────────────▲──────────────────┘ 프롬프트(JSON 그래프) │ POST /prompt │ WebSocket /ws ▼ │ (진행률·미리보기 push) ┌─────────────────────────────────────────────────────────────┐ │ aiohttp 비동기 웹서버 (server.py · 포트 8188) │ │ /prompt /view /history /object_info /queue /interrupt │ └──────────────┬──────────────────────────────────────────────┘ │ 검증 후 PromptQueue 에 적재 ▼ ┌──────────────────────────┐ prompt_worker 스레드가 하나씩 꺼냄 │ PromptQueue (execution) │────────────────┐ └──────────────────────────┘ ▼ ┌───────────────────────────────────────────────┐ │ PromptExecutor (execution.py) │ │ · 출력 노드에서 시작해 의존성 역추적(위상정렬) │ │ · CacheSet: 입력 서명 해시로 노드 출력 캐싱 │ │ · 입력이 바뀐 노드 + 그 downstream 만 재실행 │ └───────────────┬───────────────────────────────┘ │ 각 노드의 FUNCTION 호출 ▼ ┌───────────────────────────────────────────────┐ │ comfy/ — 진짜 ML 엔진 │ │ model_management (스마트 VRAM 오프로딩) │ │ samplers · sd · model_patcher · model_detection│ │ ldm/ k_diffusion/ controlnet lora ops │ └───────────────┬───────────────────────────────┘ ▼ PyTorch → GPU (CUDA / ROCm / MPS / XPU)

핵심 설계 패턴 ① — 노드는 '계약(contract)'을 지킨 파이썬 클래스

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에 노드를 하드코딩하지 않는다.

핵심 용어
소켓 타입 (Socket Type)
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 해시가 쓰인다.

핵심 설계 패턴 ③ — 스마트 VRAM: 모델을 GPU와 CPU 사이에서 굴린다

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도 사실 같은 메커니즘으로 로드되는 — 말하자면 '공식 커스텀 노드'다.

5디렉토리 구조 해부

737개 파이썬 파일을 '엔진 / 노드 / 서버 / 앱'의 네 갈래로 읽는 법
ComfyUI/ ├── main.py # 진입점: 인자 파싱 → DB 셋업 → 노드 로드 → 서버·워커 기동 ├── server.py # aiohttp 웹서버 + WebSocket 라우트 (1,479줄) ├── execution.py # 그래프 실행 엔진 + PromptQueue + 캐싱 (1,411줄) ├── nodes.py # 코어 내장 노드 + 노드 로딩 기계 (2,587줄) ├── folder_paths.py # 모델 디렉토리 레지스트리(어디서 가중치를 찾을지) │ ├── comfy/ # ★ 진짜 ML 엔진 (프레임워크의 심장) │ ├── model_management.py # 스마트 VRAM/오프로딩 (2,102줄) │ ├── samplers.py # 40+ 샘플러·스케줄러 (1,463줄) │ ├── sd.py # 체크포인트 로드·VAE·CLIP 조립 (2,283줄) │ ├── model_patcher.py # LoRA·후크를 모델에 '패치'로 얹는 계층 │ ├── model_detection.py # 파일만 보고 어떤 아키텍처인지 추론 │ ├── supported_models.py # 지원 모델 정의 테이블 │ ├── ldm/ k_diffusion/ # 잠재확산·k-diffusion 신경망 구현 │ └── controlnet.py lora.py ops.py(양자화 연산) │ ├── comfy_execution/ # 실행 보조: caching.py graph.py jobs.py progress.py ├── comfy_extras/ # 내장 노드팩 128개 (nodes_<모델명>.py, 모델별 1파일) ├── comfy_api/ # 노드가 코어와 대화하는 안정 API 계층(버전드) ├── comfy_api_nodes/ # 폐쇄형 모델 API 노드(Anthropic·Gemini·BFL·ByteDance…) │ ├── app/ # 앱 계층: user_manager · model_manager · frontend_management │ │ # custom_node_manager · database · subgraph_manager ├── api_server/ # 내부 라우트·터미널 서비스 ├── middleware/ blueprints/ utils/ │ ├── models/ # ★ 가중치를 넣는 28개 하위폴더 │ ├── checkpoints/ loras/ vae/ clip/ controlnet/ │ ├── diffusion_models/ text_encoders/ upscale_models/ … ├── alembic_db/ alembic.ini # DB 스키마 마이그레이션 ├── custom_nodes/ # 사용자가 설치한 서드파티 노드 └── requirements.txt pyproject.toml openapi.yaml(REST 스펙)

읽는 순서를 추천하면 이렇다. 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를 주입한다.

6학습 포인트

ComfyUI 코드를 읽으면 무엇을 배우게 되는가 — 기술별로 정리

① 확산 모델 파이프라인의 '진짜 부품들'

노드 하나하나가 확산 파이프라인의 실제 단계다. 체크포인트 로더(MODEL·CLIP·VAE 분리) → CLIP 텍스트 인코딩(CONDITIONING) → KSampler(LATENT를 노이즈에서 복원) → VAE 디코드(LATENT→IMAGE). 이 흐름을 노드로 눈으로 보면, "Stable Diffusion이 내부에서 무엇을 하는지"가 추상 개념이 아니라 데이터 흐름으로 손에 잡힌다.

핵심 용어
잠재 공간 (Latent Space)
확산 모델은 512×512 픽셀을 직접 다루지 않고, VAE로 압축한 저해상도 '잠재 이미지'(예 64×64×4) 위에서 노이즈를 제거한다. 계산량을 수십 배 줄이는 핵심 트릭. 그래서 노드 사이를 흐르는 타입이 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 추론 최적화에도 그대로 이어진다.

7하드웨어 / 시스템 요구사항

"내 컴퓨터로 돌아갈까?"에 대한 현실적인 답
항목내용
운영체제Windows · Linux · macOS (데스크톱 앱은 Windows·macOS)
Python3.10 이상
GPUNVIDIA(CUDA) · AMD(ROCm) · Intel(XPU) · Apple Silicon(MPS) · Ascend. CPU만으로도(매우 느리게) 구동 가능.
VRAM모델마다 다름. SDXL은 8GB급에서 쾌적, Flux·영상 모델은 더 큼. --lowvram/--novram으로 6GB 이하에서도 구동(속도 희생).
디스크모델 가중치가 큰 편(체크포인트 2~12GB, 영상 모델은 수십 GB). models/ 하위에 넉넉한 공간 필요.
네트워크코어는 오프라인. 모델 다운로드·API 노드 사용 시에만 필요.
현실 팁
VRAM이 작아도 포기하지 말 것

ComfyUI의 존재 이유 중 하나가 바로 이것이다. --lowvram이면 텍스트 인코더를 CPU로 돌리고 확산 모델 가중치를 층 단위로 스트리밍한다. 24GB가 없어도 최신 모델을 '느리지만 확실히' 돌려볼 수 있다. VRAM이 정말 부족하면 --novram, 그래도 안 되면 정밀도를 --fp8_e4m3fn-unet으로 낮춘다.

8직접 해볼 수 있는 실습 과제

난이도별 5선 — 설치부터 커스텀 노드 제작, 로컬 API 자동화까지
난이도 ★ 입문

1. 기본 text→image 워크플로 해부하기 1~2시간

ComfyUI를 설치하고 기본 워크플로를 연다. 각 노드를 하나씩 클릭하며 어떤 타입이 어디로 흐르는지 추적하라. CheckpointLoaderSimple → CLIPTextEncode(2개, positive/negative) → KSampler → VAEDecode → SaveImage. seed만 바꿔 다시 실행해 캐시가 어떤 노드를 건너뛰는지 콘솔 로그로 확인한다.

난이도 ★★ 초급

2. 샘플러 비교 실험 그리드 만들기 반나절

같은 프롬프트·seed로 euler · dpmpp_2m · dpmpp_3m_sde · lcm을 각각 실행해 결과를 비교하라. 스케줄러도 normal vs karras로 바꿔 본다. "왜 LCM은 스텝이 적어도 되는가"를 직접 눈으로 확인하며 샘플러 감각을 익힌다.

난이도 ★★★ 중급

3. 나만의 커스텀 노드 작성 1~2일

custom_nodes/에 파이썬 파일을 하나 만들어, INPUT_TYPES / RETURN_TYPES / FUNCTION / CATEGORY를 갖춘 노드를 등록하라. 예: 입력 IMAGE에 워터마크를 합성하거나, LATENT의 통계를 텍스트로 뽑는 노드. NODE_CLASS_MAPPINGS에 넣고 재시작하면 메뉴에 뜬다. ComfyUI 확장 생태계의 시작점.

난이도 ★★★★ 중상급

4. 로컬 API로 배치 생성 자동화 2~3일

워크플로를 API 포맷 JSON으로 저장한 뒤, 파이썬 스크립트에서 POST /prompt로 제출하고 /ws로 진행률을 받아 /history로 결과를 회수하는 파이프라인을 짜라. 프롬프트 리스트를 순회하며 수백 장을 무인 생성하는 배치 잡을 만들어 본다. script_examples/가 출발점이다.

난이도 ★★★★★ 고급

5. 실행 엔진 코드 읽고 캐시 동작 계측하기 1주+

execution.pyPromptExecutor.execute_asynccomfy_execution/caching.py를 읽으며 입력 서명이 어떻게 계산되는지 추적하라. 로그를 심어 어떤 노드가 캐시 히트/미스인지 계측하고, --cache-lru vs 기본 계층 캐시의 메모리·속도 차이를 측정해 본다. ComfyUI가 빠른 이유를 데이터로 증명하는 과제.

9관련 기술 심화 학습 로드맵

ComfyUI를 발판으로 확산 모델·추론 시스템 전문가로 가는 4주 코스
주차주제무엇을 하는가
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·양자화)으로 확장하거나.

10핵심 키워드 사전

ComfyUI 문서·커뮤니티에서 반복해 마주칠 용어들
용어
워크플로 (Workflow)
노드와 연결로 이뤄진 그래프 전체. JSON으로 저장·공유되며, 생성된 이미지의 메타데이터에 워크플로가 통째로 박혀 있어 결과물만 있으면 파이프라인을 복원할 수 있다.
용어
체크포인트 (Checkpoint)
확산 모델·CLIP·VAE가 한 파일에 묶인 학습 완료 가중치(.safetensors). models/checkpoints/에 넣는다.
용어
LoRA
거대한 원본 모델을 통째로 바꾸지 않고, 작은 추가 가중치만 얹어 화풍·인물·개념을 주입하는 경량 미세조정. ComfyUI에서는 model_patcher가 이를 '패치'로 얹는다.
용어
CONDITIONING
프롬프트가 텍스트 인코더를 거쳐 변환된 결과 타입. 샘플러가 "무엇을 그릴지"를 이 조건에 맞춰 유도한다. positive/negative 두 갈래로 쓴다.
용어
VAE (Variational Autoencoder)
픽셀 이미지 ↔ 잠재 이미지를 오가는 인코더/디코더. 확산은 잠재 공간에서 일어나고, 마지막에 VAE 디코드로 사람이 볼 픽셀로 되돌린다.
용어
ControlNet
엣지·깊이·포즈 같은 보조 이미지를 조건으로 넣어 구도를 강하게 통제하는 확장 모델. "고양이를 이 자세 그대로 그려"가 가능해진다.
용어
오프로딩 (Offloading)
지금 안 쓰는 모델 가중치를 GPU(VRAM)에서 CPU(RAM)로 잠시 내려 VRAM을 비우는 것. ComfyUI 스마트 메모리의 핵심 동작.
용어
App Mode
복잡한 노드 그래프를 최종 사용자에게는 단순한 입력 폼 UI로만 노출하는 모드. 개발자는 그래프로 만들고, 사용자는 버튼 몇 개로 쓴다.

11참고 링크

공식 저장소·문서·생태계로 이어지는 다음 걸음

공식
· 코어 저장소: 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