【ComfyUI】Latent Upscaleノードで高解像度画像生成!エラー「AssertionError: latent_image shape is not correct」の解決法

問題の概要:Latent Upscaleノード実行時のエラー

ComfyUIを使用して高解像度の画像を生成しようとする際、ワークフローに「Latent Upscale」ノードを組み込むことは一般的な手法です。しかし、特に初心者から中級者のユーザーがこのノードを扱う際、以下のようなエラーに遭遇することが頻繁に報告されています。

AssertionError: latent_image shape is not correct. Expected: torch.Size([1, 4, 128, 128]) Got: torch.Size([1, 4, 64, 64])

このエラーは、Latent Upscaleノードへの入力となる潜在空間(latent)の画像サイズ(解像度)が、ノードが期待する形状と一致していないことを示しています。結果としてワークフローの実行が中断され、高解像度化のプロセスが完了しません。本記事では、このエラーの根本原因と、ステップバイステップでの確実な解決手順を解説します。

原因の解説:潜在空間の解像度とアップスケール倍率

ComfyUIにおける画像生成は、多くの場合、低解像度の潜在空間(例: 64×64, 128×128)で開始され、その後「Latent Upscale」ノードなどで解像度を引き上げます。エラーの核心は、アップスケール前の潜在画像サイズと、アップスケールの「倍率」または「目標サイズ」の設定が整合していないことにあります。

「Latent Upscale」ノードは主に2つのモードで動作します。

1. 「scale_by」モードでの原因

「scale_by」パラメータ(例: 1.5, 2.0)を指定する場合、入力潜在画像の各次元にその倍率を乗じたサイズが出力されます。ここで問題となるのは、VAE(Variational Autoencoder)の仕様上、潜在画像のサイズは8の倍数である必要があるという点です。64×64を1.5倍すると96×96となりますが、これは8の倍数ではないため、後続のノード(特にVAEデコーダ)でエラーが発生する可能性が高まります。

2. 「width」/「height」モードでの原因

直接目標となる幅と高さをピクセル数で指定する場合、指定したサイズが入力潜在画像サイズの単純な整数倍になっていない、または8の倍数になっていない場合に、同様の形状不一致エラーや後続処理でのエラーが発生します。

また、エラーメッセージ自体が示すように、ノードへの入力がそもそも期待されるパイプラインから来ていない(例えば、KSamplerの出力を直接接続し忘れ、Empty Latent Imageノードの出力を誤って接続している)という単純な接続ミスも原因として考えられます。

解決方法:ステップバイステップ手順

以下の手順に従って、エラーを解決し、安定して高解像度画像を生成できるワークフローを構築しましょう。

ステップ1:基本ワークフローの確認と構築

まず、Upscaleを含まない基本的な画像生成ワークフローが正常に動作することを確認します。必須ノードは「Checkpoint Loader」、「CLIP Text Encode (Prompt)」、「KSampler」、「VAE Decode」です。このワークフローで意図したサイズ(例: 512×512)の画像が生成できることを確認してください。

ステップ2:Latent Upscaleノードの適切な挿入

基本的なワークフローが動作したら、高解像度化のプロセスを組み込みます。最も一般的で安定した方法は、「KSampler」と「VAE Decode」の間に「Latent Upscale」ノードを挿入することです。

  1. 「KSampler」の「LATENT」出力を、「Latent Upscale」ノードの「samples」入力に接続します。
  2. 「Latent Upscale」ノードの「upscaled_image」出力を、「VAE Decode」の「samples」入力に接続します。

これにより、生成された低解像度の潜在表現をアップスケールし、その後に画像空間にデコードする流れが完成します。

ステップ3:アップスケール方法とパラメータの適切な設定

ここが最も重要なポイントです。エラーを避けるために、以下のいずれかの方法を推奨します。

方法A:シンプルな倍率指定(scale_by)を使用する

「upscale_method」は「nearest-exact」や「bilinear」などを選択します。「scale_by」パラメータには、2.0、1.5、1.75などの値を設定します。入力サイズが64×64の場合、2.0倍で128×128(8の倍数)、1.5倍で96×96(8の倍数ではない→危険)となります。安全のため、2.0倍(解像度4倍)から試すのが無難です。

# ノード設定例 (Pseudocode)
Latent Upscale Node {
  upscale_method: "nearest-exact",
  scale_by: 2.0, // 入力が64x64なら128x128に、128x256なら256x512になる
  crop: "disabled"
}

方法B:正確なサイズ指定(width/height)を使用する

