[Bug] Control Bridge inside subgraph causes workflow crash

这个报错通常发生在把 Impact Pack 的动态类型节点(如 Control Bridge、Conditional Branch、Compare 等)放进 subgraph 后,再从输入节点接线并保存重开工作流时,ComfyUI 前端因取不到源节点对象而崩溃。优先排查 js/impact-pac

快速结论:这个报错通常发生在把 Impact Pack 的动态类型节点(如 Control Bridge、Conditional Branch、Compare 等)放进 subgraph 后,再从输入节点接线并保存重开工作流时,ComfyUI 前端因取不到源节点对象而崩溃。优先排查 js/impact-pack.js 中 `node.outputs[…]` 未被安全判空的位置。

适用环境:Issue 中确认涉及 ComfyUI Impact Pack v8.22.2,ComfyUI 前端为当时最新 commit(8d38ea3bbf7e77ed7e7aee401b157dab211c5307)。操作系统、Python、CUDA、显卡型号在 Issue 中未明确说明。

最快修复方案:暂无确认的一步修复方案。Issue 中验证有效的做法是手动给 js/impact-pack.js 相关行加上可选链与 `?? ‘*’` 兜底(见解决步骤),但这是社区用户提供的补丁,并非官方发布版。

注意事项:该补丁只解决了前端取值崩溃,动态类型尚未被官方正式支持,输出和链接仍可能出现类型校验警告;作者在后续回复中说明已做了更稳健的修补,因此正式修复可能与此处 patch 不完全一致,升级前建议备份 js/impact-pack.js。

问题场景

用户在 ComfyUI 中使用 Impact Pack 的若干动态类型节点,把它们转换成 subgraph 并接入输入后,保存、关闭再重新打开该工作流时触发崩溃。受影响节点包括 Control Bridge(ImpactControlBridge)、ImpactConditionalBranch / ImpactConditionalBranchSelMode、ImpactCompare、Select Nth Item (Any list)(ImpactSelectNthItemOfAnyList)以及 ImpactInversedSwitch。另有用户表示 Select Nth Item (Any list) 也出现过类似问题。

报错原文

[Bug] Control Bridge inside subgraph causes workflow crash

can't access property "output", node is undefined

原因分析

可能原因是:当这些节点位于 subgraph 内部时,js/impact-pack.js 通过 `app.graph.getNodeById(link_info.origin_id)` 去取源节点并读取 `node.outputs[link_info.origin_slot].type`,此时 `node` 可能为 undefined,而部分分支没有像其他位置那样做判空检查,于是抛出 `can’t access property “output”, node is undefined` 导致工作流崩溃。

提出补丁的用户同时指出,js/impact-pack.js 中另有一处(约 L584-L587)已经做了类似的判空判断,因此这些崩溃点可能是被遗漏,而非有意设计。其理解是:脚本执行时无法从 subgraph 中取回某个输入的类型。

环境排查

  • 确认 ComfyUI Impact Pack 版本,Issue 中复现版本为 v8.22.2。
  • 确认 ComfyUI 前端 commit,Issue 中测试时为 8d38ea3bbf7e77ed7e7aee401b157dab211c5307。
  • 确认 js/impact-pack.js 中相关行是否仍为未判空的 `node.outputs[…]` 写法,重点检查约 283、309、327、351、408 行附近。
  • 确认崩溃是否只在“节点被放进 subgraph 且已接入输入”这一条件下出现,普通画布内直接使用是否正常。
  • Python、PyTorch、CUDA、显卡型号在 Issue 中未给出,暂不需要作为判断依据。

解决步骤

  1. 备份 js/impact-pack.js,便于回退。
  2. 找到文件中处理上述节点类型赋值的分支,将未判空的 `node.outputs[…]` 改为可选链写法,并在取不到类型时用 `’*’` 兜底。
  3. 参考社区补丁,对应位置大致为:
    Line 283(ImpactControlBridge):`slot_type = node?.outputs[link_info.origin_slot]?.type ?? ‘*’;`
    Line 309(ImpactConditionalBranch / ImpactConditionalBranchSelMode):`slot_type = node?.outputs[link_info.origin_slot].type ?? ‘*’;`
    Line 327(ImpactCompare):`let slot_type = node?.outputs[link_info.origin_slot].type ?? ‘*’;`
    Line 351(ImpactSelectNthItemOfAnyList):`slot_type = node?.outputs[link_info.origin_slot].type ?? ‘*’;`
    Line 408(ImpactInversedSwitch):`let origin_type = node?.outputs[link_info.origin_slot]?.type;`
  4. 保存 js/impact-pack.js 后重启或刷新 ComfyUI 前端,使脚本重新加载。
  5. 若运行中出现类型校验警告,属于补丁用户已知的残留现象,动态类型尚未被官方正式支持。

如果不想手动改源码,可优先尝试回退到未受影响的旧版本,或等官方发布包含该修复的版本;Issue 中未给出对应版本号,因此这里不作具体版本推荐。

验证方法

按 Issue 的复现路径重新操作:新建工作流 → 插入受影响的动态类型节点(例如 Control Bridge)→ 转换为 subgraph → 将输入节点连接到 value 槽位 → 保存工作流 → 关闭工作流 → 重新打开该工作流。若不再抛出 `can’t access property “output”, node is undefined` 且工作流正常加载,即视为修复生效。应用补丁的用户反馈节点输出与链接未出现类型问题,但仍有动态类型相关的类型校验警告。

参考来源

ltdrdata/ComfyUI-Impact-Pack #1076

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25398

发表回复

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