Published on

ComfyUI LoRA 누락·색감 붕괴 디버깅 체크리스트

Authors

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 로더는 보통 modelclip 양쪽을 입력/출력으로 받습니다. 하지만 LoRA가 어떤 모듈을 대상으로 학습되었는지에 따라 CLIP 쪽 변화가 미미하거나, 특정 조합에서 부작용이 날 수 있습니다.

대응: 우선 LoRA 로더를 연결하되, 문제가 의심되면 다음을 실험하세요.

  • strength_model 만 올리고 strength_clip 은 낮추거나 0으로
  • 반대로 텍스트 반응이 약하면 strength_clip 을 소폭 올려보기

2-3) LoRA strength가 너무 낮거나, CFG/스텝과 상쇄됨

LoRA가 “안 먹는다”는 보고 중 일부는 사실 샘플러/CFG/스텝 조합이 LoRA 효과를 희석하는 경우입니다.

  • CFG가 너무 낮으면 프롬프트/LoRA 스타일이 잘 안 잡힐 수 있습니다.
  • 스텝이 너무 낮으면 스타일이 충분히 반영되기 전에 샘플링이 끝납니다.

권장 실험 범위(출발점)

  • SD 1.5: steps 2030, CFG 69
  • SDXL: steps 2540, CFG 47
  • LoRA strength: 0.6~1.0에서 시작

2-4) 프롬프트가 LoRA의 트리거 토큰을 포함하지 않음

특정 LoRA는 트리거 토큰(예: 특정 단어)을 넣어야 효과가 강하게 나타납니다.

대응: 배포 페이지의 예시 프롬프트를 그대로 복사해 최소 재현을 먼저 성공시키고, 그 다음에 프롬프트를 커스터마이징하세요.

2-5) CLIPTextEncode가 LoRA 적용 전 CLIP을 참조함

ComfyUI는 “선 연결”이 곧 데이터 흐름입니다. LoRA를 로드했더라도 CLIPTextEncodeLoRA 적용 이전의 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 사용이 중요합니다.

증상

  • 피부가 회녹색으로 뜨거나, 전체가 탁해짐
  • 검은색이 보라색으로 밀리거나, 하이라이트가 과도하게 날아감

대응 절차

  1. 체크포인트 내장 VAE를 쓰는 워크플로로 먼저 확인
  2. 외부 VAE를 쓴다면, VAE 노드를 명시적으로 고정
  3. 문제 발생 시 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 누락 체크리스트

  1. LoRA 파일 경로가 models/loras 인지
  2. 베이스 모델(SD 1.5 vs SDXL) 호환인지
  3. LoraLoader.modelKSampler.model 로 연결됐는지
  4. LoraLoader.clipCLIPTextEncode.clip 로 연결됐는지
  5. strength가 0이거나 너무 낮지 않은지
  6. 트리거 토큰이 필요한 LoRA인지
  7. LoRA를 1개만 켠 상태에서도 안 먹는지
  8. 파일 교체/업데이트 후 ComfyUI 재시작했는지

색감 붕괴 체크리스트

  1. VAE를 체크포인트 내장으로 돌려도 동일한지
  2. 외부 VAE를 쓰면 인코드/디코드가 동일 VAE인지
  3. 업스케일에서 디코드-인코드가 반복되지 않는지
  4. 하이레즈 2차 패스 denoise가 과하지 않은지
  5. 샘플러/스케줄러를 변경한 직후부터 깨졌는지
  6. 중간 저장으로 “깨지는 지점”을 특정했는지

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)부터 확인해 보세요.