什么是 Differential Diffusion?
在通常的 inpainting 中,掩膜的白色部分会发生变化,黑色部分不会变化。
那么,改成灰色是不是就能只改变一点?很遗憾,直接这样做并不能得到想象中的控制效果。
于是便有了 Differential Diffusion。
它可以根据掩膜的浓淡,改变各个位置的 denoise,因此既能让不同位置产生不同程度的变化,也能使用边界经过模糊的掩膜。
如果还没有读过 inpainting,请先看这篇文章。
使用方法
只需在 inpainting 工作流中添加 Differential Diffusion 节点,再为掩膜添加深浅变化。
工作流

- 🟩 追加
Differential Diffusion节点 - 这个示例以使用
Set Latent Noise Mask节点的工作流为基础。- 当然,也可以用于使用 inpainting 模型或 ControlNet 模型的工作流。
掩膜越白的部分变化越大,越黑的部分越多地保留原图。
掩膜的用法
让不同位置产生不同程度的变化
掩膜的浓淡不必是平滑的渐变。
通过在一张掩膜图像中,为不同位置设置不同的浓淡,就能在一次采样中为各个部位指定不同的变化量。

- 为每个想改变的部分分别设置掩膜浓淡(例如脸部使用浅灰色,背景使用白色)
柔化边界
inpainting 的一个常见问题,是掩膜的边界会清楚地显现出来。
将 Differential Diffusion 与模糊后的掩膜组合使用,可以让边界衔接得更加自然。

- 🟪 这次组装进使用了 inpainting 模型的工作流。
- 🟨 使用
Gaussian Blur Mask节点(ComfyUI-Impact-Pack)模糊掩膜边界- 模糊会让掩膜在效果上变小,因此需要预先将掩膜稍微扩大。
将深度图作为掩膜使用
深度图以黑白渐变表示。
也就是说,它可以直接作为 Differential Diffusion 的掩膜使用。

- 🟦 使用 Depth Anything V2(comfyui_controlnet_aux)制作深度图
- 输出是 IMAGE,因此需要使用
Convert Image to Mask节点将其转换为掩膜。
- 输出是 IMAGE,因此需要使用
- 使用
RemapMaskRange(ComfyUI-KJNodes)调整浓淡范围
老实说,SD1.5 的能力还不太够,但我很喜欢用深度图作掩膜这个方法。
Samples



