ComfyUI 왕초보 가이드 17 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (7.3MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
17A에서 제어 강도와 적용 구간의 차이를 비교하고, 선택 17B에서 인물과 화분을 좌우에 배치한 그림을 만듭니다.
1. 만들 결과
17A에서 제어 강도와 적용 구간의 차이를 비교하고, 선택 17B에서 인물과 화분을 좌우에 배치한 그림을 만듭니다.
제어 강도는 윤곽 조건의 영향 크기, 시작·종료는 그 조건을 적용할 생성 구간입니다. 종료 0.5는 전체 생성 과정의 앞 구간에 적용한다는 뜻이며 0.5초를 뜻하지 않습니다. 영역 조건은 문장의 영향을 줄 사각형 위치를 정하는 방법입니다. 픽셀을 오려 붙이거나 영역 밖의 생성을 완전히 막는 기능은 아닙니다.
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) | ch17-control-C0.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. 따라 하기
- 17A — 윤곽 제어: 기본 C0 JSON을 Ctrl+O로 열고, 제공 인물 PNG·SDXL Base·Canny 제어 모델을 선택합니다. 16장의 B를 이미 만들었다면 같은 결과를 C0로 비교해도 됩니다.
- C0: 강도 1.0 / 시작 0.0 / 종료 1.0입니다. Canny는 0.1/0.2, seed=20261013, 28 steps, CFG 5.5, dpmpp_2m, karras, denoise 1을 확인하고 실행합니다. 정상 결과는 카메라 쪽을 보는 인물입니다.
기본 실습 뒤 선택 비교·추가 조작
- 선택 C1 JSON은 강도만 0.15, C2 JSON은 종료만 0.1로 바꿉니다. 각각 새 탭에서 입력 사진과 모델을 확인한 뒤 실행하세요. C0–C1, C0–C2를 비교합니다. C1과 C2끼리는 두 값이 다르므로 단일 변수 비교가 아닙니다.
- 17B — 영역 조건(선택): 아래 영역 JSON을 별도 탭에서 엽니다. 이 작업에는 ControlNet과 입력 사진이 없습니다. SDXL Base만 선택합니다.
- G는 전체 장면·조명, L은 왼쪽 인물, R은 오른쪽 화분 문장입니다. 아래 프롬프트 전문을 사용하세요. 얼굴·어깨 위주 구도와 두 대상이 선명한 장면을 요청합니다.
- 빈 잠재 이미지는 1216×832입니다. L은 너비 704·높이 832·x=0·y=0, R은 너비 640·높이 832·x=576·y=0, 두 영역 강도는 1.0입니다. 겹치는 구간은 x=576부터 703까지 128픽셀입니다. L/R 결합 뒤 G와 결합해 긍정 입력으로 보냅니다.
- 17B: seed=20261016 / fixed / 30 steps / CFG 5.5 / dpmpp_2m / karras / denoise 1로 실행합니다.
guide/ch17_area_portrait접두사의 결과에서 대상 수·좌우 위치·의상·화분·배경을 봅니다.
이번 실습의 설정
| 설정할 노드 | 입력값 |
|---|---|
| 체크포인트 로드 | 체크포인트 = 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 이미지 |
선택 17B · 여성과 화분을 좌우에 배치하기
L: x=0, y=0, 704×832 / R: x=576, y=0, 640×832
가운데 x=576부터 703까지 128픽셀이 겹칩니다.
영역은 사진을 잘라 붙이는 틀이 아니라 문장의 영향을 줄 범위입니다. G는 두 대상·배경·조명을 함께 설명하고, L/R은 각각 인물/화분을 설명합니다. 얼굴과 어깨를 크게 담는 구도이므로 손·무릎 묘사 실습은 포함하지 않습니다.
영문 프롬프트의 head and shoulders는 얼굴·어깨 구도, turtleneck은 목을 덮는 니트, deep focus는 두 대상을 함께 선명하게 보이도록 하는 요청입니다. f/16은 사진에서 조리개를 나타내는 표현이며, 여기서는 실제 카메라 설정이 아닌 프롬프트 단어입니다.
| 설정할 노드 | 입력값 |
|---|---|
| 체크포인트 로드 | 체크포인트 = sd_xl_base_1.0.safetensors |
| 빈 잠재 이미지 | 너비 = 1216 높이 = 832 배치 크기 = 1 |
| L · 여성 영역 | 너비 = 704 높이 = 832 x = 0 y = 0 강도 = 1.0 |
| R · 화분 영역 | 너비 = 640 높이 = 832 x = 576 y = 0 강도 = 1.0 |
| KSampler | seed = 20261016 생성 후 제어 = fixed steps = 30 CFG = 5.5 sampler = dpmpp_2m scheduler = karras denoise = 1.0 |
| 이미지 저장 · ch17_area_portrait | 파일명 접두사 = guide/ch17_area_portrait |
입력할 프롬프트 전문
L · 여성 상반신
close-up head and shoulders portrait of one adult woman, brown hair, pale blue turtleneck sweater, looking at camera, natural skin texture, shoulders cropped at bottom, sharp focus
부정 프롬프트
blurry, blurred plant, bokeh, shallow depth of field, soft focus, multiple pots, extra vase, bowl, duplicate plant, duplicate person, two people, collage, split image, text, watermark, full body, waist, legs, knees, hands, fingers, arms, illustration, painting
G · 전체 분위기
photograph of one adult woman on the left and one small potted green plant on the right, both subjects in sharp focus, deep focus photography, f/16, plain light gray background, soft diffused light, realistic photograph
R · 화분
one green rubber plant with distinct oval leaves and a visible stem, one white cylindrical ceramic flowerpot, entire pot visible on a wooden pedestal, sharp detailed product photograph, deep focus
직접 구성하기 · 노드 13개와 연결 17개
빈 작업판을 두 번 클릭해 아래 기술 이름으로 검색하고 노드를 추가합니다. 값 입력 뒤, 오른쪽 출력 점을 왼쪽 입력 점으로 끌어 연결하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 체크포인트 로드 | CheckpointLoaderSimple |
| 빈 잠재 이미지 | EmptyLatentImage |
| L · 여성 상반신 | CLIPTextEncode |
| 부정 프롬프트 | CLIPTextEncode |
| G · 전체 분위기 | CLIPTextEncode |
| R · 화분 | CLIPTextEncode |
| L · 여성 영역 | ConditioningSetArea |
| R · 화분 영역 | ConditioningSetArea |
| 결합 1 · L + R | ConditioningCombine |
| 결합 2 · G + 영역 | ConditioningCombine |
| KSampler | KSampler |
| VAE 디코드 | VAEDecode |
| 이미지 저장 · ch17_area_portrait | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 체크포인트 로드 CLIP → | L · 여성 상반신 clip |
| 2 | 체크포인트 로드 CLIP → | 부정 프롬프트 clip |
| 3 | 체크포인트 로드 모델 → | KSampler 모델 |
| 4 | 결합 2 · G + 영역 조건 → | KSampler 긍정 |
| 5 | 부정 프롬프트 조건 → | KSampler 부정 |
| 6 | 빈 잠재 이미지 잠재 데이터 → | KSampler 잠재 입력 |
| 7 | KSampler 잠재 데이터 → | VAE 디코드 잠재 데이터 |
| 8 | 체크포인트 로드 VAE → | VAE 디코드 vae |
| 9 | VAE 디코드 이미지 → | 이미지 저장 · ch17_area_portrait 이미지 |
| 10 | 체크포인트 로드 CLIP → | G · 전체 분위기 clip |
| 11 | 체크포인트 로드 CLIP → | R · 화분 clip |
| 12 | L · 여성 상반신 조건 → | L · 여성 영역 조건 |
| 13 | R · 화분 조건 → | R · 화분 영역 조건 |
| 14 | L · 여성 영역 조건 → | 결합 1 · L + R 조건 1 |
| 15 | R · 화분 영역 조건 → | 결합 1 · L + R 조건 2 |
| 16 | G · 전체 분위기 조건 → | 결합 2 · G + 영역 조건 1 |
| 17 | 결합 1 · L + R 조건 → | 결합 2 · G + 영역 조건 2 |

