ComfyUI 왕초보 가이드 29 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (15.5MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
인페인트와 얼굴 디테일러의 denoise를 가로·세로로 비교하고, 고른 조합을 JSON으로 다시 사용합니다.
1. 만들 결과
25장의 코트 꽃 장식 → 얼굴 보정 작업을 그대로 사용합니다. 이번에 새로 배우는 것은 두 강도의 조합을 표로 읽고 선택하는 방법입니다. 기본 실습은 네 조합을 생성하는 2×2 비교로 끝납니다. 넓은 범위를 보는 3×3은 선택 실습입니다.

이 표는 ComfyUI 자동 XY 노드의 출력 화면이 아닙니다. 일반 워크플로로 각 조합을 실행한 뒤 결과를 행·열에 맞춰 배열한 비교 자료입니다. 모든 칸은 같은 좌표를 잘라 같은 2배 배율로 표시했고, 추가 선명화나 얼굴 보정은 넣지 않았습니다. 그림을 누르면 큰 크기로 볼 수 있습니다.
| 용어 | 뜻·이 장의 예 |
|---|---|
| XY 비교표 · XY plot | 두 설정을 함께 비교하는 표입니다. X·Y는 이번 원본 사진의 가로·세로 픽셀 좌표를 뜻하지 않습니다. |
| X축 · 가로 | 인페인트 KSampler의 denoise입니다. 왼쪽 0.85 → 오른쪽 1.00입니다. |
| Y축 · 세로 | FaceDetailer의 denoise입니다. 위 0.20 → 아래 0.40입니다. 이 표는 값이 아래쪽으로 커지도록 배치했습니다. |
| 행 / 열 / 칸 | 행은 가로줄, 열은 세로줄입니다. 오른쪽 아래 D칸은 X 1.00과 Y 0.40이 만나는 조합입니다. |
| denoise · 노이즈 제거량 | 입력 모습에서 벗어나 다시 그릴 여지를 조절합니다. 여기서는 X가 코트 장식, Y가 얼굴을 담당합니다. 두 값을 더하거나 품질 점수로 읽지 않습니다. |
| 변수 / 고정 조건 | 변수는 바꿔 보는 값입니다. 두 denoise만 바꾸고, 원본·마스크·문장·seed·모델 등은 그대로 두어야 차이를 해석할 수 있습니다. |
2. 준비물
기존 SDXL Base, Impact Pack·Impact Subpack, 얼굴 검출 모델을 사용합니다. 새 모델이나 XY 전용 노드는 필요 없습니다. 노드 준비는 23장, 두 단계의 연결과 마스크는 25장을 참고하세요.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| SDXL Base 1.0 | sd_xl_base_1.0.safetensors | ComfyUI\models\checkpoints | 체크포인트 로드 | 4장 |
| 얼굴 BBOX 검출 모델 | face_yolov8m.pt | ComfyUI\models\ultralytics/bbox | UltralyticsDetectorProvider → bbox/face_yolov8m.pt | 23장 |
| 파일 | 어떻게 사용하나요? |
|---|---|
| 원본 · ch29-input.png (ZIP) | 25장과 같은 832×1216 가상 성인 사진. ComfyUI/input에 넣거나 원본 LoadImage에서 업로드합니다. |
| 마스크 · ch29-brooch-mask.png (ZIP) | 원본과 같은 크기의 투명도 마스크. 마스크 LoadImage에서 선택합니다. JPG로 바꾸거나 흰 배경을 채우지 않습니다. |
| A · 0.85 / 0.20 (ZIP) | 첫 칸을 실행할 일반 워크플로 JSON입니다. |
| B · 1.00 / 0.20 (ZIP) | A와 비교해 인페인트 강도만 높인 칸입니다. |
| C · 0.85 / 0.40 (ZIP) | A와 비교해 디테일러 강도만 높인 칸입니다. |
| D · 1.00 / 0.40 (ZIP) | 이 예제에서 선택한 조합입니다. 기본 2×2 실습의 마지막 칸입니다. |
JSON은 작업의 노드·연결·문장·설정 파일이며 모델과 입력 PNG를 모두 포함하지 않습니다. 링크가 글자로 열리면 오른쪽 클릭 → 다른 이름으로 링크 저장을 사용합니다. PNG 두 개를 폴더로 옮길 때는 목적지 ComfyUI/input을 먼저 열고 파일을 복사·붙여넣기 하세요.
3. 따라 하기
A. 바꿀 두 값과 고정할 조건 정하기
결과를 보기 전에 목표를 정합니다. 이번 목표는 코트에서 빨간 꽃이 장식으로 읽히고, 얼굴의 눈·입 표현을 정돈하되 불필요한 인상 변화가 적은 조합입니다. 얼굴만 마음에 든다는 이유로 꽃이 불완전한 칸을 최종 선택하지 않습니다.
| Y · 디테일러 ↓ / X · 인페인트 → | X = 0.85 | X = 1.00 |
|---|---|---|
| Y = 0.20 | A · 0.85 / 0.20 | B · 1.00 / 0.20 |
| Y = 0.40 | C · 0.85 / 0.40 | D · 1.00 / 0.40 |
| 고정할 항목 | 인페인트 KSampler | FaceDetailer |
|---|---|---|
| seed / 생성 후 제어 | 2026102501 / fixed | 2026102502 / fixed |
| steps / CFG | 28 / 7 | 24 / 5 |
| sampler / scheduler | dpmpp_2m / karras | dpmpp_2m / karras |
| 수정 범위 | 제공 코트 마스크·자르기 좌표 유지 | bbox/face_yolov8m.pt, threshold 0.50, dilation 8, crop_factor 3.0 |
| 작업 크기 | 코트 주변 320×320 → 1024×1024에서 작업 → 원래 위치 합성 | guide_size 512, max_size 1024, cycle 1 |
| 경계 설정 | GrowMask 8, ImageBlur 9 / 3 | feather 10, noise_mask_feather 20 |
원본·마스크·긍정과 부정 문장·모델·연결도 유지합니다. 코트 문장은 빨간 꽃 장식, 얼굴 문장은 자연스러운 눈과 닫힌 입을 요청하며 서로 다릅니다. 두 seed를 모두 fixed로 두고 상단 배치 수는 1로 시작합니다. XY 네 칸은 서로 다른 설정 네 번이지 같은 설정의 batch 4가 아닙니다.
B. 첫 칸 A 실행하기
- Ctrl+O로
ch29-i085-d020.json을 엽니다. 오른쪽 아래 보기 맞춤으로 전체 그룹을 본 뒤 줌 컨트롤로 값을 읽을 만큼 확대합니다. 멀리 있는 그룹은 캔버스 모드 → 손으로 이동하고 다시 선택으로 돌아옵니다. - 01 원본·모델에서 체크포인트
sd_xl_base_1.0.safetensors, 원본ch29-input.png, 마스크ch29-brooch-mask.png를 선택합니다. 목록에 없으면 각 LoadImage의 업로드할 파일 선택을 사용합니다. 마스크는 MASK 출력이 연결된 노드입니다. - 03 인페인트 생성 → X · 인페인트 denoise에서 노이즈 제거량 0.85, 06 얼굴 재생성 → Y · 디테일러 denoise에서 노이즈 제거량 0.20을 확인합니다. 얼굴 검출 모델은
bbox/face_yolov8m.pt입니다. - 상단 실행을 누릅니다. 중간 결과 · 인페인트 후의 꽃을 먼저 보고, 최종 결과 · 두 단계 완료의 얼굴까지 나온 뒤 A칸 결과로 사용합니다. 최종 이미지 크기는
832×1216입니다. - 최종 파일은
ComfyUI/output/guide/ch29_i085-d020_final_…png입니다.inpaint는 얼굴 보정 전 중간 결과이고,inpaint_mask·face_mask는 범위 그림입니다. XY 비교에는 네 칸 모두 final을 사용합니다.
C. B → C → D를 실행해 2×2 채우기
- Ctrl+O로 B 파일
ch29-i100-d020.json을 엽니다. 같은 원본·마스크·모델을 선택하고 X 1.00 / Y 0.20으로 실행합니다. 결과는ch29_i100-d020_final_…png입니다. - C 파일
ch29-i085-d040.json을 열어 X 0.85 / Y 0.40으로 실행합니다. B에서 Y만 바꾸면 D가 되므로, C에서는 X를 다시 0.85로 돌려야 합니다. 제공 파일은 각 칸의 두 값이 이미 들어 있습니다. - D 파일
ch29-i100-d040.json을 열어 X 1.00 / Y 0.40으로 실행합니다. 결과는ch29_i100-d040_final_…png입니다. - A·B를 위쪽 행, C·D를 아래쪽 행으로 놓고 봅니다. 파일 이름의
i085는 인페인트 0.85,d020은 디테일러 0.20입니다. 이미지가 보기 좋다는 이유로 칸을 바꾸면 축의 의미가 사라집니다.
한 파일에서 직접 바꾸려면 해당 노이즈 제거량 숫자를 두 번 클릭 → 값 입력 → Enter로 두 값을 지정합니다. 저장 노드의 접두사도 현재 조합으로 바꾸고 실행하세요. 예: 최종 SaveImage는 guide/ch29_i100-d040_final. 네 개의 제공 JSON을 차례로 여는 방법이 이름과 설정을 맞추기 쉽습니다.
아래는 네 칸 중 D · 1.00 / 0.40을 실행한 실제 화면입니다. A의 설정 화면과 혼동하지 마세요.


선택 조합 D의 전체 프롬프트·설정·노드 연결
| 설정할 노드 | 입력값 |
|---|---|
| 원본 · 두 단계의 출발점 · 입력 사진 | 입력 파일 = ch29-input.png |
| 공통 SDXL Base | 체크포인트 = sd_xl_base_1.0.safetensors |
| 코트 장식 마스크 · MASK 출력 · RGBA 마스크 | 입력 파일 = ch29-brooch-mask.png |
| 마스크 범위 · 8 | expand = 8 tapered_corners = true |
| 마스크 경계 · 9 / 3 | blur_radius = 9 sigma = 3.0 |
| 부드러운 최종 마스크 | channel = red |
| X · 인페인트 denoise | seed = 2026102501 생성 후 제어 = fixed steps = 28 CFG = 7.0 sampler = dpmpp_2m scheduler = karras denoise = 1.0 |
| 원본 보존 · 인페인트 합성 | x = 316 y = 156 resize_source = false |
| 중간 결과 · 인페인트 후 · ch29_i100-d040_inpaint | 파일명 접두사 = guide/ch29_i100-d040_inpaint |
| 확인용 · 인페인트 마스크 · ch29_i100-d040_inpaint_mask | 파일명 접두사 = guide/ch29_i100-d040_inpaint_mask |
| 얼굴 검출 모델 | model_name = bbox/face_yolov8m.pt |
| Y · 디테일러 denoise | guide_size = 512 guide_size_for = true max_size = 1024 seed = 2026102502 생성 후 제어 = fixed steps = 24 cfg = 5.0 sampler_name = dpmpp_2m scheduler = karras denoise = 0.4 feather = 10 noise_mask = true force_inpaint = true bbox_threshold = 0.5 bbox_dilation = 8 bbox_crop_factor = 3.0 sam_detection_hint = center-1 sam_dilation = 0 sam_threshold = 0.93 sam_bbox_expansion = 0 sam_mask_hint_threshold = 0.7 sam_mask_hint_use_negative = False drop_size = 10 wildcard = cycle = 1 inpaint_model = false noise_mask_feather = 20 tiled_encode = false tiled_decode = false |
| 최종 결과 · 두 단계 완료 · ch29_i100-d040_final | 파일명 접두사 = guide/ch29_i100-d040_final |
| 확인용 · 얼굴 검출 마스크 · ch29_i100-d040_face_mask | 파일명 접두사 = guide/ch29_i100-d040_face_mask |
| 장식 주변만 자르기 | 너비 = 320 높이 = 320 x = 316 y = 156 |
| 작업 크기 1024 | upscale_method = bicubic 너비 = 1024 높이 = 1024 crop = disabled |
| 같은 좌표의 마스크 | 너비 = 320 높이 = 320 x = 316 y = 156 |
| 마스크도 1024 | upscale_method = bilinear 너비 = 1024 높이 = 1024 crop = disabled |
| 확대 마스크 | channel = red |
| 생성 부분을 320으로 | upscale_method = area 너비 = 320 높이 = 320 crop = disabled |
| 합성용 · 원래 크기 마스크 | x = 316 y = 156 너비 = 320 높이 = 320 |
입력할 프롬프트 전문
인페인트 문장 · 빨간 꽃 장식
photograph, a single red rose flower brooch pinned to beige trench coat fabric, (red rose petals:1.3), small elegant fabric flower accessory, realistic textile texture, soft studio light
인페인트 · 피할 표현
text, watermark, logo, multiple flowers, bouquet, large flower, extra limbs, distorted clothing, distorted face, blurry, drawing, cartoon
디테일러 문장 · 얼굴만
photograph of an adult woman, natural eyes, dark brown hair, calm neutral expression, closed mouth, realistic skin, soft natural light
디테일러 · 피할 표현
distorted eyes, crossed eyes, asymmetrical pupils, deformed face, open mouth, teeth, heavy makeup, plastic skin, text, watermark
현재 작업의 노드·연결 목록 · 노드 30개와 연결 40개
제공 JSON에 이미 들어 있는 노드와 연결입니다. 실수로 선을 바꿨을 때 이 목록과 대조하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 원본 · 두 단계의 출발점 · 입력 사진 | LoadImage |
| 공통 SDXL Base | CheckpointLoaderSimple |
| 인페인트 문장 · 빨간 꽃 장식 | CLIPTextEncode |
| 인페인트 · 피할 표현 | CLIPTextEncode |
| 코트 장식 마스크 · MASK 출력 · RGBA 마스크 | LoadImage |
| 원본을 잠재 이미지로 | VAEEncode |
| 마스크 범위 · 8 | GrowMask |
| 마스크를 그림으로 | MaskToImage |
| 마스크 경계 · 9 / 3 | ImageBlur |
| 부드러운 최종 마스크 | ImageToMask |
| 인페인트 생성 범위 | SetLatentNoiseMask |
| X · 인페인트 denoise | KSampler |
| 생성 그림으로 변환 | VAEDecode |
| 원본 보존 · 인페인트 합성 | ImageCompositeMasked |
| 중간 결과 · 인페인트 후 · ch29_i100-d040_inpaint | SaveImage |
| 확인용 · 인페인트 마스크 · ch29_i100-d040_inpaint_mask | SaveImage |
| 얼굴 검출 모델 | UltralyticsDetectorProvider |
| 디테일러 문장 · 얼굴만 | CLIPTextEncode |
| 디테일러 · 피할 표현 | CLIPTextEncode |
| Y · 디테일러 denoise | FaceDetailer |
| 최종 결과 · 두 단계 완료 · ch29_i100-d040_final | SaveImage |
| 검출 마스크를 그림으로 | MaskToImage |
| 확인용 · 얼굴 검출 마스크 · ch29_i100-d040_face_mask | SaveImage |
| 장식 주변만 자르기 | ImageCrop |
| 작업 크기 1024 | ImageScale |
| 같은 좌표의 마스크 | ImageCrop |
| 마스크도 1024 | ImageScale |
| 확대 마스크 | ImageToMask |
| 생성 부분을 320으로 | ImageScale |
| 합성용 · 원래 크기 마스크 | CropMask |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 공통 SDXL Base CLIP → | 인페인트 문장 · 빨간 꽃 장식 clip |
| 2 | 공통 SDXL Base CLIP → | 인페인트 · 피할 표현 clip |
| 3 | 작업 크기 1024 이미지 → | 원본을 잠재 이미지로 이미지 |
| 4 | 공통 SDXL Base VAE → | 원본을 잠재 이미지로 vae |
| 5 | 코트 장식 마스크 · MASK 출력 · RGBA 마스크 마스크 → | 마스크 범위 · 8 마스크 |
| 6 | 마스크 범위 · 8 마스크 → | 마스크를 그림으로 마스크 |
| 7 | 마스크를 그림으로 이미지 → | 마스크 경계 · 9 / 3 이미지 |
| 8 | 마스크 경계 · 9 / 3 이미지 → | 부드러운 최종 마스크 이미지 |
| 9 | 원본을 잠재 이미지로 잠재 데이터 → | 인페인트 생성 범위 잠재 데이터 |
| 10 | 확대 마스크 마스크 → | 인페인트 생성 범위 마스크 |
| 11 | 공통 SDXL Base 모델 → | X · 인페인트 denoise 모델 |
| 12 | 인페인트 문장 · 빨간 꽃 장식 조건 → | X · 인페인트 denoise 긍정 |
| 13 | 인페인트 · 피할 표현 조건 → | X · 인페인트 denoise 부정 |
| 14 | 인페인트 생성 범위 잠재 데이터 → | X · 인페인트 denoise 잠재 입력 |
| 15 | X · 인페인트 denoise 잠재 데이터 → | 생성 그림으로 변환 잠재 데이터 |
| 16 | 공통 SDXL Base VAE → | 생성 그림으로 변환 vae |
| 17 | 원본 · 두 단계의 출발점 · 입력 사진 이미지 → | 원본 보존 · 인페인트 합성 바탕 그림(destination) |
| 18 | 생성 부분을 320으로 이미지 → | 원본 보존 · 인페인트 합성 얹을 그림(source) |
| 19 | 합성용 · 원래 크기 마스크 마스크 → | 원본 보존 · 인페인트 합성 마스크 |
| 20 | 원본 보존 · 인페인트 합성 이미지 → | 중간 결과 · 인페인트 후 · ch29_i100-d040_inpaint 이미지 |
| 21 | 마스크 경계 · 9 / 3 이미지 → | 확인용 · 인페인트 마스크 · ch29_i100-d040_inpaint_mask 이미지 |
| 22 | 공통 SDXL Base CLIP → | 디테일러 문장 · 얼굴만 clip |
| 23 | 공통 SDXL Base CLIP → | 디테일러 · 피할 표현 clip |
| 24 | 원본 보존 · 인페인트 합성 이미지 → | Y · 디테일러 denoise 이미지 |
| 25 | 공통 SDXL Base 모델 → | Y · 디테일러 denoise 모델 |
| 26 | 공통 SDXL Base CLIP → | Y · 디테일러 denoise clip |
| 27 | 공통 SDXL Base VAE → | Y · 디테일러 denoise vae |
| 28 | 디테일러 문장 · 얼굴만 조건 → | Y · 디테일러 denoise 긍정 |
| 29 | 디테일러 · 피할 표현 조건 → | Y · 디테일러 denoise 부정 |
| 30 | 얼굴 검출 모델 BBOX_DETECTOR → | Y · 디테일러 denoise bbox_detector |
| 31 | Y · 디테일러 denoise 이미지 → | 최종 결과 · 두 단계 완료 · ch29_i100-d040_final 이미지 |
| 32 | Y · 디테일러 denoise 마스크 → | 검출 마스크를 그림으로 마스크 |
| 33 | 검출 마스크를 그림으로 이미지 → | 확인용 · 얼굴 검출 마스크 · ch29_i100-d040_face_mask 이미지 |
| 34 | 원본 · 두 단계의 출발점 · 입력 사진 이미지 → | 장식 주변만 자르기 이미지 |
| 35 | 장식 주변만 자르기 이미지 → | 작업 크기 1024 이미지 |
| 36 | 마스크 경계 · 9 / 3 이미지 → | 같은 좌표의 마스크 이미지 |
| 37 | 같은 좌표의 마스크 이미지 → | 마스크도 1024 이미지 |
| 38 | 마스크도 1024 이미지 → | 확대 마스크 이미지 |
| 39 | 생성 그림으로 변환 이미지 → | 생성 부분을 320으로 이미지 |
| 40 | 부드러운 최종 마스크 마스크 → | 합성용 · 원래 크기 마스크 마스크 |
D. 가로·세로로 비교하고 한 칸 고르기
- 같은 행에서 가로로: A → B 또는 C → D를 봅니다. Y를 고정하고 X만 바뀌므로, 먼저 꽃잎이 모여 장식으로 읽히는지 비교합니다. 이 예제에서는 0.85의 가늘게 벌어진 꽃보다 1.00의 꽃 형태가 더 뚜렷합니다.
- 같은 열에서 세로로: A → C 또는 B → D를 봅니다. X를 고정하고 Y만 바뀌므로, 눈 주변·입술과 원래 인상을 비교합니다. 이 예제의 0.20은 원래 눈 주변 대비를 더 남기고, 0.40은 그 표현을 정돈하지만 인상도 일부 바뀝니다.
- 처음부터 대각선 A → D로만 비교하지 않습니다. X와 Y가 동시에 달라져 어떤 설정이 어떤 변화를 만들었는지 나누기 어렵습니다. A → B로 꽃, B → D로 얼굴 순서로 확인합니다.
- 마지막에는 잘린 부분만 보지 말고 선택한 전체 PNG를 엽니다. 꽃이 유지되는지, 얼굴 합성 경계나 주변 코트·배경의 불필요한 변화가 없는지 봅니다.
| 칸 | 전체 결과 | 이 예제의 판단 |
|---|---|---|
| A · 0.85 / 0.20 | ch29-i085-d020.png (ZIP) | 꽃잎이 가늘게 벌어져 있습니다. 얼굴은 원래 눈 주변 대비가 더 남습니다. |
| B · 1.00 / 0.20 | ch29-i100-d020.png (ZIP) | 꽃 형태가 더 뚜렷합니다. 원래 얼굴 느낌을 더 남기고 싶을 때 선택할 대안입니다. |
| C · 0.85 / 0.40 | ch29-i085-d040.png (ZIP) | 얼굴 변화는 커졌지만 꽃이 가는 형태인 점은 남습니다. 얼굴 강도로 꽃을 해결하지 않습니다. |
| D · 1.00 / 0.40 | ch29-i100-d040.png (ZIP) | 이 예제의 선택. 꽃 형태와 눈·입 표현을 함께 판단해 고른 조합입니다. 모든 사진의 최적값은 아닙니다. |


원본 얼굴과 꽃 위치도 같은 크기로 보기


얼굴이 매끈하거나 진해졌다는 이유만으로 개선이라고 판단하지 않습니다. 원래 인상에 더 가까운 것이 목표라면 B나 얼굴 보정 전 중간 결과를 선택할 수 있습니다.
중간 결과로 원인 구별하기
각 열의 인페인트 중간 결과는 Y를 바꿔도 같습니다. 아래는 얼굴 보정 전 PNG입니다. 꽃부터 판단하고, 그다음 같은 칸의 final과 얼굴을 비교하세요.
| X · 인페인트 | 중간 PNG | 의미 |
|---|---|---|
| 0.85 | ch29-i085-inpaint.png (ZIP) | 꽃잎이 가는 형태인 이유는 첫 단계에서 찾아야 합니다. |
| 1.00 | ch29-i100-inpaint.png (ZIP) | 이 열은 같은 꽃을 가진 중간 사진으로 얼굴 보정을 시작합니다. |


원본의 두 수정 영역에서 멀리 떨어진 곳도 확인합니다. Y만 바꿨는데 꽃이 바뀌면 입력·seed·연결이나 파일 선택부터 확인하세요. 반대로 X를 바꾸면 디테일러가 받는 사진도 바뀌므로, 같은 Y라도 얼굴이 반드시 픽셀까지 같아지는 것은 아닙니다.
E. 선택한 조합 저장하고 다시 사용하기
- 선택 D를 다시 쓰려면
ch29-i100-d040.json을 보관합니다. 자신이 값을 조절했다면 그래프 → 내보내기로ch29-my-selected.json을 저장합니다. 비교표 PNG와 실행 가능한 JSON은 서로 다른 파일입니다. - 다시 열 때 Ctrl+O로 JSON을 열고 원본·마스크·모델을 선택합니다. X 1.00 / Y 0.40, 두 seed fixed, 배치 1을 유지해 실행합니다. 완성 결과를 새 입력으로 넣어 보정을 누적하지 않습니다.
- 다른 사진을 사용할 때는 25장처럼 마스크·자르기 좌표·합성 위치를 먼저 맞춥니다. 그 사진에서 쓸 값을 두 개씩 정해 작은 2×2부터 비교합니다. 사진과 문장을 바꾸었다면 이번 선택값을 그대로 정답으로 취급하지 않습니다.
보관용 2×2 비교표 PNG (ZIP) 와 선택 D의 일반 JSON (ZIP) 을 제공합니다. 비교표는 결과를 고르는 자료이고, 실제 재실행에는 선택한 칸의 JSON과 입력 두 개가 필요합니다.
선택 실습 · 3×3으로 범위 넓혀 보기
기본 네 칸을 마친 뒤 진행합니다. X에 0.60, Y에 0.60을 추가하면 전체는 3×3 = 9칸입니다. 이미 만든 기본 네 칸을 그대로 두면 새로 만들 것은 다섯 칸입니다. 문장·두 seed·마스크·노드 연결은 계속 유지합니다.

| 추가 칸 X / Y | 일반 JSON | 전체 결과 |
|---|---|---|
| 0.60 / 0.20 | ch29-i060-d020.json (ZIP) | ch29-i060-d020.png (ZIP) |
| 0.60 / 0.40 | ch29-i060-d040.json (ZIP) | ch29-i060-d040.png (ZIP) |
| 0.60 / 0.60 | ch29-i060-d060.json (ZIP) | ch29-i060-d060.png (ZIP) |
| 0.85 / 0.60 | ch29-i085-d060.json (ZIP) | ch29-i085-d060.png (ZIP) |
| 1.00 / 0.60 | ch29-i100-d060.json (ZIP) | ch29-i100-d060.png (ZIP) |
Y 0.60 행은 입가·볼과 인상이 더 달라지는 대조입니다. 높은 값이 항상 더 좋은 얼굴을 뜻하지 않습니다. 얼굴 변화가 과하면 X를 유지하고 Y만 낮춰 다시 봅니다. 0.85의 가는 꽃이나 0.60의 미완성 꽃을 얼굴 강도로 해결하려 하지 않습니다. 3×3 비교표 PNG (ZIP)
9칸도 읽기 어렵다면 범위를 무작정 늘리지 말고, 마음에 드는 두 값 주변을 새 2×2로 좁혀 보세요. 예를 들어 D 주변에서 X 0.90 / 1.00, Y 0.30 / 0.40을 정할 수 있습니다. 이는 다음 비교 범위를 정하는 예시이며 이 장에 그 조합의 생성 결과를 제공하는 것은 아닙니다.
선택 개념 · 자동 XY Plot과 무엇이 다른가요?
자동 XY Plot은 정한 값들을 반복 적용하고 결과를 표로 묶는 기능을 뜻합니다. 제공하는 노드 팩마다 지원하는 값과 연결이 다르므로, KSampler의 denoise와 FaceDetailer의 denoise를 각각 바꿀 수 있는지 확인해야 합니다. 같은 설정에서 배치만 9로 늘리는 것은 두 축 비교가 아닙니다.
이 장은 전용 자동 XY 노드를 사용하지 않습니다. 각 칸의 일반 JSON을 실행하고 결과를 수동으로 정한 행·열에 배열합니다. 추가 설치 없이 2×2·3×3을 읽고 선택하는 방법을 익힌 뒤, 자동화를 사용하더라도 축 라벨·실제 값·두 seed가 같은 원칙을 따르는지 확인하세요.
4. 정상 결과 확인
| 확인할 것 | 완성 기준 |
|---|---|
| 칸의 수와 위치 | 기본 2×2 네 칸이 모두 있고 A·B / C·D가 해당 X·Y 값과 맞습니다. |
| 공정한 비교 | 두 denoise와 저장 이름 외에는 같은 원본·마스크·두 seed·문장·모델·연결을 사용합니다. |
| 출력 단계 | 네 칸 모두 final입니다. 중간 사진이나 검출 마스크를 최종 결과 칸에 섞지 않습니다. |
| 꽃·얼굴 판단 | 가로로 꽃, 세로로 얼굴을 보고 선택 이유를 설명할 수 있습니다. 생성 완료와 목표 달성을 구분합니다. |
| 전체 사진 | 선택 결과에 꽃과 얼굴 보정이 함께 있고, 주변 코트·배경과 합성 경계가 자연스럽습니다. |
| 다시 사용 | 선택한 칸의 일반 JSON과 원본·마스크 PNG를 함께 보관해 같은 설정으로 열 수 있습니다. |
기본 네 칸과 선택 다섯 칸은 모두 실제 실행한 결과입니다. 같은 X 열의 중간 사진은 Y가 달라도 RGB 픽셀이 같았고, 얼굴 보정 단계에서 꽃 부분은 유지됐습니다. 선택 D를 일반 JSON으로 다시 열어 실행한 중간·최종 결과도 이 장의 D와 RGB가 같았습니다. 이 결과가 다른 사진에서도 같은 최적값을 보장하지는 않습니다.
5. 자주 생기는 문제
| 증상 | 원인·다음 행동 |
|---|---|
| 어느 축이 어느 강도인지 헷갈려요 | 가로 X는 첫 KSampler, 세로 Y는 FaceDetailer입니다. 파일명 i는 인페인트, d는 디테일러입니다. 원본 사진의 x/y 좌표와 구별하세요. |
| C를 만들었는데 D와 같아요 | B 다음에는 X를 1.00에서 0.85로 되돌려야 C입니다. 제공 C JSON을 다시 열어 두 값을 확인합니다. |
| 각 칸이 너무 제각각이에요 | 두 seed가 fixed인지, 원본·마스크·문장·모델이 같은지 확인합니다. 최종 결과를 다음 원본으로 넣지 않습니다. |
| 꽃은 없는데 얼굴만 달라져요 | 중간 인페인트 PNG부터 봅니다. 이 예제의 X 0.60처럼 새 꽃이 충분히 생기지 않았다면 X를 바꿔 비교합니다. Y를 높여 코트를 고치지 않습니다. |
| 얼굴이 너무 달라졌어요 | 꽃이 좋은 X는 유지하고 Y만 낮춥니다. 원래 인상 보존이 더 중요하면 0.20이나 얼굴 보정 전 사진도 선택지입니다. |
| Y만 바꿨는데 꽃도 달라져요 | 같은 X의 중간 사진과 두 seed, 입력 파일을 확인합니다. FaceDetailer image가 인페인트 합성 결과를 받고 있는지도 봅니다. 이번 제공 조합에서는 꽃 영역이 유지됩니다. |
| XY 노드가 없어요 | 이 장은 XY 전용 노드를 사용하지 않습니다. 제공 JSON 한 개는 표의 한 칸을 실행합니다. 네 칸은 네 파일을 차례로 실행하면 됩니다. |
| 비교표 PNG를 넣었더니 실행이 안 돼요 | 비교표는 여러 결과를 배열한 보기 자료입니다. 워크플로 복원에는 선택한 칸의 일반 JSON을 Ctrl+O로 엽니다. |
| 마스크가 하얗게 보여요 | 원본 마스크는 투명도로 범위를 저장합니다. LoadImage의 MASK 출력을 쓰고 PNG 투명도를 유지합니다. 본문의 처리된 흑백 마스크와 혼동하지 않습니다. |
| 일부 단계가 빠르게 지나가요 | 바뀌지 않은 앞 단계 계산을 재사용할 수 있습니다. 같은 X에서 Y만 바꿨다면 인페인트 결과 재사용은 정상입니다. 속도 때문에 seed를 임의로 바꾸지 않습니다. |
| 파일이 많아 어느 결과인지 모르겠어요 | i값-d값과 final 접미사를 먼저 봅니다. 실행 중인 작업이 끝난 뒤 다음 칸을 진행하고, 같은 조건을 반복했다면 저장 번호만 다른 파일인지 구별합니다. |
| 다른 사진에서 꽃 위치가 틀어져요 | 제공 마스크·크롭·합성 좌표는 이 사진용입니다. 25장에서 새 사진에 맞게 영역을 먼저 설정한 다음 XY 비교를 시작합니다. |
기능과 연결을 다시 확인하려면 22장 인페인트 · 24장 디테일러 · 25장 두 단계 연결을 참고하세요. 이 장은 두 강도를 비교하고 선택한 작업을 보관하는 단계입니다.
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.