TypeError: can’t access property “map”

该报错发生在将包含“Image Comparer (rgthree)”节点的工作流图片拖拽到 ComfyUI 前端加载时,根因是较新的 ComfyUI 前端版本(v1.53.4 及以上)会错误改写复杂 widget 值的结构,导致 rgthree 扩展在序列化时访问不到 `this.widgets[

快速结论:该报错发生在将包含“Image Comparer (rgthree)”节点的工作流图片拖拽到 ComfyUI 前端加载时,根因是较新的 ComfyUI 前端版本(v1.53.4 及以上)会错误改写复杂 widget 值的结构,导致 rgthree 扩展在序列化时访问不到 `this.widgets[index].value.images`。优先排查方向是确认前端版本,并升级到包含修复的版本(可能是 v1.54.2)。

适用环境:Issue 已确认涉及 rgthree-comfy 扩展、ComfyUI 前端 v1.53.3 / v1.53.4 / v1.54.0、工作流中存在 Image Comparer (rgthree) 节点;工作流图片由前端 v1.39.19 保存。

最快修复方案:Issue 中确认了 ComfyUI 前端官方已自行定位并处理此问题(对应 frontend issue #16479),尚未在 rgthree 侧验证具体修复版本。若当前前端版本等于或高于 v1.54.2,可优先尝试升级前端并复测;若问题仍存在,暂无其他确认的一步修复方案。

注意事项:评论区给出的临时绕过方案需要重启 ComfyUI 两次并手动删除节点,属于有损操作,仅适合紧急恢复工作流,不适用于常规使用。

问题场景

用户将包含 “Image Comparer (rgthree)” 节点的工作流以 PNG 图片形式拖拽到 ComfyUI 画布,期望从图片恢复工作流图。实际现象是:前端 v1.53.3 报错但工作流仍在当前标签页加载;前端 v1.53.4 报错并破坏 UI。问题仅在流程中存在 Image Comparer (rgthree) 节点时触发。

报错原文

Failed to parse prompt: TypeError: can't access property "map", this.widgets[index].value.images is undefined
    onSerialize http://127.0.0.1:8188/extensions/rgthree-comfy/image_comparer.js:64
    i http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    runExtensionSerializeHook http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    serializeFromStoreState http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    serialiseStoredNodes http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    serialiseStoredNodes http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    asSerialisable http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    serialize http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:2
    serialize http://127.0.0.1:8188/extensions/rgthree-comfy/rgthree.js:275
    captureCanvasState http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:179
    deactivate http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:179
    beforeLoadNewGraph http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:179
    loadApiJson http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:195
    loadApiJson http://127.0.0.1:8188/extensions/rgthree-comfy/rgthree.js:523
    handleFile http://127.0.0.1:8188/assets/settingStore-CdKCpowA.js:195

原因分析

可能原因:ComfyUI 前端在较新版本(v1.54.0 已确认)改变了复杂 widget 值的序列化方式。旧版本(如 v1.51.9)中,Image Comparer 节点的 widget 值保持为单个对象,对象内包含 `images` 数组字段;新版本前端会将这个对象改写成Proxy 包装的数组,数组内容恰好是原本的 `images` 数组,但外层结构已被替换。rgthree 的 image_comparer.js 在 onSerialize 时按旧结构访问 `this.widgets[index].value.images.map(…)`,此时拿到的 value 已经是数组而不是带 `images` 属性的对象,于是触发 TypeError: can't access property "map"

该问题不仅影响 Image Comparer,凡是包含复杂 widget 值的自定义节点都可能受影响;在 rgthree 侧为单一节点做适配风险较高,因此更适合由前端统一修复。

环境排查

  • 确认 ComfyUI 前端版本:如果 ≥ v1.54.2(或更高),可能已包含官方修复(见 frontend issue #16479),先复测是否仍复现。
  • 确认 rgthree-comfy 扩展版本:当前仓库主分支(HEAD)是否已更新至与 ComfyUI 0.34.0 / 前端 v1.51.9 兼容的版本。
  • 复现条件:工作流内必须存在 “Image Comparer (rgthree)” 节点;不包含该节点时不会触发。
  • 触发文件来源:由前端 v1.39.19 保存的工作流 PNG 可触发;其他旧版本保存的图片也可能受影响,取决于写入时 widget 值的结构。

解决步骤

  1. 优先升级 ComfyUI 前端到包含修复的版本:官方 frontend issue #16479 已被认领并修复,推测 v1.54.2 已包含修复,请先尝试升级前端到该版本或更高版本,重新拖拽包含 Image Comparer 的工作流 PNG,确认报错是否消失(可优先尝试)。
  2. 检查 rgthree-comfy 是否已发布兼容更新:如果升级前端后仍报错,请确认 rgthree-comfy 仓库 master 分支是否有针对该问题的后续提交;如有则更新扩展版本后再测试。
  3. 如无法升级,使用临时绕过方案恢复工作流:如果必须立即恢复工作流内容,可按评论区的 workaround 操作:停用 rgthree 扩展 → 重启 ComfyUI → 拖入工作流 PNG → 删除 Image Comparer 节点 → 另存工作流 → 重新启用 rgthree → 再次重启 ComfyUI。

验证方法

在同一前端环境下重新拖拽旧的工作流 PNG,观察是否仍然弹出 “Failed to parse prompt: TypeError: can’t access property “map”” 报错,并确认工作流能否正常加载到画布且 Image Comparer 节点保留原有 A/B 图片列表、UI 不卡死。如果已升级前端且问题消失,则说明修复生效;如果没有升级条件,则绕过方案是否成功取决于升级后的正式修复或扩展侧改版。

参考来源

rgthree/rgthree-comfy #761

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21551

发表回复

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