AI活用

ComfyUIでSeedを固定する方法|同じ画像を再現できない原因も解説

ComfyUIでSeedを固定するにはKSamplerのcontrol_after_generateをfixedにします。Seedが固定するのはノイズの出発点だけで、model・sampler・解像度・ノード差で同じSeedでも画像が変わる条件と、再現のための記録方法を解説します。

この記事の目次
  1. 結論:Seedはノイズの出発点であり、画像の保存番号ではない
  2. Seedは何を固定する値か
  3. 固定・ランダム・増加の違い
  4. 「生成後」に変わることに注意する
  5. 同じSeedでも画像が変わる条件
  6. 比較実験で固定するもの
  7. 再現してほしい確認:同条件2回+CFGだけ変更
  8. Workflowとメタデータを残す
  9. 完全再現できない場合
  10. よくある質問
  11. 気に入った画像のSeedを後から知るにはどうしますか?
  12. Seedを固定すれば、別のpromptでも同じ構図になりますか?
  13. batch_sizeを2以上にしたとき、各画像のSeedはどうなりますか?
  14. まとめ

ComfyUIでSeedを固定するには、KSamplerのseedに値を入れ、その下のcontrol_after_generatefixedにします。ただしSeedが固定するのは最初のノイズだけで、model・sampler・解像度・ノードのどれかが変われば同じSeedでも別の画像になります。

情報確認日:2026年8月22日(日本時間)

結論:Seedはノイズの出発点であり、画像の保存番号ではない

責任範囲

  • Seedが何を決めて、何を決めないか
  • 現行UI(2026年8月時点)のfixed / increment / decrement / randomizeの違い
  • 同じSeedなのに画像が変わる条件の一覧
  • 一変数比較のために固定する項目のチェックリスト
  • workflow JSONとPNGメタデータで再現条件を残す方法
  • それでも完全一致しない場合の考え方

KSampler自体の役割や、最小workflowでの最初の生成手順はComfyUIの使い方で説明しています。Steps・CFG・Sampler・Schedulerそれぞれの意味は別記事で扱うため、この記事ではSeedと再現性に絞ります。

スポンサーリンク

Seedは何を固定する値か

Seedは、KSamplerが生成の出発点として用意するランダムノイズの「作り方」を決める整数です。同じSeedなら同じノイズから始まる、というだけの値であり、画像そのものを指すIDではありません。

画像生成は、ノイズだけの潜在画像(Latent)から、modelが予測したノイズを何段階かで引いていく処理です。出発点のノイズが同じでも、引き算をするmodel、引き方を決めるsamplerとscheduler、引く回数のsteps、promptの効かせ方のCFGが一つでも違えば、着地点は変わります。Seedは「スタート地点を揃える」ための値で、ゴールまでの道筋は他の設定が決めます。

ソース上、KSamplerのseedは0から18446744073709551615(64bit整数の上限)までの範囲で、既定値は0です。値の大小や近さに意味はありません。

「同じSeed=同じ画像」と書かれている場合:公式ドキュメントのKSampler解説にも同じSeedは同一の画像を生成すると書かれていますが、これは他の全条件が同じ場合の話です。この記事の後半で扱う「変わる条件」が一つでも違えば成り立ちません。

固定・ランダム・増加の違い

KSamplerのseed欄の下には、生成後にSeedをどう扱うかを選ぶcontrol_after_generateがあります。現行のフロントエンド(Comfy-Org/ComfyUI_frontend、2026年8月時点)では次の4つです。

選択肢 生成後のSeed 向いている場面
fixed 変わらない 設定を1つだけ変えて比較する。同じ画像を作り直す
increment 1ずつ増える 連番で複数案を出し、後からSeed番号で特定したい
decrement 1ずつ減る incrementの逆方向。用途は同じ
randomize ランダムな値になる 構図の当たりを探す。比較には使わない

比較実験で使うのはfixedだけです。randomizeのままにしていると、設定を変えた効果なのか、Seedが変わった効果なのかを切り分けられません。

「生成後」に変わることに注意する

名前のとおり、既定ではSeedは生成が終わった後に更新されます。randomizeで気に入った画像が出たとき、画面に表示されているSeedはすでに次の値に変わっています。気に入った画像のSeedは、画像に埋め込まれたメタデータか、生成履歴(Queue)で確認してください。

