回到笔记
AI 绘画AIComfyUI工具教程

ComfyUI 实用排错手册

集中记录 InstantID、LayerDiffuse、macOS 兼容、局部重绘、IP-Adapter 与 Anything Everywhere 的排错思路。

这是一组来自 2024 年 ComfyUI 工作流的排错记录。插件、PyTorch 和节点接口更新很快,因此这里更强调定位思路;涉及固定版本或源码补丁的部分,只应作为历史线索。

InstantID:先对齐参考图与生成画布

Apply InstantID Advanced 的位置参考图会影响人脸落点。参考图与生成画布的长宽比差异过大时,人物位置容易偏移。

  • 先裁切参考图,使其接近最终画布比例;
  • 分开验证身份参考与位置参考;
  • 出现 NoneType has no attribute shape 时,先检查模型体系和节点版本是否匹配。

InstantID 工作流示例

InstantID 参数示例

LayerDiffuse 与 Apple 芯片

旧版 LayerDiffuse 在 MPS 上执行高维 torch.median 时曾出现崩溃。历史 workaround 是把该次计算临时移到 CPU,再将结果放回 MPS:

if self.load_device == torch.device("mps"):
    median = torch.median(result.cpu(), dim=0).values
    median = median.to(device=self.load_device, dtype=self.dtype)
else:
    median = torch.median(result, dim=0).values

应用补丁前,先检查 ComfyUI-layerdiffuse 是否已经处理了对应问题。源码修改应当是最后手段。

macOS 出图发灰、发黑或模糊

这类现象可能来自 PyTorch、torchvision 与 macOS/MPS 的版本组合,而不是工作流参数。建议按以下顺序排查:

  1. 用同一工作流切换到 CPU,确认是否仅在 MPS 出现;
  2. 查看 ComfyUI issue #2992 及当前版本说明;
  3. 新建隔离环境测试推荐依赖组合;
  4. 保存可工作的锁定文件,避免一次升级所有依赖。

不要把某个历史版本组合当作永久答案。环境、系统和节点版本都应一起记录。

Inpainting:边缘与模型差异

没有专用 inpainting 模型时,可以通过模型差分提取 inpainting 部分,再与目标模型合并。这种做法依赖两个底模结构兼容,合并前应先备份并做小规模对照。

Inpainting 模型合并示例

修补区域边缘过硬时,可以扩大并羽化遮罩,让去噪区域覆盖接缝;必要时配合 Differential Diffusion 一类节点。

遮罩扩展示例

IP-Adapter:把结构与风格分开调

Mad Scientist 一类高级节点允许分别调整不同层的权重。与其记住某个固定下标,不如先建立三组对照:

  • 全层均匀:观察完整参考强度;
  • 只保留风格相关层:观察色彩、材质和笔触;
  • 减弱结构相关层:减少构图与轮廓复制。

IP-Adapter 分层权重示例

如果正向和负向同时使用参考图,要明确每一路是在增强什么、抑制什么。每次只调整一组权重并保存种子,才能得到可比较的结果。

IP-Adapter 正负参考示例

用 Anything Everywhere 整理工作流

Anything Everywhere 可以按类型和规则把输出广播给多个节点,减少跨越整个画布的连线。

安装到 custom_nodes 后重启 ComfyUI:

cd <comfyui>/custom_nodes
git clone https://github.com/chrisgoringe/cg-use-everywhere

使用时按住 Shift 从输出端拖出,选择 Anything Everywhere?,再用标题或正则限制目标范围。

[!TIP] 广播让画布更干净,也会隐藏数据从哪里来。对模型、VAE、正负提示词这类全局输入很合适;对需要逐段追踪的局部控制,显式连线通常更容易维护。