손대기 전에 — 시드를 묶고 명령 창부터 본다
설정을 바꿔 가며 견주려면 바꾸지 않은 칸이 그대로 있어야 한다. ComfyUI의 KSampler 노드는 잡음을 만드는 시드(seed)를 입력으로 받고, 기본값은 0이며, 생성이 끝난 뒤 시드 값을 어떻게 바꿀지 정하는 제어(control_after_generate)가 함께 붙어 있다. 한 장을 뽑을 때마다 시드가 바뀌면 달라진 결과가 설정 때문인지 잡음 때문인지 가를 수 없다. 점검하는 동안에는 시드를 한 값에 묶고, 한 번에 한 칸만 바꾼다. 같은 원칙은 스테이블 디퓨전 설치 완전 가이드의 실전 팁 절에도 적혀 있다.
숫자 칸을 만지기 전에 명령 창을 한 번 본다. 4편에서 짚었듯 ComfyUI 코드에는 LoRA 가중치가 자리를 찾지 못할 때 lora key not loaded, 체크포인트로 연 파일에 텍스트 인코더가 없을 때 no CLIP/text encoder weights in checkpoint를 남기는 줄이 있다. 이런 줄이 보이면 원인은 설정이 아니라 파일 선택 쪽이니 4편의 프로그램별 점검 절로 돌아간다. 명령 창이 조용하면 이 글의 순서대로 내려간다.
다른 프로그램에서 쓰던 설정을 옮겨 왔는데 결과가 다르다면 그것도 따로 본다. 프런트엔드마다 샘플러 구현과 기본값이 달라 같은 시드가 같은 그림을 주지 않는다는 점은 A1111에서 ComfyUI · Forge로 옮기기에 정리돼 있다.
1단계 해상도 — 모델이 배운 크기에 빈 잠재 이미지를 맞춘다
텍스트로 그림을 만들 때 ComfyUI는 Empty Latent Image 노드로 빈 잠재 이미지를 만들고, KSampler가 그 잠재 이미지의 잡음을 걷어 낸다. ComfyUI 코드에서 Empty Latent Image의 폭과 높이 기본값은 512×512이고, 값은 8 단위로 움직이며 최솟값은 16이다. 모델을 SDXL로 바꿔도 이 노드의 숫자는 저절로 바뀌지 않는다.
계열마다 출발점이 되는 크기는 공식 자료에 적혀 있다. SD 1.5 모델 카드는 이 체크포인트를 512×512 해상도에서 59만 5천 단계 미세 조정했다고 적었다. ComfyUI 공식 SDXL 예제는 SDXL base가 제 성능을 내려면 해상도를 1024×1024로, 또는 픽셀 수가 같은 다른 비율(예: 896×1152 · 1536×640)로 두라고 안내한다. 허깅페이스 diffusers의 SDXL 파이프라인 설명은 폭과 높이를 좋은 결과를 위해 기본 1024로 두며, 512픽셀보다 작으면 SDXL base와 저해상도용으로 따로 미세 조정하지 않은 체크포인트에서는 잘 작동하지 않는다고 적었다.
| 계열 · 칸 | 공식 자료의 기준 | 출처 |
|---|---|---|
| ComfyUI Empty Latent Image | 기본 512×512 · 8 단위 · 최소 16 | ComfyUI nodes.py |
| SD 1.5 | 512×512에서 미세 조정 | 허깅페이스 SD 1.5 모델 카드 |
| SDXL base 1.0 | 1024×1024 또는 픽셀 수가 같은 다른 비율(896×1152 · 1536×640) | ComfyUI Examples · SDXL |
| SDXL base 1.0 (diffusers) | 기본 1024 · 512픽셀 미만은 잘 작동하지 않음 | diffusers pipeline_stable_diffusion_xl.py |
비율을 바꿀 때는 곱한 값을 본다. 1024×1024는 1,048,576픽셀, 896×1152는 1,032,192픽셀, 1536×640은 983,040픽셀로, 예제가 든 세 크기는 모두 100만 픽셀 안팎이다. 세로로 긴 그림이 필요하면 한쪽만 늘리지 말고 다른 쪽을 줄여 이 범위에 둔다. FLUX 같은 다른 계열의 기준 해상도와 권장 단계는 4편의 권장 해상도 표에 모았다. 커뮤니티 체크포인트는 설명 글에 적힌 해상도가 있으면 그 값을 먼저 쓴다.
2단계 스텝 · CFG · denoise — 프로그램 기본값은 서로 다르다
해상도가 맞으면 KSampler의 숫자 세 칸을 본다. ComfyUI 코드에서 steps 기본값은 20(1~10000), cfg 기본값은 8.0(0~100, 0.1 단위), denoise 기본값은 1.0이다. cfg 칸의 설명은 값이 높을수록 프롬프트에 가깝게 맞추지만 너무 높으면 품질이 떨어진다고 적었다. 허깅페이스 diffusers도 같은 방향으로 설명한다. guidance_scale은 1보다 클 때 켜지고, 값을 높이면 프롬프트와 가깝게 묶이는 대신 대개 이미지 품질을 대가로 치른다. num_inference_steps는 기본 50이며, 단계를 늘리면 대개 품질이 오르지만 추론이 느려진다.
문제는 «기본값»이 프로그램마다 다르다는 점이다. 같은 SDXL이라도 ComfyUI KSampler는 CFG 8.0, diffusers SDXL 파이프라인은 5.0, Forge Neo의 xl 프리셋은 4.5에서 출발한다. Forge Neo는 UI Preset마다 기본값을 코드(modules_forge/presets.py)에 넣어 두었다.
| 프로그램 · 대상 | 스텝 | CFG(가이던스) | 샘플러 · 스케줄러 |
|---|---|---|---|
| ComfyUI KSampler (계열 공통 노드) | 20 | 8.0 | 기본값 없이 목록에서 고른다 |
| diffusers SD 파이프라인 | 50 | 7.5 | — |
| diffusers SDXL 파이프라인 | 50 | 5.0 | — |
| Forge Neo · sd 프리셋 | 32 | 6 | Euler a · Automatic |
| Forge Neo · xl 프리셋 | 24 | 4.5 | Euler a · Automatic |
| Forge Neo · flux 프리셋 | 20 | 1 (Distilled CFG 3) | Euler · Beta |
그래서 한 프로그램의 기본값을 정답으로 읽지 않는다. 체크포인트 설명 글에 권장 스텝과 CFG가 있으면 그 값에서 출발하고, 없으면 계열의 공식 기본값에서 출발한다. ComfyUI에서 SDXL을 열었는데 KSampler가 CFG 8.0 그대로라면, 문서가 든 다른 기본값(5.0 · 4.5)과도 견줘 본다.
증류 모델은 CFG 1.0
FLUX.1 [dev]처럼 증류한 모델은 기준이 아예 다르다. ComfyUI 공식 Flux 예제는 fp8 한 파일 체크포인트를 쓸 때 CFG를 1.0으로 두라고 적었고, Forge Neo 위키도 Flux-Dev · Lightning · Lightx2v 같은 증류 모델은 CFG를 1.0으로 두라고 안내한다. KSampler의 기본값 8.0을 그대로 둔 채 이런 모델을 돌리고 있다면, 프롬프트보다 이 칸이 먼저다.
denoise는 텍스트로만 그릴 때 1.0
ComfyUI 문서는 denoise를 잡음 제거 강도로 설명한다. 1.0은 잡음을 전부 걷어 내는 값이고, 낮은 값은 입력 이미지의 원래 구조를 남겨 이미지를 이미지로 바꾸는 작업에 쓴다. 빈 잠재 이미지에서 텍스트로만 그리는데 이 값이 1.0 아래로 내려가 있다면 먼저 되돌린다.
3단계 샘플러와 스케줄러 — 이름 하나를 두 칸으로 나눠 읽는다
ComfyUI 문서는 KSampler의 sampler_name을 생성 속도 · 스타일 · 품질에 영향을 주는 샘플링 알고리즘의 이름으로, scheduler를 잡음을 걷어 내는 과정을 조절하는 칸으로 설명한다. 2026년 9월 15일 ComfyUI 코드(comfy/samplers.py)의 목록에는 샘플러 45개와 스케줄러 9개가 있다. 스케줄러는 simple · sgm_uniform · karras · exponential · ddim_uniform · beta · normal · linear_quadratic · kl_optimal이다.
옛 WebUI식 설정 이름에는 두 칸이 붙어 있는 경우가 있다. 설치 가이드의 팁에 나오는 «DPM++ 2M Karras»가 그렇다. Forge Neo 코드(modules/sd_samplers_kdiffusion.py)에서 «DPM++ 2M»은 sample_dpmpp_2m 함수에 scheduler 옵션 karras를 붙인 항목이고, «Euler a»는 sample_euler_ancestral을 부른다. ComfyUI 코드도 목록의 이름 앞에 sample_을 붙여 k-diffusion 샘플링 함수를 찾는다. 그래서 ComfyUI에서는 샘플러 dpmpp_2m과 스케줄러 karras, 또는 샘플러 euler_ancestral처럼 두 칸에 나눠 고른다.
| 설정 이름 | Forge Neo 코드의 함수 · scheduler 옵션 | ComfyUI에서 고르는 칸 |
|---|---|---|
| Euler a | sample_euler_ancestral | 샘플러 euler_ancestral |
| Euler | sample_euler | 샘플러 euler |
| DPM++ 2M (Karras) | sample_dpmpp_2m · scheduler karras | 샘플러 dpmpp_2m + 스케줄러 karras |
점검할 때는 앞 단계에서 맞춘 스텝과 CFG를 묶어 둔 채 샘플러만 바꾸고, 그다음에 스케줄러를 따로 바꾼다. 둘을 함께 바꾸면 무엇이 결과를 움직였는지 다시 가려지지 않는다. 출발점은 계열의 공식 기본 조합이다. Forge Neo 프리셋은 sd · xl에 Euler a와 Automatic, flux에 Euler와 Beta를 둔다.
4단계 프롬프트 길이 — 75토큰 조각으로 나뉘어 읽힌다
숫자 칸이 모두 기준과 맞는데도 그림이 프롬프트와 멀면 그때 문구를 본다. 먼저 길이다. AUTOMATIC1111 WebUI 위키는 스테이블 디퓨전이 보통 받는 표준 길이를 75토큰으로 설명하고, 이를 넘기면 한도를 150으로, 더 넘기면 그 이상으로 늘린다고 적었다. 늘리는 방식은 프롬프트를 75토큰씩 조각(chunk)으로 나눠 CLIP이 조각마다 따로 처리한 뒤 결과를 이어 붙여 U-Net에 넘기는 것이다.
위키의 예시로 보면, 120토큰짜리 프롬프트는 75토큰과 45토큰 두 조각으로 나뉘고, 두 조각 모두 75토큰으로 채운 뒤 시작 · 끝 토큰을 붙여 77토큰이 된다. 긴 프롬프트가 잘려 나가지는 않지만, 한 덩어리로 읽혀야 할 묘사가 조각 경계에 걸리면 서로 다른 조각에서 처리된다. 위키는 대문자 BREAK를 넣으면 현재 조각을 채움 문자로 채우고, 뒤의 문구를 새 조각에서 시작한다고 적었다. 대상과 그 대상의 색 · 재질처럼 붙어 있어야 하는 묘사는 같은 조각 안에 두고, 조각을 나눌 자리는 BREAK로 직접 정한다.
이 조각 설명은 A1111 위키 기준이다. ComfyUI의 CLIP Text Encode 노드가 긴 프롬프트를 나누는 방식은 이 글에서 확인한 문서 범위에 없어서 다루지 않는다.
5단계 가중치 — 괄호 한 겹이 1.1배다
길이를 정리했으면 강조를 본다. A1111 위키는 프롬프트에서 둥근 괄호가 감싼 낱말에 모델의 주의를 더 주고, 대괄호는 줄인다고 설명한다. ComfyUI README도 괄호로 강조를 바꾸는 문법을 싣고, 괄호의 기본 강조를 1.1로 적었다.
| 문법 | 뜻 | 출처 |
|---|---|---|
(word) | 주의를 1.1배로 | A1111 위키 · ComfyUI README(기본 1.1) |
((word)) | 1.21배(1.1 × 1.1) | A1111 위키 |
[word] | 1.1로 나눠 줄인다 | A1111 위키 |
(word:1.5) | 1.5배로 지정 | A1111 위키 · ComfyUI README 예 (good code:1.2) |
(word:0.25) | 4분의 1로 줄인다(1 ÷ 0.25 = 4) | A1111 위키 · ComfyUI README 예 (bad code:0.8) |
\(word\) | 괄호를 글자 그대로 쓴다 | A1111 위키 · ComfyUI README |
괄호는 겹칠수록 곱으로 커진다. ((word))가 1.21배이니 세 겹은 1.1을 세 번 곱한 값이 된다. 강조를 손볼 때는 괄호를 겹쳐 쌓기보다 (word:1.2)처럼 숫자를 적는 편이 지금 몇 배인지 읽기 쉽다. 예를 들어 골목의 종이 등불 가게를 그리는데 등불의 빛이 약하게 나온다면 paper lantern shop in a narrow alley, (warm lantern light:1.2)처럼 한 구절만 숫자로 올리고, 다른 구절은 그대로 둔 채 결과를 견준다. 괄호 자체를 그림 묘사의 글자로 쓰려면 괄호 앞에 역슬래시를 붙인다. 그대로 두면 강조 문법으로 읽힌다.
6단계 네거티브 프롬프트 — CFG가 1이면 계산에서 빠진다
A1111 위키는 네거티브 프롬프트를 모델이 그림을 만들 때 피해야 할 것을 적는 또 하나의 프롬프트로 설명하고, 샘플링 과정에서 무조건(unconditional) 조건 자리에 빈 문자열 대신 네거티브 프롬프트를 쓰는 방식으로 작동한다고 적었다. ComfyUI KSampler의 negative 입력도 이미지에서 제외할 속성을 묘사하는 조건이다.
이 방식에는 조건이 붙는다. ComfyUI 코드(comfy/samplers.py)의 샘플링 함수는 CFG 값이 1.0이면, 따로 끄는 옵션(disable_cfg1_optimization)을 켜지 않은 한 무조건 쪽 조건을 비워 두고 계산하지 않는다. diffusers도 guidance_scale이 1보다 클 때만 CFG를 쓰고, 설명에서 가이던스를 쓰지 않을 때는 negative_prompt를 무시한다고 적었다. 앞에서 본 증류 모델처럼 CFG를 1.0으로 둔 설정에서는 네거티브 칸을 고쳐도 계산에 들어가지 않는다.
| 설정 | 네거티브 프롬프트 | 출처 |
|---|---|---|
| ComfyUI · CFG 1.0 | 무조건 쪽 조건을 계산하지 않는다 | comfy/samplers.py sampling_function |
| ComfyUI · CFG 1.0이 아닌 값 | 무조건 쪽 조건으로 함께 계산한다 | comfy/samplers.py sampling_function |
| diffusers · guidance_scale 1 이하 | CFG가 꺼져 무시된다 (켜지는 조건은 1 초과) | diffusers 파이프라인 소스 |
CFG가 1보다 큰 설정이라면 네거티브는 결과에서 실제로 빼고 싶은 요소만 적고, 하나씩 더해 가며 견준다. 공식 문서는 모든 모델에 맞는 네거티브 문구 목록을 두지 않는다. 앞의 등불 가게 예라면 그림에 글자가 섞여 나올 때 text, watermark를 넣고, 다른 칸은 그대로 둔 채 한 장만 다시 뽑는다.
점검표 한 장 — 증상보다 칸의 순서로 본다
여섯 단계를 한 표로 모으면 이렇다. 위에서부터 한 칸씩 기준과 맞추고, 칸 하나를 바꿀 때마다 같은 시드로 한 장을 뽑아 견준다.
| 순서 | 칸 | 맞출 값 | 근거 |
|---|---|---|---|
| 0 | 시드 · 명령 창 | 시드를 한 값에 묶는다 · 계열 경고 줄이 있으면 파일부터 | KSampler seed · 4편 |
| 1 | 해상도 | SD 1.5는 512×512, SDXL은 1024×1024 또는 픽셀 수가 같은 비율 | SD 1.5 카드 · ComfyUI SDXL 예제 · diffusers |
| 2 | 스텝 · CFG · denoise | 카드 권장값 → 계열 공식 기본값 · 증류 모델은 CFG 1.0 · 텍스트로만 그릴 때 denoise 1.0 | nodes.py · presets.py · Flux 예제 · Neo 위키 |
| 3 | 샘플러 · 스케줄러 | 계열 기본 조합에서 출발 · 샘플러와 스케줄러는 따로 바꾼다 | comfy/samplers.py · Forge Neo 코드 |
| 4 | 프롬프트 길이 | 붙어야 할 묘사를 한 조각에 · 나눌 자리는 BREAK | A1111 위키 |
| 5 | 가중치 | 괄호를 겹치지 말고 숫자로 · 한 구절씩 | A1111 위키 · ComfyUI README |
| 6 | 네거티브 | CFG 1.0이면 계산에 안 들어간다 · 뺄 요소만 하나씩 | comfy/samplers.py · diffusers · A1111 위키 |
표의 앞쪽이 숫자 칸인 이유는 공식 기준값이 코드와 문서에 있어서 맞았는지 틀렸는지를 바로 가를 수 있기 때문이다. 뒤쪽의 프롬프트 칸은 그림마다 답이 달라서, 앞의 칸이 모두 기준과 맞은 상태에서 손봐야 무엇이 결과를 바꿨는지 보인다. 모델 파일 자체를 다시 골라야 하는지는 4편의 순서로, 프로그램이 받는 계열은 1편과 3편으로 돌아가 확인한다.
자주 묻는 것
스테이블 디퓨전 프롬프트를 고쳐도 그림이 그대로면 무엇부터 보나요?
시드를 한 값에 묶고 숫자 칸부터 본다. 해상도가 모델의 기준과 맞는지, 스텝과 CFG가 체크포인트 권장값이나 계열 기본값과 맞는지 확인한다. 특히 CFG가 1.0이면 ComfyUI 코드는 네거티브 조건을 계산하지 않아서 네거티브 칸을 고쳐도 결과에 반영되지 않는다.
SDXL 모델인데 512×512로 뽑아도 되나요?
기준에서 벗어난다. ComfyUI 공식 SDXL 예제는 1024×1024 또는 픽셀 수가 같은 다른 비율을 권하고, diffusers의 SDXL 파이프라인 설명은 512픽셀보다 작으면 SDXL base와 저해상도용으로 미세 조정하지 않은 체크포인트에서 잘 작동하지 않는다고 적었다. ComfyUI Empty Latent Image 노드의 기본값이 512×512라서 SDXL로 바꿀 때는 이 노드의 폭과 높이도 함께 바꾼다.
CFG는 몇으로 두나요?
체크포인트 설명 글에 권장값이 있으면 그 값에서 출발한다. 프로그램 기본값은 서로 달라서 ComfyUI KSampler는 8.0, diffusers는 SD 파이프라인 7.5 · SDXL 파이프라인 5.0, Forge Neo는 sd 프리셋 6 · xl 프리셋 4.5다. FLUX.1 [dev]처럼 증류한 모델은 ComfyUI 공식 예제와 Forge Neo 위키 모두 CFG 1.0을 안내한다.
샘플러는 무엇을 고르나요?
계열의 공식 기본 조합에서 출발한다. Forge Neo 프리셋은 sd · xl에 Euler a와 Automatic, flux에 Euler와 Beta를 둔다. ComfyUI 목록에는 2026년 9월 15일 기준 샘플러 45개와 스케줄러 9개가 있고, «DPM++ 2M Karras» 같은 이름은 ComfyUI에서 샘플러 dpmpp_2m과 스케줄러 karras 두 칸으로 나눠 고른다. 바꿀 때는 한 칸씩 바꾼다.
프롬프트가 길면 뒷부분이 잘리나요?
A1111 위키 기준으로는 잘리지 않고 75토큰씩 조각으로 나뉘어 따로 처리된 뒤 이어 붙는다. 120토큰이면 75토큰과 45토큰 두 조각이 된다. 한 덩어리로 읽혀야 할 묘사가 조각 경계에 걸리지 않게 하려면 대문자 BREAK로 조각을 나눌 자리를 직접 정한다.
참고 자료
- Comfy-Org. ComfyUI — nodes.py · comfy/samplers.py · README — KSampler 입력(seed 0 · control_after_generate, steps 20, cfg 8.0 · 0~100, denoise 1.0)과 설명, Empty Latent Image 기본 512×512 · 8 단위, 샘플러 45개 · 스케줄러 9개 목록, sample_ 함수 이름, CFG 1.0일 때 무조건 조건을 비우는 sampling_function, 괄호 강조 기본 1.1. nodes.py · samplers.py · README
- ComfyUI Docs. KSampler — sampler_name · scheduler · negative · denoise 입력 설명. docs.comfy.org
- comfyanonymous. ComfyUI Examples — SDXL · Flux — SDXL 1024×1024와 896×1152 · 1536×640, FLUX.1 [dev] fp8 체크포인트의 CFG 1.0. SDXL · Flux
- Hugging Face. diffusers — pipeline_stable_diffusion_xl.py · pipeline_stable_diffusion.py · Stable Diffusion XL 문서 — height · width 기본 1024와 512픽셀 미만 안내, guidance_scale 기본 5.0 · 7.5와 설명, num_inference_steps 기본 50, negative_prompt 설명, guidance_scale 1 초과 조건. SDXL 파이프라인 · SD 파이프라인 · 문서
- Stability AI · Hugging Face. stable-diffusion-v1-5 · stable-diffusion-xl-base-1.0 모델 카드 — SD 1.5의 512×512 미세 조정, SDXL base 1.0 카드. SD 1.5 · SDXL base
- AUTOMATIC1111. stable-diffusion-webui 위키 — Features — 75토큰 조각 · 77토큰 · BREAK, 괄호 · 대괄호 강조 문법, 네거티브 프롬프트의 작동 방식. github.com
- Haoming02. sd-webui-forge-classic(neo) — presets.py · sd_samplers_kdiffusion.py · 위키 Inference References — UI Preset별 샘플러 · 스케줄러 · 스텝 · CFG · Distilled CFG, Euler a · DPM++ 2M 항목의 함수와 scheduler 옵션, 증류 모델 CFG 1.0. presets.py · sd_samplers_kdiffusion.py · Inference References