ComfyUI 왕초보 가이드 21 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (6.4MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
픽셀 아트 화풍과 어두운 숲·따뜻한 창문 불빛을 함께 표현하고, 두 LoRA 중 어느 쪽의 강도를 바꿀지 판단합니다.
1. 만들 결과
이번 목표는 숲 속 오두막 한 채, 네모난 색 면으로 표현한 화풍, 어두운 주변과 대비되는 따뜻한 창문 불빛입니다. 20장의 픽셀 아트 LoRA를 A로, 새로 추가할 명암용 Offset LoRA를 B로 부르겠습니다. 기본 실습은 검증한 두 강도로 한 장을 완성하는 과정입니다.

| 이번 LoRA | 담당하는 표현 | 모델 강도 |
|---|---|---|
| A · pixel-art-xl | 20장에서 사용한 파일입니다. 네모난 색 면과 계단 모양 윤곽을 살리는 화풍을 더합니다. | 0.6 |
| B · SDXL Offset Example | 명암 범위를 조절하는 SDXL Base용 보조 파일입니다. 이번에는 어두운 숲과 밝은 조명의 차이를 읽는 데 사용합니다. | 0.5 |
명암은 밝고 어두운 정도, 대비(콘트라스트)는 밝은 곳과 어두운 곳 사이의 차이입니다. 그림 전체를 어둡게 만드는 것만으로 좋은 명암이 되지는 않습니다. 창문·문·지붕처럼 알아볼 부분이 남아 있는지도 함께 봅니다.
Base → A 화풍 LoRA → B 명암 LoRA → KSampler 한 번 → 결과 한 장
이처럼 앞 출력을 다음 입력으로 잇는 것을 직렬 연결이라고 합니다. 두 장을 따로 만들어 합성하는 방식이 아니라, 두 추가 학습을 반영한 모델로 한 번 생성합니다. LoRA 두 개가 있다고 생성 노드도 두 개 필요한 것은 아닙니다.
20장의 코기 대신 어두운 숲 장면을 쓰는 이유는 B의 명암 영향을 보기 쉽기 때문입니다. 21장 안에서 비교할 때는 주제·문장·seed·모델·생성값을 고정합니다. 20장 코기와 21장 오두막의 차이를 LoRA B의 효과로 비교하지 않습니다.
2. 준비물
기존 SDXL Base와 pixel-art-xl을 그대로 사용합니다. 새 모델은 B용 파일 하나이며 기본 LoraLoader 두 개로 진행합니다. 커스텀 노드 설치나 입력 PNG는 필요 없습니다.
| 모델 | 공식 파일·다운로드 위치 | 설치 폴더 안에 넣을 곳 | 선택할 노드 | 처음 사용 |
|---|---|---|---|---|
| SDXL Base 1.0 | sd_xl_base_1.0.safetensors | ComfyUI\models\checkpoints | 체크포인트 로드 | 4장 |
| Pixel Art XL 화풍 LoRA | pixel-art-xl.safetensors | ComfyUI\models\loras | LoRA 로드 | 20장 |
| SDXL Offset Example 명암 LoRA | sd_xl_offset_example-lora_1.0.safetensors | ComfyUI\models\loras | LoRA 로드 | 21장 |
- Stability AI 공식 Offset LoRA 내려받기에서
sd_xl_offset_example-lora_1.0.safetensors를 받습니다. 이미 넣었다면 건너뜁니다. - 탐색기에서
ComfyUI/models/loras를 먼저 엽니다. 다른 창에서 받은 파일을 복사해 붙여 넣습니다. 20장의pixel-art-xl.safetensors도 같은 폴더에 둡니다. - 작업을 저장한 뒤 ComfyUI 브라우저를 새로고침(F5)하고, B LoRA에서 새 파일을 선택합니다. 목록에 없으면 파일명과 폴더를 확인하고 ComfyUI 서버를 다시 시작합니다.
| 기본 실습 파일 | 담긴 내용 |
|---|---|
| ch21-combined.json (ZIP) | 노드 9개·연결 13개·두 LoRA·프롬프트·검증한 기본 강도 |
JSON은 작업 구성을 보관하며 모델 파일을 포함하지 않습니다. 링크가 글자로 열리면 오른쪽 클릭 → 다른 이름으로 링크 저장으로 .json을 유지합니다. 기존 20장은 그대로 남기고 새 JSON으로 시작하세요.
3. 따라 하기
A. 두 LoRA로 한 장 완성하기
- 기본 작업을 엽니다. ComfyUI에서 Ctrl+O →
ch21-combined.json을 선택합니다. 왼쪽 위 그래프 → 다른 이름으로 저장에서ch21-my-combined라는 이름으로 보관합니다. - 모델을 선택합니다. 01 두 LoRA 연결 그룹의 SDXL Base는
sd_xl_base_1.0.safetensors, A 화풍 LoRA는pixel-art-xl.safetensors, B 명암 LoRA는sd_xl_offset_example-lora_1.0.safetensors입니다. - 두 강도를 맞춥니다. A의 모델 강도는
0.6, B의 모델 강도는0.5입니다. 두 노드의 CLIP 강도는 모두1.0으로 둡니다. 숫자를 두 번 클릭해 입력한 뒤 Enter를 누릅니다. - 끝까지 이어진 연결을 봅니다. Base의 MODEL·CLIP → A의 모델·clip 입력 → A의 MODEL·CLIP → B의 모델·clip 입력 순서입니다. B의 MODEL이 생성(KSampler)으로, B의 CLIP이 긍정·부정 문장 두 노드로 나가야 합니다. VAE는 Base에서 그림으로 변환(VAE 디코드)으로 직접 연결합니다.
- 생성값을 유지합니다. seed
20261021, 생성 후 제어fixed, 크기1024 × 1024, steps28, CFG6, samplerdpmpp_2m, schedulerkarras, denoise1.0입니다. 상단 배치 수(요청 수)와 이미지 크기 노드의 배치 크기는 모두1로 둡니다. - 실행을 한 번 누릅니다. 결과 저장 노드에 오두막이 나오면 숲·창문·지붕을 함께 봅니다. 파일은
ComfyUI/output/guide/ch21_combined_…png에 저장됩니다. 뒤 자동 번호는 기존 저장 파일 수에 따라 달라집니다.

두 파일 모두 그림 생성 모델 쪽 가중치만 포함하므로 이번 조합에서는 CLIP 강도 변경으로 문장 해석의 추가 효과가 생기지 않습니다. 일반적인 연결 구조를 익히도록 CLIP도 A → B → 두 문장 노드로 연결하고 1.0을 유지합니다. CLIP 가중치가 있는 다른 LoRA에도 같은 설명을 그대로 적용하지 마세요.
B 제작자는 contrasts라는 단어가 효과에 영향을 줄 수 있다고 안내합니다. 제공 긍정 문장에 이미 들어 있으며, A만·B만·둘 다 끈 비교에도 같은 문장을 사용합니다. 이 단어를 적는 것만으로 B가 로드되지는 않습니다. 파일 적용은 LoRA 노드에서 합니다.
기본 JSON의 정확한 설정·프롬프트·연결
| 설정할 노드 | 입력값 |
|---|---|
| SDXL Base | 체크포인트 = sd_xl_base_1.0.safetensors |
| A 화풍 LoRA | LoRA = pixel-art-xl.safetensors 모델 강도 = 0.6 CLIP 강도 = 1 |
| B 명암 LoRA | LoRA = sd_xl_offset_example-lora_1.0.safetensors 모델 강도 = 0.5 CLIP 강도 = 1 |
| 이미지 크기 | 너비 = 1024 높이 = 1024 배치 크기 = 1 |
| 생성 | seed = 20261021 생성 후 제어 = fixed steps = 28 CFG = 6 sampler = dpmpp_2m scheduler = karras denoise = 1 |
| 결과 저장 · ch21_combined | 파일명 접두사 = guide/ch21_combined |
입력할 프롬프트 전문
긍정 프롬프트
pixel art, one small wooden cottage in a dark pine forest at midnight, warm yellow light glowing from the windows and open doorway, starry deep navy sky, dimly lit path, entire cottage visible, clean blocky shapes, limited color palette, contrasts
부정 프롬프트
photo, photorealistic, 3d render, sun, moon, sunset, orange sky, daylight, bright sky, text, watermark, logo, people, duplicate building, cropped building, blurry, distorted architecture
현재 작업의 노드·연결 목록 · 노드 9개와 연결 13개
제공 JSON에 이미 들어 있는 노드와 연결입니다. 실수로 선을 바꿨을 때 이 목록과 대조하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| SDXL Base | CheckpointLoaderSimple |
| A 화풍 LoRA | LoraLoader |
| B 명암 LoRA | LoraLoader |
| 긍정 프롬프트 | CLIPTextEncode |
| 부정 프롬프트 | CLIPTextEncode |
| 이미지 크기 | EmptyLatentImage |
| 생성 | KSampler |
| 그림으로 변환 | VAEDecode |
| 결과 저장 · ch21_combined | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | SDXL Base 모델 → | A 화풍 LoRA 모델 |
| 2 | SDXL Base CLIP → | A 화풍 LoRA clip |
| 3 | B 명암 LoRA CLIP → | 긍정 프롬프트 clip |
| 4 | B 명암 LoRA CLIP → | 부정 프롬프트 clip |
| 5 | B 명암 LoRA 모델 → | 생성 모델 |
| 6 | 긍정 프롬프트 조건 → | 생성 긍정 |
| 7 | 부정 프롬프트 조건 → | 생성 부정 |
| 8 | 이미지 크기 잠재 데이터 → | 생성 잠재 입력 |
| 9 | 생성 잠재 데이터 → | 그림으로 변환 잠재 데이터 |
| 10 | SDXL Base VAE → | 그림으로 변환 vae |
| 11 | 그림으로 변환 이미지 → | 결과 저장 · ch21_combined 이미지 |
| 12 | A 화풍 LoRA 모델 → | B 명암 LoRA 모델 |
| 13 | A 화풍 LoRA CLIP → | B 명암 LoRA clip |
선택 · 20장 작업에 두 번째 로더를 직접 더하려면
- 20장 작업을 별도 이름으로 복사한 뒤 빈 작업판을 두 번 클릭하고
LoraLoader를 검색해 하나 더 추가합니다. 모델 전용 로더가 아닌 일반 로더를 선택합니다. - 기존 A의 오른쪽 MODEL 출력 점에서 새 B의 왼쪽 model 입력 점으로 끌어 연결합니다. CLIP도 A의 오른쪽 출력에서 B의 왼쪽 clip 입력으로 연결합니다.
- B의 오른쪽 MODEL을 KSampler의 model 입력에 연결해 기존 A 직결을 바꿉니다. B의 CLIP은 긍정·부정 문장 두 노드의 clip 입력에 각각 연결합니다.
- B에 Offset 파일을 선택합니다. 같은 오두막 결과까지 따라 하려면 21장 JSON의 문장·seed·설정도 사용합니다. 기본 실습에서는 완성 연결이 담긴 21장 JSON을 여는 것으로 충분합니다.
B. 저장한 조합 다시 쓰기
- 그래프 → 내보내기에서 파일 이름을
ch21-my-combined로 입력하고 확인합니다. API 내보내기 대신 일반 내보내기를 사용합니다. - 내보낸 뒤 현재 작업 탭을 닫고 Ctrl+O로
ch21-my-combined.json을 다시 엽니다. 두 LoRA 파일명, 모델 강도 0.6 / 0.5, seed 20261021 / fixed가 유지되는지 봅니다. - 실행을 한 번 누릅니다. 같은 오두막과 명암 표현이 나오면 재사용까지 완료입니다. 같은 계산을 재사용하는 캐시 때문에 빨리 끝나는 경우도 정상입니다.

선택 비교 · A만 / B만 / A+B, 그리고 B 강도만 바꾸기
기본 결과를 만든 뒤 아래 JSON을 하나씩 열어 한 번씩 실행합니다. 프롬프트·seed·기본 모델·생성값·연결은 같고, A·B 적용량만 다릅니다. 비교를 끌 때는 해당 로더의 모델 강도와 CLIP 강도를 모두 0으로 둡니다. 노드를 지워 선을 다시 연결할 필요는 없습니다.
| 조건 | A 모델 / B 모델 | 일반 JSON |
|---|---|---|
| 둘 다 끔 | 0 / 0 | ch21-both-off.json (ZIP) |
| A만 · 화풍 기준 | 0.6 / 0 | ch21-a-only.json (ZIP) |
| B만 · 명암 기준 | 0 / 0.5 | ch21-b-only.json (ZIP) |
| A+B · 기본 선택 | 0.6 / 0.5 | ch21-combined.json (ZIP) |
| A 고정·B 높임 | 0.6 / 1.0 | ch21-strong-b.json (ZIP) |
켜진 LoRA의 CLIP 강도는 1.0, 꺼진 것은 0입니다. 두 파일에 CLIP 가중치가 없으므로 이번 비교에서 실제 차이를 만드는 값은 모델 강도입니다. 효과를 읽을 때는 A만 ↔ A+B로 B의 추가 영향을, B만 ↔ A+B로 A의 추가 영향을 봅니다.




문장에도 pixel art와 어두운 숲·밝은 불빛을 요청하므로, 둘 다 끈 결과에도 비슷한 화풍과 명암이 일부 나옵니다. LoRA가 모든 특징을 처음 만들어 냈다고 해석하지 않습니다. 같은 조건에서 색 면의 크기, 지붕·나무의 윤곽, 어두운 곳에 남은 정보를 비교하세요.
| 이번 결과에서 비교할 곳 | 실제로 보이는 차이 |
|---|---|
| B만 ↔ A+B | B만의 지붕·나무에는 가는 선과 많은 작은 묘사가 있습니다. A+B는 더 큰 네모난 색 면으로 정리되어 A의 화풍이 남습니다. |
| A만 ↔ A+B | A만에는 큰 달과 더 밝은 길이 있습니다. A+B에서는 하늘·숲이 어두워지고 창문 불빛이 중심이 됩니다. 밝기뿐 아니라 달의 유무·집 구도도 바뀌었습니다. |
| 달이 남은 기준 세 장 | 부정 문장에 moon을 넣었어도 제거가 보장되지 않았습니다. LoRA 영향을 분리해 보는 비교용이며 모든 요구를 달성한 대표 결과로 제시하지 않습니다. 엄격히 달이 없어야 한다면 이 결과는 선택에서 제외합니다. |

B 1.0에서는 집과 창문이 더 크게 자리 잡고 앞쪽 숲이 차지하는 비중도 달라졌습니다. 강도는 밝기 슬라이더처럼 일정한 양만큼만 바꾸지 않습니다. A만(B 0) → 기본(B 0.5) → B 1.0 순서로 보세요. 이번에는 숲과 집을 함께 읽기 쉬운 0.5를 선택했습니다. 두 결과 모두 형태는 읽히지만 1.0을 더 좋은 값이라고 부르지 않습니다.
비교 파일은 ComfyUI/output/guide에 ch21_night-off, ch21_night-a-only, ch21_night-b-only, ch21_night-combo-10 접두사로 저장됩니다. 기본 파일의 접두사는 ch21_combined입니다.
4. 정상 결과 확인
| 볼 부분 | 완성 기준 |
|---|---|
| 주제와 형태 | 오두막 한 채의 지붕·벽·입구가 읽히며, 숲과 불빛이 함께 보입니다. |
| 화풍 | 지붕·나무·땅에 네모난 색 면과 계단 모양 윤곽이 남아 있습니다. |
| 명암 | 주변 숲은 어둡고 창문 불빛은 밝지만, 오두막 형태가 검은 덩어리로 사라지지 않습니다. |
| 연결과 재사용 | B의 MODEL이 KSampler로 가며 두 문장 노드는 B의 CLIP에 연결됩니다. 내보낸 JSON을 다시 열어 실행할 수 있습니다. |
기본 조합과 비교 네 조건을 이 PC에서 실제 생성했습니다. 일반 JSON을 내보내고 작업 탭을 닫았다 다시 열어 실행한 기본 결과는 처음 조합 결과와 1024×1024 RGB 픽셀이 같았습니다. 파일 이름이나 PNG 안의 작업 정보까지 같다는 뜻은 아닙니다.
이번 완성물은 픽셀 아트풍 일러스트입니다. 모든 색 면이 균일한 격자에 맞는 게임용 도트 원본은 아닙니다. 두 LoRA의 적용량은 이 문장과 모델에서 고른 값이며 다른 조합에 그대로 맞는 정답은 아닙니다.
문장 반영의 한계: 긍정 문장의 open doorway(열린 출입구)까지 정확히 구현되지는 않아 기본 결과의 문은 닫힌 모습입니다. 이 장은 화풍과 창문 불빛·주변 명암의 조합을 완성 기준으로 삼습니다. 열린 문이 필수인 작업이라면 이 결과를 최종본으로 채택하지 말고 문장을 조정해 다시 생성하거나 11장의 부분 수정 방식을 참고하세요.
5. 자주 생기는 문제
| 상황 | 해결 방법 |
|---|---|
| B 값을 바꿔도 전혀 달라지지 않아요 | KSampler의 model 입력이 A에 직접 연결되어 B를 건너뛰지 않았는지 확인합니다. B의 MODEL 출력에서 연결해야 합니다. 파일과 모델 강도도 확인하세요. |
| 두 LoRA의 합이 1을 넘어서 걱정돼요 | 합을 1로 정규화할 필요가 없습니다. 이번 기본값은 0.6과 0.5입니다. 결과가 과하면 한쪽씩 줄여 원인을 찾습니다. |
| 밝은 곳만 남고 지붕·숲이 뭉개져요 | B를 0.5로 되돌리고, 필요하면 0으로 둔 A만 결과와 비교합니다. seed·문장은 그대로 두세요. 디테일이 사라졌는데 단순히 더 어둡다는 이유로 성공 처리하지 않습니다. |
| 두 파일을 선택했는데 한쪽 화풍만 보여요 | A만·B만 JSON으로 각 효과를 먼저 봅니다. 두 효과가 충돌할 수 있으므로 A+B 상태에서 한쪽 모델 강도만 낮춰 비교합니다. 마지막 노드가 항상 이긴다는 규칙으로 이해하지 마세요. |
| 같은 seed인데 집이나 나무 모양도 바뀌어요 | LoRA는 생성 계산을 바꾸므로 같은 seed라도 형태가 달라질 수 있습니다. 완성 PNG의 밝기만 보정하는 필터와 다릅니다. |
| CLIP 강도를 바꿔도 효과가 없어요 | 이번 두 파일은 모델 쪽 학습만 포함합니다. CLIP은 켠 상태 1.0으로 두고 모델 강도를 조절하세요. 다른 LoRA는 파일 구성에 따라 다릅니다. |
| B 강도 0인데도 파일이 없다는 오류가 나요 | 0으로 두어도 로더의 파일명 선택은 올바른 목록 값이어야 합니다. 준비물 두 LoRA를 모두 loras 폴더에 넣고 다시 선택합니다. |
| LoRA를 더했으니 4 steps로 줄여도 되나요? | 이번 두 파일은 Lightning 가속용이 아닙니다. 28 steps·CFG 6 설정을 유지합니다. 15장의 가속 조합 설정을 섞지 않습니다. |
| JSON을 다시 열었는데 모델이 없어요 | JSON은 모델 파일을 포함하지 않습니다. Base는 checkpoints, 두 LoRA는 loras 폴더에 넣고 노드에서 선택합니다. |
용어는 두 LoRA 조합 용어표, 한 개 연결은 20장에서 다시 볼 수 있습니다. 공식 참고: ComfyUI 여러 LoRA 연결 · Stability AI Offset 파일.
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.