diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index 8f2d11340c..bd032c7e06 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -965,8 +965,12 @@ export class LGraphNode o.widgets_values = [] for (const [i, widget] of widgets.entries()) { if (widget.serialize === false) continue - // @ts-expect-error #595 No-null - o.widgets_values[i] = widget ? widget.value : null + const val = widget?.value + // Ensure object values are plain (not reactive proxies) for structuredClone compatibility. + o.widgets_values[i] = + val != null && typeof val === 'object' + ? JSON.parse(JSON.stringify(val)) + : (val ?? null) } } diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useBoundingBoxWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useBoundingBoxWidget.ts index ad1c25d80f..007df7bc53 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useBoundingBoxWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useBoundingBoxWidget.ts @@ -45,7 +45,15 @@ export const useBoundingBoxWidget = (): ComfyWidgetConstructorV2 => { widgetType, name, { ...defaultValue }, - null, + () => { + for (let i = 0; i < fields.length; i++) { + const field = fields[i] + const subWidget = subWidgets[i] + if (subWidget) { + subWidget.value = widget.value[field] + } + } + }, { serialize: true, canvasOnly: false @@ -58,16 +66,6 @@ export const useBoundingBoxWidget = (): ComfyWidgetConstructorV2 => { const widget = rawWidget - widget.callback = () => { - for (let i = 0; i < fields.length; i++) { - const field = fields[i] - const subWidget = subWidgets[i] - if (subWidget) { - subWidget.value = widget.value[field] - } - } - } - for (const field of fields) { const subWidget = node.addWidget( 'number',