快速结论:ComfyUI 前端升级到 1.55.x 后,加载包含 ImpactSwitch / LatentSwitch / SEGSSwitch 等开关节点、且 slot 0 带连线的旧工作流时,Impact Pack 的加载态判断失效,把“还原连线”误判为“用户新建连线”,从而触发 TypeError: t.findInputSlot is not a function 并中断整个工作流加载。优先排查 js/impact-pack.js 中的加载态判断逻辑。
适用环境:ComfyUI 0.40.0(Desktop,Windows 11);comfyui-frontend-package 1.55.17;ComfyUI-Impact-Pack 8.28.3(该行在此后版本仍未改动)。复现浏览器为 Chromium/Edge 155.0.4283.45。
最快修复方案:暂无确认的一步修复方案(上位补丁尚未合入)。Issue 中已验证的做法是:恢复 impact-pack.js 的加载态判断,使加载期间不再走到报错行,包含接线的工作流即可正常加载、输入数量不再翻倍。
注意事项:1)单纯把 node.id 改成 node 并不能解决问题,反而会真正执行该连线,导致开关节点每次加载都多出一组输入(Issue 中有 45 条连线的开关加载后变成 91 个输入)。2)直接删除第 639 行的做法能否完全兼容旧前端,Issue 未给出验证。3)浏览器差异需注意:Firefox 不截断调用栈,所以在 Firefox 下可能不报错,而在 Edge/Chrome 下出错。4)修改后需 Ctrl+F5 强制刷新浏览器,无需重启 ComfyUI。
问题场景
用户升级 ComfyUI 后,加载任何包含 Impact 开关类节点(ImpactSwitch / LatentSwitch / SEGSSwitch 一组)且 slot 0 上存在连线的工作流时,整个工作流无法加载。典型例子是用 KJNodes 的 Get 节点向开关的 slot 0 输入连线。错误出现在节点的连线变更回调中,属于工作流反序列化阶段的异常。
报错原文
Loading aborted due to error reloading workflow data
TypeError: t.findInputSlot is not a function
at ComfyNode.connect (settingStore-CUTKo1HX.js:2:268506)
at nodeType.onConnectionsChange (extensions/ComfyUI-Impact-Pack/impact-pack.js:639:15)
at ComfyNode.onConnectionsChange (settingStore-CUTKo1HX.js:3:13369)
at ComfyNode.configure (settingStore-CUTKo1HX.js:2:248784)
...
触发行原文:node.connect(link_info.origin_slot, node.id, 'input1');
原因分析
可能原因(Issue 中已定位):onConnectionsChange 中的加载态判断依赖调用栈字符串里是否包含 loadGraphData:
if(stackTrace.includes('loadGraphData')) { ... return; }
前端 1.55.x 起,工作流加载路径改为经过 LGraph.configure / trackConfiguring 等包装,还原的连线被当成“用户新建连线”处理,于是 addInput() 每条还原连线执行一次(开关输入数翻倍),并最终执行到第 639 行。该行把数字 node.id 传给 connect(),新版前端的 LGraphNode.connect() 不再把数字自动解析为节点对象,而是直接在数字上调用 findInputSlot,因此抛出 TypeError: t.findInputSlot is not a function。
浏览器差异:在 Edge/Chrome 中,loadGraphData 其实仍在调用栈上,只是 V8 默认只记录 Error.stackTraceLimit 个栈帧(默认 10),新前端新增的包装函数把它挤出了 10 帧,所以 includes('loadGraphData') 为 false;Firefox 不按 10 帧截断,因此在 Firefox 下判断仍成立、不报错。同理,impact-pack.js 中其他基于调用栈的判断(pasteFromClipboard、LGraphNode.connect、convertToSubgraph 等)在调用路径超过 10 帧时也可能失效。
环境排查
- 确认 ComfyUI 版本(Issue 复现于 0.40.0)与 comfyui-frontend-package 版本(复现于 1.55.17),前端是否已升到 1.55.x。
- 确认 ComfyUI-Impact-Pack 版本(复现于 8.28.3),并检查
custom_nodes/comfyui-impact-pack/js/impact-pack.js第 639 行是否仍为node.connect(link_info.origin_slot, node.id, 'input1');。 - 确认报错工作流中含开关类节点,且其 slot 0 上存在连线。
- 用不同浏览器对照验证:Edge/Chrome 与 Firefox 下现象是否不同,以辅助确认是否为调用栈帧数截断问题。
- 如安装了 comfyui-inspire-pack,注意其
regional.js、inspire-flex.js使用同样的loadGraphData栈判断,可能同样受影响。
解决步骤
- 备份
ComfyUI/custom_nodes/comfyui-impact-pack/js/impact-pack.js,备份文件名不要以.js结尾,否则 ComfyUI 会把它也当作扩展加载。 - 在文件中加入读取完整栈的辅助函数(Issue 中在 419、480、569 三处
new Error().stack调用点使用):function getStackTrace() { const limit = Error.stackTraceLimit; Error.stackTraceLimit = Infinity; const stack = new Error().stack; Error.stackTraceLimit = limit; return stack; } - 在加载态判断中补上新前端的包装函数名,例如将第 576 行改为同时匹配
loadGraphData、LGraph.configure、trackConfiguring(可优先尝试:Issue 中本地验证有效)。 - 第 485 行动态输出节点(加载时
removeOutput)使用同样的判断,补上相同的两项检查。 - 处理第 639 行:加载判断恢复后,加载期间不再走到该行;Issue 中本地将其注释保留。也可将
node.id改为node,在 1.55.17 下目标为节点自身时connect()会提前返回,保持原有的空操作行为;或参考 #1228 直接删除该行。 - 保存文件后,在浏览器中 Ctrl+F5 强制刷新页面,无需重启 ComfyUI。
- 可选(Issue 提出的长期方向,未验证):改用前端暴露的
app.configuringGraph判断是否处于加载/配置阶段——1.55.17 中loadGraphData()期间为true,手动连线为false,比匹配调用栈函数名更稳定。
验证方法
重新加载此前失败的工作流,应不再出现 findInputSlot 报错且工作流可完整加载。用带 input1、input2 连线的 ImpactSwitch 保存后,通过 app.loadGraphData() 连续重载两次,每次输入应保持为 input1, select, sel_mode, input2, input3,不翻倍、无报错。实际工作流(如 KJNodes Get 节点连到 slot 0)亦应能正常加载。可在浏览器控制台对比默认 10 帧与完整栈下 includes('loadGraphData') 的结果,确认修复生效。
参考来源
ltdrdata/ComfyUI-Impact-Pack #1244
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


