콘텐츠로 이동

문서 지도

제어 기법 실전 워크플로우

ControlNet·IPAdapter·Redux·Differential Diffusion을 조합한 실전 예시 모음입니다.

이 장에서 배우는 것

  • 앞의 개별 문서에서 배운 기법들을 하나의 워크플로우에 합칠 때 데이터가 어떤 순서로 흐르는지 정리합니다.
  • 각 구성은 기본 Text-to-Image 위에 노드를 더하는 방식입니다. 처음부터 새로 만들지 않습니다.

대상 제어 기법 문서를 순서대로 읽고 조합을 시도하려는 사용자 · 사전 이해 ControlNet·IPAdapter·Redux 각각의 단독 실행 경험 · 시간 15분

이럴 때 읽으세요 개별 기법은 익혔고 둘 이상을 함께 사용하려 할 때.

1. 기본 Text-to-Image + ControlNet

  1. FLUX.1 dev FP8 올인원 체크포인트를 사용하는 경우 Load Checkpoint 하나로 MODEL·CLIP·VAE를 불러옵니다. 파일이 나뉜 구성이라면 Load Diffusion Model + Dual CLIP Loader + Load VAE를 사용합니다(모델 가이드).
  2. CLIP Text Encode에 positive 프롬프트를 입력하고 FluxGuidance를 연결합니다.
  3. 별도 CLIP Text Encode에 빈 텍스트를 넣어 negative conditioning을 만듭니다.
  4. Load Image → Canny Preprocessor와 Load ControlNet을 준비합니다.
  5. guidance가 포함된 positive와 빈 negative를 Apply ControlNet에 함께 연결합니다.
  6. Apply ControlNet의 positive·negative 출력을 KSampler에 연결합니다.
  7. MODEL·빈 latent를 KSampler에 연결하고 VAE Decode → Save Image로 마칩니다.

2. 스타일 전달: IPAdapter + ControlNet

  1. Load Checkpoint
  2. Load LoRA (Model and CLIP) — 사전 학습 스타일 (anime_style.safetensors)
  3. IPAdapter 적용 노드 — 실시간 참조 (참조 이미지: 고흐 그림). 커스텀 노드 설치 필요(IPAdapter)
  4. CLIP Text Encode
  5. Apply ControlNet (Pose) — 구조 제어
  6. KSampler

결과: 참조 그림의 화풍이 얹힌, 지정한 포즈의 인물 이미지

3. 포즈 유지 Inpainting

  1. Load Image
  2. 두 갈래로 나눕니다 — Mask Editor로 얼굴 영역 마스크 / OpenPose 전처리 → Apply ControlNet(포즈 유지)
  3. InpaintModelConditioning에 positive·negative conditioning과 원본 이미지·마스크·VAE를 연결합니다. 이 노드가 conditioning 두 개와 latent를 함께 출력합니다
  4. 세 출력을 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에 직접 연결합니다.
  • 강도는 StyleModelApplystrength(기본 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 아키텍처