| 기능 | 무엇을 제어하나요? |
|---|---|
| ControlNet | 윤곽 지도 같은 입력 조건으로 생성에 영향을 줌 |
| 영역 조건 | 사각형 영역에 문장 조건의 영향을 배치 |
| 마스크 합성 | 마스크 값에 따라 원본과 생성 픽셀을 섞음 |
4. 정상 결과 확인
C0는 양쪽 눈이 보이는 정면에 가까운 구도, C1은 왼쪽 옆모습, C2는 왼쪽으로 돌아간 얼굴과 달라진 턱·목선이 보입니다. 숫자가 품질 점수인 것은 아닙니다. 17B는 여성 한 명이 왼쪽, 흰 화분 하나가 오른쪽에 있고, 얼굴·니트·화분을 구별할 수 있으며 배경에 뚜렷한 접합선이 없는지 확인합니다.

선택 비교 · 17A의 강도와 종료 구간



C0–C1은 강도만, C0–C2는 종료 구간만 다릅니다. C1·C2의 옆모습은 의도한 비교 결과입니다. 강도와 종료는 서로 다른 방식으로 제어를 약하게 하며, 수치가 같거나 낮다고 같은 변화가 생기는 것은 아닙니다.
비교 조건별 JSON
| 조건 | JSON |
|---|---|
| C1 · 강도 0.15 / 종료 1.0 | ch17-control-C1.json (ZIP) |
| C2 · 강도 1.0 / 종료 0.1 | ch17-control-C2.json (ZIP) |
각 JSON은 별도 탭에서 열고 입력 이미지·모델을 다시 선택하세요. 기본 실습과 선택 비교를 구별해 필요한 조건을 사용합니다.
5. 자주 생기는 문제
| 상황 | 확인할 곳 |
|---|---|
| 종료 0.1이 0.1초인가요? | 시간이 아니라 모델의 생성 진행 구간입니다. 1.0은 끝까지 적용, 0.1은 초반 짧은 구간에 적용하는 설정입니다. 28단계의 정확히 2.8단계라는 뜻도 아닙니다. |
| 강도 0.15도 윤곽을 그대로 따라야 하나요? | 윤곽의 영향이 약해져 문장의 옆모습 요구가 더 반영될 수 있습니다. 이 비교는 그 차이를 보는 정상 대조 실험입니다. 원본 구도를 강하게 따르려면 C0로 돌아갑니다. |
| 영역 밖에 물체가 생기거나 화분이 늘어요 | 영역은 문장의 영향 범위이며 대상 수를 강제로 고정하는 마스크가 아닙니다. 우선 제공 JSON의 세 문장·영역 크기·seed·생성값을 함께 맞춥니다. 다른 구도를 실험할 때도 완성 후 대상 수를 셉니다. |
| 17B에 ControlNet이 연결되어 있어요 | 17B JSON을 새 탭에서 엽니다. 17A 그래프에 영역 노드를 덧붙이는 실습이 아닙니다. |
공통 오류와 용어는 용어·문제 해결에서 찾을 수 있습니다.
공식 참고 자료
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.