ComfyUI 이미지·영상 생성, 어떻게 동작하나
요약: ComfyUI는 이미지·영상 생성을 '노드 그래프(레고 블록)'로 조립하는 실행 엔진이다. 모델 한 덩어리가 통째로 그리는 게 아니라, 체크포인트 로드→프롬프트 인코딩→샘플링→VAE 디코드 같은 노드를 선으로 이어 데이터 흐름을 만든다. 핵심 강점은 바뀐 노드만 다시 실행하는 캐싱이다: 프롬프트만 고치면 앞 단계는 캐시에서 재사용하고 그 뒤만 다시 돈다.
ComfyUI는 이미지·영상 생성을 '노드 그래프(레고 블록)'로 조립하는 실행 엔진이다. 모델 한 덩어리가 통째로 그리는 게 아니라, 체크포인트 로드→프롬프트 인코딩→샘플링→VAE 디코드 같은 노드를 선으로 이어 데이터 흐름을 만든다. 핵심 강점은 바뀐 노드만 다시 실행하는 캐싱이다: 프롬프트만 고치면 앞 단계는 캐시에서 재사용하고 그 뒤만 다시 돈다. 우리도 이 엔진을 풀(pool)로 운영하는데, 현재 실행가능(api) 워크플로 22종에 큐 누적 성공 113·실패 12·취소 21건 — 취소 제외 성공률 약 90%(우리 풀 측정)다.
한 줄 요약: ComfyUI는 이미지·영상 생성을 노드 그래프로 조립하고, 바뀐 노드만 다시 도는 캐싱으로 반복 실험을 빠르게 만드는 읽기전용 실행 엔진이다.
쉽게 말하면: ComfyUI는 요리 레시피 그래프다. '재료 손질→양념→굽기' 각 단계가 노드이고, 양념만 바꾸면 손질은 다시 안 하고 그 뒤만 다시 한다. 그래서 반복 실험이 빠르다.
이미지 한 장은 어떤 노드를 거치나?#
로드→인코드→샘플→디코드 네 단계가 뼈대다. ① 체크포인트 로더가 모델·CLIP·VAE를 올린다. ② CLIPTextEncode가 긍정/부정 프롬프트를 임베딩으로 바꾼다. ③ KSampler가 노이즈에서 시작해 정해진 step만큼 디노이즈한다(여기서 seed·steps·cfg·sampler·scheduler가 정해진다). ④ VAEDecode가 잠재(latent)를 실제 픽셀로 푼다. 우리 풀의 실제 파라미터를 보면 터보/라이트닝 워크플로는 steps 8·cfg 1로 빠르게, 풀 품질(HiDream·Qwen-Image)은 steps 40~50·cfg 3~5로 느리지만 정밀하게 돈다. 샘플러는 euler·dpmpp_2m·uni_pc 등, 스케줄러는 simple·karras 등을 고른다.
아래 그림이 그 네 단계 데이터 흐름이다. 왼쪽 로더가 올린 모델이 위쪽 인코더와 아래쪽 샘플러로 흘러 마지막에 픽셀로 나온다.
| 노드 | 하는 일 | 우리 풀 실값 |
|---|---|---|
| 체크포인트 로더 | 모델·CLIP·VAE 적재 | SDXL·SD3.5·Qwen·HiDream 등 |
| CLIPTextEncode | 프롬프트→임베딩(긍/부정) | 긍정+부정 2개 |
| KSampler | 노이즈→디노이즈 생성 | steps 8~50·cfg 1~5 |
| VAEDecode | 잠재→픽셀 변환 | 모델별 전용 VAE |
| SaveImage(출력) | 결과 저장·반환 | 큐 성공률 약 90% |
캐싱은 왜 그렇게 빠른가?#
그래프는 노드마다 입력 해시로 결과를 기억한다. 앞 노드의 입력이 그대로면 그 출력도 그대로라, 다시 계산하지 않고 캐시를 그대로 흘려보낸다. 그래서 프롬프트(인코드 노드)만 바꾸면 로더 단계는 건드리지 않고 인코드 뒤부터만 다시 돈다. 아래 그림에서 회색으로 표시한 캐시된 노드는 통과만 하고, 바뀐 노드(굵은 테두리)부터 하류가 재실행된다.
영상은 무엇이 다른가?#
같은 노드 패러다임에 '시간'이 붙는다. 텍스트→영상도 그래프지만, 빈 잠재가 한 장이 아니라 프레임 묶음이고 모델이 영상 전용이다. 대표가 둘이다. WAN 2.2는 High-Noise·Low-Noise 두 모델을 직렬로 둔 'split-noise' 구조로, 거친 단계와 미세 단계를 나눠 디노이즈한다(플로 매칭, 4-step 라이트닝 LoRA로 가속). LTX-2는 19B DiT로 저해상도 생성 후 잠재공간에서 2배 업스케일하며, 프레임 수는 8n+1(예: 97·121) 규칙을 따르고 오디오까지 한 번에 낸다. 우리 풀에도 ltx23-t2v(텍스트→영상)와 wan22 이미지→영상 워크플로가 올라가 있다.
WAN 2.2의 split-noise가 왜 두 단계인지는 그림으로 보면 분명하다. 앞 모델이 큰 틀(거친 노이즈)을 잡고, 뒤 모델이 세부(미세 노이즈)를 다듬는다.
왜 그래프로 만드나? (그리고 왜 비동기인가)#
재현성·재사용·확장 때문이다. 그래프는 JSON으로 저장돼 같은 seed·노드면 같은 결과가 나와 재현 가능하고, 노드를 갈아끼워 ControlNet·LoRA·업스케일을 조립한다. 생성은 수초~수십 초가 걸려 제출-조회(submit→poll) 비동기로 받는다: 작업을 큐에 넣고 작업ID로 폴링한다. 우리는 96GB급 워크스테이션 GPU 다수를 워커로 두고 워커당 동시 1작업, 최소 여유 VRAM을 확보해 OOM을 막는다(우리 풀 측정).
직접 해보려면?#
작게, 노드로 쪼개 보라.
- 기본 t2i 그래프(로드→인코드→KSampler→VAEDecode)부터 만들고, steps·cfg만 바꿔 속도/품질 곡선을 본다.
- 같은 그래프를 두 번 큐에 넣어 두 번째가 캐시로 즉시 끝나는지 확인한다.
- 영상은 프레임 수를 작게(짧게) 시작하고, 비동기 작업은 제출 후 폴링으로 받는다.
참고 링크
참고: 워크플로 수·성공률·스텝·VRAM은 2026년 우리 풀의 읽기전용 상태조회와 공개 자료 기준이며 모델·구성에 따라 달라진다(내부 주소·경로·계정은 비공개). 정확한 속도·품질은 본문 방법으로 내 그래프에서 직접 측정하라. 모델·노드는 자주 갱신되니 분기별로 다시 본다.
Responses
No responses yet. Be the first to respond.