제어 기법 실전 워크플로우¶
ControlNet·IPAdapter·Redux·Differential Diffusion을 조합한 실전 예시 모음입니다.
이 장에서 배우는 것¶
- 앞의 개별 문서에서 배운 기법들을 하나의 워크플로우에 합칠 때 데이터가 어떤 순서로 흐르는지 정리합니다.
- 각 구성은 기본 Text-to-Image 위에 노드를 더하는 방식입니다. 처음부터 새로 만들지 않습니다.
1. 기본 Text-to-Image + ControlNet¶
- FLUX.1 dev FP8 올인원 체크포인트를 사용하는 경우
Load Checkpoint하나로 MODEL·CLIP·VAE를 불러옵니다. 파일이 나뉜 구성이라면Load Diffusion Model+Dual CLIP Loader+Load VAE를 사용합니다(모델 가이드). CLIP Text Encode에 positive 프롬프트를 입력하고FluxGuidance를 연결합니다.- 별도
CLIP Text Encode에 빈 텍스트를 넣어 negative conditioning을 만듭니다. - Load Image → Canny Preprocessor와 Load ControlNet을 준비합니다.
- guidance가 포함된 positive와 빈 negative를
Apply ControlNet에 함께 연결합니다. Apply ControlNet의 positive·negative 출력을 KSampler에 연결합니다.- MODEL·빈 latent를 KSampler에 연결하고 VAE Decode → Save Image로 마칩니다.
2. 스타일 전달: IPAdapter + ControlNet¶
- Load Checkpoint
- Load LoRA (Model and CLIP) — 사전 학습 스타일 (
anime_style.safetensors) - IPAdapter 적용 노드 — 실시간 참조 (참조 이미지: 고흐 그림). 커스텀 노드 설치 필요(IPAdapter)
- CLIP Text Encode
- Apply ControlNet (Pose) — 구조 제어
- KSampler
결과: 참조 그림의 화풍이 얹힌, 지정한 포즈의 인물 이미지
3. 포즈 유지 Inpainting¶
- Load Image
- 두 갈래로 나눕니다 — Mask Editor로 얼굴 영역 마스크 / OpenPose 전처리 → Apply ControlNet(포즈 유지)
InpaintModelConditioning에 positive·negative conditioning과 원본 이미지·마스크·VAE를 연결합니다. 이 노드가 conditioning 두 개와 latent를 함께 출력합니다- 세 출력을 KSampler에 연결하고 VAE Decode로 마칩니다
VAE Encode (for Inpainting)과 함께 사용하지 않습니다
InpaintModelConditioning은 이미지와 마스크를 직접 받아 latent까지 만들어 냅니다. 앞에 VAE Encode (for Inpainting)을 또 두는 구성은 필요하지 않습니다. 둘 중 하나만 고르세요.
결과: 마스크한 얼굴만 새로 생성되고 원본 포즈는 유지
4. Redux 이미지 변형¶
Redux는 참조 이미지를 CONDITIONING으로 바꿔 텍스트 조건과 함께 전달합니다. 기본 Text-to-Image 구성에 다음 네 노드를 추가합니다 — CLIP Vision Loader, CLIP Vision Encode, Style Model Loader, StyleModelApply.
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 55, "rankSpacing": 70, "padding": 12}, "themeVariables": {"fontSize": "14px"}} }%%
graph LR
LI["Load Image<br/>참조 사진"] --> CVE[CLIP Vision Encode]
CVL[CLIP Vision Loader] --> CVE
CVE -->|clip_vision_output| SMA[StyleModelApply]
SML[Style Model Loader] -->|style_model| SMA
CTE[CLIP Text Encode] --> FG[FluxGuidance]
FG -->|conditioning| SMA
SMA --> BG[BasicGuider] --> SCA[SamplerCustomAdvanced]
Conditioning Combine은 필요하지 않습니다. FluxGuidance의 출력을StyleModelApply에 직접 연결합니다.- 강도는
StyleModelApply의strength(기본1.0)로 조절합니다. - 전체 절차와 파일 배치는 FLUX.1 작업 선택과 Redux 실습에 있습니다.
결과: 참조 이미지를 조건으로 만든 변형 이미지
5. Differential Diffusion 부드러운 Inpainting¶
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 55, "rankSpacing": 70, "padding": 12}, "themeVariables": {"fontSize": "14px"}} }%%
graph LR
LI[Load Image] --> ME["Mask Editor<br/>0.0~1.0 그라데이션"]
ME --> IMC[InpaintModelConditioning]
IMC -->|positive / negative / latent| KS[KSampler]
LM[Load Model] --> DD["DifferentialDiffusion<br/>strength 1.0"]
DD -->|MODEL| KS
마스크는 위쪽 경로로만 갑니다. DifferentialDiffusion에는 마스크 입력이 없고, 아래쪽 MODEL 라인에서 "마스크의 회색조를 어떻게 읽을지"만 바꿉니다(Differential Diffusion).
결과: 마스크 경계가 눈에 띄지 않는 인페인팅
완료 기준¶
세 가지를 모두 만족했다면 이 장을 끝냈습니다.
- 각 기법을 단독으로 한 번씩 실행해 본 뒤 조합했다.
- 조합한 워크플로우에서 MODEL·CONDITIONING·LATENT 세 흐름이 모두 Sampler까지 이어지는지 확인했다.
- 결과가 어긋났을 때 어느 기법의 값을 먼저 볼지 판단할 수 있다.
다음 단계¶
- ControlNet 연결과 조절 — 조합할 때의 연결 규칙
- 05. 문제 해결 — 적용 후 결과가 어긋날 때