
AttributeError: ‘DifferentialDiffusion’ object has no attribute ‘apply’ in FaceDetailer
快速结论:此报错通常发生在使用 ComfyUI Impact Pack 中的 FaceDetailer 节点时,因 ComfyUI 核心更新导致 DifferentialDiffusion API 变更(apply 方法改为 execute)。优先排查 Impact Pack 中的 impact_pack.py 和 segs_nodes.py 是否仍使用旧 API。
问题场景
用户在 ComfyUI 最新版(通过 git pull 更新)及 ComfyUI-Impact-Pack 最新版下,运行 FaceDetailer 节点工作流时触发 AttributeError。报错定位在 impact_pack.py 第 304 行,同时也可能在 segs_nodes.py 第 89 行出现类似问题。
报错原文
AttributeError: 'DifferentialDiffusion' object has no attribute 'apply' in FaceDetailer
'NodeOutput' object has no attribute 'model_options'(用户尝试不完整修复后出现的继发报错)
原因分析
ComfyUI 核心在提交 e0210ce(约 Issue 创建前 17 小时)中,将 DifferentialDiffusion 类的 apply 方法重命名为 execute,并改变了返回值结构。Impact Pack 仍调用旧 API:DifferentialDiffusion().apply(model)[0],导致属性查找失败。
环境排查
- ComfyUI 版本:是否为最新(通过 git pull 更新)。
- ComfyUI-Impact-Pack 版本:是否为最新。
- 操作系统:Windows(用户报告环境中)或其他平台。
- 关键文件:
custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py第 304 行、第 521 行;modules\impact\segs_nodes.py第 89 行。
解决步骤
- 打开
custom_nodes\comfyui-impact-pack\modules\impact\impact_pack.py,定位第 304 行(和可能相似的第 521 行)。 - 将旧代码:
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]注意:
execute为类方法而非实例方法,因此直接调用类,无需实例化。 - (可选)检查
custom_nodes\comfyui-impact-pack\modules\impact\segs_nodes.py第 89 行,是否有类似调用:if not (isinstance(model, str) and model == "DUMMY") and noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0]若存在,将该行中的
.apply改为.execute(无需增加1.0参数,因为已有默认值)。 - 保存文件,重启 ComfyUI。
- 注意:用户曾尝试不完整的修复导致
'NodeOutput' object has no attribute 'model_options'错误。请严格使用上述推荐代码,确保返回值处理兼容新旧格式。
验证方法
再次运行包含 FaceDetailer 节点(或其他使用 DifferentialDiffusion 的节点)的工作流,确认不再出现 AttributeError,且节点正常输出结果。



