ComfyUI 왕초보 가이드 19 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (10.0MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
같은 조건에서 seed만 바꾼 인물 후보 네 장을 만들고, 목적에 맞는 한 장을 골라 저장한 작업으로 다시 생성합니다.
1. 만들 결과
목표는 카메라 쪽을 보는 인물 한 명, 붉은색 계열의 목폴라 니트, 단순한 배경입니다. 네 후보에서 이 조건을 먼저 확인하고, 선택한 결과의 seed와 작업 구성을 보관합니다. 마음에 드는 얼굴만 보고 옷·대상 수·경계를 놓치지 않는 연습입니다.

18장의 여섯 그룹과 연결을 이어 씁니다. 18장은 옆모습 문장과 정면 윤곽의 영향을 비교했던 작업이므로, 이번 제공 JSON은 문장을 정면 인물에 맞췄습니다. 네 후보를 비교하는 동안에는 문장·모델·크기·제어값을 모두 고정하고 seed만 바꿉니다.
| 용어·화면 위치 | 쉬운 뜻 | 이번 값 |
|---|---|---|
| 큐(Queue) | 계산할 작업이 기다리는 대기줄입니다. 실행 중인 작업과 대기 중인 작업이 나뉩니다. | 작업 네 개를 한 번에 예약 |
| 상단 실행 버튼 왼쪽의 배치 수 | 이 버전에서는 실행을 몇 번 요청할지 정하는 수입니다. 본문에서는 요청 수라고 부릅니다. | 후보 생성 때 4 → 끝난 뒤 1 |
| 빈 잠재 이미지의 배치 크기(batch_size) | 한 작업이 한꺼번에 생성할 이미지 수입니다. 상단의 요청 수와 다른 값입니다. | 계속 1 |
| seed / increment | seed는 시작 잡음의 번호입니다. increment는 다음 요청에 쓸 번호를 1씩 늘립니다. | 20261011, 20261012, 20261013, 20261014 |
| fixed | seed를 자동으로 바꾸지 않습니다. 선택한 결과의 조건을 유지할 때 씁니다. | 선택 C: 20261013 / fixed |
2. 준비물
실행 중인 ComfyUI와 기존 SDXL Base·Canny 모델을 사용합니다. 모델을 이미 준비했다면 추가 다운로드나 설치가 필요 없습니다.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| 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장 |
| 용도 | 받을 파일 |
|---|---|
| 후보 네 장을 만들 출발 작업 | ch19-candidates.json (ZIP) |
| 윤곽을 뽑을 입력 사진 | ch05_first_portrait_v2_00001_.png (ZIP) |
| 선택한 C의 참고·복구용 작업 | ch19-selected-C.json (ZIP) |
두 JSON은 역할이 다릅니다. 처음에는 ch19-candidates.json으로 시작하세요. ch19-selected-C.json은 선택·저장을 마친 참고용 완성본입니다. JSON이 글자로 열리면 링크를 오른쪽 클릭 → 다른 이름으로 링크 저장을 사용합니다.
3. 따라 하기
A. 한 장씩 네 번 생성하기
- 출발 작업을 엽니다. ComfyUI에서 Ctrl+O →
ch19-candidates.json을 선택합니다. 그래프 → 다른 이름으로 저장에서 작업 이름을ch19-my-candidates로 정합니다. - 모델과 입력을 선택합니다. 체크포인트 로드는
sd_xl_base_1.0.safetensors, 컨트롤넷 모델 로드는control-lora-canny-rank256.safetensors를 선택합니다. 이미지 로드 노드 안의 업로드 버튼으로 준비물 PNG를 넣습니다. 이번 단계는 작업판 전체에 PNG를 끌어놓는 동작과 다릅니다. - 생성값을 확인합니다. 05 생성 그룹의 빈 잠재 이미지는
1024 × 1024 / 배치 크기 1입니다. KSampler의 시드(seed)는20261011, 생성 후 제어는increment로 둡니다. 숫자는 두 번 클릭해 입력하고, 모드는 값 부분을 클릭해 목록에서 고릅니다. 글자가 작으면 작업판을 확대하세요. - 상단 요청 수만 4로 바꿉니다. 오른쪽 위 실행 버튼 바로 왼쪽의 숫자 칸(화면 이름: 배치 수)에
4를 입력하고 Tab을 누릅니다. 파란 실행 버튼은 한 번만 누릅니다. 기본 실행을 사용하며 자동 반복 모드는 켜지 않습니다. - 네 작업이 끝나면 요청 수를 1로 돌립니다. 활성 작업 수가 0이 될 때까지 기다립니다. 요청 수를 1로 되돌려야 다음의 재현 실습에서 한 장만 요청하게 됩니다. 예약한 작업을 줄이고 싶을 때는 아래 문제 해결의 취소 순서를 따릅니다.


고정할 설정·프롬프트·연결
후보 비교 중에는 아래 값과 연결을 유지합니다. seed가 커진다고 품질이 올라가는 것은 아닙니다.
| 설정할 노드 | 입력값 |
|---|---|
| 체크포인트 로드 | 체크포인트 = 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 |
| 윤곽 저장 · ch19_candidates_edges | 파일명 접두사 = guide/ch19_candidates_edges |
| KSampler | seed = 20261011 생성 후 제어 = increment steps = 28 CFG = 5.5 sampler = dpmpp_2m scheduler = karras denoise = 1.0 |
| 후보 인물 저장 · ch19_candidates | 파일명 접두사 = guide/ch19_candidates |
입력할 프롬프트 전문
긍정 프롬프트
front facing studio photograph of one adult woman looking at the camera, shoulder-length dark brown hair, solid red turtleneck sweater, head and shoulders, plain light gray background, soft diffused studio light, realistic photography
부정 프롬프트
side profile, text, watermark, illustration, distorted face, duplicate person, hands in frame, blurry, low quality, patterned clothes
현재 작업의 노드·연결 목록 · 노드 12개와 연결 15개
제공 JSON에 이미 들어 있는 노드와 연결입니다. 실수로 선을 바꿨을 때 이 목록과 대조하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 체크포인트 로드 | CheckpointLoaderSimple |
| 빈 잠재 이미지 | EmptyLatentImage |
| 이미지 로드 · 입력 사진 | LoadImage |
| 컨트롤넷 모델 로드 | ControlNetLoader |
| 긍정 프롬프트 | CLIPTextEncode |
| 부정 프롬프트 | CLIPTextEncode |
| Canny 경계 필터 | Canny |
| 컨트롤넷 적용 | ControlNetApplyAdvanced |
| 윤곽 저장 · ch19_candidates_edges | SaveImage |
| KSampler | KSampler |
| VAE 디코드 | VAEDecode |
| 후보 인물 저장 · ch19_candidates | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 체크포인트 로드 CLIP → | 긍정 프롬프트 clip |
| 2 | 체크포인트 로드 CLIP → | 부정 프롬프트 clip |
| 3 | 체크포인트 로드 모델 → | KSampler 모델 |
| 4 | 컨트롤넷 적용 긍정 → | KSampler 긍정 |
| 5 | 컨트롤넷 적용 부정 → | KSampler 부정 |
| 6 | 빈 잠재 이미지 잠재 데이터 → | KSampler 잠재 입력 |
| 7 | KSampler 잠재 데이터 → | VAE 디코드 잠재 데이터 |
| 8 | 체크포인트 로드 VAE → | VAE 디코드 vae |
| 9 | VAE 디코드 이미지 → | 후보 인물 저장 · ch19_candidates 이미지 |
| 10 | 긍정 프롬프트 조건 → | 컨트롤넷 적용 긍정 |
| 11 | 부정 프롬프트 조건 → | 컨트롤넷 적용 부정 |
| 12 | 컨트롤넷 모델 로드 컨트롤넷 → | 컨트롤넷 적용 컨트롤넷 |
| 13 | Canny 경계 필터 이미지 → | 컨트롤넷 적용 이미지 |
| 14 | 이미지 로드 · 입력 사진 이미지 → | Canny 경계 필터 이미지 |
| 15 | Canny 경계 필터 이미지 → | 윤곽 저장 · ch19_candidates_edges 이미지 |
B. 후보 네 장에서 한 장 고르기
- 결과 폴더를 엽니다. 설치 폴더의
ComfyUI/output/guide에서 이름이ch19_candidates_로 시작하는 인물 PNG를 찾습니다. 새로 만든 네 파일을 이름 순서 또는 수정 시각으로 확인하고 이미지 뷰어에서 넘겨 보세요.ch19_candidates_edges_는 윤곽 그림이므로 후보에서 빼세요. - 조건에 맞는지 먼저 봅니다. 인물이 한 명인지, 카메라 쪽을 보는지, 니트가 붉은 계열이고 목을 덮는 형태인지 확인합니다. 이어 눈·입과 옷의 경계가 크게 무너지지 않았는지 원본 크기로 봅니다.
- 이번 예제에서는 C를 선택합니다. 아래 비교표에서 C는 목을 덮는 붉은 니트와 정면 구도에 가장 잘 맞습니다. B는 붉은 니트지만 목을 덮지 않습니다. 선호와 조건 충족은 구별해서 고르세요.
| 후보 | 실제 사용 seed | 선택 판단 |
|---|---|---|
| A | 20261011 | 회색 몸판과 붉은 목·소매가 섞여 단색 붉은 니트 조건에서 제외 |
| B | 20261012 | 붉은 니트지만 둥근 목둘레여서 목폴라 조건에서 제외 |
| C · 선택 | 20261013 | 한 명의 정면 구도와 붉은 목폴라 조건에 가장 잘 맞음 |
| D | 20261014 | 니트가 회색 계열이며 목을 덮지 않아 제외 |
아래는 실제 후보 비교이며 프로그램 화면 캡처가 아닙니다. A·B·D는 선택에서 제외한 이유를 배우는 대조 자료입니다. 모든 후보를 성공작으로 취급하지 않습니다. 같은 시도를 무한히 반복하기보다 목적에 맞는 후보를 선택하거나, 모두 어긋났다면 문장·제어의 충돌을 한 항목씩 조정합니다.




네 장의 구도가 비슷한 것은 같은 Canny 윤곽으로 제어했기 때문입니다. seed는 얼굴 신원을 고정하는 번호가 아닙니다. 배경색도 완전히 같은 회색으로 고정되지는 않습니다. 이번 선택 기준은 붉은 목폴라·인물 수·얼굴 방향이며, 정확한 색상 맞추기는 별도 수정이 필요합니다.
C. 선택한 PNG의 작업을 복원하고 고정하기
- 선택한 원본 PNG를 작업으로 엽니다. ComfyUI에서 Ctrl+O → 방금 만든 후보 C의 PNG를 선택합니다. 이번에는 이미지 로드 노드의 업로드 버튼을 누르지 않습니다. PNG 안에 저장된 전체 워크플로를 열어야 합니다. 예제에서는 처음 생성한 네 인물 파일 중 세 번째였지만, 파일 뒤 자동 번호는 기존 파일 수에 따라 달라질 수 있습니다.
- 복원된 seed를 보고 fixed로 바꿉니다. 예제 C의 KSampler는
20261013으로 돌아옵니다. 생성 후 제어의 값 부분을 클릭해fixed를 선택합니다. 상단 요청 수 1, 빈 잠재 이미지의 배치 크기 1도 유지합니다. 직접 고른 다른 후보라면 그 PNG에서 복원된 seed를 사용하세요. - 선택 결과의 저장 이름을 구별합니다. 06 출력 그룹의 후보 인물 저장 노드에서 파일명 접두사를 두 번 클릭해
guide/ch19_selected_C로 바꿉니다. 윤곽 저장 노드의 접두사는 그대로 둡니다. 접두사는 저장 이름만 바꾸며 그림을 바꾸는 설정은 아닙니다. - 일반 JSON으로 보관합니다. 왼쪽 위 그래프 → 내보내기를 누르고 이름을
ch19-my-selected-C로 입력해 확인합니다. 내보내기(API)와 구별합니다. 저장된ch19-my-selected-C.json은 입력 PNG와 함께 보관합니다. - 저장한 JSON을 다시 열어 한 번 실행합니다. Ctrl+O →
ch19-my-selected-C.json→ 같은 모델·입력 확인 → 실행 한 번 순서입니다. 결과는ComfyUI/output/guide/ch19_selected_C_…png로 저장됩니다. 자동 번호가 바뀌어도 사용 seed가 바뀌었다는 뜻은 아닙니다.

선택 실습 · 다른 후보도 fixed로 다시 사용하기
아래 파일은 해당 후보의 실제 사용 seed를 fixed로 보관한 참고용 작업입니다. 하나를 Ctrl+O로 열고 입력·모델을 선택한 뒤 상단 요청 수 1로 실행합니다. 여러 값을 한꺼번에 바꾸기 전에 이 파일을 기준으로 삼으세요.
| 후보 | JSON |
|---|---|
| A | ch19-candidate-A.json (ZIP) |
| B | ch19-candidate-B.json (ZIP) |
| C | ch19-candidate-C.json (ZIP) |
| D | ch19-candidate-D.json (ZIP) |
randomize는 다음 seed를 무작위로 바꾸는 모드입니다. 이번 네 장의 비교에는 사용하지 않았습니다. 정확한 후보 순서를 따라가려면 기본 실습처럼 increment를 사용하세요. 배치 크기를 4로 바꾸는 실습은 하지 않습니다. 한꺼번에 계산하는 장수가 늘면 메모리 사용도 커질 수 있으므로 여기서는 한 장씩 네 작업으로 진행합니다.
4. 정상 결과 확인
| 확인할 것 | 정상 결과 |
|---|---|
| 후보 생성 | 서로 다른 인물 결과 네 장. 입력·문장·모델·설정은 같고 seed는 네 값입니다. |
| 선택 이유 | 예제에서는 C가 한 명의 정면 구도와 붉은 목폴라 조건에 가장 잘 맞습니다. |
| 재사용 | C의 PNG로 작업을 복원하고 seed 20261013 / fixed인 일반 JSON을 저장할 수 있습니다. |
| 다시 실행 | 저장한 JSON으로 생성한 결과가 선택한 C와 같은 구도·옷·얼굴을 보여줍니다. |
| 보관 파일 | 내 선택 JSON + 입력 PNG + 선택 결과 PNG를 보관합니다. 큰 모델은 기존 models 폴더를 사용합니다. |
이 PC에서 위 네 후보를 실제 생성하고, C의 PNG에서 복원해 내보낸 일반 JSON을 다시 열어 생성했습니다. 선택 C와 다시 생성한 결과는 1024×1024 크기와 RGB 픽셀이 같았습니다. PNG 안의 저장 정보나 파일명까지 같다는 뜻은 아닙니다.
5. 자주 생기는 문제
| 상황 | 해결 방법 |
|---|---|
| 네 번 실행했는데 모두 같은 그림이에요 | KSampler의 생성 후 제어가 fixed였는지 확인합니다. 후보용 JSON을 다시 열어 seed 20261011 / increment로 시작하세요. 같은 조건의 계산을 재사용하는 캐시는 오류가 아닙니다. |
| 네 장을 원했는데 훨씬 많이 생겼어요 | 상단 요청 수와 노드의 배치 크기를 둘 다 4로 만들었거나 실행을 여러 번 눌렀을 수 있습니다. 기본값은 상단 4, 노드 1이며 실행 한 번입니다. 여기에 윤곽 PNG도 별도로 생길 수 있습니다. |
| 실행을 잘못 여러 번 눌렀어요 | 활성 작업 수를 눌러 대기열을 펼칩니다. 대기 중 작업의 비우기는 예약을, 현재 실행 취소는 계산 중 작업을 멈춥니다. 다른 작업도 있으면 전체 비우기 대신 해당 작업만 취소하세요. 상단 숫자를 1로 바꾸는 것만으로 이미 예약된 작업이 없어지지는 않습니다. |
| seed가 20261015라서 그 값으로 다시 만들었어요 | 그 값은 네 작업을 예약한 뒤의 다음 요청용 번호입니다. 선택한 원본 PNG를 Ctrl+O로 열어 사용 seed를 복원하고 fixed로 바꿉니다. 예제 C는 20261013입니다. |
| PNG를 열었는데 작업이 복원되지 않아요 | 메신저·편집기로 저장한 사본은 작업 정보가 빠질 수 있습니다. ComfyUI/output의 원본 PNG 또는 아래 제공 JSON을 사용합니다. 캡처 이미지에서는 워크플로가 복원되지 않습니다. |
| 결과 PNG를 입력 사진으로 넣어 버렸어요 | 후보 C의 PNG는 전체 작업 복원용입니다. 출발 JSON 또는 선택 JSON을 다시 열고 이미지 로드에는 준비물 ch05_first_portrait_v2_00001_.png를 선택하세요. |
| 윤곽은 한 장만 늘고 인물만 네 장 생겼어요 | 입력과 Canny 값이 같아 윤곽 계산·저장이 캐시로 재사용될 수 있습니다. edges 파일 수로 후보 수를 세지 말고 인물 결과 네 장을 확인하세요. |
| C를 다시 만들었는데 달라요 | 선택 seed·fixed·같은 입력 PNG·모델·문장·크기·제어 강도를 확인합니다. 참고 ch19-selected-C.json으로 돌아갈 수 있습니다. JSON만으로 모델과 입력 파일이 함께 이동하지는 않습니다. |
| 배경색·옷 색이 문장과 달라요 | 문장이 모든 요소를 정확히 고정하지는 않습니다. 후보 선택에서 제외할 조건을 정하고, 모두 어긋나면 seed만 계속 바꾸기보다 문장과 윤곽 제어를 한 항목씩 조절합니다. 부분 색 수정은 11장을 참조하세요. |
공통 용어와 오류는 용어·문제 해결, seed의 기초는 9장, PNG·JSON 보관은 6장에서 다시 볼 수 있습니다.
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.