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

"ComfyUI 공식 Apply ControlNet 문서는 노드 입력, strength 범위, start_percent와 end_percent의 동작을 설명합니다."
참조 이미지의 포즈, 선, 구도를 따라가게 만들고 싶어도 결과의 자세가 틀어지고 윤곽이 흐려지며 배치가 달라질 수 있습니다.
이런 구조 제어에 ControlNet을 사용합니다. OpenPose는 포즈, Canny는 윤곽, Depth는 공간 관계를 전달합니다. 그다음에는 strength 값, start_percent와 end_percent의 의미, 다중 제어 충돌을 해결해야 합니다.
먼저 제어 목표에 따라 전처리기와 가중치를 고릅니다. 이후 강도와 적용 구간을 조정합니다. 결과가 계속 어긋나면 노드 연결, 베이스 모델 호환성, 제어 신호 충돌 순서로 확인합니다.
제어 목표별 빠른 선택표
처음 결정할 것은 strength가 아니라 보존할 구조의 종류입니다.
| 목표 | 제어 종류 | 전처리기 | 일반적인 SD1.5 가중치 |
|---|---|---|---|
| 인물을 지정한 포즈로 생성 | 포즈 제어 | OpenPose / DWPose | control_v11p_sd15_openpose |
| 참조 이미지의 선을 유지 | 윤곽 제어 | Canny | control_v11p_sd15_canny |
| 공간 층과 구도를 유지 | 깊이 제어 | Depth (MiDaS / LeReS) | control_v11f1p_sd15_depth |
| 손그림 스케치를 가이드로 사용 | 스케치 제어 | Scribble | control_v11p_sd15_scribble |
| 부드러운 윤곽을 유지 | 소프트 에지 제어 | SoftEdge (HED / PiDiNet) | control_v11p_sd15_softedge |
두 가지를 확인합니다.
-
OpenPose와 DWPose는 모두 포즈 키포인트를 출력합니다. 손동작이나 얼굴까지 제어하려면 더 많은 키포인트를 제공하는 DWPose를 먼저 시험할 수 있습니다.
-
전처리 결과는 ControlNet 가중치가 기대하는 형식과 맞아야 합니다. OpenPose 맵에는 포즈 모델이 필요합니다. 맵, 가중치, 베이스 아키텍처가 다르면 효과가 거의 없거나 오류가 발생합니다.
가중치는 보통 ComfyUI/models/controlnet에 둡니다. ComfyUI를 다시 시작하거나 목록을 새로 고친 뒤 Load ControlNet Model에서 선택합니다.
ControlNet 파라미터 빠른 표
strength, start_percent, end_percent가 영향력과 작동 시점을 정합니다. 공식 범위와 아래 시작값을 비교 기준으로 사용합니다.
| 파라미터 | 범위 | 시작값 | 효과 | 시험 방법 |
|---|---|---|---|---|
strength | 0–10 | 1.0 | 제어 맵의 영향력 | seed를 고정하고 1.0 주변에서 조정합니다. 공식 문서의 일반 시험 범위는 0.5–1.5입니다 |
start_percent | 0–1 | 0 | ControlNet 작동 시작점 | 포즈와 구도는 보통 0에서 시작하고 기준이 작동한 뒤 지연을 시험합니다 |
end_percent | 0–1 | 1 | ControlNet 작동 종료점 | 결과가 딱딱하면 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 Image와 OpenPose 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를 고정합니다. 무작위 변화가 제어 효과를 가릴 수 있습니다.
조정 전에 세 가지를 봅니다.
- positive와 negative가 모두 Apply ControlNet을 통과합니다.
image입력에 전처리 맵이 연결됩니다.Apply ControlNet(Old)는 사용 중단된 노드이므로 현재 표준 노드를 사용합니다.
베이스 모델 호환성 맞추기
SD1.5, SDXL, FLUX용 가중치와 구현은 서로 바꿔 쓸 수 없습니다. 베이스 모델을 확인하고 호환성이 명시된 모델과 workflow를 선택합니다.
전처리기와 모델 호환성
| 전처리기 | 일반적인 SD1.5 | SDXL 선택 기준 | FLUX 선택 기준 |
|---|---|---|---|
| Canny | control_v11p_sd15_canny | Canny 입력을 지원한다고 명시된 SDXL 가중치 | 대상 FLUX와 Canny 지원이 명시된 가중치 |
| OpenPose / DWPose | control_v11p_sd15_openpose | 포즈 입력을 지원하는 SDXL 가중치 | 대상 FLUX와 Pose 지원이 명시된 가중치 |
| Depth (MiDaS / LeReS) | control_v11f1p_sd15_depth | Depth 입력을 지원하는 SDXL 가중치 | 대상 FLUX와 Depth 지원이 명시된 가중치 |
| Scribble | control_v11p_sd15_scribble | Scribble 입력을 지원하는 SDXL 가중치 | model card를 확인하고 모든 Union이 지원한다고 가정하지 않습니다 |
| SoftEdge (HED / PiDiNet) | control_v11p_sd15_softedge | SoftEdge 입력을 지원하는 SDXL 가중치 | model card와 workflow에서 입력 지원을 확인합니다 |
Union 모델은 여러 제어 모드를 하나의 가중치로 묶은 FLUX 선택지입니다. 지원 모드, 필요 노드, 유효 강도는 모델과 workflow 버전에 따라 다릅니다.
베이스 모델 호환 표
| 베이스 | ControlNet 선택 | 폴더 | 주의점 |
|---|---|---|---|
| SD1.5 | control_v11*_sd15_* 계열이 일반적입니다 | ComfyUI/models/controlnet | sd15는 SD1.5용이며 SDXL용이 아닙니다 |
| SDXL | SDXL 지원이 명시된 가중치를 사용합니다 | 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 출력을 다음 노드의 같은 입력에 연결합니다.
-
첫 번째 ControlNet:
- OpenPose 가중치와 포즈 맵을 로드합니다.
strength=1.0,start_percent=0,end_percent=0.7을 시험합니다.
-
두 번째 ControlNet:
- Depth 가중치와 깊이 맵을 로드합니다.
strength=0.6,start_percent=0,end_percent=0.6부터 시작합니다.
-
연결 순서:
- Conditioning → 첫 Apply ControlNet → 둘째 Apply ControlNet → KSampler입니다.
- positive와 negative는 같은 순서를 유지합니다.
이 값은 진단 시작점이지 최적값이 아닙니다. 포즈와 깊이는 초기 구조이므로 0에서 시작하고 강도와 종료점으로 역할을 구분합니다.
조정 원칙
우선순위와 적용 구간부터 정합니다.
우선순위를 나눕니다.
- 주 제어는 1.0 근처에서 시험합니다.
- 보조 제어는 0.5–0.7처럼 낮게 시작합니다.
- 서로 다른 방향으로 당기면 둘 다 올리지 말고 보조를 낮춥니다.
적용 구간을 정합니다.
- 포즈와 구도는 초기에 작동해야 하므로 처음에는
start_percent를 0으로 둡니다. - 주 제어 0.7, 보조 0.6처럼
end_percent를 다르게 둡니다. - 후반 세부 표현을 풀려면 제어를 뒤로 미루지 말고 더 일찍 끝냅니다.
이어서 확인합니다.
- 같은 종류 두 개가 금지는 아니지만 같은 구조의 맵은 충돌과 조정 비용을 늘릴 수 있습니다.
- OpenPose + Depth, OpenPose + Canny처럼 보완 신호를 우선합니다.
- seed를 고정하고 단일 제어와 복수 제어를 비교합니다.
- 처음부터 두 strength를 높게 두지 않습니다.
- 한 번에 한 파라미터만 바꾸고 재현 가능한 workflow를 저장합니다.
- 첫 제어의 효과가 보일 때까지 두 번째를 추가하지 않습니다.
문제 해결 체크리스트
| 문제 | 가능한 원인 | 확인 방법 |
|---|---|---|
| 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 설치와 인터페이스 익히기: 아직 설치하지 않았거나 화면이 익숙하지 않을 때 시작합니다.
- ComfyUI workflow 재사용과 문제 해결: 저장, 로드, 누락 노드를 확인합니다.
- Stable Diffusion 프롬프트 템플릿 만들기: ControlNet은 구조, 프롬프트는 주제·스타일·세부 표현을 맡깁니다.
ComfyUI에서 기본 ControlNet workflow 만들기
참조 이미지를 전처리하고 구조 신호를 샘플링 경로에 추가합니다.
- 1
Step 1: 베이스 모델 아키텍처 확인
checkpoint가 SD1.5, SDXL, FLUX 중 무엇인지 확인하고 호환성이 명시된 ControlNet을 선택합니다. - 2
Step 2: 참조 이미지 로드 및 전처리
OpenPose, Canny, Depth로 포즈·윤곽·깊이 제어 맵을 만듭니다. - 3
Step 3: ControlNet 모델 로드
가중치를 ComfyUI/models/controlnet에 두고 Load ControlNet Model에서 전처리기에 맞는 모델을 고릅니다. - 4
Step 4: Apply ControlNet 연결
positive, negative, control_net, 전처리된 image를 연결하고 conditioning 출력을 KSampler로 보냅니다. - 5
Step 5: 고정 seed로 조정
먼저 strength 1.0, start_percent 0, end_percent 1을 시험하고 한 번에 한 값만 바꿉니다. - 6
Step 6: 연결 전 단독 검증
각 ControlNet을 단독으로 확인한 뒤 보조 제어의 강도나 적용 구간을 낮춥니다.
FAQ
OpenPose와 DWPose의 차이는 무엇인가요?
ControlNet strength는 얼마로 설정하나요?
start_percent와 end_percent는 무엇을 뜻하나요?
ControlNet을 여러 개 사용할 수 있나요?
FLUX에는 어떤 ControlNet을 사용하나요?
2분 읽기 · 게시일: 2026년 7월 19일 · 수정일: 2026년 7월 19일
ComfyUI와 Stable Diffusion 실전 가이드
검색으로 들어왔다면 같은 시리즈의 이전 글이나 다음 글로 이동하는 것이 가장 빠릅니다.



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