ComfyUIのimg2imgは、Empty Latent Imageの代わりに「Load Image → VAE Encode」で作ったlatentをKSamplerに渡し、denoiseを1未満にするだけで動きます。元画像をどこまで残すかを決めているのはdenoise一つで、0に近いほど元画像、1に近いほどpromptだけの生成に寄ります。
情報確認日:2026年8月22日(日本時間)
結論:img2imgは「途中からやり直す生成」で、denoiseがやり直す量を決める
責任範囲
- img2imgが内部で何をしているかを3段階で説明する
- 標準ノードだけの最小workflowと配線を示す
- denoiseの中間値が何を意味するかを機構から説明する
- 同一seedでdenoiseだけを4段階変える比較手順と記録表を示す
- 解像度・VAEをdenoiseと同時に変えない理由を示す
ノードの基本操作やtxt2imgの最小構成はComfyUIの使い方、KSamplerの各パラメータはComfyUIのKSamplerを理解するに分けています。この記事はimg2imgに固有の部分だけを扱い、ControlNetによる構図制御と、マスクで一部だけ直すinpaintingは別記事で扱います。
img2imgの処理を3段階で理解する
txt2imgとimg2imgの違いは「出発点のlatentが乱数か、元画像か」だけです。公式の例示ページでも「loading an image, converting it to latent space with the VAE and then sampling on it with a denoise lower than 1.0」と、この3段階で説明されています。
- 画像 → latent:VAE Encodeが元画像を圧縮表現(latent)に変換する。この時点で元画像の情報はすべてlatentに入っている
- latent → ノイズ追加:KSamplerがdenoiseの値に応じた量のノイズをlatentに重ねる。denoise 1.0なら元画像が見えなくなるまで、0.3なら少しだけ
- ノイズ除去 → 画像:ノイズを重ねた段階から、promptを手がかりに設定したstepsを進めてlatentを作り直し、VAE Decodeで画像に戻す
2段階目が肝心です。txt2imgは「完全なノイズから全stepsを使って描く」のに対し、img2imgは「途中まで描けている状態に戻して、残りをやり直す」処理です。そのため、denoiseが低いほど元画像の構図・色・配置が残り、高いほどpromptの指示が勝ちます。
最小workflowを組む
txt2imgの標準workflowから、Empty Latent Imageを外して2ノード足すだけです。ノード名は現行UI(2026年8月時点)の表示に合わせています。
Load Checkpoint
MODEL ─────────────────────────→ KSampler.model
CLIP ─→ CLIP Text Encode (+) ─→ KSampler.positive
CLIP ─→ CLIP Text Encode (-) ─→ KSampler.negative
VAE ─→ VAE Encode.vae
VAE ─→ VAE Decode.vae
Load Image
IMAGE ─→ VAE Encode.pixels
VAE Encode
LATENT ─→ KSampler.latent_image
KSampler
LATENT ─→ VAE Decode.samples
denoise: 1未満にする
VAE Decode
IMAGE ─→ Save Image
元画像はLoad Imageの「choose file to upload」で選ぶか、canvasにdragするとComfyUI/inputに保存されて一覧に出ます。公式例示ページにも「Input images should be put in the input folder」とあるので、fileを直接置いても構いません。
denoiseの既定値は1.0です。配線だけ変えてdenoiseを1.0のままにすると、元画像を読み込んでいても結果はtxt2imgと変わりません。公式チュートリアルにも「denoise should be less than 1」と明記されています。
VAE EncodeはLoad Imageの解像度をそのまま受け取るため、txt2imgで使っていたwidth・heightの指定は不要です。代わりに、元画像の解像度がそのまま生成解像度になります。
denoiseが変えているもの
denoiseは「ノイズスケジュール全体のどこから始めるか」、言い換えると「元画像にどこまでノイズを乗せ直すか」の割合です。ComfyUIのKSamplerは、stepsをdenoiseで割った長さのスケジュール(steps 20・denoise 0.5なら40 step分)を内部で作り、その末尾にあたる設定どおりの20 stepを実行します(ソースのset_stepsで確認)。つまり設定したstepsはすべて使われ、denoiseが決めるのは「どの深さのノイズから出発するか」です。denoise 0.5なら、スケジュールの中間にあたる強さのノイズを元画像のlatentに乗せ、そこから20 stepかけて描き直します。0と1だけを見ていると、この「出発点の深さ」という意味が見えません。
| denoise | 内部で起きること | 残りやすいもの | 変わりやすいもの |
|---|---|---|---|
| 0.0 | ノイズを足さず、stepも進まない | 元画像そのまま(VAEの往復劣化だけ) | なし |
| 0.2前後 | 浅いノイズを足し、終盤のstepだけやり直す | 構図・配置・色の大半 | 質感・細部・ノイズ感 |
| 0.5前後 | 中盤からやり直す | 大まかな構図・明暗の配置 | 形状の細部・服や背景の内容 |
| 0.8前後 | 序盤の少しだけ残してやり直す | 色の塊の位置、ぼんやりした配置 | 構図の多く・被写体の形 |
| 1.0 | 完全なノイズから全stepsを描く | なし(txt2imgと同じ) | すべて |
この表の「前後」は境界値ではありません。どのdenoiseでどこまで残るかは、model・元画像の情報量・steps・sampler・CFGで動きます。公式チュートリアルは「denoise値が小さいほど参照画像との差が小さく、大きいほど差が大きい」という向きだけを述べ、推奨値は示していません。具体的にどの値で何が残るかは、次の比較で自分の条件ごとに決めます。
同一seedでdenoiseを比較する
比較はdenoiseだけを変数にします。seedを固定する方法とcontrol_after_generateの扱いはComfyUIでSeedを固定する方法のとおりで、ここではfixedにしておきます。
固定するもの
- checkpoint・VAE
- 元画像(同じfile・同じ解像度)
- prompt・negative prompt
- seed(control_after_generate: fixed)
- sampler・scheduler・steps・CFG
- LoRA・ControlNet は外す
変えるもの
- denoise: 0.2 → 0.4 → 0.6 → 0.8
4枚を横に並べ、同じ箇所を100%表示で見ます。記録する観点は、「残したいもの」と「変えたいもの」に分けておくと判断がぶれません。
| denoise | 構図・配置は残ったか | 被写体の形は残ったか | promptの指示は反映されたか | 破綻・artifact | 判定 |
|---|---|---|---|---|---|
| 0.2 | |||||
| 0.4 | |||||
| 0.6 | |||||
| 0.8 |
判断の仕方は次のとおりです。
- 0.2と0.4の差がほとんど見えないなら、その元画像とmodelでは浅いdenoiseで書き換わる範囲(質感・細部)が元画像の情報量に対して小さすぎます。stepsを増やしても出発点の深さは変わらないため、0.5〜0.6に上げて差が出る地点を先に探します
- 0.6で構図が崩れ始めるなら、残したい要素の境界はその手前にあります。0.45・0.5・0.55と0.05刻みで狭めます
- 0.8でもpromptの指示が弱いなら、denoiseではなくpromptかCFGの問題です。denoiseをこれ以上上げても「元画像を捨てる」だけで、指示が通るようにはなりません
同一seedで比較しているので、4枚の差はdenoiseの差だけに由来します。seedが毎回変わっていると、構図の変化がdenoiseのせいか乱数のせいか区別できなくなり、比較そのものが成立しません。
解像度とVAEをdenoiseと同時に変えない
img2imgで結果が悪いとき、denoise・解像度・VAEを一度に動かすと原因が追えなくなります。それぞれが別の理由で画像を変えるからです。
解像度が変えるもの
- 元画像がmodelの学習解像度から離れていると、denoiseが低くても破綻が出る
- 大きすぎる画像は同じdenoiseでも細部の書き換え量が増えて見える
- 8の倍数でない辺は内部で切り詰められ、端が欠ける
VAEが変えるもの
- denoise 0.0でも、Encode→Decodeの往復で色味と細部がわずかに劣化する
- checkpoint内蔵VAEと外部VAEで色の出方が違う
- この劣化はdenoiseを下げても消えない
切り分けの順序は「denoise 0.0で往復劣化だけを確認 → 解像度をmodelの学習解像度に合わせる → そのうえでdenoiseを振る」です。denoise 0.0の結果が元画像と大きく違うなら、問題はdenoiseの手前にあります。解像度を変えるときはdenoiseを固定し、VAEを差し替えるときも他は動かさない、と一回に一変数を守ります。
img2imgが向く用途・向かない用途
img2imgは「元画像の大まかな情報を引き継ぐ」処理であって、「元画像の特定の部分を保証する」処理ではありません。この性質から用途を分けられます。
| 用途 | 向き不向き | 理由 |
|---|---|---|
| 構図を保ったまま画風を変える | 向く | 低〜中denoiseで配置が残り、質感はpromptで置き換わる |
| ラフ・下描きの清書 | 向く | 元画像の情報量が少ないぶん中denoiseでも構図が残りやすい |
| 写真の質感変更・色調の統一 | 向く | 低denoiseで細部だけが書き換わる |
| 顔や文字を一切変えずに背景だけ変える | 向かない | 全域にノイズが乗るため、残したい部分も必ず少し変わる。マスクで範囲を限るinpaintingの領分 |
| ポーズを厳密に指定する | 向かない | 低denoiseではpromptが通らず、高denoiseでは構図が残らない。ControlNetの領分 |
| 元画像と画素単位で一致させたい | 向かない | VAEの往復だけで一致は崩れる |
「一部だけ厳密に残したい」が出てきた時点で、denoiseをどう調整してもimg2imgでは解決しません。その場合はマスクで再生成範囲を限定するinpaintingに切り替えます。詳しい手順は別記事で扱います。
よくある質問
denoiseを下げたのに元画像とほとんど変わらないのはなぜですか?
浅いdenoiseでは、乗せるノイズが弱く、書き換わるのはスケジュール終盤で決まる質感や細部だけです。設定したstepsはすべて実行されるので、stepsを増やしても変化量は増えません。元画像と違う結果が欲しいなら、denoiseを上げて出発点を深くするか、promptとCFGで指示を強めてください。
元画像が大きいと、denoiseが同じでも変化が大きく見えます。
modelの学習解像度から離れた入力は、同じdenoiseでも細部の書き換えが目立ちます。img2imgの前に元画像を学習解像度付近に縮小し、必要ならあとで拡大するほうが挙動が安定します。
公式例のdenoise 0.87はおすすめ値ですか?
例示workflowの設定値であって推奨値ではありません。0.87は元画像の大半を作り直す値なので、構図を残したい用途では高すぎます。自分のmodelと元画像で、同一seedの4段階比較から決めてください。
まとめ
img2imgは、VAE Encodeで元画像をlatentにし、denoiseで決めた深さのノイズを足して設定したstepsで描き直す処理です。元画像をどこまで残すかはdenoise一つで決まり、0に近いほど元画像、1に近いほどtxt2imgに近づきます。値と結果の対応はmodelと元画像で変わるため、同一seedでdenoiseだけを4段階変え、解像度とVAEは別の回で切り分けてください。一部だけを残したい用途はimg2imgの領分ではなく、マスクを使うinpaintingで扱います。