1. Workflow란 무엇인가?
Workflow는 ComfyUI에서 이미지 생성 과정에서 일어나는 모든 작업을 시각적으로 표현하고, 노드(Node)를 통해 서로 연결하는 방식으로 구성된 작업 흐름
Workflow가 중요한 이유
일반적인 AI 이미지 생성 도구들은 사용자가 입력하고 결과를 기다리는 단순한 구조이다. 하지만 ComfyUI는 다르다. 각 단계를 시각적으로 표현하고 직접 제어할 수 있다.
- 완전한 제어: 모델 선택부터 최종 저장까지 모든 단계를 커스터마이징 가능
- 재사용성: 한 번 만든 워크플로우를 반복해서 사용 가능
- 확장성: 새로운 노드를 추가해 복잡한 이미지 생성 파이프라인 구축 가능
- 학습: 각 단계가 명확하게 드러나므로 AI 이미지 생성 원리를 이해하기 좋음
2. Workflow의 구성 요소
Workflow를 이루는 세 가지 핵심 요소가 있다.
2.1 노드 (Node)

노드는 워크플로우의 기본 단위로, 하나의 작업 또는 기능을 담당합니다.
예시:
- Load Checkpoint: 모델 불러오기
- CLIP Text Encode (Positive): 긍정 프롬프트 처리
- KSampler: 이미지 생성 샘플링
- Save Image: 이미지 저장
각 노드는 다음과 같은 특징이 있다
- 입력 포트 (왼쪽): 다른 노드에서 데이터를 받음
- 출력 포트 (오른쪽): 처리 결과를 다른 노드에 전달
- 내부 설정: 해당 노드만의 매개변수 조정 가능
2.2 연결 (Connection)

연결은 두 노드 사이의 데이터 흐름을 나타내는 선이다.
Load Checkpoint의 MODEL 출력 → CLIP Text Encode의 clip 입력
연결의 특징:
- 색깔로 데이터 타입 구분 (노란색: 모델, 초록색: 텍스트 인코딩 등)
- 출력 포트를 입력 포트에 드래그하여 생성
- 같은 타입끼리만 연결 가능 (타입 불일치 시 자동으로 방지됨)
2.3 매개변수 (Parameter)

매개변수는 각 노드의 동작을 세밀하게 조정하는 설정값들이다.
예시:
- Seed: 난수 시드값 (이미지 생성의 재현성)
- Steps: 생성 단계 수 (30, 40, 50 등)
- CFG Scale: 프롬프트 영향도 (1.0~20.0)
- Sampler: 샘플링 방식 (euler, dpmpp 등)
3. 기본 Workflow 구축하기
3.1 기본 4단계 구조
ComfyUI의 기본 워크플로우는 다음 4단계로 구성된다.

단계별 상세 설명
1단계: 모델 선택 (Load Checkpoint)
역할: AI 이미지 생성에 필요한 모델 파일 로드
출력:
- MODEL: 실제 생성에 사용할 모델
- CLIP: 텍스트를 이미지로 변환하는 텍스트 인코더
- VAE: 생성된 이미지를 압축/복원하는 변환기
2단계: 프롬프트 입력 (CLIP Text Encode)
두 가지 노드가 필요:
- Positive (긍정 프롬프트): 생성하고 싶은 내용
예: "beautiful woman on beach, sunset, professional photo"
- Negative (부정 프롬프트): 피하고 싶은 내용
예: "blurry, low quality, deformed"
출력: CONDITIONING (조건화된 텍스트 데이터)
3단계: 이미지 생성 (KSampler)
역할: 실제 이미지 생성 수행
필수 입력:
- model: 1단계의 MODEL
- positive/negative: 2단계의 CONDITIONING
- seed: 난수 시드 (같은 값으로 같은 이미지 재현)
- steps: 생성 반복 횟수 (많을수록 품질 높음, 시간도 오래 걸림)
- cfg: 프롬프트 영향도 (높을수록 프롬프트 충실, 낮을수록 창의적)
출력: LATENT (압축된 이미지 데이터)
4단계: 이미지 저장 (Save Image)
VAE Decode를 거쳐 압축된 LATENT를 실제 이미지로 변환 후 저장
과정:
KSampler의 LATENT
→ VAE Decode (디코딩)
→ Save Image (PNG로 저장)
3.2 시각적 흐름도
┌─────────────────┐
│ Load Checkpoint │
└────────┬────────┘
│ MODEL, CLIP, VAE
│
┌────┴────────────────────────┐
│ │
┌───▼────────────┐ ┌────────▼──────────┐
│ Positive Prompt│ │ Negative Prompt │
└───┬────────────┘ └────────┬──────────┘
│ CONDITIONING │ CONDITIONING
│ │
└────────────┬───────────────┘
│
┌────▼─────────┐
│ KSampler │
└────┬─────────┘
│ LATENT
┌────▼─────────┐
│ VAE Decode │
└────┬─────────┘
│ IMAGE
┌────▼──────────┐
│ Save Image │
└───────────────┘
4. 워크플로우 확장: 후처리 노드 추가