設定画面には、この更新を生成前に行うか後に行うかを切り替える「Widget control mode」(before / after)があります。beforeにすると表示中のSeedが「これから使う値」ではなく「直前に使った値」の意味に変わるため、チームで同じworkflowを使うときはどちらに設定しているかを揃えてください。表示名や既定値は版で変わる可能性があるため、手元の設定画面で確認してください。

同じSeedでも画像が変わる条件

同じSeedを入れたのに違う画像になるときは、Seed以外のどれかが変わっています。思い当たらない場合は次の表を上から確認してください。

変わったもの なぜ画像が変わるか 確認方法
checkpoint・VAE ノイズの引き算をするmodelが別物になる。同名でも版違いは別model ファイル名だけでなくsha256を比べる
LoRA・Embedding modelとCLIPの重みが変わる。強度の違いも同じ Load LoRAのlora_nameと強度、promptのembedding指定を比べる
sampler・scheduler・steps・CFG 同じ出発点から別の道筋をたどる KSamplerの全欄を比べる
幅・高さ・batch_size Latentの形が変わるため、生成されるノイズの配列そのものが変わる Empty Latent Imageの値を比べる
prompt・negative prompt conditioningが変わる。空白や句読点の違いも別のトークン列になり得る テキストをdiffで比べる
入力画像(img2imgやControlNet) 出発点がノイズだけでなく画像を含むため、画像の差がそのまま出る 画像ファイルのハッシュを比べる
ノード構成・custom node 同じ見た目でも処理が違うノードに差し替わっている。custom nodeの更新も含む workflow JSONをdiffで比べる
ComfyUI本体の版・GPU・ライブラリ 計算の実装が変わると、同じ式でも浮動小数の結果がわずかに変わる 起動ログの版表示と環境を記録する

この表の最後の行だけは、設定を揃えても起きます。残りの行は「揃えたつもりで揃っていない」ケースで、特にmodelの版違いとworkflow内のノード差し替えは見落としやすい項目です。

複数LoRAを重ねている場合は、順序や強度も再現条件に含まれます。比較の組み方は複数LoRAの比較記事で扱っています。

比較実験で固定するもの

「何かを変えて効果を見る」実験では、変える項目を1つに絞り、残りをすべて固定します。固定漏れを防ぐためのチェックリストです。

  • control_after_generatefixedにした
  • Seedの値を記録した(画面の値ではなく、生成に使われた値)
  • checkpoint・VAE・LoRAのファイル名とsha256を記録した
  • sampler・scheduler・steps・CFG・denoiseを記録した
  • 幅・高さ・batch_sizeを固定した
  • prompt・negative promptをテキストファイルで保存した
  • 変える項目は1つだけで、変更前後の値を記録した
  • 比較の前に、同条件で2回生成して同じ画像が出ることを確認した

最後の項目が、この記事で再現してほしい確認です。比較を始める前に、まず「同じ条件で2回出すと同じになる」環境かどうかを確かめます。

再現してほしい確認:同条件2回+CFGだけ変更

  1. 最小workflow(Load Checkpoint → CLIP Text Encode ×2 → Empty Latent Image → KSampler → VAE Decode → Save Image)で、Seedを任意の値に決めfixedにする
  2. 何も変えずに2回生成し、2枚の画像を比べる(目視に加え、ファイルのハッシュか差分画像で確認する)
  3. CFGだけを変えて(例:既定値の8.0から4.0へ)、もう1枚生成する
  4. 3枚を並べ、次の表に結果を記録する
No. 条件 Seed CFG 1枚目との一致 気づいたこと
1 基準 (固定値) 8.0
2 1と完全同条件 同じ 8.0 一致 / 微差 / 不一致
3 CFGだけ変更 同じ 4.0

見るポイントは2つです。1と2が一致すれば、その環境では再現性が確保できています。微差が出るなら次の「完全再現できない場合」に該当し、比較は「ほぼ同じ」を前提に読みます。1と3では、構図や配置が大きく保たれたまま、promptへの忠実さやコントラストが変わる、というのがCFGだけを動かしたときに機構から予想される見え方です。構図まで別物になっているなら、CFG以外が変わっていないかをworkflow JSONのdiffで確認してください。

Workflowとメタデータを残す

再現に必要なのは、Seedの数字だけではありません。公式ドキュメントのとおり、workflowはJSONファイルとして保存でき、Save Imageなど組み込みの保存ノードを使うと出力画像の中にもworkflowが埋め込まれます。画像をキャンバスにドラッグすれば、その画像を作ったworkflowが復元されます。

