快速结论:该报错通常出现在 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的写法。
解决步骤
- 备份
custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py,避免修改后被后续更新覆盖或导致难以回退。 - 定位到
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] - 定位到同一文件的第 521 行,按讨论中的建议将同类的
.apply(model)[0]调用改为.execute(model)[0]或使用上述兼容写法。讨论中有人使用model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0]并确认工作正常。 - 检查
modules\impact\segs_nodes.py第 89 行,该处也存在DifferentialDiffusion().apply(model)[0]的同类调用。讨论中建议将其替换为execute形式,并有用户确认修改后工作正常。 - 保存文件后完全重启 ComfyUI,确保 Python 重新加载修改后的模块。
- 可优先尝试:若不想手动修改源码,检查 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
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