기본 워크플로우만으로도 이미지를 생성할 수 있지만, 더 고급진 작업을 위해서는 후처리 노드를 추가해야 한다.
4.1 후처리(Post-Processing)란?
생성된 이미지를 다양한 방식으로 추가 처리하는 것이다. 예를 들어:
- 이미지 업스케일 (해상도 향상)
- 색감 조정
- 세부사항 강화
- 특정 부분 수정 (Inpainting)
4.2 인페인팅 (Inpainting) 예시
자주 사용되는 후처리 기능 중 하나가 인페인팅이다. 이미 생성된 이미지의 특정 부분을 다시 생성하거나 수정하는 기능이다.
흐름:
1️ 생성된 이미지 불러오기 (Load Image)
2️ 수정할 영역 마스킹 (Mask 설정)
3️ 마스크된 영역 인페인팅 (Inpainting Node)
4️ 최종 이미지 저장
이 방식은:
✓ 이미지의 일부만 재생성하므로 시간 단축
✓ 원래 이미지의 대부분을 유지하면서 선택적 수정
✓ 여러 번 반복해서 결과물 개선 가능
4.3 복합 워크플로우 예시
┌─────────────────┐ ┌──────────────┐
│ Load Checkpoint │ │ Load Image │
└────────┬────────┘ └────────┬─────┘
│ │
│ (프롬프트 처리) │ (마스크 생성)
│ │
└──────────────┬───────────┘
│
┌────▼─────────┐
│ Inpainting │
└────┬─────────┘
│
┌────▼──────────┐
│ Save Image │
└───────────────┘
5. 워크플로우 저장 및 관리
5.1 워크플로우 저장 위치
ComfyUI 내부의 특정 디렉토리에 JSON 파일로 저장된다.
ComfyUI/
├── web/
├── input/
├── output/
└── workflows/ ← 여기에 저장됨 (.json 파일)
5.2 저장 팁
✓ 의미있는 이름 짓기: "portrait_realistic_v1" (O) vs "workflow1" (X)
✓ 날짜나 버전 포함: "style_transfer_20240110_v2.json"
✓ 정기적으로 백업: 중요한 워크플로우는 별도 폴더에 복사
✓ Git 사용: 복잡한 워크플로우는 버전 관리 시스템으로 추적
6. 워크플로우 공유 방법
JSON 파일 공유
과정:
1. 내 워크플로우를 Export로 JSON 파일 생성
2. 다른 사람에게 파일 전송 (이메일, 클라우드, GitHub 등)
3. 받은 사람이 ComfyUI에 Import
4. 동일한 모델과 노드가 있으면 즉시 사용 가능
장점:
✓ 완벽하게 동일한 설정 재현
✓ 수정 및 버전 관리 용이
✓ 대용량 파일도 문제없음
단점:
✗ JSON 파일을 별도로 관리해야 함
✗ 사용자가 같은 모델을 가지고 있어야 함
7. 실전 꿀팁: Widget Control Mode 이해하기
이제 가장 실용적이고 중요한 부분이다. 많은 사용자들이 혼동하는 Widget Control Mode와 Seed 생성 시점에 대해 자세히 설명한다.
7.1 문제: "공유받은 워크플로우인데 왜 다른 이미지가 나올까?"
상황:
- 친구가 멋진 워크플로우를 공유해줌
- 친구: "Seed를 123으로 fixed해서 같은 이미지가 나올 거야"
- 나: 같은 Seed 123으로 설정하고 생성
- 결과: ??? 완전히 다른 이미지가 나옴!
왜 이럴까?
7.2 원인: Widget Control Mode

