테마 전환

ComfyUI ControlNet 사용법: OpenPose·Canny·Depth로 포즈와 구도 제어하기

Easton editorial illustration: central orange ControlNet node with visible input and output sockets, three compact reference tiles showing a pose skeleton, Canny edges, and depth contours, one framed output portrait whose pose and composition match the reference tiles

"ComfyUI 공식 Apply ControlNet 문서는 노드 입력, strength 범위, start_percent와 end_percent의 동작을 설명합니다."

참조 이미지의 포즈, 선, 구도를 따라가게 만들고 싶어도 결과의 자세가 틀어지고 윤곽이 흐려지며 배치가 달라질 수 있습니다.

이런 구조 제어에 ControlNet을 사용합니다. OpenPose는 포즈, Canny는 윤곽, Depth는 공간 관계를 전달합니다. 그다음에는 strength 값, start_percentend_percent의 의미, 다중 제어 충돌을 해결해야 합니다.

먼저 제어 목표에 따라 전처리기와 가중치를 고릅니다. 이후 강도와 적용 구간을 조정합니다. 결과가 계속 어긋나면 노드 연결, 베이스 모델 호환성, 제어 신호 충돌 순서로 확인합니다.

제어 목표별 빠른 선택표

처음 결정할 것은 strength가 아니라 보존할 구조의 종류입니다.

목표제어 종류전처리기일반적인 SD1.5 가중치
인물을 지정한 포즈로 생성포즈 제어OpenPose / DWPosecontrol_v11p_sd15_openpose
참조 이미지의 선을 유지윤곽 제어Cannycontrol_v11p_sd15_canny
공간 층과 구도를 유지깊이 제어Depth (MiDaS / LeReS)control_v11f1p_sd15_depth
손그림 스케치를 가이드로 사용스케치 제어Scribblecontrol_v11p_sd15_scribble
부드러운 윤곽을 유지소프트 에지 제어SoftEdge (HED / PiDiNet)control_v11p_sd15_softedge

두 가지를 확인합니다.

  1. OpenPose와 DWPose는 모두 포즈 키포인트를 출력합니다. 손동작이나 얼굴까지 제어하려면 더 많은 키포인트를 제공하는 DWPose를 먼저 시험할 수 있습니다.

  2. 전처리 결과는 ControlNet 가중치가 기대하는 형식과 맞아야 합니다. OpenPose 맵에는 포즈 모델이 필요합니다. 맵, 가중치, 베이스 아키텍처가 다르면 효과가 거의 없거나 오류가 발생합니다.

가중치는 보통 ComfyUI/models/controlnet에 둡니다. ComfyUI를 다시 시작하거나 목록을 새로 고친 뒤 Load ControlNet Model에서 선택합니다.

ControlNet 파라미터 빠른 표

strength, start_percent, end_percent가 영향력과 작동 시점을 정합니다. 공식 범위와 아래 시작값을 비교 기준으로 사용합니다.

파라미터범위시작값효과시험 방법
strength0–101.0제어 맵의 영향력seed를 고정하고 1.0 주변에서 조정합니다. 공식 문서의 일반 시험 범위는 0.5–1.5입니다
start_percent0–10ControlNet 작동 시작점포즈와 구도는 보통 0에서 시작하고 기준이 작동한 뒤 지연을 시험합니다
end_percent0–11ControlNet 작동 종료점결과가 딱딱하면 0.8 이하를 시험해 후반 세부 표현을 풀어 줍니다

start_percent와 end_percent 이해하기

두 값은 대기 시간이 아니라 작동 구간입니다. start_percent=0.2, end_percent=0.8이면 확산 과정의 20%–80%에서만 ControlNet이 작동합니다.

포즈와 구도 같은 큰 구조는 초기에 형성됩니다. 안정된 포즈가 필요하면 0에서 시작합니다. 제약이 강하면 start_percent=0을 유지하고 end_percent를 1에서 0.8로 낮춥니다.

전체 구간(start_percent=0, end_percent=1)은 명확한 기준입니다. 먼저 효과를 확인한 뒤 한 번에 한 값만 바꿉니다.

strength 값 정하기

strength는 ControlNet의 영향력을 정합니다. 0이면 제어가 꺼지고, 높은 값은 대체로 맵을 더 강하게 따르게 합니다. 모델마다 반응은 다릅니다.

