クリエイティブ実践ガイド

ComfyUIの画像が真っ黒になるときの対処法|NaN・VAE・モデルを確認

ComfyUIで画像が真っ黒になる・NaNが出るときの切り分け方
目次
かがり

あぁぁ、待って出てきた絵が真っ黒……もう一回生成すれば直るの!?

ロコ

焦るよね。先に保存したPNGを開こう。そこも黒いかで、画面表示と生成処理を分けて調べられるよ。

保存したPNGを画像ビューアーで開き、絵が正常ならComfyUIのプレビューや画面表示を調べます。PNGまで黒ければ、生成処理へ調べる場所を移しましょう。

いまのワークフローを別名で保存し、分かる範囲で次の情報を控えます。全部そろわなくても、使うモデル、VAE、起動設定と、生成時のログを残すところから始めましょう。

ComfyUI version:
GPU:
driver:
model:
VAE:
precision設定:
workflow JSON:
seed:
resolution:
console log:

あとで同じ条件で実行すると、変更が効いたかを確かめやすくなります。モデルやシードまで一緒に替えてしまうより、調べるところを一つに絞れます。

最初に、エラー文を見る

ComfyUIを起動したターミナルやコンソールへ戻り、黒い画像を作ったときのメッセージを探します。最後の一行は、その前に起きた異常の結果かもしれません。少しさかのぼって、最初にエラーが出た処理を見てください。

表示された内容 次にすること
CUDA out of memory 最後に動いた設定へ戻し、バッチサイズ・画像サイズ・ほかのGPUアプリを確認する
次元やチャンネル数が一致しないエラー モデルとVAEなどの組み合わせを確認する
NaNやInf 最初に表示された処理を調べ、数値精度の設定を確認する
invalid value encountered in cast その前にVAEやサンプリングの異常がないか読む

NaNは、計算結果を正常な数値として扱えなくなったことを示します。黒い画像を見ただけでNaNと決めず、ログにその表示があるかを確かめましょう。見つからなければ、むやみに精度設定を増やさず、次のモデル構成を確認します。

モデル配布元のワークフローで試す

VAEやテキストエンコーダーを追加した覚えがあるなら、モデルの配布ページを開いてみてください。そこに指定された名前と、ワークフローで選んでいるファイル名を見比べます。VAEは、生成途中のデータを見える画像へ戻すためのモデルです。別系列のものを選ぶと、その変換に必要な構成が合わない場合があります。

独自に選んだVAEがあれば、配布元が指定するものへ戻します。Checkpoint内蔵のVAEを使う構成なら、CheckpointのVAE出力をVAE Decodeへつなぎ直してください。チャンネル数などが合わないエラーは、精度を替える前に、このファイルと接続の組み合わせを直します。

SDXLの基本構成で確認するなら、「チェックポイントを読み込む」のVAE出力 → VAE Decodeのvae入力をたどります。別のLoad VAEから線が来ていたら、まずそのファイル名を控えましょう。KSamplerで止まったのか、VAE Decodeまで進んでから止まったのかもログで分けると、変える箇所を絞れます。最初の一枚の記事に、内蔵VAEを使うSDXLの接続済みJSONと実画面があります。

何を変えたか分からなくなっていたら、保存済みのJSONは残したまま、配布元の基本ワークフローを開きましょう。そこで一枚を生成し、保存PNGを開いてみます。正常なら、使いたいLoRAや追加処理を一つずつ戻してください。追加した直後に黒くなれば、次に調べる対象が絞れます。

VAEの計算で黒くなる場合

かがり

途中には絵があったのに、最後だけ黒いわ。もうモデルを全部入れ直すしかないの……?

ロコ

その前に、画像へ戻す処理のログを見よう。途中の表示だけでは原因は決まらないけれど、調べる順番の手掛かりになるよ。

途中では絵が見えていたのに、最後に黒くなることもあります。この場合は、VAE Decodeの実行前後のログを見てみましょう。途中プレビューは最終画像と違う方法で表示されることがあるので、「途中で見えたからVAEだけが原因」とは決めず、エラーが出た処理も合わせて探します。

起動設定へ--fp16-vaeを追加しているなら、まず外して再起動してください。公式の起動引数の説明でも、この設定で黒画像が出る可能性が案内されています。

変更前の起動コマンドはコピーして残しておきます。もともと--fp16-vaeがない場合は「外す」操作はせず、配布元のVAEと接続が合っているかを先に確かめましょう。精度の指定を次々に追加するより、いま有効な指定を一つ把握する方が、変更後の結果を読めます。

それでも改善せず、VAEの計算精度を試すなら、--fp32-vaeを使う方法があります。これはVAEをfp32で計算する指定です。ほかのVAE精度指定を外し、次のうち自分の起動方法に合う場所を一つ変えてください。

  • Portableでは、普段の起動batをコピーし、コピー側のComfyUI起動コマンドへ--fp32-vaeを加えます。
  • 手動導入では、普段使う起動コマンドへ--fp32-vaeを加えます。
  • 現行Desktopでは、環境一覧で使う環境の「⋮ → Manage → Startup Args」を開き、起動引数へ追加します。

ワークフローを保存してComfyUIを終了し、変更した設定で起動し直します。ブラウザの再読み込みだけでは、起動引数は切り替わりません。

再起動後は、保存しておいた同じワークフローで一枚を作り、PNGとログを見ます。fp32ではメモリ使用量が増えることがあるので、新しくメモリ不足が出た場合は指定を外して元へ戻してください。そのうえでバッチサイズや画像サイズを下げ、一つずつ試します。

追加ノードや更新のあとから起きる場合

追加ノードを使い始めた直後なら、元のワークフローを残し、その処理を外した構成で比べます。起動時からエラーがある場合は、ノード名と依存パッケージのメッセージを控え、ノードの配布元で対応するComfyUIやパッケージの版を確認してください。

更新が必要かを調べるときも、「黒い画像」だけで検索するより、モデル名、GPU、ComfyUIとノードの版、エラー文を添えます。自分の構成に当てはまる修正が見つかったら、元の版へ戻せるようにして適用しましょう。見つけた起動引数をまとめて加えると、効いた変更が分からなくなるので、一件ずつ試します。

直ったら、同じ作業をもう一度試す

変更後は、保存しておいたワークフローで生成し、新しくできたPNGを画像ビューアーで開きます。前のファイルを見ていないか、保存日時も確かめてください。絵が見えることに加え、NaNなどが出ていたなら同じ警告がログから消えたかも見ます。

連続生成の途中で黒くなっていたなら、一枚できたところで終えず、以前と同じように続けて作ってみましょう。元の症状が出ないことを確かめられたら、動いたワークフローと起動設定を残します。次にモデルやノードを追加するときも、その組み合わせへ戻って確かめられます。

まとめ

  • まず保存PNGを開き、プレビューだけの問題か確かめる
  • エラー文を読み、モデル配布元が指定するVAEやワークフローで試す
  • VAEの精度設定は必要な場合に変更し、再起動後の画像で確認する