ComfyUI 왕초보 가이드 16 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (4.6MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
빨간 니트 인물을 만들면서, 문장만 사용한 옆모습과 입력 윤곽을 참고한 정면 구도를 비교합니다.
1. 만들 결과
빨간 니트 인물을 만들면서, 문장만 사용한 옆모습과 입력 윤곽을 참고한 정면 구도를 비교합니다.
Canny(캐니)는 밝기가 크게 바뀌는 곳에서 선을 뽑는 필터입니다. 임계값은 어느 정도 뚜렷한 경계를 선으로 남길지 정하는 기준입니다. ControlNet(컨트롤넷)은 윤곽 같은 추가 조건을 새 그림 생성에 반영하는 기능입니다. 사진에서 선을 만드는 전처리와 그 선을 참고해 새 그림을 만드는 생성을 구별합니다.
2. 준비물
ComfyUI를 실행한 상태에서 시작합니다. 아래 모델이 이미 같은 폴더에 있으면 다시 받을 필요가 없습니다.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| SDXL Base 1.0 | sd_xl_base_1.0.safetensors | ComfyUI\models\checkpoints | 체크포인트 로드 | 4장 |
| SDXL Canny Control-LoRA | control-lora-canny-rank256.safetensors | ComfyUI\models\controlnet | 컨트롤넷 모델 로드 | 16장 |
| 역할 | 파일 | 정확한 이름 |
|---|---|---|
| 실습 JSON | 실습 JSON 내려받기 (ZIP) | ch16-control-B.json |
| 입력 PNG | 입력 PNG 내려받기 (ZIP) | ch05_first_portrait_v2_00001_.png |
파일 링크는 이 장의 실습 자료 ZIP으로 연결됩니다. 한 번 내려받아 압축을 푼 뒤 표에 적힌 JSON·PNG 파일을 선택하세요. JSON은 Ctrl+O로 열고, 입력 PNG는 해당 LoadImage에서 업로드합니다.
이번 기본 JSON이 저장할 파일
설치 폴더의 ComfyUI/output 아래에 다음 접두사로 저장됩니다. 뒤에는 자동 번호와 .png가 붙습니다. 이미 같은 이름이 있으면 번호가 올라갑니다.
guide/ch16_control_B_edges_00001_.pngguide/ch16_control_B_00001_.png
3. 따라 하기
- 공식 링크의
control-lora-canny-rank256.safetensors를ComfyUI/models/controlnet에 넣습니다. 이름에 LoRA가 있어도 15장의 loras 폴더와 다릅니다. 이미 있으면 다음 단계로 갑니다. - B JSON과 입력 PNG를 받습니다. Ctrl+O로 JSON을 열고 이미지 로드에서 원본 PNG를 업로드합니다. Base 체크포인트와 Canny 제어 모델을 선택합니다.
- Canny의 낮은 임계값=0.1, 높은 임계값=0.2를 확인합니다. 사진 → Canny → 컨트롤넷 적용의 image로 이어집니다. 이 입력에서는 눈·코·턱·어깨선과 니트 무늬도 남습니다.
- 컨트롤넷 적용(ControlNetApplyAdvanced)에 두 문장 조건과 제어 모델을 넣고, 여기서 나온 긍정·부정 출력을 KSampler에 연결합니다. 강도=1.0 / 시작=0.0 / 종료=1.0입니다.
- seed=20261013 / fixed / 28 steps / CFG 5.5 / dpmpp_2m / karras / denoise 1을 확인하고 실행합니다.
ch16_control_B는 인물 결과,ch16_control_B_edges는 윤곽 확인 그림입니다.
기본 실습 뒤 선택 비교·추가 조작
- 선택 비교 A JSON은 강도만 0으로 바뀝니다. 나머지 문장·seed·모델·임계값·생성값은 같습니다. A의 옆모습과 B의 정면에 가까운 얼굴·어깨 방향을 비교합니다. 파일명 접두사는 결과를 구별하기 위해 다릅니다.
이번 실습의 설정
| 설정할 노드 | 입력값 |
|---|---|
| 체크포인트 로드 | 체크포인트 = sd_xl_base_1.0.safetensors |
| 빈 잠재 이미지 | 너비 = 1024 높이 = 1024 배치 크기 = 1 |
| 이미지 로드 · 입력 사진 | 입력 파일 = ch05_first_portrait_v2_00001_.png |
| 컨트롤넷 모델 로드 | 제어 모델 = control-lora-canny-rank256.safetensors |
| Canny 경계 필터 | 낮은 임계값 = 0.1 높은 임계값 = 0.2 |
| 컨트롤넷 적용 | 강도 = 1.0 시작 = 0.0 종료 = 1.0 |
| 이미지 저장 · ch16_control_B_edges | 파일명 접두사 = guide/ch16_control_B_edges |
| KSampler | seed = 20261013 생성 후 제어 = fixed steps = 28 CFG = 5.5 sampler = dpmpp_2m scheduler = karras denoise = 1.0 |
| 이미지 저장 · ch16_control_B | 파일명 접두사 = guide/ch16_control_B |
입력할 프롬프트 전문
긍정 프롬프트
side profile studio photograph of one adult woman facing left, nose pointing to the left edge of the image, only one eye visible, shoulder-length dark brown hair, solid red turtleneck sweater, head and shoulders, plain light gray background, soft diffused studio light, realistic photography
부정 프롬프트
front view, facing camera, text, watermark, illustration, distorted face, duplicate person, hands in frame, blurry, low quality, patterned clothes
직접 구성하기 · 노드 12개와 연결 15개
빈 작업판을 두 번 클릭해 아래 기술 이름으로 검색하고 노드를 추가합니다. 값 입력 뒤, 오른쪽 출력 점을 왼쪽 입력 점으로 끌어 연결하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 체크포인트 로드 | CheckpointLoaderSimple |
| 빈 잠재 이미지 | EmptyLatentImage |
| 이미지 로드 · 입력 사진 | LoadImage |
| 컨트롤넷 모델 로드 | ControlNetLoader |
| 긍정 프롬프트 | CLIPTextEncode |
| 부정 프롬프트 | CLIPTextEncode |
| Canny 경계 필터 | Canny |
| 컨트롤넷 적용 | ControlNetApplyAdvanced |
| 이미지 저장 · ch16_control_B_edges | SaveImage |
| KSampler | KSampler |
| VAE 디코드 | VAEDecode |
| 이미지 저장 · ch16_control_B | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 체크포인트 로드 CLIP → | 긍정 프롬프트 clip |
| 2 | 체크포인트 로드 CLIP → | 부정 프롬프트 clip |
| 3 | 체크포인트 로드 모델 → | KSampler 모델 |
| 4 | 컨트롤넷 적용 긍정 → | KSampler 긍정 |
| 5 | 컨트롤넷 적용 부정 → | KSampler 부정 |
| 6 | 빈 잠재 이미지 잠재 데이터 → | KSampler 잠재 입력 |
| 7 | KSampler 잠재 데이터 → | VAE 디코드 잠재 데이터 |
| 8 | 체크포인트 로드 VAE → | VAE 디코드 vae |
| 9 | VAE 디코드 이미지 → | 이미지 저장 · ch16_control_B 이미지 |
| 10 | 긍정 프롬프트 조건 → | 컨트롤넷 적용 긍정 |
| 11 | 부정 프롬프트 조건 → | 컨트롤넷 적용 부정 |
| 12 | 컨트롤넷 모델 로드 컨트롤넷 → | 컨트롤넷 적용 컨트롤넷 |
| 13 | Canny 경계 필터 이미지 → | 컨트롤넷 적용 이미지 |
| 14 | 이미지 로드 · 입력 사진 이미지 → | Canny 경계 필터 이미지 |
| 15 | Canny 경계 필터 이미지 → | 이미지 저장 · ch16_control_B_edges 이미지 |
선택 실습 · Canny 임계값 하나씩 바꾸기
같은 입력 사진에서 낮은 임계값 또는 높은 임계값 하나만 바꾼 실제 전처리 결과입니다. SDXL이나 ControlNet 모델 없이 3개 노드로 실행할 수 있습니다. 새 인물 생성 결과와 구별하세요.
- 아래 조건의 JSON을 새 탭에서 열고 준비물의 원본 인물 PNG를 이미지 로드에 업로드합니다.
- LoadImage → Canny → SaveImage 연결을 확인합니다. 낮은 값은 높은 값보다 작게 두세요.
- 실행 후 ComfyUI/output/guide의 ch16_edges 번호가 붙은 PNG를 봅니다. 기준 결과와 같은 배율로 비교하세요.



0.1/0.2는 제공 사진에 맞춘 시작값입니다. 선이 많거나 적다고 무조건 좋은 결과는 아닙니다. 머리·얼굴·어깨처럼 지키려는 모양은 남고 불필요한 무늬는 줄어드는지 보세요. 임계값 변경 두 조건은 각각 기본과 비교합니다.
4. 정상 결과 확인
B에 빨간 니트를 입은 인물 한 명이 있고, 양쪽 눈과 턱·어깨 방향이 입력 윤곽에 가까운지 봅니다. A에서는 왼쪽을 향한 옆모습이 나옵니다. 얼굴 생김새가 바뀌는 것은 오류가 아니며, 윤곽 위치와 색·인물 신원은 구별해서 판단합니다.

선택 비교 · 입력 윤곽과 제어 유무




A와 B는 제어 강도만 다릅니다. 눈이 한쪽 또는 양쪽 보이는지, 코가 향하는 방향과 어깨선을 보세요. 옆모습을 요구하는 같은 문장에서도 윤곽 제어의 영향이 보입니다. 실제 작업에서 충돌을 줄이려면 문장과 윤곽이 같은 구도를 요구하도록 맞추면 됩니다.
비교 조건별 JSON
| 조건 | JSON |
|---|---|
| A · 제어 강도 0 | ch16-control-A.json (ZIP) |
| 기본 윤곽만 만드는 3노드 작업 | ch16-canny-010-020.json (ZIP) |
각 JSON은 별도 탭에서 열고 입력 이미지·모델을 다시 선택하세요. 기본 실습과 선택 비교를 구별해 필요한 조건을 사용합니다.
5. 자주 생기는 문제
| 상황 | 확인할 곳 |
|---|---|
| B도 옆모습으로 나와요 | 제어 강도 1.0·시작 0.0·종료 1.0인지, KSampler가 컨트롤넷 적용 뒤의 긍정·부정 출력을 받는지 확인합니다. 입력 PNG와 Canny 0.1/0.2도 맞춥니다. |
| 선이 너무 많거나 거의 없어요 | 아래 전처리 비교로 윤곽을 먼저 봅니다. 낮은 값은 약한 경계의 연결, 높은 값은 강한 경계 선택에 관여합니다. 니트 무늬까지 남는 것이 목적이 아니라면 값을 올려 비교하세요. |
| ControlNet 모델이 목록에 없어요 | models/controlnet 폴더와 정확한 파일명을 확인하고 노드 정의를 새로고침하거나 ComfyUI를 재시작합니다. |
| 사진 대신 흰 선 그림만 저장돼요 | 전처리 JSON이나 edges 출력인지 확인합니다. 인물 생성은 B JSON의 ch16_control_B 출력입니다. |
공통 오류와 용어는 용어·문제 해결에서 찾을 수 있습니다.
공식 참고 자료
- docs.comfy.org/built-in-nodes/ControlNetApplyAdvanced
- github.com/Comfy-Org/ComfyUI/blob/v0.34.0/comfy/controlnet.py
- github.com/Comfy-Org/ComfyUI/blob/v0.34.0/comfy_extras/nodes_canny.py
- github.com/Comfy-Org/ComfyUI/blob/v0.34.0/nodes.py
- huggingface.co/stabilityai/control-lora
- huggingface.co/stabilityai/control-lora/blob/main/control-LoRAs-rank256/control-lora-canny-rank256.safetensors
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.