ComfyUI 왕초보 가이드 12 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (5.2MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
가장자리 배경을 초기 바탕으로 활용해 양옆 256픽셀씩 확장한 1536×1024 이미지를 만듭니다.
1. 만들 결과
가장자리 배경을 초기 바탕으로 활용해 양옆 256픽셀씩 확장한 1536×1024 이미지를 만듭니다.
아웃페인팅은 그림 바깥을 생성해 넓히는 작업입니다. 패딩은 바깥쪽에 빈 공간을 더하는 준비, feathering(페더링)은 경계에서 마스크가 서서히 바뀌게 하는 처리입니다. x는 왼쪽에서부터, y는 위쪽에서부터의 픽셀 위치입니다. 합성은 마스크에 따라 바탕 그림과 새 그림을 섞는 작업입니다.
2. 준비물
ComfyUI를 실행한 상태에서 시작합니다. 아래 모델이 이미 같은 폴더에 있으면 다시 받을 필요가 없습니다.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| SDXL Base 1.0 | sd_xl_base_1.0.safetensors | ComfyUI\models\checkpoints | 체크포인트 로드 | 4장 |
| 역할 | 파일 | 정확한 이름 |
|---|---|---|
| 실습 JSON | 실습 JSON 내려받기 (ZIP) | ch12-outpaint-edge-prefill.json |
| 입력 PNG | 입력 PNG 내려받기 (ZIP) | ch05_first_portrait_v2_00001_.png |
파일 링크는 이 장의 실습 자료 ZIP으로 연결됩니다. 한 번 내려받아 압축을 푼 뒤 표에 적힌 JSON·PNG 파일을 선택하세요. JSON은 Ctrl+O로 열고, 입력 PNG는 해당 LoadImage에서 업로드합니다.
이번 기본 JSON이 저장할 파일
설치 폴더의 ComfyUI/output 아래에 다음 접두사로 저장됩니다. 뒤에는 자동 번호와 .png가 붙습니다. 이미 같은 이름이 있으면 번호가 올라갑니다.
guide/ch12_edge_prefill_mask_00001_.pngguide/ch12_edge_prefill_prepared_00001_.pngguide/ch12_edge_prefill_decoded_00001_.pngguide/ch12_edge_prefill_final_00001_.png
초기 바탕 → VAE 인코드 + 패딩 MASK → 샘플링 → 디코드 → 최종 합성 1536×1024
3. 따라 하기
- 실습 JSON을 새 작업에서 열고 준비물의 1024×1024 원본 PNG를 이미지 로드에 업로드합니다. Base 체크포인트를 선택합니다.
- ImagePadForOutpaint에서 left=256, right=256, top=0, bottom=0, feathering=128을 확인합니다. 전체 크기는 1536×1024입니다.
- 좌우 배경 띠를 준비합니다. ImageCropV2 두 개는 왼쪽 x=0, 오른쪽 x=992에서 각각 너비 32·높이 1024·y=0 영역을 자릅니다. 제공 JSON에서 영역 값을 확인하세요.
- 각 띠를 ImageScale의 bilinear로 256×1024까지 늘립니다. 첫 합성은 왼쪽 x=0, 다음 합성은 오른쪽 x=1280에 놓습니다. 두 합성은 mask 연결 없이 띠 전체를 올려 초기 바탕을 만듭니다.
- 초기 바탕을 VAEEncode로 인코드하고, 패딩이 만든 MASK를 SetLatentNoiseMask에 넣습니다. 회색으로 비운 입력 대신 주변 색·밝기를 참고하는 출발 이미지입니다.
- seed=20261010 / fixed / 30 steps / CFG 5 / euler / normal / denoise 0.6을 확인해 실행합니다. 마지막 합성은 destination=초기 바탕, source=디코드, mask=패딩 MASK입니다.
- prepared는 띠만 늘린 초기 바탕, decoded는 생성 결과, final은 원본과 합성한 최종 결과입니다. final을 보고 확장 경계와 중앙 인물, 이미지 크기를 확인합니다. 준비 단계만 끝난 그림을 생성 완료로 판단하지 마세요.
이번 실습의 설정
| 설정할 노드 | 입력값 |
|---|---|
| 체크포인트 로드 | 체크포인트 = sd_xl_base_1.0.safetensors |
| 이미지 로드 · 입력 사진 | 입력 파일 = ch05_first_portrait_v2_00001_.png |
| 아웃페인팅을 위한 이미지 패딩 | left = 256 top = 0 right = 256 bottom = 0 feathering = 128 |
| 왼쪽 배경 띠 자르기 | x = 0 y = 0 width = 32 height = 1024 |
| 오른쪽 배경 띠 자르기 | x = 992 y = 0 width = 32 height = 1024 |
| 왼쪽 띠 늘리기 | upscale_method = bilinear 너비 = 256 높이 = 1024 crop = disabled |
| 오른쪽 띠 늘리기 | upscale_method = bilinear 너비 = 256 높이 = 1024 crop = disabled |
| 이미지 저장 · ch12_edge_prefill_mask | 파일명 접두사 = guide/ch12_edge_prefill_mask |
| 왼쪽 초기 배경 넣기 | x = 0 y = 0 resize_source = false |
| 오른쪽 초기 배경 넣기 | x = 1280 y = 0 resize_source = false |
| 이미지 저장 · ch12_edge_prefill_prepared | 파일명 접두사 = guide/ch12_edge_prefill_prepared |
| KSampler | seed = 20261010 생성 후 제어 = fixed steps = 30 CFG = 5.0 sampler = euler scheduler = normal denoise = 0.6 |
| 이미지 저장 · ch12_edge_prefill_decoded | 파일명 접두사 = guide/ch12_edge_prefill_decoded |
| 마스크된 이미지 합성 | x = 0 y = 0 resize_source = false |
| 이미지 저장 · ch12_edge_prefill_final | 파일명 접두사 = guide/ch12_edge_prefill_final |
입력할 프롬프트 전문
긍정 프롬프트
wide portrait photograph of an adult woman in a cream knitted sweater, seamless smooth gray studio background, soft diffused lighting, smooth continuous tonal gradient, realistic studio photograph
부정 프롬프트
window, curtains, drapes, window frame, vertical stripes, vertical line, wall corner, border, seam, panels, extra person, text, watermark
직접 구성하기 · 노드 21개와 연결 29개
빈 작업판을 두 번 클릭해 아래 기술 이름으로 검색하고 노드를 추가합니다. 값 입력 뒤, 오른쪽 출력 점을 왼쪽 입력 점으로 끌어 연결하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 체크포인트 로드 | CheckpointLoaderSimple |
| 이미지 로드 · 입력 사진 | LoadImage |
| 긍정 프롬프트 | CLIPTextEncode |
| 부정 프롬프트 | CLIPTextEncode |
| 아웃페인팅을 위한 이미지 패딩 | ImagePadForOutpaint |
| 왼쪽 배경 띠 자르기 | ImageCropV2 |
| 오른쪽 배경 띠 자르기 | ImageCropV2 |
| 마스크를 이미지로 변환 | MaskToImage |
| 왼쪽 띠 늘리기 | ImageScale |
| 오른쪽 띠 늘리기 | ImageScale |
| 이미지 저장 · ch12_edge_prefill_mask | SaveImage |
| 왼쪽 초기 배경 넣기 | ImageCompositeMasked |
| 오른쪽 초기 배경 넣기 | ImageCompositeMasked |
| VAE 인코드 | VAEEncode |
| 이미지 저장 · ch12_edge_prefill_prepared | SaveImage |
| 잠재 노이즈 마스크 설정 | SetLatentNoiseMask |
| KSampler | KSampler |
| VAE 디코드 | VAEDecode |
| 이미지 저장 · ch12_edge_prefill_decoded | SaveImage |
| 마스크된 이미지 합성 | ImageCompositeMasked |
| 이미지 저장 · ch12_edge_prefill_final | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 체크포인트 로드 CLIP → | 긍정 프롬프트 clip |
| 2 | 체크포인트 로드 CLIP → | 부정 프롬프트 clip |
| 3 | 체크포인트 로드 모델 → | KSampler 모델 |
| 4 | 긍정 프롬프트 조건 → | KSampler 긍정 |
| 5 | 부정 프롬프트 조건 → | KSampler 부정 |
| 6 | 잠재 노이즈 마스크 설정 잠재 데이터 → | KSampler 잠재 입력 |
| 7 | KSampler 잠재 데이터 → | VAE 디코드 잠재 데이터 |
| 8 | 체크포인트 로드 VAE → | VAE 디코드 vae |
| 9 | VAE 디코드 이미지 → | 이미지 저장 · ch12_edge_prefill_decoded 이미지 |
| 10 | 오른쪽 초기 배경 넣기 이미지 → | VAE 인코드 이미지 |
| 11 | 체크포인트 로드 VAE → | VAE 인코드 vae |
| 12 | 오른쪽 초기 배경 넣기 이미지 → | 마스크된 이미지 합성 바탕 그림(destination) |
| 13 | VAE 디코드 이미지 → | 마스크된 이미지 합성 얹을 그림(source) |
| 14 | 아웃페인팅을 위한 이미지 패딩 마스크 → | 마스크된 이미지 합성 마스크 |
| 15 | 마스크된 이미지 합성 이미지 → | 이미지 저장 · ch12_edge_prefill_final 이미지 |
| 16 | 아웃페인팅을 위한 이미지 패딩 마스크 → | 마스크를 이미지로 변환 마스크 |
| 17 | 마스크를 이미지로 변환 이미지 → | 이미지 저장 · ch12_edge_prefill_mask 이미지 |
| 18 | 이미지 로드 · 입력 사진 이미지 → | 아웃페인팅을 위한 이미지 패딩 이미지 |
| 19 | 오른쪽 초기 배경 넣기 이미지 → | 이미지 저장 · ch12_edge_prefill_prepared 이미지 |
| 20 | VAE 인코드 잠재 데이터 → | 잠재 노이즈 마스크 설정 잠재 데이터 |
| 21 | 아웃페인팅을 위한 이미지 패딩 마스크 → | 잠재 노이즈 마스크 설정 마스크 |
| 22 | 이미지 로드 · 입력 사진 이미지 → | 왼쪽 배경 띠 자르기 이미지 |
| 23 | 왼쪽 배경 띠 자르기 이미지 → | 왼쪽 띠 늘리기 이미지 |
| 24 | 이미지 로드 · 입력 사진 이미지 → | 오른쪽 배경 띠 자르기 이미지 |
| 25 | 오른쪽 배경 띠 자르기 이미지 → | 오른쪽 띠 늘리기 이미지 |
| 26 | 아웃페인팅을 위한 이미지 패딩 이미지 → | 왼쪽 초기 배경 넣기 바탕 그림(destination) |
| 27 | 왼쪽 띠 늘리기 이미지 → | 왼쪽 초기 배경 넣기 얹을 그림(source) |
| 28 | 왼쪽 초기 배경 넣기 이미지 → | 오른쪽 초기 배경 넣기 바탕 그림(destination) |
| 29 | 오른쪽 띠 늘리기 이미지 → | 오른쪽 초기 배경 넣기 얹을 그림(source) |
초기 바탕과 최종 결과 구별하기

이 바탕으로 KSampler를 실행한 뒤 아래 정상 결과 확인의 final을 봅니다. 배경이 복잡한 입력에서는 단순히 띠를 늘리는 준비 자체가 적합하지 않을 수 있습니다.
4. 정상 결과 확인
final이 1536×1024이고 좌우 배경에 뚜렷한 단절이 없는지 확인합니다. feathering=128은 원본 안쪽 일부까지 수정에 사용합니다. 검정 중앙부와 얼굴은 원본을 보존하며 전체 원본 영역을 무조건 그대로 두는 구성은 아닙니다.

5. 자주 생기는 문제
| 상황 | 확인할 곳 |
|---|---|
| 인물이나 물체가 옆으로 늘어났어요 | 잘라 쓰는 양쪽 가장자리 32픽셀에 물체가 들어 있는지 확인합니다. 이 예제는 가장자리가 배경인 제공 사진을 기준으로 합니다. |
| 회색 빈 칸이나 초기 바탕만 보여요 | prepared와 final 저장 노드를 구별합니다. 최종 생성·합성 경로의 완료 여부를 확인하세요. |
| 다른 크기의 사진에서 안 맞아요 | 자르기·늘리기·합성 위치가 모두 1024×1024 입력 기준입니다. 우선 제공 입력으로 실행하고 다른 크기는 각 위치를 함께 다시 계산해야 합니다. |
| 확장 경계에 밝기 띠가 보여요 | prepared의 좌우 바탕이 원본 가장자리와 이어지는지 먼저 봅니다. 최종 합성 MASK와 feathering 값을 확인하세요. feathering만 높이면 항상 해결되는 것은 아닙니다. |
공통 오류와 용어는 용어·문제 해결에서 찾을 수 있습니다.
공식 참고 자료
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.