ただし埋め込まれるのはノードと設定値で、modelファイルの中身までは入りません。同じ名前の別版をロードしていれば、workflowは同じでも画像は変わります。次の3点を1組で残してください。

  1. workflow JSON:メニューから保存したもの。diffで比較できるようにテキストのまま置く
  2. 出力PNG:Save Imageで保存した、メタデータ付きのもの。後から配布するときは、promptが埋め込まれている点に注意する
  3. 環境メモ:model名とsha256、ComfyUI本体とcustom nodeの版、GPUとOS
run_id: 2026-08-22-cfg-test
seed:
control_after_generate: fixed
checkpoint:
  name:
  sha256:
vae:
loras: []
sampler:
scheduler:
steps:
cfg:
denoise: 1.0
size:
prompt_file: prompts/cfg-test.txt
workflow_file: workflows/cfg-test.json
comfyui_version:
custom_nodes:
gpu:
notes:

PNGに埋め込まれたメタデータは、ComfyUI上でなくても読めます。Pythonならこの程度で確認できます。

from PIL import Image
import json

img = Image.open("ComfyUI_00001_.png")
meta = img.info  # PNGのテキストチャンクが辞書で入る
for key, value in meta.items():
    print(key)
    try:
        print(json.dumps(json.loads(value), ensure_ascii=False, indent=2)[:800])
    except (TypeError, ValueError):
        print(value)

どのキー名で何が入るかは版によって変わる可能性があるため、キーを決め打ちせず、上のように全キーを列挙して中身を確認してください。リサイズや再保存を挟むと、このメタデータは失われることがあります。

完全再現できない場合

全条件を揃えても、ピクセル単位で一致しないことがあります。これは設定ミスではなく、計算環境の差によるものです。

  • GPUの種類やドライバ、PyTorchやCUDAの版が違うと、同じ演算でも丸め誤差の出方が変わる
  • 同じ環境でも、高速化のために非決定的なアルゴリズムが選ばれる処理がある
  • samplerによっては途中でノイズを追加するもの(名前にancestralsdeを含むもの)があり、実装の違いが結果に出やすい

ComfyUIには起動オプション--deterministicがあります。ソース上のヘルプ文には、PyTorchに可能な範囲で低速な決定的アルゴリズムを使わせるが、すべてのケースで画像が決定的になるわけではない、と書かれています。つまり公式にも「完全一致は保証しない」という前提です。

実務上の割り切りは次のとおりです。同一マシン・同一環境では「同条件2回で一致する」ことを確認し、その環境内で比較します。別マシンで再現するときは、ピクセル一致ではなく「構図・配置・主要な特徴が同じ」ことを再現の基準にします。この基準を記録に書いておけば、後から見た人が「微差がある=失敗」と誤解しません。

微差と別物を区別する:構図が保たれたまま細部のノイズが違うなら環境差です。構図や人物の向きが変わっているなら、Seed以外の設定が変わっています。後者を環境差として片付けず、workflow JSONのdiffを取ってください。

よくある質問

気に入った画像のSeedを後から知るにはどうしますか?

保存したPNGをキャンバスにドラッグすると、生成時のworkflowとSeedが復元されます。randomizeで生成していた場合、画面に表示されているSeedはすでに次の値なので、画面の値を信用しないでください。

Seedを固定すれば、別のpromptでも同じ構図になりますか?

なりません。Seedが揃えるのは出発点のノイズだけで、promptが変わればconditioningが変わり、着地点も変わります。似た構図が出ることはありますが、保証される性質ではありません。

batch_sizeを2以上にしたとき、各画像のSeedはどうなりますか?

1回の生成で複数のLatentが作られ、表示されるSeedは先頭の1枚に対応します。個別の画像を後から1枚だけ再現したい場合は、batch_size 1で同じSeedから出し直したものと一致するか、手元の版で確認してください。挙動は実装の版に依存するため断定しません。

まとめ

Seedは出発点のノイズを揃える整数で、画像の保存番号ではありません。比較するときはcontrol_after_generatefixedにし、model・sampler・解像度・prompt・ノード構成を揃え、変える項目を1つに絞ります。同じSeedで画像が変わったら、まずworkflow JSONのdiffとmodelのsha256を確認してください。

それでもピクセル単位で一致しないことはあり、公式の--deterministicも完全一致を保証していません。同条件2回の確認を先に済ませ、workflow JSON・メタデータ付きPNG・環境メモを1組で残すこと。これが再現性のために実際にできる範囲です。

スポンサーリンク