AttributeError: ‘DifferentialDiffusion’ object has no attribute ‘apply’ in FaceDetailer

该报错通常出现在 ComfyUI 核心更新后,FaceDetailer 节点仍调用 DifferentialDiffusion 旧的 apply 方法时。优先排查 Impact Pack 版本与 ComfyUI 核心 API 是否匹配,并将 apply 调用替换为新的 execute 调用。

快速结论:该报错通常出现在 ComfyUI 核心更新后,FaceDetailer 节点仍调用 DifferentialDiffusion 旧的 apply 方法时。优先排查 Impact Pack 版本与 ComfyUI 核心 API 是否匹配,并将 apply 调用替换为新的 execute 调用。

适用环境:Issue 已确认环境为 Windows;ComfyUI 与 ComfyUI-Impact-Pack 均为当时最新版本,均通过 git pull 更新;未提供 Python、CUDA、PyTorch、显卡型号等具体版本信息。

最快修复方案:Issue 中已验证:修改 custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py 第 304 行,将 model = nodes_differential_diffusion.DifferentialDiffusion().apply(model)[0] 替换为 result = nodes_differential_diffusion.DifferentialDiffusion.execute(model, 1.0) 与 model = result.model if hasattr(result, 'model') else result[0];同时按讨论建议处理第 521 行以及 modules/impact/segs_nodes.py 第 89 行的同类调用。

注意事项:直接修改第三方节点源码后,后续更新或重装插件可能覆盖改动;不同 ComfyUI 版本中 execute 的返回值形态可能不同,因此代码中同时兼容 result.model 与 result[0]。若仅把 apply 改为 execute 但返回值处理不正确,曾出现 'NodeOutput' object has no attribute 'model_options' 的次生报错。建议在操作前备份原文件,或等待包含修复的官方版本更新。

问题场景

用户在 ComfyUI 工作流中使用 Impact Pack 的 FaceDetailer 节点,并在节点中启用 DifferentialDiffusion 时触发报错。工作流执行到 impact_pack.py 第 304 行时中断。该问题发生在 ComfyUI 核心更新之后,核心中的 DifferentialDiffusion 节点 API 由 apply 方法改为 execute,而 Impact Pack 仍按旧接口调用。

报错原文

AttributeError: 'DifferentialDiffusion' object has no attribute 'apply' in FaceDetailer

部分用户尝试不正确的替换后,还可能出现:

'NodeOutput' object has no attribute 'model_options'

原因分析

ComfyUI 核心在提交 e0210ce 中调整了 DifferentialDiffusion 的接口,从 apply 方法改为 execute 方法。Impact Pack 的 FaceDetailer 相关代码仍调用旧接口 DifferentialDiffusion().apply(model)[0],因此当运行到该行时,Python 找不到 apply 属性并抛出 AttributeError。第一个修复尝试中若未正确处理 execute 的返回值,会继续触发 model_options 缺失错误,说明返回值对象类型与旧接口不同。

环境排查

  • 确认 ComfyUI 是否为包含 DifferentialDiffusion 接口变更的较新版本。
  • 确认 ComfyUI-Impact-Pack 是否为最新版本,并检查对应文件中是否仍使用 apply。
  • 确认操作系统环境,Issue 中为 Windows。
  • Python、PyTorch、CUDA、显卡型号及驱动版本:Issue 中未提供,建议按实际环境另行排查。
  • 检查 custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py 第 304 行、第 521 行,以及 custom_nodes\comfyui-impact-pack\modules\impact\segs_nodes.py 第 89 行是否仍存在旧接口调用。
  • 检查是否混用了未验证的修复片段,例如只把返回值赋成 result 的写法。

解决步骤

  1. 备份 custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py,避免修改后被后续更新覆盖或导致难以回退。
  2. 定位到 modules\impact\impact_pack.py 第 304 行,将旧调用:
    model = nodes_differential_diffusion.DifferentialDiffusion().apply(model)[0]

    替换为 Issue 中确认可用的写法:

    result = nodes_differential_diffusion.DifferentialDiffusion.execute(model, 1.0)
    model = result.model if hasattr(result, 'model') else result[0]
  3. 定位到同一文件的第 521 行,按讨论中的建议将同类的 .apply(model)[0] 调用改为 .execute(model)[0] 或使用上述兼容写法。讨论中有人使用 model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] 并确认工作正常。
  4. 检查 modules\impact\segs_nodes.py 第 89 行,该处也存在 DifferentialDiffusion().apply(model)[0] 的同类调用。讨论中建议将其替换为 execute 形式,并有用户确认修改后工作正常。
  5. 保存文件后完全重启 ComfyUI,确保 Python 重新加载修改后的模块。
  6. 可优先尝试:若不想手动修改源码,检查 Impact Pack 是否已发布包含该修复的更新版本,或等待官方合并 PR #1115 后升级。

验证方法

重新启动 ComfyUI 后,运行包含 FaceDetailer 且启用 DifferentialDiffusion 的工作流。若不再出现 AttributeError: 'DifferentialDiffusion' object has no attribute 'apply',并且 FaceDetailer 能正常完成检测与修复流程,则说明修复生效。Issue 中多位用户反馈按上述 execute 及返回值兼容写法修改后问题解决。

参考来源

ltdrdata/ComfyUI-Impact-Pack #1113

ltdrdata/ComfyUI-Impact-Pack PR #1115

ComfyUI commit e0210ce

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25788

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注