8 の倍数解像度しか生成できないのはなぜ?

ComfyUI の Empty Latent Image ノードを見ると、幅・高さを 8 刻みでしか設定できません。 無理やり 513px などを入力しても、出力は必ず 8 の倍数に丸められます。

これは、latent diffusion model と VAE の構造上の制約が原因です。


latent diffusion model と VAE の圧縮率

Stable Diffusion などの latent diffusion model は、いったん画像を低解像度の潜在空間に圧縮してから計算します。 この「圧縮」と「復元」を担当しているのが VAE です。

よく使われる VAE(SD1.5 系や多くの派生モデル)では、

  • 高さ・幅を 8 分の 1 に圧縮する(面積では 64 分の 1)

という構造になっています。 潜在空間の解像度は整数でなければならないため、8 で割り切れない端数は切り捨てられます。

例えば 513px の画像を入力しても、端数の 1px 分は無視され、実質 512px として処理されてしまいます。


他の圧縮率の VAE もある

すべての VAE が 8 倍圧縮というわけではなく、4 / 8 / 16 / 32 など、モデルによってさまざまです。

新しいモデルを使うときは、そのモデルがどの VAE(どの圧縮率)を使っているか、一度確認しておくと良いでしょう。


動画モデルの VAE とフレーム数

動画向けの VAE では、時間方向(フレーム数)もまとめて圧縮するものがあります。

  • Wan 2.1 VAE:4 フレーム分を 1 つの潜在にまとめてしまうような VAE

この場合、生成できるフレーム数は「1 + 4n」のような形になり、2 フレームだけ出す、といった細かい指定はそもそもできない構造になっていたりします。

空間方向(縦横)が 8 の倍数に縛られるのと同じように、時間方向にも「この数の倍数でしか扱えない」という制約が入ることがある、という程度に覚えておいてください。


image2image・画像編集モデルの注意点

8 の倍数以外の解像度を使っても、エラーが出ることはなく生成できます。 ただし、その場合はズレが発生することには注意してください。

  • 入力画像:元の解像度(例:513px × 769px)
  • 出力画像:8 の倍数に丸められた解像度(例:512px × 768px)

入力と出力のピクセルが 1 対 1 で対応しなくなるため、ピクセルパーフェクトな編集が必要な場合には、先に 8 の倍数にクロップ・パディングしておく必要があります。

「なんとなく端が切れている」「微妙にサイズが違う」と感じたら、 一度、解像度が VAE の圧縮率の倍数になっているかを確認してみてください。