1.0 근처에서 시작합니다. 맵을 무시하면 조금씩 올리고 인체나 선이 딱딱하고 왜곡되면 낮춥니다. 0.5–1.5는 공식 시험 기준일 뿐 모든 아키텍처의 안전 구간은 아닙니다.

Workflow 구성 단계

핵심 경로는 베이스 모델과 ControlNet을 로드하고 참조를 전처리한 뒤 positive·negative conditioning에 제어를 적용해 KSampler로 보내는 방식입니다.

단계 1: 베이스 모델 로드

노드: Load Checkpoint

  • Stable Diffusion checkpoint를 선택합니다.
  • SD1.5, SDXL 또는 다른 아키텍처인지 확인합니다.
  • MODEL, CLIP, VAE 출력으로 기본 그래프를 이어 갑니다.

단계 2: ControlNet 모델 로드

노드: Load ControlNet Model

  • 베이스 아키텍처와 제어 맵 종류에 맞는 가중치를 고릅니다.
  • CONTROL_NET 출력을 Apply ControlNet으로 보냅니다.

단계 3: 참조 이미지 로드 및 전처리

노드: Load ImageOpenPose Preprocessor 같은 전처리기입니다.

  • Load Image: 참조 이미지를 올립니다.
  • 전처리기: 포즈 골격, 윤곽, 깊이 맵으로 변환합니다.
  • Comfy Core에는 모든 전처리기가 없으므로 필요하면 ComfyUI Manager에서 comfyui_controlnet_aux를 설치합니다.

ControlNet은 전처리된 구조 맵을 읽습니다. 손발, 윤곽, 깊이 정보가 빠지지 않았는지 먼저 미리 봅니다.

단계 4: Apply ControlNet 연결

노드: Apply ControlNet

  • control_net: Load ControlNet Model에서 연결합니다.
  • image: 원본이 아니라 전처리 결과를 연결합니다.
  • positive: positive prompt conditioning입니다.
  • negative: negative prompt conditioning입니다.
  • strength: 1.0부터 시작합니다.
  • start_percent: 0부터 시작합니다.
  • end_percent: 1부터 시작합니다.

Apply ControlNet은 새 positive와 negative conditioning을 출력합니다. 둘 다 KSampler에 연결합니다. sampler가 원래 conditioning을 받으면 ControlNet이 경로 밖에 있습니다.

단계 5: 생성하고 비교

노드: KSampler

  • model: Load Checkpoint에서 연결합니다.
  • positive / negative: Apply ControlNet 출력입니다.
  • latent_image: Empty Latent Image 또는 다른 소스입니다.
  • 비교할 때 seed를 고정합니다. 무작위 변화가 제어 효과를 가릴 수 있습니다.

조정 전에 세 가지를 봅니다.

  1. positive와 negative가 모두 Apply ControlNet을 통과합니다.
  2. image 입력에 전처리 맵이 연결됩니다.
  3. Apply ControlNet(Old)는 사용 중단된 노드이므로 현재 표준 노드를 사용합니다.

베이스 모델 호환성 맞추기

SD1.5, SDXL, FLUX용 가중치와 구현은 서로 바꿔 쓸 수 없습니다. 베이스 모델을 확인하고 호환성이 명시된 모델과 workflow를 선택합니다.

전처리기와 모델 호환성

전처리기일반적인 SD1.5SDXL 선택 기준FLUX 선택 기준
Cannycontrol_v11p_sd15_cannyCanny 입력을 지원한다고 명시된 SDXL 가중치대상 FLUX와 Canny 지원이 명시된 가중치
OpenPose / DWPosecontrol_v11p_sd15_openpose포즈 입력을 지원하는 SDXL 가중치대상 FLUX와 Pose 지원이 명시된 가중치
Depth (MiDaS / LeReS)control_v11f1p_sd15_depthDepth 입력을 지원하는 SDXL 가중치대상 FLUX와 Depth 지원이 명시된 가중치
Scribblecontrol_v11p_sd15_scribbleScribble 입력을 지원하는 SDXL 가중치model card를 확인하고 모든 Union이 지원한다고 가정하지 않습니다
SoftEdge (HED / PiDiNet)control_v11p_sd15_softedgeSoftEdge 입력을 지원하는 SDXL 가중치model card와 workflow에서 입력 지원을 확인합니다

Union 모델은 여러 제어 모드를 하나의 가중치로 묶은 FLUX 선택지입니다. 지원 모드, 필요 노드, 유효 강도는 모델과 workflow 버전에 따라 다릅니다.

