Recommended Posts
- Get link
- X
- Other Apps
ComfyUI 워크플로우: 그래프 배치·나열 방법 완벽 가이드
같은 노드라도 배치 방식과 나열 패턴을 잘 잡으면 디버깅 속도와 재사용성이 크게 올라갑니다. 본 가이드는 ComfyUI의 캔버스 위에서 왼→오 흐름, 영역화, 정렬, 병렬·병합을 중심으로 실제 배치 예시(SVG 도식)와 점검 체크리스트, 재사용 가능한 템플릿을 제공합니다.
핵심 원칙 (TL;DR)
- 흐름 방향 고정: 캔버스는 왼쪽 → 오른쪽으로 흐르게 하고, 세로는 단계(입력/전처리/생성/후처리/출력) 구획.
- 간격·정렬: 노드 간 수평 간격을 일정(예: 240~280px)하게 유지. 라인 교차 최소화.
- 역할별 영역화: 체크포인트·프롬프트·샘플러·디코더·저장을 각 구역에 묶고, 노트 박스로 라벨.
- 병렬은 세로 정렬: 여러 조건(branch)은 위·아래로 나열하고, 병합 지점은 한 화면에 보이게.
- 명명 규칙: 노드 이름은
[단계] 역할 — 메모
형식. 예:[1] Load Checkpoint — SDXL
.
그래프 배치의 기본
1) 단계별 구획 (왼→오, 위→아래)
- 입력/리소스: 모델/LoRA/Control 리소스 로더
- 조건/전처리: 프롬프트 인코더(긍정/부정), 이미지 조건
- 생성: 샘플러(KSampler 등)
- 후처리: 업스케일, 디노이즈 보정, VAE 디코딩
- 출력: 미리보기/저장
한 열 = 한 단계. 열 사이 수평 간격 일정 유지.
2) 연결선 최소 교차
- 가능하면 상하로만 분기/병합하고, 대각선 교차는 피함.
- 긴 연결은 중간에 정박점으로 곡선을 한 번 꺾어 가독성 확보.
복잡한 교차는 디버깅과 원인 추적 시간을 늘립니다.
대표 배치 패턴 (SVG 도식)
패턴 A — 선형 파이프라인 (기본)
패턴 B — 병렬 조건 → 병합
패턴 C — 제어 분기(Control 계열) 병합
세밀한 배치 규칙
- 열 기준: 한 단계(열)에 노드는 많아도 3~4개. 넘치면 바로 다음 열로 이월.
- 격자 감각: 수평 간격은 일정(예: 260px), 수직 간격은 병렬 가지 간 80~120px.
- 병합 포인트 가시화: 두 가지 이상이 모이면 그 지점은 화면 중앙 근처로 끌어오되, 다음 단계와는 한 칸 띄움.
- 노트 박스: 단계 상단에 얇은 노트로 “입력/전처리/생성/출력” 라벨링.
- 긴 연결선 꺾기: 가독성을 위해 중간을 한 번 굽혀 병목을 피함.
이름짓기 & 주석 전략
노드 이름 규칙 예: [1] Load Checkpoint — SDXL Base
, [2] Text(+)
, [2] Text(−)
, [3] KSampler — 30 steps, DPM++
, [4] Decode → Save
노트(메모) 노드를 활용해 열 상단에 “역할” 라벨을 달고, 파라미터(Seed, Steps, CFG)는 샘플러 노드 이름 끝에 짧게 표기.
실전 레이아웃 절차 (예: 텍스트→이미지 기본)
- 열 1: Load Checkpoint를 좌측 상단에.
- 열 2: CLIP Text Encode(+/−)를 위아래로 세로 정렬.
- 열 3: KSampler를 두 인코더의 중간 높이에 배치(병합 포인트 가시화).
- 열 4: VAE Decode → Save Image를 한 칸 우측에.
템플릿 (의사 그래프 명세)
// Linear.schematic
nodes:
- name: "[1] Load Checkpoint — SDXL Base"
outputs: [ MODEL, CLIP, VAE ]
- name: "[2] CLIP Text Encode (+)"
inputs: [ CLIP ]
outputs: [ COND_POS ]
- name: "[2] CLIP Text Encode (−)"
inputs: [ CLIP ]
outputs: [ COND_NEG ]
- name: "[3] KSampler — steps=30, cfg=7.0"
inputs: [ MODEL, COND_POS, COND_NEG ]
outputs: [ LATENT ]
- name: "[4] VAE Decode"
inputs: [ VAE, LATENT ]
outputs: [ IMAGE ]
- name: "[4] Save Image"
inputs: [ IMAGE ]
edges:
- from: "Load Checkpoint — SDXL Base.MODEL" -> to: "KSampler.MODEL"
- from: "Load Checkpoint — SDXL Base.CLIP" -> to: "CLIP Text Encode (+).CLIP"
- from: "Load Checkpoint — SDXL Base.CLIP" -> to: "CLIP Text Encode (−).CLIP"
- from: "CLIP Text Encode (+).COND_POS" -> to: "KSampler.COND_POS"
- from: "CLIP Text Encode (−).COND_NEG" -> to: "KSampler.COND_NEG"
- from: "KSampler.LATENT" -> to: "VAE Decode.LATENT"
- from: "Load Checkpoint — SDXL Base.VAE" -> to: "VAE Decode.VAE"
- from: "VAE Decode.IMAGE" -> to: "Save Image.IMAGE"
확장 예시
업스케일 추가
- VAE Decode 뒤에 Upscale 노드를 같은 열에 두고, Save는 그 다음 열.
- 해상도 변경 파라미터는 노드 이름 끝에 표기(예: ×2, 1024→2048).
Control 계열 추가
- 조건/전처리 열에 Control 입력 라인을 별도 행으로 추가.
- 생성 열의 샘플러로 병합되는 선은 대각을 피하고 상·하에서 모이게.
대형 그래프 관리 팁
- 화면 단위: 병합 지점은 항상 한 화면에 전부 들어오게 줌/배치.
- 템포럴 순서: 좌→우로 시간 흐름을 명확히, 되먹임 구조는 다음 캔버스 구역으로 분리.
- 중복 최소화: 반복 쓰는 파라미터(Seed 등)는 한 곳에서만 수정하도록 노트에 위치를 명시.
점검 체크리스트
- 모든 선이 좌→우로 흐르는가?
- 병렬 가지가 세로로 정렬되었는가?
- 교차/대각선이 최소화되었는가?
- 각 열의 제목/노트가 존재하는가?
- 노드 이름에 핵심 파라미터가 요약되어 있는가?
자주 겪는 실수 ↔ 해결
- 문제: 연결선이 거미줄. 해결: 병합 지점을 중앙으로 끌고, 긴 선은 한 번 꺾어 정리.
- 문제: 단계 섞임. 해결: 열을 명확히 나누고, 넘치면 다음 열로 이월.
- 문제: 어느 노드가 핵심인지 모호. 해결: 샘플러·병합 노드를 화면 중심에 배치.
Tip. “보이는 흐름 = 이해 속도”입니다. 좌→우, 위→아래, 교차 최소. 이 세 가지만 지켜도 협업과 디버깅이 쉬워집니다.
Comments
Post a Comment