KSamplerは、MODEL・positive/negativeのconditioning・Latentを受け取り、Seedで作ったノイズをStepsの回数だけ取り除いて新しいLatentを返すノードです。Steps・CFG・Sampler・Scheduler・Denoiseはそれぞれ別の役割を持ち、「多いほど良い」「この値が正解」という値は存在しません。
情報確認日:2026年8月22日(日本時間)
結論:5つの値は役割が違うので、1つずつ動かして自分の基準を作る
責任範囲
- KSamplerの入力・出力と、workflow内での位置づけ
- Steps・CFG・Sampler・Scheduler・Seed・Denoiseそれぞれが何を決めるか
- Seedを固定してStepsとCFGを一変数ずつ比較し、時間も記録する手順
- モデルごとの「魔法の値」ではなく、条件表として基準値を残す方法
最小workflowの組み方と最初の生成手順はComfyUIの使い方、Seedの固定方法と同じSeedでも変わる条件はSeedを固定する方法で扱っています。この記事は、KSamplerの各欄が「何をしているか」の理解に絞ります。特定モデル向けの推奨値ランキングは扱いません。
KSamplerは何を担当するか
KSamplerの仕事は、Latent(潜在空間の画像データ)を受け取り、modelの予測に従ってノイズを段階的に取り除き、更新したLatentを返すことです。画像そのものは扱いません。ピクセルに戻すのは後段のVAE Decodeです。
入力 出力
model ← Load Checkpoint(またはLoad LoRA経由)
positive ← CLIP Text Encode(描きたい内容)
negative ← CLIP Text Encode(避けたい内容) ──→ LATENT ──→ VAE Decode
latent_image ← Empty Latent Image(txt2img)
or VAE Encode(img2img)
ノード内の設定値
seed / control_after_generate
steps / cfg / sampler_name / scheduler / denoise
ソース(nodes.py、2026年8月時点)でのKSamplerの定義は、入力がMODEL・CONDITIONING×2・LATENTの4本、戻り値がLATENT 1本です。設定値の範囲は、seedが0〜264-1、stepsが1〜10000(既定20)、cfgが0.0〜100.0(既定8.0、刻み0.1)、denoiseが0.0〜1.0(既定1.0)です。この範囲は「動く範囲」であって「使う範囲」ではありません。
KSampler (Advanced) との違い:Advanced版はノイズ追加の有無や開始・終了ステップを個別に指定でき、複数のsamplerをつなぐ多段構成で使います。この記事は標準のKSamplerだけを扱います。
Stepsは多ければ良いのか
Stepsは、ノイズを取り除く工程を何回に分けるかです。回数が多いほど1回あたりの変化が小さくなり、ある回数までは細部が整っていきます。ただし、それ以上増やしても見た目がほとんど変わらなくなる「飽和点」があり、飽和後は生成時間だけが増えます。
飽和点はmodel・sampler・schedulerの組み合わせで変わります。蒸留系や高速化されたmodelでは少ないStepsを前提に学習されており、増やすとかえって崩れる場合もあります。したがって「Stepsは○○が最適」という値はなく、使うmodelごとに飽和点を測るほかありません。
再現してほしい比較①:Stepsだけを動かして時間も記録する
- Seedを固定し(
control_after_generateをfixed)、prompt・CFG・sampler・scheduler・解像度を決めて変えない - Stepsを10・20・30・40と変えて1枚ずつ生成する
- 各生成の所要時間をコンソールのログから記録する(ComfyUIは実行ごとに
Prompt executed in X secondsの形で出力します。版によって文言が変わる場合は、手元のログで同等の行を確認してください) - 4枚を100%表示で並べ、どの段階で変化が止まったかを見る
| Steps | 所要時間(秒) | 前の段階との差(細部・手・文字) | 判定 |
|---|---|---|---|
| 10 | — | ||
| 20 | |||
| 30 | |||
| 40 |
見るポイントは「前の段階との差」が目視で分からなくなった最初のStepsです。そこが、そのmodel・sampler・schedulerでの飽和点の目安になります。時間はStepsにほぼ比例して増えるはずなので、飽和点より先のStepsは時間の無駄と判断できます。1枚では偶然の可能性があるため、Seedを2〜3個変えて同じ傾向かを確認してください。
CFGはPromptにどう関わるか
CFG(classifier-free guidance scale)は、各ステップで「promptあり」の予測と「promptなし(またはnegative)」の予測の差を、どれだけ強く反映するかの倍率です。値が大きいほど生成はpromptの方向に強く引っ張られ、小さいほどmodelの素の傾向に近づきます。
高くすれば忠実になる、という単純な関係ではありません。倍率を上げ過ぎると、予測の差を過剰に足し込むことになり、色が飽和する、コントラストが極端になる、輪郭が二重になる、ノイズ状の模様が出る、といった破綻が起きます。逆に低過ぎると、promptの指定が無視されたように見え、構図が曖昧になります。
公式ドキュメントのKSampler解説には6〜8が推奨と書かれていますが、これは一般的なmodelを前提にした目安です。CFGを使わない前提で蒸留されたmodelや、低いCFGを前提にしたmodelでは当てはまりません。使うmodelの配布元が示す値を起点にし、次の比較で自分の目で確認してください。
再現してほしい比較②:CFGだけを動かす
- 比較①で決めたStepsに固定し、Seed・prompt・sampler・scheduler・解像度も変えない
- CFGを3.0・5.0・7.0・10.0・15.0と変えて1枚ずつ生成する
- 5枚を並べ、promptへの忠実さと破綻の両方を見る
| CFG | 所要時間(秒) | promptの要素は出たか | 破綻(飽和・二重輪郭・ノイズ) | 判定 |
|---|---|---|---|---|
| 3.0 | ||||
| 5.0 | ||||
| 7.0 | ||||
| 10.0 | ||||
| 15.0 |
所要時間の列を残すのは、CFGがStepsと違って時間にほとんど影響しないことを自分の環境で確かめるためです。判定では「promptの要素が出ていて、かつ破綻が始まっていない」範囲の上限と下限を記録します。この幅が、そのmodelでのCFGの使える範囲です。
SamplerとSchedulerを分ける
KSamplerにはsampler_nameとschedulerという2つの選択欄があり、混同されやすいのですが別の概念です。
| 欄 | 決めること | たとえ | 選択肢の例(ソース上の名前) |
|---|---|---|---|
sampler_name |
各ステップでノイズをどう引くかの計算方法(アルゴリズム) | 坂を下りる歩き方 | euler / euler_ancestral / dpmpp_2m / dpmpp_2m_sde / ddim / uni_pc など |
scheduler |
各ステップでどれだけのノイズ量を割り当てるか(ノイズスケジュール) | 坂のどこに足場を置くか | normal / karras / exponential / sgm_uniform / simple / beta など |
Schedulerは、全ステップ分のノイズ量(sigma)の並びを先に決めます。Samplerはその並びに沿って、1ステップずつLatentを更新する役目です。同じSamplerでもSchedulerを変えれば足場の間隔が変わり、同じSchedulerでもSamplerを変えれば歩き方が変わります。片方だけを変えて比べないと、どちらの効果かが分かりません。
名前から読み取れること
ancestralまたはsdeを含むSamplerは、各ステップで新たなノイズを加えます。Stepsを変えると結果が収束せず変わり続ける傾向があり、Seedを固定しても環境差が出やすい部類です_cfg_ppを含むものは、CFGの掛け方を変えた派生です。同じCFG値でも通常版とは効き方が違うため、CFGの比較はSamplerを固定してから行います_gpuが付くものは、ノイズ生成をGPU側で行う版です。CPU版と同じSeedでも結果が一致しない点に注意してください
選択肢の一覧はソースのcomfy/samplers.pyで定義されており、版が上がると増えます。手元の一覧にない名前が他所の設定に書かれていた場合は、ComfyUI本体の版を確認してください。どれが「良い」かは断定できません。同じSeed・Steps・CFGでSamplerだけ、次にSchedulerだけを変えた比較を残し、自分の用途での基準を作ります。
SeedとDenoiseを整理する
Seedは出発点のノイズを決める整数で、詳しくはSeedの記事で扱っています。ここではDenoiseとの関係だけ整理します。
Denoiseは「入力のLatentをどこまでノイズに戻してから描き直すか」の割合です。意味はworkflowの種類で変わります。
txt2img(Empty Latent Image から)
Denoiseは1.0のまま
- 入力は空のLatentなので、全工程でノイズから描く
- 1.0未満にすると、工程の一部を飛ばすことになり、ノイズが残った画像になる
- 調整する場面はほぼない
img2img(VAE Encode した画像から)
Denoiseが「元画像をどれだけ残すか」を決める
- 低い値(0.2〜0.4程度)は元画像の構図・色を保ちつつ細部だけ変える
- 高い値(0.7以上)は元画像の面影が薄れ、txt2imgに近づく
- 数値は目安であり、model・Steps・元画像で体感は変わる
仕組みとしては、Denoiseが1.0未満のとき、KSamplerはsteps ÷ denoiseに相当するステップ数のノイズスケジュールを作り、その後半のsteps回分だけを実行します(ソースのset_stepsで確認)。つまりDenoise 0.5・Steps 20なら、40ステップ分のスケジュールのうち後半20ステップだけを、元画像に中程度のノイズを乗せた状態から始める、という動きです。元画像を「どれだけ壊してから描き直すか」がDenoiseの正体で、SeedはそのときにLatentに乗せるノイズの模様を決めます。
自分の基準値を作る
比較①②を終えると、使っているmodelについて「Stepsの飽和点」「CFGの使える幅」が手元に残ります。これを「正解の値」として覚えるのではなく、条件付きの表として残してください。modelやSamplerを変えた瞬間に、別の表が必要になるからです。
baseline_id: sdxl-base-euler-normal-2026-08
checked_at: 2026-08-22
checkpoint:
name:
sha256:
sampler_name: euler
scheduler: normal
size: 1024x1024
seed_used_for_test:
steps:
saturation_point: # 比較①で差が見えなくなった最初の値
adopted:
seconds_at_adopted:
cfg:
usable_min: # 比較②でpromptの要素が出始めた値
usable_max: # 破綻が始まる手前の値
adopted:
denoise: 1.0 # txt2imgの基準
notes: LoRAなし・ControlNetなしで測定。LoRA追加時は再測定
workflow_file: workflows/baseline-sdxl-euler.json
表の冒頭にsampler・scheduler・解像度・modelのsha256が入っているのは、これらのどれかが変わったら表ごと作り直す、という意味です。LoRAを足したときも同様で、LoRAの強度比較はLoRAの記事の手順で、この基準値の上に積む形で行います。
基準値があると、新しいpromptを試すときにKSamplerを触らずに済みます。promptだけを変えて結果が悪いとき、初めてStepsやCFGを疑えばよく、迷いが少なくて済む順番です。生成速度そのものの計測や環境比較は別記事で扱います。
よくある質問
Stepsを増やせば手や文字の崩れは直りますか?
飽和点までは改善することがありますが、飽和後はStepsを増やしても変わりません。手や文字の崩れはmodelの能力やprompt、解像度の影響が大きく、Steps以外の要因を疑う方が早い場合が多いです。
CFGを0にするとどうなりますか?
仕組みの上ではpromptの方向への引っ張りがなくなり、negative promptも効かなくなります。通常の用途では使いませんが、CFG不要を前提に作られたmodelでは低い値や1.0付近が指定されることがあります。配布元の案内を確認してください。
SamplerとSchedulerはどの組み合わせから試せばよいですか?
既定の組み合わせ、または使うmodelの配布元が示す組み合わせで基準を作り、片方ずつ変えて比べてください。この記事では「この組み合わせが最良」という断定はしません。結果は用途とmodelで変わります。
まとめ
KSamplerは、Latentに乗せたノイズをmodelの予測に従って取り除くノードです。Stepsは工程の回数、CFGはpromptへの引っ張りの倍率、Samplerは各ステップの計算方法、Schedulerはステップごとのノイズ量の割り当て、Denoiseは入力をどこまで壊してから描き直すか、Seedは最初のノイズの模様をそれぞれ決めます。
どの値にも万能な正解はありません。Seedを固定し、StepsとCFGを1つずつ動かして時間と結果を表に残せば、そのmodelでの自分の基準値ができます。基準値を条件付きで記録しておけば、model・Sampler・LoRAを変えたときに、何を測り直せばよいかが明確になります。