这些是 ComfyUI 本机实现的自定义节点
我的贡献仅限于 ComfyUI 的改编,所有功劳都归于论文作者。
2024 年 5 月 16 日。内部返工以提高与其他节点的兼容性。 RAUNet 已实施。
2024 年 5 月 12 日。CutForInpaint 节点,请参阅示例。
2024年5月11日,实现图像批量处理。您甚至可以将 BrushNet 添加到 AnimateDiff vid2vid 工作流程中,但它们不能一起工作 - 它们是不同的模型,并且都尝试修补 UNet。添加了更多示例。
2024 年 5 月 6 日。实施 PowerPaint v2 模型。更新后您的工作流程可能无法正常工作。不要恐慌!检查BrushNode的end_at
参数,如果等于1,则将其更改为某个大数字。请阅读下面的“使用”部分中的有关参数的信息。
2024 年 5 月 2 日。BrushNet SDXL 上线。但它需要积极和消极的调节,因此工作流程略有变化,请参见示例。
2024 年 4 月 28 日,再次返工,造成不便,敬请谅解。但现在 BrushNet 是 ComfyUI 原生的。著名的 cubiq 的 IPAdapter Plus 现已与 BrushNet 合作!我希望...:) 请报告您发现的任何错误。
2024 年 4 月 18 日。完成返工,不再有自定义diffusers
库。可以使用 LoRA 模型。
2024 年 4 月 11 日。初始提交。
将存储库克隆到custom_nodes
目录并安装要求:
git clone https://github.com/nullquant/ComfyUI-BrushNet.git
pip install -r requirements.txt
BrushNet的检查点可以从这里下载。
segmentation_mask_brushnet_ckpt
中的检查点提供在 BrushData 上训练的检查点,该检查点具有分段优先性(掩模具有相同形状的对象)。 random_mask_brushnet_ckpt
为随机掩模形状提供了更通用的 ckpt。
segmentation_mask_brushnet_ckpt
和random_mask_brushnet_ckpt
包含用于SD 1.5模型的BrushNet,而segmentation_mask_brushnet_ckpt_sdxl_v0
和random_mask_brushnet_ckpt_sdxl_v0
用于SDXL。
您应该将diffusion_pytorch_model.safetensors
文件放置到models/inpaint
文件夹中。您还可以在extra_model_paths.yaml
中指定inpaint
文件夹。
对于 PowerPaint,您应该下载三个文件。此处的diffusion_pytorch_model.safetensors
和pytorch_model.bin
应放置在您的models/inpaint
文件夹中。
您还需要 SD1.5 文本编码器模型model.safetensors
。您可以从这里或其他地方获取它。您也可以使用 fp16 版本。它应该放置在您的models/clip
文件夹中。
这是我的models/inpaint
文件夹的结构:
你的可能会有所不同。
以下是预期工作流程的示例。该示例的工作流程可以在“example”目录中找到。
工作流程
工作流程
工作流程
有时推理和 VAE 会破坏图像,因此您需要将修复图像与原始工作流程混合。您可以在第一张图像中看到修复后模糊和损坏的文本以及我想如何修复它。
工作流程
ControlNet 精明边缘
工作流程
工作流程
要升级,您应该使用基本模型,而不是 BrushNet。对于调节来说也是如此。 BrushNet 和 KSampler 之间的潜在升级将不起作用或会给您带来奇怪的结果。这些限制是由于 BrushNet 的结构及其对 UNet 计算的影响造成的。
工作流程
如果您遇到 OOM 问题,可以使用 AnimateDiff-Evolved 中的进化采样:
工作流程
在上下文选项中,将 context_length 设置为可以加载到 VRAM 中的图像数量。图像将以该大小的块进行处理。
工作流程
当您处理大图像而修复蒙版很小时,最好剪切图像的一部分,对其进行处理,然后将其混合回去。我为此类工作流程创建了一个节点,请参阅示例。
工作流程
工作流程
通常很难完全删除该对象,尤其是当它位于前面时:
您应该尝试在否定提示中添加对象描述并描述空场景,如下所示:
dtype
,默认为torch.float16
。 BrushNet 的 torch.dtype。如果您有旧的 GPU 或 NVIDIA 16 系列卡,请尝试切换到torch.float32
。 scale
,默认为 1.0:BrushNet 的“强度”。 BrushNet 的输出先乘以scale
,然后再添加到原始unet 中的残差中。start_at
,默认为 0:BrushNet 开始应用的步骤。end_at
,默认为 10000:BrushNet 停止应用的步骤。以下是使用最后两个参数的示例。
CLIP
:应从 PowerPaintCLIPLoader 节点传递的 PowerPaint CLIP。fitting
:PowerPaint 贴合度。function
:PowerPaint 函数,详细信息请参见其页面。save_memory
:如果设置此选项,注意力模块会将输入张量分割成切片,以分几个步骤计算注意力。这对于节省一些内存以换取速度降低很有用。如果您用完 VRAM 或在 Mac 上出现Error: total bytes of NDArray > 2**32
,请尝试将此选项设置为max
。当使用某些网络功能时,PowerPaint的作者建议在提示中添加短语:
empty scene blur
empty scene
empty scene
许多 ComfyUI 用户使用自定义文本生成节点、CLIP 节点和许多其他调节。我不想破坏所有这些节点,所以我没有添加提示更新,而是依赖用户。我自己的实验也表明,这些提示的添加并不是绝对必要的。
潜在图像可以来自 BrushNet 节点,也可以不是,但它应该与原始图像大小相同(在潜在空间中除以 8)。
BrushNet 和 PowerPaint 节点中的positive
negative
均用于内部计算,然后简单地复制到输出。
请注意,由于 BrushNet 的结构,并非所有工作流程和节点都适用于 BrushNet。还将模型更改放在 BrushNet 节点之前,而不是之后。如果您需要模型在 BrushNet 推理后处理图像,请使用基础一(请参阅下面的升级示例)。
du_start
,默认为 0:开始应用下采样/上采样调整大小的步骤。du_end
,默认为 4:下采样/上采样调整大小停止应用的步骤。xa_start
,默认为 4:开始应用 CrossAttention 大小调整的步骤。xa_end
,默认为 10:CrossAttention 调整大小停止应用的步骤。有关示例和解释,请查看此处。
BrushNet 有一些局限性(来自论文):
不幸的是,由于 BrushNet 代码的性质,某些节点与这些节点不兼容,因为我们正在尝试修补相同的 ComfyUI 功能。
已知不兼容节点的列表。
该代码基于