베이스 모델 호환 표

베이스ControlNet 선택폴더주의점
SD1.5control_v11*_sd15_* 계열이 일반적입니다ComfyUI/models/controlnetsd15는 SD1.5용이며 SDXL용이 아닙니다
SDXLSDXL 지원이 명시된 가중치를 사용합니다ComfyUI/models/controlnet같은 제어에도 여러 구현이 있으므로 model card를 따릅니다
FLUX대상 FLUX와 호환되는 ControlNet 또는 Union을 사용합니다ComfyUI/models/controlnet노드, 모드, 강도는 모델별로 다르며 SD1.5 값을 복사하지 않습니다

베이스 모델 선택하기

아직 베이스 모델을 고르지 않았다면 Stable Diffusion 모델 선택 가이드를 확인합니다. 그 글은 특성과 자원을 비교하고, 여기서는 ControlNet 호환성만 다룹니다.

모델 파일 저장 위치

가중치는 보통 ComfyUI/models/controlnet에 둡니다. 다운로드 후 다시 시작하거나 목록을 새로 고치고 Load ControlNet Model에서 선택합니다.

파일이 많으면 지원되는 하위 폴더를 사용할 수 있습니다. 직접 붙인 파일명보다 배포처와 model card 링크를 보관하는 것이 중요합니다.

여러 ControlNet 조정하기

포즈와 구도를 함께 제어하려면 Apply ControlNet을 연결할 수 있습니다. 두 문제를 섞기 전에 각 제어를 단독 시험합니다.

Apply ControlNet 연결 순서

첫 노드의 positive와 negative 출력을 다음 노드의 같은 입력에 연결합니다.

  1. 첫 번째 ControlNet:

    • OpenPose 가중치와 포즈 맵을 로드합니다.
    • strength=1.0, start_percent=0, end_percent=0.7을 시험합니다.
  2. 두 번째 ControlNet:

    • Depth 가중치와 깊이 맵을 로드합니다.
    • strength=0.6, start_percent=0, end_percent=0.6부터 시작합니다.
  3. 연결 순서:

    • Conditioning → 첫 Apply ControlNet → 둘째 Apply ControlNet → KSampler입니다.
    • positive와 negative는 같은 순서를 유지합니다.

이 값은 진단 시작점이지 최적값이 아닙니다. 포즈와 깊이는 초기 구조이므로 0에서 시작하고 강도와 종료점으로 역할을 구분합니다.

조정 원칙

우선순위와 적용 구간부터 정합니다.

우선순위를 나눕니다.

  • 주 제어는 1.0 근처에서 시험합니다.
  • 보조 제어는 0.5–0.7처럼 낮게 시작합니다.
  • 서로 다른 방향으로 당기면 둘 다 올리지 말고 보조를 낮춥니다.

적용 구간을 정합니다.

  • 포즈와 구도는 초기에 작동해야 하므로 처음에는 start_percent를 0으로 둡니다.
  • 주 제어 0.7, 보조 0.6처럼 end_percent를 다르게 둡니다.
  • 후반 세부 표현을 풀려면 제어를 뒤로 미루지 말고 더 일찍 끝냅니다.

이어서 확인합니다.

  1. 같은 종류 두 개가 금지는 아니지만 같은 구조의 맵은 충돌과 조정 비용을 늘릴 수 있습니다.
  2. OpenPose + Depth, OpenPose + Canny처럼 보완 신호를 우선합니다.
  3. seed를 고정하고 단일 제어와 복수 제어를 비교합니다.
  4. 처음부터 두 strength를 높게 두지 않습니다.
  5. 한 번에 한 파라미터만 바꾸고 재현 가능한 workflow를 저장합니다.
  6. 첫 제어의 효과가 보일 때까지 두 번째를 추가하지 않습니다.

문제 해결 체크리스트