이 문제의 핵심은 언제 Seed 값이 생성되느냐에 있다.
Widget Control Mode의 두 가지 상태:
┌─────────────────────────────────────────────────────┐
│ Widget Control Mode 상태 │
├─────────────────────────────────────────────────────┤
│ 1. "control after generate" (기본값) │
│ → Seed는 '이미지 생성 이후'에 저장됨 │
│ │
│ 2. "control before generate" │
│ → Seed는 '이미지 생성 이전'에 저장됨 │
└─────────────────────────────────────────────────────┘
7.3 상세 비교
상태 1: "control after generate" (기본)

문제점:
- 생성할 때 Seed=123을 입력해도
- 생성 후 다른 Seed로 자동 변경됨 (예: 456)
- 워크플로우를 저장하면 Seed=456으로 저장됨
- 다음 번에 같은 Seed로 생성할 수 없음!
사용 사례:
- 매번 새로운 이미지 생성하고 싶을 때
- 결과물만 중요하고 재현성 불필요할 때
시각화:
입력된 Seed 값 (123)
↓
[생성 과정: 완전히 무시됨]
↓
생성 완료 후 무작위 Seed 생성 (456)
↓
워크플로우에 저장 → Seed = 456
상태 2: "control before generate"

장점:
- 생성할 때 Seed=123을 입력하면
- 생성에 Seed=123이 사용됨
- 생성 후에도 Seed=123으로 유지됨
- 워크플로우를 저장해도 Seed=123
사용 사례:
- 같은 이미지를 여러 번 생성하고 싶을 때
- 워크플로우 공유 시 재현성 필요할 때
- 이미지 생성 과정을 정확히 제어하고 싶을 때
시각화:
입력된 Seed 값 (123)
↓
[생성 과정에 직접 사용됨]
↓
같은 Seed = 123으로 생성 완료
↓
워크플로우에 저장 → Seed = 123
7.4 실전 가이드
시나리오 1: 친구 워크플로우 공유받음
친구의 설정: "control before generate" (권장)
↓
내가 할 일:
1. 워크플로우 Import
2. Seed를 내가 원하는 값으로 변경
3. 생성
4. 같은 결과 보장!
시나리오 2: 자신의 워크플로우 공유하기
좋은 워크플로우를 만들었다면:
Step 1. 자신의 노드에서 Seed 노드 찾기
Step 2. 우클릭 → "Toggle Widget Control Mode"
Step 3. "control before generate"로 변경
Step 4. 고정하고 싶은 Seed 값 입력
Step 5. 워크플로우 Export/Save
Step 6. 다른 사람이 Import해도 같은 이미지 생성 가능!
시나리오 3: 매번 다른 이미지 원할 때
선택: "control after generate" 유지
결과: 생성할 때마다 새로운 Seed 자동 적용
→ 다양한 변형 이미지 생성 가능
7.5 Widget Control Mode 변경 방법
노드 내에서 Seed 설정값 찾기
↓
우클릭 (오른쪽 마우스 클릭)
↓
"Toggle Widget Control Mode" 선택
↓
상태 변경 완료!
또는: 노드 우상단의 아이콘 클릭해서 전환 가능
8. 문제 해결 가이드
문제 1: "이미지를 드래그했는데 워크플로우가 안 생기면?"
원인:
- PNG 이미지에 워크플로우 메타데이터가 없음
- JPEG 파일 사용 (메타데이터 미지원)
- 인터넷에서 다운로드한 이미지 (원본 정보 손실)
해결책:
1. PNG 형식 확인 (JPEG 사용 금지)
2. 이미지 우클릭 → "파일 정보" 확인
3. 메타데이터가 있는 이미지인지 확인
4. 워크플로우 저장할 때 PNG로 저장했는지 확인
문제 2: "Seed를 fixed로 설정했는데 다른 이미지가 나와요"
원인:
- "control after generate" 모드 사용 중
- 생성 후 Seed가 자동으로 바뀜
해결책:
1. Seed 노드 우클릭
2. "Toggle Widget Control Mode"로 변경
3. 상태를 "control before generate"로 설정
4. 다시 생성 → 동일 Seed, 동일 이미지!
문제 3: "다른 사람 워크플로우로 같은 이미지가 안 나와요"
원인:
- 다른 모델 버전 사용
- GPU 설정 차이
- 노드 버전 불일치
- Widget Control Mode 설정 다름
확인 사항:
체크리스트:
☐ 같은 모델 파일 설치 확인
☐ Seed 값이 동일한지 확인
☐ "control before generate" 모드 확인
☐ 모든 매개변수 동일한지 재확인
☐ ComfyUI 버전 동일한지 확인
9. 실제 사용 예시
예시 1: 초상화 생성 워크플로우
목표: 전문적인 초상화 생성
워크플로우 구성:
1. 모델: SD 1.5 realistic portrait
2. Positive: "beautiful woman, professional portrait, soft lighting, detailed face"
3. Negative: "blurry, low quality, distorted"
4. Steps: 30
5. CFG: 7.5
6. Sampler: DPM++ 2M
7. Seed: fixed (재현 가능하도록)
저장: "portrait_realistic_v1.json" → Export로 PNG 메타데이터 추가
공유: 이미지 파일만 다른 사람에게 전달
예시 2: 배경 제거 + 업스케일 워크플로우
목표: 복잡한 이미지 처리 파이프라인
1단계: 원본 이미지 불러오기
2단계: 배경 제거 노드 추가
3단계: 업스케일 (4배 해상도)
4단계: 색감 보정
5단계: 최종 저장
특징:
- 여러 후처리 노드 조합
- 재사용 가능한 복합 워크플로우
- 배치 처리 가능
10. 마무리: 효과적인 Workflow 운영 팁
10.1 Workflow 관리의 3단계
① 수집 (Collection)
├─ 좋은 워크플로우는 즉시 저장
└─ 체계적인 폴더 구조 유지
② 정리 (Organization)
├─ 의미있는 이름으로 관리
├─ 버전별로 폴더 분류
└─ 문서화 (각 워크플로우의 설명 작성)
③ 활용 (Utilization)
├─ 정기적으로 검토 및 개선
├─ 다른 사람과 공유하며 피드백 수집
└─ 베스트 프랙티스 개발
10.2 체계적인 폴더 구조 예시
Workflows/
├── 20240110_portraits/
│ ├── realistic_v1.json
│ ├── artistic_v1.json
│ └── anime_v1.json
├── 20240115_landscapes/
│ ├── nature_v1.json
│ └── urban_v1.json
├── 20240120_processing/
│ ├── upscale_pipeline.json
│ └── background_removal.json
└── 20240125_experiments/
├── test_new_model_v1.json
└── test_new_node_v1.json
10.3 Workflow 문서화 팁
각 워크플로우 옆에 .txt 파일 작성:
━━━━━━━━━━━━━━━━━━━━━━━
파일명: realistic_portrait_v1.json
목적:
- 현실적인 초상화 생성
- SD 1.5 기반
권장 설정:
- Steps: 25-35
- CFG: 6.5-8.0
- 프롬프트 길이: 중간 (50-100 단어)
주의사항:
- 구형 GPU에서는 속도 느림
- VRAM 6GB 이상 권장
변경 이력:
v1: 기본 버전
━━━━━━━━━━━━━━━━━━━━━━━