AI 生成任务

扩图是什么:把画面延伸到原有边框之外

又称 外扩, 图像扩展, outpainting, generative fill

扩图(outpainting)是把一张图向原有边框之外延伸:放大画布,把新增的空白区域标成待填充区域,模型依据边缘已有的像素补出画外本该有的内容。它和局部重绘用的是同一套遮罩机制,区别只在于填的是框外还是框内。

模型实际在做什么

一次扩图先把你的图放到一张更大的画布上。空出来的区域变成遮罩,模型的任务是把这块遮罩填成和它能看到的像素相符的样子。原图部分不会被重新生成,边缘那几十像素是模型判断「框外有什么」的全部依据。

这一点几乎解释了扩图的所有行为。如果你照片的边缘上有半扇门,你会得到一扇门;如果边缘上有一个肩膀,你大概率会得到一整个人,因为肩膀是模型能拿到的最强线索,它会把认出来的模式补完。不同工具把这个功能叫 generative fill、uncrop 或者 AI 扩图,底层都是同一步「加画布 + 填遮罩」。

一次该扩多少

单次扩 25% 到 40%。分三次每次扩 30%,效果明显好过一次扩 100%,而且每一步都是一个可以否决的检查点,错误不会累积到最后才发现。

除了步长,还有两个习惯同样重要:

  • 留真实的重叠区。 遮罩应该从原图内部往里退几十像素开始,让模型有余量去过渡,而不是硬拼。多数工具把这个参数叫羽化或遮罩模糊。羽化宽一点能藏住接缝;宽过头就会把你想保留的细节一起重画。
  • 盯住像素预算。 一张 1024 宽的输出摊到两倍宽的画布上,主体身上的细节就只剩一半。先扩图,最后再放大。

值得认清的几种翻车

  • 主体被复制。 新区域里多出一个人、一棵树、一扇窗。原因是主体贴边。解法:缩小单次扩展量、起始裁切让主体离边远些、加反向提示词。
  • 地平线接不上。 新补的天和地和原图对不齐。原因是一条窄边几乎不携带透视信息。解法:一侧一侧地扩,并在提示词里说清地平线在什么高度。
  • 光打反了。 新区域的光来自错误方向。解法:直接在提示词里写明光从哪来,模型不会靠一条阴影可靠地推断出来。
  • 纹理复制。 草地、砖墙、虚化光斑出现肉眼可见的重复贴图。解法:换种子重跑。这一项改措辞基本没用。

扩图的提示词怎么写

描述整张成品,而不只是新加的那部分。条件是全局作用的,一条只提新区域的提示词,会和模型已经看到的像素互相打架,出来的画面自己跟自己矛盾。

然后把你要的画幅说出来。扩图几乎总是为了改画幅,所以要交代新增的那两条边里应该有什么:空墙、更多天空、又一扇门,或者什么都没有。明确写出「什么都没有」,往往正是阻止模型凭空造出一群人的那句话。

支持该效果的模型

取自 ZOOOP 实时模型目录,新模型上架后自动出现在这里。

  • Eraser
  • Inpaint

这个效果的提示词

一条能稳定出效果的起点。主体和场景可以换,技术性的那几句留着。

Extend the scene sideways: a wet cobblestone alley at dusk, brick walls receding on both sides, warm shop light from the left, horizon at the lower third, no additional people

试一下:扩图(Outpainting)

打开生成器,参数已经预填好。

常见问题

扩图一般用来做什么?
绝大多数情况是改画幅。9:16 的竖图两边各补一块变成 16:9;裁得太紧的图补出放标题和 logo 的空间;当初取景取坏了的照片,用补的方式救回来而不是重拍。
扩图和局部重绘有什么区别?
机制完全一样,只是遮罩位置不同。局部重绘填的是画面内部的一块,扩图填的是画面外面。扩图更难,因为模型只有一侧有参考像素,而不是四周都有上下文。
为什么扩出来多了一个人?
因为主体离边缘太近,它成了模型能看到的最强模式,模型就把这个模式补完了。解法是每次少扩一点、先把主体裁得离边缘远一些,再加一条反向提示词压掉第二个人。
一次能扩多少?
大约画布的 25% 到 40%。一次就把宽度翻倍,等于让模型在没有足够上下文的情况下凭空编造一半画面,新补的那半会在光线和透视上和原图对不上。
扩图会让画质变差吗?
会间接变差。多数模型的输出像素预算是固定的,画布变宽意味着落在原主体上的像素变少。所以顺序是先扩后放大,不能反过来。

相关术语