문제가능한 원인확인 방법
ControlNet 없이도 같은 이미지맵 미연결, strength가 0 근처, 원래 conditioning 사용, 아키텍처 불일치맵 미리 보기; image와 conditioning 경로 확인; 고정 seed 비교; 호환성 확인
포즈나 선이 맞지 않음잘못된 전처리기, 불완전한 맵, 영향 부족골격/윤곽 확인; DWPose나 Canny 설정 시험; strength를 점진적으로 올림
이미지가 딱딱하거나 왜곡됨강도 과다, 노이즈 맵, 끝까지 제어strength 낮춤; 맵 정리; end_percent를 1에서 0.8 이하로 낮춤
전처리기 노드가 없음custom node 미설치 또는 의존성 실패comfyui_controlnet_aux 설치; 재시작; import 오류 확인
SDXL/FLUX가 로드되지 않거나 효과 없음가중치와 아키텍처/노드 불일치model card의 베이스, 노드, 예제 확인; 파일명만 믿지 않음
Apply ControlNet(Old)가 없음사용 중단 노드가 기본 숨김표준 Apply ControlNet 사용; 오래된 workflow 유지 시에만 표시
여러 ControlNet이 충돌맵 모순, 보조 강도 과다, 여러 값 동시 변경단독 시험; seed 고정; 보조 낮춤; 구간 단축; 한 값 변경
값 변경이 보이지 않음seed 변화, 맵 정보 부족, 경로 우회seed와 sampler 고정; 맵 확인; KSampler positive/negative 출처 확인

다음 단계

ControlNet은 프롬프트만으로 지정하기 어려운 구조를 제어합니다. 기본 그래프가 작동하면 다음 글을 확인합니다.

ComfyUI에서 기본 ControlNet workflow 만들기

참조 이미지를 전처리하고 구조 신호를 샘플링 경로에 추가합니다.

  1. 1

    Step 1: 베이스 모델 아키텍처 확인

    checkpoint가 SD1.5, SDXL, FLUX 중 무엇인지 확인하고 호환성이 명시된 ControlNet을 선택합니다.
  2. 2

    Step 2: 참조 이미지 로드 및 전처리

    OpenPose, Canny, Depth로 포즈·윤곽·깊이 제어 맵을 만듭니다.
  3. 3

    Step 3: ControlNet 모델 로드

    가중치를 ComfyUI/models/controlnet에 두고 Load ControlNet Model에서 전처리기에 맞는 모델을 고릅니다.
  4. 4

    Step 4: Apply ControlNet 연결

    positive, negative, control_net, 전처리된 image를 연결하고 conditioning 출력을 KSampler로 보냅니다.
  5. 5

    Step 5: 고정 seed로 조정

    먼저 strength 1.0, start_percent 0, end_percent 1을 시험하고 한 번에 한 값만 바꿉니다.
  6. 6

    Step 6: 연결 전 단독 검증

    각 ControlNet을 단독으로 확인한 뒤 보조 제어의 강도나 적용 구간을 낮춥니다.

FAQ

OpenPose와 DWPose의 차이는 무엇인가요?
둘 다 인물을 키포인트 제어 맵으로 변환합니다. DWPose는 몸·손·얼굴 키포인트를 더 자세히 제공하는 경우가 많고, 전체 포즈만 필요하면 OpenPose로도 충분합니다. 모델 설명에서 기대 입력 형식을 확인해야 합니다.
ControlNet strength는 얼마로 설정하나요?
같은 seed에서 1.0 근처부터 비교합니다. 제약이 약하면 조금씩 올리고 이미지가 딱딱하거나 왜곡되면 낮춥니다. 공식 문서의 0.5–1.5는 일반적인 시험 범위이지 모든 모델의 안전 범위가 아닙니다.
start_percent와 end_percent는 무엇을 뜻하나요?
ControlNet이 확산 과정에서 작동하는 구간입니다. 0.0–0.8은 시작부터 80%까지를 뜻합니다. 포즈와 구도는 보통 0에서 시작하고, 종료를 앞당기면 후반 세부 표현이 더 자유로워집니다.
ControlNet을 여러 개 사용할 수 있나요?
가능합니다. 앞 Apply ControlNet의 positive와 negative 출력을 다음 노드의 같은 입력에 연결하고 마지막 출력을 sampler로 보냅니다. 결합하기 전에 각 제어를 따로 확인합니다.
FLUX에는 어떤 ControlNet을 사용하나요?
대상 FLUX 베이스 모델과 현재 ComfyUI workflow에 대한 호환성이 명시된 가중치를 사용합니다. Union 모델도 선택지지만 지원 제어, 노드, strength 범위는 model card마다 다릅니다.

2분 읽기 · 게시일: 2026년 7월 19일 · 수정일: 2026년 7월 19일

댓글

GitHub로 로그인하여 댓글을 남기세요

Easton BlogEaston Blog