ComfyUI 아웃페인팅|배경을 좌우로 자연스럽게 확장하기

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.0sd_xl_base_1.0.safetensorsComfyUI\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_.png
  • guide/ch12_edge_prefill_prepared_00001_.png
  • guide/ch12_edge_prefill_decoded_00001_.png
  • guide/ch12_edge_prefill_final_00001_.png
1024×1024 원본 → 양옆 256 공간 추가 → 가장자리 배경 띠로 초기 바탕 채우기
초기 바탕 → VAE 인코드 + 패딩 MASK → 샘플링 → 디코드 → 최종 합성 1536×1024

3. 따라 하기

  1. 실습 JSON을 새 작업에서 열고 준비물의 1024×1024 원본 PNG를 이미지 로드에 업로드합니다. Base 체크포인트를 선택합니다.
  2. ImagePadForOutpaint에서 left=256, right=256, top=0, bottom=0, feathering=128을 확인합니다. 전체 크기는 1536×1024입니다.
  3. 좌우 배경 띠를 준비합니다. ImageCropV2 두 개는 왼쪽 x=0, 오른쪽 x=992에서 각각 너비 32·높이 1024·y=0 영역을 자릅니다. 제공 JSON에서 영역 값을 확인하세요.
  4. 각 띠를 ImageScale의 bilinear로 256×1024까지 늘립니다. 첫 합성은 왼쪽 x=0, 다음 합성은 오른쪽 x=1280에 놓습니다. 두 합성은 mask 연결 없이 띠 전체를 올려 초기 바탕을 만듭니다.
  5. 초기 바탕을 VAEEncode로 인코드하고, 패딩이 만든 MASK를 SetLatentNoiseMask에 넣습니다. 회색으로 비운 입력 대신 주변 색·밝기를 참고하는 출발 이미지입니다.
  6. seed=20261010 / fixed / 30 steps / CFG 5 / euler / normal / denoise 0.6을 확인해 실행합니다. 마지막 합성은 destination=초기 바탕, source=디코드, mask=패딩 MASK입니다.
  7. 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
KSamplerseed = 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_maskSaveImage
왼쪽 초기 배경 넣기ImageCompositeMasked
오른쪽 초기 배경 넣기ImageCompositeMasked
VAE 인코드VAEEncode
이미지 저장 · ch12_edge_prefill_preparedSaveImage
잠재 노이즈 마스크 설정SetLatentNoiseMask
KSamplerKSampler
VAE 디코드VAEDecode
이미지 저장 · ch12_edge_prefill_decodedSaveImage
마스크된 이미지 합성ImageCompositeMasked
이미지 저장 · ch12_edge_prefill_finalSaveImage
순서출발 출력도착 입력
1체크포인트 로드
CLIP →
긍정 프롬프트
clip
2체크포인트 로드
CLIP →
부정 프롬프트
clip
3체크포인트 로드
모델 →
KSampler
모델
4긍정 프롬프트
조건 →
KSampler
긍정
5부정 프롬프트
조건 →
KSampler
부정
6잠재 노이즈 마스크 설정
잠재 데이터 →
KSampler
잠재 입력
7KSampler
잠재 데이터 →
VAE 디코드
잠재 데이터
8체크포인트 로드
VAE →
VAE 디코드
vae
9VAE 디코드
이미지 →
이미지 저장 · ch12_edge_prefill_decoded
이미지
10오른쪽 초기 배경 넣기
이미지 →
VAE 인코드
이미지
11체크포인트 로드
VAE →
VAE 인코드
vae
12오른쪽 초기 배경 넣기
이미지 →
마스크된 이미지 합성
바탕 그림(destination)
13VAE 디코드
이미지 →
마스크된 이미지 합성
얹을 그림(source)
14아웃페인팅을 위한 이미지 패딩
마스크 →
마스크된 이미지 합성
마스크
15마스크된 이미지 합성
이미지 →
이미지 저장 · ch12_edge_prefill_final
이미지
16아웃페인팅을 위한 이미지 패딩
마스크 →
마스크를 이미지로 변환
마스크
17마스크를 이미지로 변환
이미지 →
이미지 저장 · ch12_edge_prefill_mask
이미지
18이미지 로드 · 입력 사진
이미지 →
아웃페인팅을 위한 이미지 패딩
이미지
19오른쪽 초기 배경 넣기
이미지 →
이미지 저장 · ch12_edge_prefill_prepared
이미지
20VAE 인코드
잠재 데이터 →
잠재 노이즈 마스크 설정
잠재 데이터
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을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.