- Published on
ComfyUI LoRA 누락·색감 붕괴 디버깅 체크리스트
- Authors
- Name
- 스타차일드
- https://x.com/ETFBITX
ComfyUI로 이미지 생성 파이프라인을 구성하다 보면 두 가지 유형의 장애를 자주 만납니다.
- LoRA가 분명히 연결되어 있는데도 적용이 안 되는 문제(누락)
- 갑자기 채도가 튀거나 피부색이 녹색/보라색으로 무너지는 문제(색감 붕괴)
둘 다 겉으로는 “결과가 이상하다”로 보이지만, 원인은 꽤 체계적으로 분해할 수 있습니다. 이 글은 워크플로를 하나씩 고립시키면서 원인을 좁혀가는 방식으로, ComfyUI에서의 LoRA/색감 문제를 빠르게 디버깅하는 체크리스트를 제공합니다.
문제 해결 접근은 인프라 트러블슈팅과 유사합니다. 증상을 바로 고치려 하기보다 재현 가능한 최소 구성(min repro) 을 만들고, 변경점을 하나씩 적용해 원인 범위를 줄입니다. 이런 방식은 예를 들어 크래시 루프를 원인별로 분해하는 접근과도 닮아 있습니다: K8s CrashLoopBackOff와 livenessProbe 503 해결법
1) 가장 먼저: “LoRA가 로드되었는지”를 로그로 확인
LoRA 누락의 절반은 “노드 연결은 되어 있는데 실제 로딩이 실패”하거나 “다른 이름의 파일을 로드”하는 케이스입니다.
체크 포인트
- LoRA 파일이
ComfyUI/models/loras하위에 있는지 - 파일 확장자(
.safetensors)와 파일명이 워크플로에서 선택한 것과 동일한지 - ComfyUI 콘솔(터미널) 로그에 LoRA 로딩 실패 메시지가 없는지
- 같은 이름의 LoRA가 다른 폴더에 중복되어 선택이 꼬이지 않았는지
최소 재현 워크플로부터 시작
가능하면 다음처럼 기본 체크포인트 + LoRA 1개 + KSampler 만 둔 워크플로로 먼저 확인하세요.
CheckpointLoaderSimple
-> CLIPTextEncode (positive)
-> CLIPTextEncode (negative)
-> EmptyLatentImage
-> KSampler
-> VAEDecode
-> SaveImage
+ LoraLoader
- model: CheckpointLoaderSimple.model
- clip: CheckpointLoaderSimple.clip
-> KSampler.model
-> CLIPTextEncode.clip
여기서도 LoRA가 먹지 않으면, 문제는 업스케일/컨트롤넷/리파이너 같은 주변부가 아니라 LoRA 로더/경로/가중치/호환성 쪽에 있습니다.
2) LoRA 누락의 대표 원인 7가지
2-1) 베이스 모델 불일치(SD1.5용 LoRA를 SDXL에 적용)
가장 흔합니다.
- SD 1.5 LoRA를 SDXL 체크포인트에 붙이면 “로드는 되는데 효과가 거의 없음” 또는 “형태가 무너짐”으로 나타납니다.
- 반대로 SDXL LoRA를 1.5에 붙이면 로딩 자체가 실패하거나 결과가 크게 깨질 수 있습니다.
대응: LoRA 설명(배포 페이지)에서 베이스가 SD 1.5인지 SDXL인지 확인하고, 워크플로의 체크포인트를 맞추세요.
2-2) LoRA가 UNet만 학습된 타입인데 CLIP에도 적용하려고 함
ComfyUI의 LoRA 로더는 보통 model 과 clip 양쪽을 입력/출력으로 받습니다. 하지만 LoRA가 어떤 모듈을 대상으로 학습되었는지에 따라 CLIP 쪽 변화가 미미하거나, 특정 조합에서 부작용이 날 수 있습니다.
대응: 우선 LoRA 로더를 연결하되, 문제가 의심되면 다음을 실험하세요.
strength_model만 올리고strength_clip은 낮추거나 0으로- 반대로 텍스트 반응이 약하면
strength_clip을 소폭 올려보기
2-3) LoRA strength가 너무 낮거나, CFG/스텝과 상쇄됨
LoRA가 “안 먹는다”는 보고 중 일부는 사실 샘플러/CFG/스텝 조합이 LoRA 효과를 희석하는 경우입니다.
- CFG가 너무 낮으면 프롬프트/LoRA 스타일이 잘 안 잡힐 수 있습니다.
- 스텝이 너무 낮으면 스타일이 충분히 반영되기 전에 샘플링이 끝납니다.
권장 실험 범위(출발점)
- SD 1.5: steps 20
30, CFG 69 - SDXL: steps 25
40, CFG 47 - LoRA strength: 0.6~1.0에서 시작
2-4) 프롬프트가 LoRA의 트리거 토큰을 포함하지 않음
특정 LoRA는 트리거 토큰(예: 특정 단어)을 넣어야 효과가 강하게 나타납니다.
대응: 배포 페이지의 예시 프롬프트를 그대로 복사해 최소 재현을 먼저 성공시키고, 그 다음에 프롬프트를 커스터마이징하세요.
2-5) CLIPTextEncode가 LoRA 적용 전 CLIP을 참조함
ComfyUI는 “선 연결”이 곧 데이터 흐름입니다. LoRA를 로드했더라도 CLIPTextEncode 가 LoRA 적용 이전의 CLIP 을 입력으로 받고 있으면, 텍스트 쪽 반영이 약해질 수 있습니다.
대응: CLIPTextEncode.clip 입력이 반드시 LoraLoader.clip 출력에 연결되어 있는지 확인하세요.
2-6) 여러 LoRA를 중첩하면서 서로 상쇄
스타일 LoRA 두 개가 서로 다른 색감/조명을 강하게 강제하면, 결과가 애매해지거나 “안 먹는 것처럼” 보일 수 있습니다.
대응
- LoRA를 1개씩만 켠 상태에서 결과를 저장
- 조합 시에는 strength를 각각 낮춰 합이 과도해지지 않게 조정
2-7) 모델/LoRA 캐시 문제(파일 교체 후 반영 안 됨)
같은 파일명으로 LoRA를 교체했는데 결과가 바뀌지 않는다면, 캐시/리로드 이슈를 의심할 수 있습니다.
대응
- ComfyUI를 완전히 재시작
- 모델 폴더를 갱신했으면 “리스트 재스캔” 성격의 동작(재시작)이 가장 확실
캐시/리로드로 인한 “바뀐 줄 알았는데 그대로” 문제는 프론트엔드에서도 자주 겪는 유형입니다. 디버깅 관점은 아래 글의 접근과 유사합니다: Next.js 14 RSC 캐시·라우터 성능 트러블슈팅
3) 색감 붕괴의 대표 원인: VAE, 색공간, 업스케일 파이프라인
색감 붕괴는 LoRA 자체보다 VAE/디코딩 단계 또는 후처리 단계에서 발생하는 경우가 많습니다. 특히 “라텐트에서 디코드되는 순간” 또는 “업스케일/리사이즈 이후”에 급격히 나타납니다.
3-1) VAE 불일치(체크포인트 내장 VAE vs 외부 VAE)
- SD 1.5 계열에서 특정 VAE(예:
vae-ft-mse-840000-ema-pruned)를 쓰다 색감이 안정되는 경우가 있습니다. - SDXL은 체크포인트/파이프라인에 맞는 VAE 사용이 중요합니다.
증상
- 피부가 회녹색으로 뜨거나, 전체가 탁해짐
- 검은색이 보라색으로 밀리거나, 하이라이트가 과도하게 날아감
대응 절차
- 체크포인트 내장 VAE를 쓰는 워크플로로 먼저 확인
- 외부 VAE를 쓴다면, VAE 노드를 명시적으로 고정
- 문제 발생 시 VAE를 바꿔 A/B 비교
3-2) 업스케일 단계에서 잘못된 디코드/인코드 반복
고급 워크플로는 대개 다음 두 가지 중 하나입니다.
- 라텐트 업스케일(라텐트 상태에서 확대 후 다시 샘플링)
- 픽셀 업스케일(디코드 후 ESRGAN 등으로 확대)
색감 붕괴는 보통 디코드-인코드가 여러 번 반복되거나, 중간에 다른 VAE로 인코드될 때 두드러집니다.
권장 원칙
- 가능한 한 “한 번 디코드”를 목표로 설계
- 업스케일 후 다시 라텐트로 들어가야 한다면, 인코더/디코더가 같은 VAE인지 보장
3-3) 샘플러/스케줄러 변경으로 인한 색·명암 불안정
같은 시드라도 샘플러/스케줄러가 바뀌면 명암과 색감이 크게 달라질 수 있습니다.
디버깅 팁
- 색감 붕괴가 발생한 시점의 변경점이
sampler_name,scheduler,cfg,steps중 무엇인지 기록 - “정상 결과가 나오던 조합”을 하나 고정해두고 다른 요소를 바꿔 원인을 분리
3-4) 하이레즈 픽스(Highres fix)에서 denoise가 과도
업스케일 후 2차 샘플링에서 denoise 가 너무 높으면, 원본 구도는 유지되더라도 색/재질이 크게 재해석됩니다.
denoise가 0.6 이상이면 스타일이 새로 그려지는 느낌이 강해질 수 있습니다.
권장 출발점
- 하이레즈 2차 패스 denoise: 0.25~0.45
4) “LoRA 누락”과 “색감 붕괴”를 분리 진단하는 방법
둘이 동시에 보이면 더 헷갈립니다. 그래서 아래 순서로 분리하세요.
4-1) LoRA 효과부터 눈으로 확인 가능한 프롬프트로 바꾸기
색감은 주관적이라 논쟁이 생기지만, LoRA 효과는 의도적으로 과장하면 확인이 쉽습니다.
- 스타일 LoRA면
oil painting,anime,lineart같이 명확한 키워드 - 캐릭터 LoRA면 고유 토큰을 강하게
그리고 LoRA strength를 일시적으로 1.2 정도까지 올려 “먹는지/안 먹는지”를 먼저 봅니다(단, 과하면 붕괴할 수 있으니 테스트 용도).
4-2) VAE를 고정하고, 디코드 결과를 중간 저장
ComfyUI는 중간 결과를 저장하는 습관이 중요합니다.
VAEDecode직후 이미지를 저장- 업스케일/후처리 직후 이미지를 저장
이렇게 하면 “디코드 시점부터 색이 깨졌는지” vs “후처리에서 깨졌는지”가 분리됩니다.
5) 실전 체크리스트(현장에서 빠르게 쓰는 버전)
LoRA 누락 체크리스트
- LoRA 파일 경로가
models/loras인지 - 베이스 모델(SD 1.5 vs SDXL) 호환인지
LoraLoader.model이KSampler.model로 연결됐는지LoraLoader.clip이CLIPTextEncode.clip로 연결됐는지- strength가 0이거나 너무 낮지 않은지
- 트리거 토큰이 필요한 LoRA인지
- LoRA를 1개만 켠 상태에서도 안 먹는지
- 파일 교체/업데이트 후 ComfyUI 재시작했는지
색감 붕괴 체크리스트
- VAE를 체크포인트 내장으로 돌려도 동일한지
- 외부 VAE를 쓰면 인코드/디코드가 동일 VAE인지
- 업스케일에서 디코드-인코드가 반복되지 않는지
- 하이레즈 2차 패스 denoise가 과하지 않은지
- 샘플러/스케줄러를 변경한 직후부터 깨졌는지
- 중간 저장으로 “깨지는 지점”을 특정했는지
6) ComfyUI 워크플로를 디버깅 친화적으로 만드는 팁
6-1) 변경점을 한 번에 하나만
워크플로를 개선하려고 LoRA 추가 + 업스케일 추가 + 샘플러 변경을 한 번에 하면, 문제가 생겼을 때 원인 추적이 거의 불가능해집니다.
- 변경 1개
- 결과 저장
- 다음 변경
이 루틴이 가장 빠릅니다.
6-2) “정상 동작 베이스라인” 워크플로를 따로 보관
- 체크포인트 1개
- VAE 고정
- LoRA 없음
- 기본 샘플러 1개
이 베이스라인이 있으면, 어떤 워크플로가 망가졌을 때도 즉시 비교가 가능합니다.
6-3) 파라미터를 기록 가능한 형태로 남기기
색감/LoRA 이슈는 결국 “조합 문제”인 경우가 많습니다. 그래서 다음은 최소한 기록하세요.
- 체크포인트 이름
- VAE 이름
- LoRA 목록과 strength
- sampler, scheduler, steps, CFG, denoise
- 해상도와 업스케일 방식
이런 기록 습관은 모델 서빙/최적화에서도 동일하게 중요합니다. 재현 가능한 설정이 있어야 튜닝도 가능합니다: PyTorch→ONNX→TensorRT INT8 양자화 실전 가이드
7) 마무리: “적용 여부”와 “깨지는 지점”을 분리하면 빨라진다
ComfyUI에서 LoRA 누락과 색감 붕괴는 대부분 다음 두 질문으로 정리됩니다.
- LoRA가 진짜로 로드되고, 올바른 경로로 모델/CLIP에 주입되고 있는가
- 색감이 깨지는 정확한 지점이 VAE 디코드인지, 업스케일/후처리인지
최소 재현 워크플로로 시작해서 하나씩 쌓아 올리면, 감으로 때려 맞추는 것보다 훨씬 빠르게 원인을 찾을 수 있습니다. 다음에 결과가 “갑자기 이상해졌을 때”는, 오늘의 체크리스트대로 연결(LoRA)과 디코드(VAE)부터 확인해 보세요.