ComfyUI 왕초보 가이드 26 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (22.9MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
13장의 2배 확대에 낮은 강도의 재생성을 연결하고, 구도와 인상을 유지하며 세부 표현을 다듬습니다.
1. 만들 결과
13장은 Real-ESRGAN으로 픽셀 수를 늘렸습니다. 이번에는 그 확대 결과를 SDXL Base로 한 번 더 생성해 머리카락과 니트의 세부 표현을 소폭 다듬습니다. 얼굴 위치·시선·닫힌 입·회색 배경·크림색 니트와 큰 주름을 유지하는 것이 목표입니다.



페이지에서는 큰 사진을 줄여 보여 주므로 차이가 작아 보일 수 있습니다. 아래 부분 비교는 모두 2048 결과의 같은 좌표를 같은 크기로 잘라 나란히 놓았습니다. 새로 선명화하거나 확대해 차이를 부풀리지 않았습니다.


여기서 니트의 코는 실이 고리처럼 엮인 한 단위를 뜻합니다. 아래에서는 반복되는 실 고리와 그 사이의 어두운 틈을 비교합니다.


1024 원본 → Real-ESRGAN 2배 확대 → 2048 비교 기준 저장
↳ VAE 인코드 → KSampler 낮은 denoise → VAE 디코드 → 2048 최종 결과 저장
| 용어 | 이 장에서의 뜻 |
|---|---|
| 업스케일 · upscale | 이미지의 가로·세로 픽셀 수를 늘립니다. 1024에서 2048은 각 변 2배, 총 픽셀 수 4배입니다. |
| 재생성 · img2img | 기존 이미지를 바탕으로 생성 모델이 다시 그립니다. 문장·seed·denoise를 사용하며 이미지 내용도 달라질 수 있습니다. |
| VAE 인코드 / 디코드 | 보이는 그림을 생성 모델의 계산용 잠재 데이터(LATENT)로 바꾸기 / 계산 결과를 다시 그림(IMAGE)으로 바꾸기입니다. |
| denoise · 노이즈 제거량 | 다시 그릴 때 원본 모습에서 벗어날 여지를 조절합니다. 0.15는 이미지의 15%를 수정하거나 품질을 15% 올린다는 뜻이 아닙니다. |
| Hires fix · 하이레스 픽스 | 작은 이미지 생성 → 확대 → img2img 재생성을 이어 쓰는 방식입니다. 특정 커스텀 노드 하나의 이름이 아닙니다. 이번에는 첫 생성이 끝난 13장 원본 PNG에서 이어갑니다. |
2. 준비물
13장의 RealESRGAN_x2plus.pth와 기존 SDXL Base를 재사용합니다. 기본 노드만 사용하므로 추가 커스텀 노드나 새 모델은 필요 없습니다.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| Real-ESRGAN 2배 | RealESRGAN_x2plus.pth | ComfyUI\models\upscale_models | 업스케일 모델 로드 | 13장 |
| SDXL Base 1.0 | sd_xl_base_1.0.safetensors | ComfyUI\models\checkpoints | 체크포인트 로드 | 4장 |
| 파일 | 보관 위치·역할 |
|---|---|
| ch26-refine.json (ZIP) | 일반 워크플로 JSON. 실습 폴더에 보관한 뒤 ComfyUI에서 엽니다. 확대 전부터 최종 저장까지 연결되어 있습니다. |
| ch26-input.png (ZIP) | ComfyUI/input에 넣을 1024×1024 원본입니다. 13장 입력과 같은 픽셀이며 26장에서 고르기 쉽게 이름을 붙였습니다. |
- 탐색기에서
ComfyUI/input을 먼저 엽니다. 다른 창에서 받은ch26-input.png를 복사한 뒤 input 창에 붙여 넣습니다. 파일을 복사한 다음 경로 문자를 다시 복사하지 않습니다. - ComfyUI를 열어 둔 상태에서 input에 새 파일을 넣었다면 현재 작업을 저장하고 F5로 새로고침합니다. 또는 이미지 로드 노드의 업로드할 파일 선택으로 받은 PNG를 지정합니다.
JSON은 노드·연결·설정·문장을 저장한 파일입니다. 모델과 입력 사진 자체를 모두 포함하지 않습니다. 링크가 글자로 열리면 오른쪽 클릭 → 다른 이름으로 링크 저장으로 .json 확장자를 유지하세요.
3. 따라 하기
A. 기본값으로 확대 후 재생성하기
- Ctrl+O로
ch26-refine.json을 엽니다. 아래 보기 맞춤으로 전체 그룹을 보고, 줌 컨트롤에서 확대해 숫자를 읽습니다. 오른쪽 그룹은 캔버스 모드 → 손을 선택해 빈 작업판을 끌어 이동할 수 있습니다. 이동 뒤에는 선택 모드로 돌아옵니다. - 01 원본·확대 모델에서 13장 원본 · 1024는
ch26-input.png, 2배 확대 모델은RealESRGAN_x2plus.pth를 선택합니다. 이미 확대된 2048 PNG를 이 원본 칸에 넣으면 다시 2배로 커지므로 기본 실습에서는 1024 원본을 사용합니다. - 03 생성 모델·문장 → 다시 그릴 SDXL Base에서
sd_xl_base_1.0.safetensors를 선택합니다. 긍정·부정 문장은 원본을 만들 때의 장면 설명을 유지했습니다. 인물·옷·배경을 바꾸는 새 문장은 추가하지 않습니다. - 04 전체 이미지 다시 생성 → 확대 후 재생성 · denoise에서 노이즈 제거량(denoise)을
0.15로 둡니다. 숫자를 두 번 클릭해 입력하고 Enter를 누릅니다. seed2026102601, 생성 후 제어fixed, steps24, CFG5, samplerdpmpp_2m, schedulerkarras를 유지합니다. - 상단 배치 수 1에서 실행을 한 번 누릅니다. 02 확대·비교 기준 → 비교 기준 · 확대만과 05 최종 2048 결과 → 완성 · 확대 후 재생성에 각각 이미지가 나올 때까지 기다립니다.
ComfyUI/output/guide에서ch26_d015_upscaled_…png와ch26_d015_refined_…png를 비교합니다. 두 파일 모두 2048×2048이어야 합니다. 뒤에 붙는 번호는 실행 횟수에 따라 달라집니다.
| 조절할 곳 | 기본값·역할 |
|---|---|
| 확대 모델 | RealESRGAN_x2plus.pth. 파일 자체가 2배 확대 모델이며 KSampler denoise로 배율을 정하지 않습니다. |
| 생성 모델 | sd_xl_base_1.0.safetensors. 확대 모델과 별개로 전체 이미지를 다시 그립니다. |
| KSampler | seed 2026102601 / fixed / 24 steps / CFG 5 / dpmpp_2m / karras / denoise 0.15 |
| 출력 크기 | 원본 1024×1024 → 확대 2048×2048 → 재생성 2048×2048. 재생성 단계에서 배율을 한 번 더 곱하지 않습니다. |
| 마스크·디테일러 | 이번에는 사용하지 않습니다. 25장의 부분 수정과 달리 전체 이미지가 재생성 대상입니다. |

B. 두 종류의 모델과 연결 구별하기
| 연결 | 이유 |
|---|---|
| LoadImage + UpscaleModelLoader → ImageUpscaleWithModel | 원본과 확대 모델로 먼저 2048 이미지를 만듭니다. 이 부분은 13장과 같습니다. |
| ImageUpscaleWithModel IMAGE → SaveImage + VAEEncode pixels | 같은 확대 결과를 비교용으로 저장하면서 재생성 입력으로 보냅니다. |
| VAEEncode LATENT → KSampler latent_image | KSampler는 IMAGE를 직접 받지 않으므로 잠재 데이터로 바꿔 전달합니다. EmptyLatentImage로 바꾸면 원본을 바탕으로 한 작업이 달라집니다. |
| SDXL MODEL·문장 조건 → KSampler | SDXL 체크포인트의 모델과 긍정·부정 문장을 사용합니다. Real-ESRGAN의 UPSCALE_MODEL 포트와 MODEL 포트는 서로 다른 종류입니다. |
| KSampler LATENT → VAEDecode → 최종 SaveImage | 새로 계산한 잠재 데이터를 그림으로 복원합니다. 인코드와 디코드는 같은 SDXL 로더의 VAE를 사용합니다. |
기존 10장 img2img와 같은 재생성 원리를 사용하되, 이번에는 먼저 확대한 2048 이미지를 입력으로 받습니다. Hires fix의 첫 번째 생성까지 매번 다시 할 필요는 없습니다. 완성한 원본 PNG를 보관해 두면 그 지점에서 확대와 두 번째 생성을 이어갈 수 있습니다.
제공 JSON의 전체 설정·프롬프트·노드 연결
| 설정할 노드 | 입력값 |
|---|---|
| 13장 원본 · 1024 · 입력 사진 | 입력 파일 = ch26-input.png |
| 2배 확대 모델 | 확대 모델 = RealESRGAN_x2plus.pth |
| 비교 기준 · 확대만 · ch26_d015_upscaled | 파일명 접두사 = guide/ch26_d015_upscaled |
| 다시 그릴 SDXL Base | 체크포인트 = sd_xl_base_1.0.safetensors |
| 확대 후 재생성 · denoise | seed = 2026102601 생성 후 제어 = fixed steps = 24 CFG = 5.0 sampler = dpmpp_2m scheduler = karras denoise = 0.15 |
| 완성 · 확대 후 재생성 · ch26_d015_refined | 파일명 접두사 = guide/ch26_d015_refined |
입력할 프롬프트 전문
원본 장면 유지 · 긍정
photographic beauty portrait of a beautiful 22-year-old adult woman, youthful face, delicate balanced facial features, bright expressive eyes, subtle closed-mouth smile, light natural makeup, one person, close-up head and shoulders, looking at the camera, shoulder-length dark hair, wearing a simple cream-colored knit sweater, soft diffused window light, plain light gray background, natural skin texture, realistic photography
피할 표현 · 부정
text, watermark, blurry, low quality, distorted face, duplicate person, mature-looking face, deep facial lines, heavy makeup, exaggerated smile, open mouth, visible teeth, hands in frame, plastic skin
현재 작업의 노드·연결 목록 · 노드 11개와 연결 14개
제공 JSON에 이미 들어 있는 노드와 연결입니다. 실수로 선을 바꿨을 때 이 목록과 대조하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 13장 원본 · 1024 · 입력 사진 | LoadImage |
| 2배 확대 모델 | UpscaleModelLoader |
| Real-ESRGAN · 2048로 확대 | ImageUpscaleWithModel |
| 비교 기준 · 확대만 · ch26_d015_upscaled | SaveImage |
| 다시 그릴 SDXL Base | CheckpointLoaderSimple |
| 원본 장면 유지 · 긍정 | CLIPTextEncode |
| 피할 표현 · 부정 | CLIPTextEncode |
| 확대 이미지를 잠재 데이터로 | VAEEncode |
| 확대 후 재생성 · denoise | KSampler |
| 재생성 결과를 그림으로 | VAEDecode |
| 완성 · 확대 후 재생성 · ch26_d015_refined | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 2배 확대 모델 확대 모델 → | Real-ESRGAN · 2048로 확대 확대 모델 |
| 2 | 13장 원본 · 1024 · 입력 사진 이미지 → | Real-ESRGAN · 2048로 확대 이미지 |
| 3 | Real-ESRGAN · 2048로 확대 이미지 → | 비교 기준 · 확대만 · ch26_d015_upscaled 이미지 |
| 4 | 다시 그릴 SDXL Base CLIP → | 원본 장면 유지 · 긍정 clip |
| 5 | 다시 그릴 SDXL Base CLIP → | 피할 표현 · 부정 clip |
| 6 | Real-ESRGAN · 2048로 확대 이미지 → | 확대 이미지를 잠재 데이터로 이미지 |
| 7 | 다시 그릴 SDXL Base VAE → | 확대 이미지를 잠재 데이터로 vae |
| 8 | 다시 그릴 SDXL Base 모델 → | 확대 후 재생성 · denoise 모델 |
| 9 | 원본 장면 유지 · 긍정 조건 → | 확대 후 재생성 · denoise 긍정 |
| 10 | 피할 표현 · 부정 조건 → | 확대 후 재생성 · denoise 부정 |
| 11 | 확대 이미지를 잠재 데이터로 잠재 데이터 → | 확대 후 재생성 · denoise 잠재 입력 |
| 12 | 확대 후 재생성 · denoise 잠재 데이터 → | 재생성 결과를 그림으로 잠재 데이터 |
| 13 | 다시 그릴 SDXL Base VAE → | 재생성 결과를 그림으로 vae |
| 14 | 재생성 결과를 그림으로 이미지 → | 완성 · 확대 후 재생성 · ch26_d015_refined 이미지 |
C. 같은 배율에서 보존과 변화를 확인하기
먼저 사진 전체를 같은 표시 크기로 비교해 얼굴 위치·시선·입·어깨선을 봅니다. 이어 같은 부위의 부분 PNG를 원래 크기로 열어 머리카락, 눈동자, 니트의 작은 코를 봅니다. 한쪽만 크게 띄우면 더 선명해졌다고 착각할 수 있습니다.


이 예제의 0.15는 큰 구도와 인상을 유지하면서 머리카락의 거친 선과 니트의 작은 틈을 조금 정돈하는 선택입니다. 원래 니트의 큰 짜임·주름은 따라가지만 모든 코의 모양을 그대로 복사하지는 않습니다. 변화가 작아도 목적에 맞으면 충분합니다. 작은 차이를 과장하려고 denoise를 계속 높이지 마세요.
선택 실습 · denoise 0.05 / 0.15 / 0.30 비교
세 JSON은 같은 원본·확대 모델·SDXL·문장·seed·steps·CFG·연결을 사용합니다. denoise와 저장 이름만 다릅니다. 앞서 재생성한 PNG를 다음 입력으로 넣지 말고, 매번 ch26-input.png에서 시작합니다.
| denoise | 워크플로 | 이번 입력에서의 판단 |
|---|---|---|
| 0.05 | ch26-denoise-005.json (ZIP) | 보수적인 대안. 확대 결과와 더 가깝고 변화가 작습니다. |
| 0.15 | ch26-refine.json (ZIP) | 기본 선택. 큰 얼굴 형태와 구도를 유지하면서 머리카락·니트 세부 표현을 소폭 다듬습니다. |
| 0.30 | ch26-denoise-030.json (ZIP) | 변화가 큰 대조군. 눈동자 안 밝은 점과 니트의 개별 코 모양이 더 달라져 보존 목표에는 덜 맞습니다. |






비교 순서는 기본 JSON 열기 → denoise 하나만 바꾸기 → 실행 → 같은 부위 비교입니다. 위 파일별 JSON을 열어 실행해도 됩니다. 비교용 결과는 각각 ch26_d005_refined_…png, ch26_d030_refined_…png로 저장됩니다.
전체 PNG: 0.05 전체 결과 (ZIP) · 0.30 전체 결과 (ZIP) . 얼굴·무늬 변화가 크다면 같은 원본에서 0.15 또는 0.05로 내려 비교합니다. 그래도 원래 특징 보존이 더 중요하다면 확대만 한 파일을 선택합니다. 0.30 결과를 보존에 성공한 대표 예제로 쓰지는 않습니다.
D. 다음 작업에 재사용하기
- 선택한 설정을 그래프 → 내보내기로
ch26-my-refine.json에 보관합니다. 원본 PNG도 함께 보관합니다. - 다음에는 JSON을 열어 원본과 두 모델을 선택합니다. 먼저 원본 크기를 봅니다. 이 2배 모델에 2048 원본을 넣으면 4096 출력이 되어 이번보다 훨씬 무거운 작업이 됩니다.
- 다른 사진을 쓰면 그 장면과 맞는 문장을 넣고 낮은 denoise부터 비교합니다. 얼굴·글자·로고·정확한 무늬의 보존이 중요하면 확대만 한 결과도 함께 남깁니다.
Hires fix·타일 재생성·VAE 타일의 차이
Hires fix는 작은 이미지 생성 뒤 확대·재생성을 잇는 방식입니다. 이번 JSON은 이미 생성된 PNG에서 시작하므로, 첫 생성용 KSampler를 하나 더 넣지 않아도 같은 흐름을 이어갈 수 있습니다. 픽셀 이미지 대신 잠재 데이터를 확대하는 구성도 있지만 이번 실습은 Real-ESRGAN으로 픽셀 이미지를 확대합니다.
타일(tile)은 큰 이미지를 나눈 작은 조각입니다. 타일별 재생성은 조각마다 확산 모델로 다시 그리는 방식이고, VAE 타일 처리는 그림과 잠재 데이터 사이의 변환을 나누는 방식입니다. VAE만 나누었다고 KSampler의 전체 이미지 계산도 자동으로 타일 생성이 되는 것은 아닙니다. 이 장의 기본 JSON은 전체 2048 이미지를 하나의 KSampler에 보냅니다.
4. 정상 결과 확인
| 확인할 것 | 완성 기준 |
|---|---|
| 크기와 두 파일 | 확대만 한 파일과 재생성 파일이 모두 2048×2048입니다. 파일 생성 성공 다음에 실제 내용을 확인합니다. |
| 큰 구도·인상 | 얼굴 위치·눈 방향·닫힌 입·어깨선·회색 배경이 유지되는지 봅니다. 다른 인물처럼 느껴지면 원본 보존 목표에 맞지 않습니다. |
| 머리·니트 | 거친 경계가 자연스럽게 연결됐는지, 새 무늬나 과한 질감이 생기지 않았는지 같은 부위를 비교합니다. |
| 눈·피부 | 눈동자 속 밝은 점, 속눈썹, 입술, 피부가 뭉개지거나 인위적으로 매끈해지지 않았는지 봅니다. |
| 선택 | 재생성 결과가 목적에 더 맞으면 사용합니다. 원본 특징이 더 중요하거나 개선이 불명확하면 확대만 한 결과를 사용해도 됩니다. |
세 강도를 실제 실행했고 모든 확대 기준 이미지는 같았습니다. 확대 기준은 13장의 Real-ESRGAN 결과와 RGB 픽셀까지 같습니다. 기본 작업을 실제 화면에서 복원해 다시 실행한 확대·재생성 결과도 이 장의 기본 결과와 RGB가 같았습니다. 이 비교는 구도와 품질 판단을 돕는 예제이며, 모든 이미지에서 같은 효과를 보장하는 값은 아닙니다.
5. 자주 생기는 문제
| 증상 | 원인 구별·해결 |
|---|---|
| 2048로 커졌는데 차이가 작아요 | 둘 다 같은 크기로 저장되는 것이 정상입니다. 낮은 denoise의 차이는 작을 수 있습니다. 같은 머리카락·니트·눈 부위를 비교하고 개선이 없으면 확대만 한 파일을 사용합니다. |
| 얼굴이나 니트 무늬가 달라졌어요 | 이번에는 마스크 없이 전체 이미지를 다시 생성합니다. denoise를 낮추고 원본 장면과 충돌하는 문장을 빼세요. 정확히 같은 얼굴·무늬가 필요하면 재생성을 생략합니다. |
| denoise 0이면 확대 결과와 완전히 같나요? | KSampler의 새 생성은 생략되지만 VAE 인코드·디코드 변환은 남습니다. 실제 0 진단에서도 확대만 한 PNG와 픽셀이 달랐습니다. 원래 확대 픽셀은 비교 기준 · 확대만의 저장 파일에 있습니다. |
| 출력이 4096이고 메모리가 부족해요 | 이미 확대된 2048 PNG를 원본 칸에 넣었는지 확인합니다. 기본 입력은 1024 ch26-input.png이고 확대 모델이 한 번 2배로 만듭니다. |
| KSampler에서 GPU 메모리가 부족해요 | 배치를 1로 하고 불필요한 동시 GPU 작업을 정리합니다. 더 작은 작업 크기를 선택하려면 확대 뒤·VAE 인코드 앞에 ImageScale을 넣어 줄일 수 있지만, 크기가 달라진 결과는 새로 판단해야 합니다. VAE 타일 처리만으로 KSampler 메모리 문제가 해결되는 것은 아닙니다. |
| VAE 인코드·디코드에서만 메모리가 부족해요 | 부족한 단계가 KSampler인지 VAE인지 구별합니다. VAE Encode (Tiled)·VAE Decode (Tiled)는 변환 단계를 나누는 선택지입니다. 기본 JSON은 일반 VAE 노드로 검증했으므로 바꾼 경우 색·경계·출력도 다시 확인합니다. |
| 확대 모델을 체크포인트 로더에서 못 찾아요 | RealESRGAN_x2plus.pth는 models/upscale_models와 UpscaleModelLoader, SDXL 파일은 models/checkpoints와 CheckpointLoaderSimple에 사용합니다. |
| 얼굴이 새로 생성돼 원본 구도가 사라져요 | KSampler latent_image가 VAEEncode의 LATENT인지, denoise가 1.00으로 바뀌지 않았는지 확인합니다. 이 장 기본은 0.15입니다. |
| 강도만 바꿨는데 앞 단계가 빨리 지나가요 | 같은 입력·확대 설정의 계산을 ComfyUI가 재사용할 수 있습니다. 재생성 전의 기준 이미지가 같으면 정상입니다. |
| 같은 비교인데 실행마다 다른 그림이에요 | seed와 생성 후 제어 fixed를 확인하고, 재생성한 출력 대신 처음 받은 원본 PNG를 입력했는지 봅니다. |
공식 참고 자료
ComfyUI 제작자 · 두 단계 생성(Hires fix) · ComfyUI 공식 · 이미지 확대. 이 장은 기존 SDXL·Real-ESRGAN과 현재 설치된 기본 노드로 구성했습니다.
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.