AI活用

ComfyUIでimg2imgを使う方法|Denoiseで元画像をどこまで残すか検証

ComfyUIのimg2imgはLoad Image→VAE Encode→KSampler→VAE Decodeの4ノードで組め、元画像をどれだけ残すかはKSamplerのDenoiseだけで決まります。同一Seedで0.2〜0.8を比較する手順と判断基準を解説します。

この記事の目次
  1. 結論:img2imgは「途中からやり直す生成」で、denoiseがやり直す量を決める
  2. img2imgの処理を3段階で理解する
  3. 最小workflowを組む
  4. denoiseが変えているもの
  5. 同一seedでdenoiseを比較する
  6. 解像度とVAEをdenoiseと同時に変えない
  7. img2imgが向く用途・向かない用途
  8. よくある質問
  9. denoiseを下げたのに元画像とほとんど変わらないのはなぜですか?
  10. 元画像が大きいと、denoiseが同じでも変化が大きく見えます。
  11. 公式例のdenoise 0.87はおすすめ値ですか?
  12. まとめ

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段階で説明されています。

  1. 画像 → latent:VAE Encodeが元画像を圧縮表現(latent)に変換する。この時点で元画像の情報はすべてlatentに入っている
  2. latent → ノイズ追加:KSamplerがdenoiseの値に応じた量のノイズをlatentに重ねる。denoise 1.0なら元画像が見えなくなるまで、0.3なら少しだけ
  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で扱います。

スポンサーリンク