「scale_by」の代わりに「width」と「height」を直接指定するモードを使用します。この場合、指定するサイズは8の倍数であり、かつ元の潜在画像サイズの整数倍であることが理想です。元の潜在画像サイズは、Empty Latent Imageノードの設定や、KSamplerでの生成サイズによって決まります。

# ノード設定例 (Pseudocode)
Latent Upscale Node {
  upscale_method: "bilinear",
  width: 1024, // 8の倍数であることを確認
  height: 1024, // 8の倍数であることを確認
  crop: "disabled"
}

元の潜在画像サイズが不明な場合は、ワークフロー実行前に「KSampler」の出力を右クリックし、「変換」→「画像を表示」を選択することで、その形状(例: [1, 4, 64, 128])を確認できます。この例では高さ64、幅128です。

ステップ4:高解像度再合成(Hires Fix)ワークフローの構築(上級者向け)

より高品質な結果を得るために、アップスケール後に再度軽いノイズ除去(Denoise)を行う手法があります。この場合のワークフローは以下のようになります。

  1. 「KSampler」で低解像度画像を生成(Denoise=1.0)。
  2. 「Latent Upscale」で解像度を2倍にアップスケール。
  3. もう一つの「KSampler」に接続し、低いDenoise値(例: 0.2〜0.5)で細部を再合成。
  4. 「VAE Decode」で最終画像を得る。

この時、2つ目のKSamplerには、アップスケールされた潜在画像と、同じプロンプト(または詳細を追加したプロンプト)を入力します。

コード例・コマンド例

ComfyUIのワークフローは多くの場合JSONで定義されます。Latent Upscaleノードを含む最小限のワークフロー定義の一部を以下に示します。

// ワークフロー定義の一部 (JSON形式)
{
  "4": {
    "class_type": "LatentUpscale",
    "inputs": {
      "upscale_method": "nearest-exact",
      "width": 1024, // 目標幅
      "height": 1024, // 目標高さ
      "crop": "disabled",
      "samples": ["5", 0] // 入力:KSampler (ID:5) の出力0番
    }
  },
  "5": {
    "class_type": "KSampler",
    "inputs": {
      "seed": 42,
      "steps": 20,
      "cfg": 8,
      "sampler_name": "euler",
      "scheduler": "normal",
      "denoise": 1,
      "model": ["1", 0], // Checkpoint Loader
      "positive": ["2", 0], // CLIP Text Encode (Positive)
      "negative": ["3", 0], // CLIP Text Encode (Negative)
      "latent_image": ["6", 0] // Empty Latent Image (サイズ: 512x512 -> 潜在空間では64x64)
    }
  },
  "6": {
    "class_type": "EmptyLatentImage",
    "inputs": {
      "width": 512, // 生成開始解像度
      "height": 512,
      "batch_size": 1
    }
  }
  // ... VAE Decodeなどの他のノード
}

この例では、Empty Latent Imageで512×512(潜在空間64×64)を指定し、Latent Upscaleノードで1024×1024(潜在空間128×128)にアップスケールしています。幅・高さの指定は8の倍数であり、かつ元サイズの2倍になっているため、整合性が取れています。

まとめ・補足情報

ComfyUIのLatent Upscaleノードは、画像の解像度を効果的に高める強力なツールですが、潜在空間の数学的制約(8の倍数)を理解していないと、形状不一致エラーに悩まされることになります。エラーを解決するための要点を以下にまとめます。

  • 根本原因:入力潜在画像サイズと、アップスケール後のサイズの整合性が取れていない(8の倍数ではない、または非整数倍)。
  • 解決の鍵:アップスケール後のサイズ(width/height)は必ず8の倍数に設定する。可能であれば、元サイズの整数倍(2倍、1.5倍等)を心がける。
  • トラブルシューティング:エラー発生時は、まずKSamplerから出力される潜在画像の実際の形状(バッチ、チャネル、高さ、幅)を確認し、Latent Upscaleノードの設定がその形状と矛盾していないか検証する。
  • 代替手段:Latent Upscale以外にも、「Image Upscale with Model」ノードで画像空間でアップスケールする方法や、専用のアップスケールモデルを組み込む方法もあります。目的に応じて最適な手法を選択してください。

これらのポイントを押さえることで、Latent Upscaleノードによる高解像度化プロセスを自在に制御し、思い通りの高品質画像生成を実現できるようになるでしょう。最初はシンプルな2倍アップスケールから始め、慣れてきたらより複雑なHires Fixワークフローに挑戦することをお勧めします。

この記事は役に立ちましたか?