ComfyUI 인페인팅 기초|마스크로 니트만 부분 수정

ComfyUI 왕초보 가이드 11 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.

이 장의 실습 자료 ZIP 내려받기 (6.4MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.

얼굴과 배경을 보존하면서 니트를 파란색으로 다시 생성하고, 목선·어깨 경계를 확인합니다.

1. 만들 결과

얼굴과 배경을 보존하면서 니트를 파란색으로 다시 생성하고, 목선·어깨 경계를 확인합니다.

인페인팅은 선택한 부분을 다시 생성하는 작업입니다. 마스크(MASK)는 수정 범위를 표시한 지도입니다. 이 실습에서는 흰색=수정, 검정=원본 유지, 회색=원본과 생성 그림을 섞는 경계입니다. RGBA는 색상 RGB에 투명도(alpha)를 더한 이미지입니다. 제공 파일의 투명한 부분을 LoadImage가 흰 MASK로 읽습니다. 색깔로 표시된 마스크 편집기의 덮개와 이 흑백 값은 구별하세요.

마스크를 다듬는 설정의 뜻
값쉽게 읽기
expand=24선택 범위를 24픽셀 넓혀 빠진 옷 가장자리까지 포함합니다.
tapered_corners=true선택이 모서리 방향으로 네모나게 퍼지는 것을 줄이는 옵션입니다.
blur_radius=9 / sigma=3경계를 흐리게 계산하는 주변 범위 / 흐림의 퍼짐 정도입니다. 두 값 모두 마스크 경계에 영향을 줍니다.
red 채널흑백 마스크 이미지의 빨강 성분을 읽습니다. 흑백에서는 RGB 값이 같으므로 색을 빨갛게 칠한다는 뜻이 아닙니다.

2. 준비물

ComfyUI를 실행한 상태에서 시작합니다. 아래 모델이 이미 같은 폴더에 있으면 다시 받을 필요가 없습니다.

모델공식 파일·다운로드 위치설치 폴더 안에 넣을 곳선택할 노드처음 사용
SDXL Base 1.0sd_xl_base_1.0.safetensorsComfyUI\models\checkpoints체크포인트 로드4장
역할파일정확한 이름
실습 JSON실습 JSON 내려받기 (ZIP) ch11-soft-mask-knit.json
입력 PNG입력 PNG 내려받기 (ZIP) ch05_first_portrait_v2_00001_.png
입력 PNG입력 PNG 내려받기 (ZIP) ch11_knit_mask_r02_rgba.png

파일 링크는 이 장의 실습 자료 ZIP으로 연결됩니다. 한 번 내려받아 압축을 푼 뒤 표에 적힌 JSON·PNG 파일을 선택하세요. JSON은 Ctrl+O로 열고, 입력 PNG는 해당 LoadImage에서 업로드합니다.

이번 기본 JSON이 저장할 파일

설치 폴더의 ComfyUI/output 아래에 다음 접두사로 저장됩니다. 뒤에는 자동 번호와 .png가 붙습니다. 이미 같은 이름이 있으면 번호가 올라갑니다.

  • guide/ch11_soft_mask_mask_00001_.png
  • guide/ch11_soft_mask_decoded_00001_.png
  • guide/ch11_soft_mask_final_00001_.png

세 종류의 PNG 구별하기

파일역할
ch05_first_portrait_v2_00001_.png원본 이미지 로드 → IMAGE
ch11_knit_mask_r02_rgba.png마스크 이미지 로드 → MASK. 알파로 선택 범위를 전달
ch11_soft_mask_mask_00001_.png이번 실행에서 저장할 흑백 확인 그림. 관찰용이며 RGBA 입력 대신 넣지 않음
원본 IMAGE → VAE 인코드 → 생성 범위 지정 → 샘플링 → 디코드 → 원본 위에 합성
RGBA의 MASK → 확장·흐림 → 생성 범위 / 최종 합성 범위로 분기

3. 따라 하기

  1. 실습 JSON과 원본 PNG, ch11_knit_mask_r02_rgba.png를 받습니다. JSON을 새 작업에서 열고 두 이미지 로드에 각각 업로드합니다.
  2. 체크포인트는 SDXL Base로 선택합니다. 원본 이미지 → VAE 인코드로 원래 의상 정보를 잠재 데이터에 남깁니다. 이 새 구성은 선택 부분을 회색으로 지우는 VAEEncodeForInpaint를 쓰지 않습니다.
  3. 마스크 범위 넓히기(GrowMask)에서 expand=24, tapered_corners=true를 확인합니다. 기존 선택에서 빠진 가장자리까지 포함하는 값입니다. 다른 사진에 무조건 24를 적용하지 마세요.
  4. 마스크를 이미지로 바꾼 뒤 ImageBlur에서 blur_radius=9, sigma=3으로 경계를 부드럽게 합니다. 이어 ImageToMask의 red 채널로 다시 MASK를 만듭니다.
  5. 부드러운 MASK를 SetLatentNoiseMask와 최종 합성의 mask에 함께 연결합니다. SetLatentNoiseMask는 잠재 데이터에서 생성할 범위를 지정합니다. 원본 IMAGE는 합성 destination, 디코드 IMAGE는 source입니다.
  6. seed=20260909 / fixed / 28 steps / CFG 7 / dpmpp_2m / karras / denoise 0.85를 확인하고 실행합니다. MASK, decoded, final 세 그림이 저장됩니다.
  7. final에서 얼굴과 배경, 목·의상 연결, 양쪽 어깨를 봅니다. 색 변화만 확인하고 끝내지 마세요. 제공 MASK의 검정 바깥쪽은 원본을 쓰고 회색 경계는 두 이미지를 섞습니다.

이번 실습의 설정

설정할 노드입력값
체크포인트 로드체크포인트 = sd_xl_base_1.0.safetensors
이미지 로드 · RGBA 마스크입력 파일 = ch11_knit_mask_r02_rgba.png
이미지 로드 · 입력 사진입력 파일 = ch05_first_portrait_v2_00001_.png
마스크 범위 넓히기expand = 24
tapered_corners = true
마스크 경계 부드럽게blur_radius = 9
sigma = 3.0
흐린 그림을 마스크로channel = red
KSamplerseed = 20260909
생성 후 제어 = fixed
steps = 28
CFG = 7.0
sampler = dpmpp_2m
scheduler = karras
denoise = 0.85
이미지 저장 · ch11_soft_mask_mask파일명 접두사 = guide/ch11_soft_mask_mask
이미지 저장 · ch11_soft_mask_decoded파일명 접두사 = guide/ch11_soft_mask_decoded
마스크된 이미지 합성x = 0
y = 0
resize_source = false
이미지 저장 · ch11_soft_mask_final파일명 접두사 = guide/ch11_soft_mask_final
입력할 프롬프트 전문

긍정 프롬프트

realistic portrait photo of one adult woman, wearing a (light blue knitted sweater:1.4), blue ribbed crewneck collar, solid pale blue wool garment, natural skin, gray background, soft studio light

부정 프롬프트

text, watermark, blurry, deformed, double neckline, cream collar, beige trim, skin on sweater, plastic skin
직접 구성하기 · 노드 18개와 연결 23개

빈 작업판을 두 번 클릭해 아래 기술 이름으로 검색하고 노드를 추가합니다. 값 입력 뒤, 오른쪽 출력 점을 왼쪽 입력 점으로 끌어 연결하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.

노드 역할검색할 기술 이름
체크포인트 로드CheckpointLoaderSimple
이미지 로드 · RGBA 마스크LoadImage
이미지 로드 · 입력 사진LoadImage
긍정 프롬프트CLIPTextEncode
부정 프롬프트CLIPTextEncode
VAE 인코드VAEEncode
마스크 범위 넓히기GrowMask
마스크를 이미지로MaskToImage
마스크 경계 부드럽게ImageBlur
흐린 그림을 마스크로ImageToMask
마스크를 이미지로 변환MaskToImage
생성 범위 지정SetLatentNoiseMask
KSamplerKSampler
이미지 저장 · ch11_soft_mask_maskSaveImage
VAE 디코드VAEDecode
이미지 저장 · ch11_soft_mask_decodedSaveImage
마스크된 이미지 합성ImageCompositeMasked
이미지 저장 · ch11_soft_mask_finalSaveImage
순서출발 출력도착 입력
1체크포인트 로드
CLIP →
긍정 프롬프트
clip
2체크포인트 로드
CLIP →
부정 프롬프트
clip
3체크포인트 로드
모델 →
KSampler
모델
4긍정 프롬프트
조건 →
KSampler
긍정
5부정 프롬프트
조건 →
KSampler
부정
6생성 범위 지정
잠재 데이터 →
KSampler
잠재 입력
7KSampler
잠재 데이터 →
VAE 디코드
잠재 데이터
8체크포인트 로드
VAE →
VAE 디코드
vae
9VAE 디코드
이미지 →
이미지 저장 · ch11_soft_mask_decoded
이미지
10이미지 로드 · 입력 사진
이미지 →
VAE 인코드
이미지
11체크포인트 로드
VAE →
VAE 인코드
vae
12이미지 로드 · 입력 사진
이미지 →
마스크된 이미지 합성
바탕 그림(destination)
13VAE 디코드
이미지 →
마스크된 이미지 합성
얹을 그림(source)
14흐린 그림을 마스크로
마스크 →
마스크된 이미지 합성
마스크
15마스크된 이미지 합성
이미지 →
이미지 저장 · ch11_soft_mask_final
이미지
16흐린 그림을 마스크로
마스크 →
마스크를 이미지로 변환
마스크
17마스크를 이미지로 변환
이미지 →
이미지 저장 · ch11_soft_mask_mask
이미지
18이미지 로드 · RGBA 마스크
마스크 →
마스크 범위 넓히기
마스크
19마스크 범위 넓히기
마스크 →
마스크를 이미지로
마스크
20마스크를 이미지로
이미지 →
마스크 경계 부드럽게
이미지
21마스크 경계 부드럽게
이미지 →
흐린 그림을 마스크로
이미지
22VAE 인코드
잠재 데이터 →
생성 범위 지정
잠재 데이터
23흐린 그림을 마스크로
마스크 →
생성 범위 지정
마스크
선택 실습 · 마스크 직접 그리기
  1. 원본 이미지 로드를 별도로 복제하고 그림을 오른쪽 클릭해 Open in MaskEditor | Image Canvas를 엽니다. 원본용 노드는 그대로 유지합니다.
  2. 왼쪽 마스크 펜을 선택합니다. 이미지에 색을 직접 칠하는 페인트 펜과 구별합니다. 처음에는 두께 70·불투명도 1·경도 1로 니트 안쪽을 채우고, 경계에서는 두께를 줄여 작업합니다.
  3. 휠로 확대하고 휠 버튼을 누른 채 끌어 화면을 이동합니다. 피부·머리카락을 포함하지 않도록 확인합니다. 지우개와 Ctrl+Z로 선택을 고칩니다.
  4. 저장(Save) 뒤 복제 노드의 MASK를 GrowMask에 연결해 제공 마스크 입력을 대신합니다. 확장·흐림을 거친 MASK가 생성 범위와 최종 합성으로 가는 경로는 유지합니다.
  5. 표시 덮개의 색과 실제 MASK 값은 다릅니다. MaskToImage → SaveImage로 실제 선택 범위를 봅니다. 화면의 덮개를 검정으로 표시했다고 MASK가 반전된 것은 아닙니다.
마스크 펜과 브러시 설정입니다. 직접 그린 마스크는 제공 마스크와 달라질 수 있습니다.
마스크 펜과 브러시 설정입니다. 직접 그린 마스크는 제공 마스크와 달라질 수 있습니다. 그림을 누르면 큰 화면으로 열립니다.
제공 입력에서 만들어지는 부드러운 MASK 보기
현재 JSON이 출력한 MASK 확인 그림입니다. 불투명 흑백 PNG이므로 입력 RGBA 마스크 대신 넣지 마세요.
현재 JSON이 출력한 MASK 확인 그림입니다. 불투명 흑백 PNG이므로 입력 RGBA 마스크 대신 넣지 마세요. 그림을 누르면 큰 화면으로 열립니다.

4. 정상 결과 확인

파란 니트가 보이고 얼굴은 원본과 유지되는지 확인합니다. 목선에 피부 조각이나 크림색 띠가 생기면 완료로 보지 말고 아래 문제 해결을 확인하세요. 마스크가 정확히 0인 곳은 원본을 보존하며 회색 경계는 섞입니다.

부드러운 마스크로 다시 생성한 파란 니트입니다. 원본과 비교해 목선·어깨·마스크 밖의 얼굴을 확인하세요.
부드러운 마스크로 다시 생성한 파란 니트입니다. 원본과 비교해 목선·어깨·마스크 밖의 얼굴을 확인하세요. 그림을 누르면 큰 화면으로 열립니다.

5. 자주 생기는 문제

상황확인할 곳
얼굴이나 배경도 달라져요두 이미지 로드의 역할, SetLatentNoiseMask 연결, 최종 합성의 destination·source·mask를 확인합니다.
목선이 번지거나 피부에 파란색이 묻어요마스크 확장 범위가 피부까지 들어갔는지 확인합니다. 제공 마스크와 달리 그렸다면 결과도 달라집니다. mask 확인 그림과 원본을 함께 보세요.
흑백 그림을 넣었는데 MASK가 비어요입력은 RGBA 마스크 PNG입니다. 저장된 불투명 흑백 MASK 그림은 관찰용입니다.
목선에 피부 조각이나 테두리가 남아요마스크의 흰 부분이 필요한 옷 경계를 포함하는지, 피부까지 넓어지지 않았는지 확인합니다. 마스크 확대만 반복하지 말고 제공 RGBA 입력과 확장·흐림 값, 최종 합성의 바탕·얹을 그림을 함께 확인합니다.

공통 오류와 용어는 용어·문제 해결에서 찾을 수 있습니다.

공식 참고 자료

준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.