为什么只能生成 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 分之一(面积则是 64 分之一)

潜在空间的分辨率必须是整数,所以不能被 8 整除的余数会被舍去。

例如即使输入 513px 的图像,余数的 1px 也会被无视,实际上被当作 512px 处理。


也有其他压缩率的 VAE

并不是所有的 VAE 都是 8 倍压缩,4 / 8 / 16 / 32 等,根据模型的不同各式各样。

使用新模型的时候,最好先确认一下那个模型使用的是哪个 VAE(哪个压缩率)。


视频模型的 VAE 和帧数

在面向视频的 VAE 中,也有 将时间方向(帧数)也汇总压缩 的东西。

  • Wan 2.1 VAE:那种将 4 帧汇总为一个 latent 的 VAE

在这种情况下,能生成的帧数会变成“1 + 4n”这样的形式,构造上根本无法进行“只出 2 帧”这样细致的指定。

就像空间方向(纵横)受限于 8 的倍数一样,请记住时间方向有时也会加入“只能处理这个数的倍数”这样的制约。


image2image・图像编辑模型的注意点

即使使用 8 的倍数以外的分辨率,也不会报错,可以生成。 但是,请注意这种情况下会发生偏差。

  • 输入图像:原来的分辨率(例:513px × 769px)
  • 输出图像:被四舍五入为 8 的倍数的分辨率(例:512px × 768px)

由于 输入和输出的像素不再是一对一对应,如果需要像素级的完美编辑,必须先进行裁剪・填充使其变成 8 的倍数。

如果感觉到“总觉得边缘被切掉了”“尺寸有微妙的差别”,请试着确认一下分辨率是否是 VAE 压缩率的倍数。