diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index 14bfee485..ac509e993 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -769,12 +769,7 @@ export class LGraphNode this.graph._version++ } for (const j in info) { - if (j == 'properties') { - // i don't want to clone properties, I want to reuse the old container - for (const k in info.properties) { - this.properties[k] = info.properties[k] - this.onPropertyChanged?.(k, info.properties[k]) - } + if (j === 'properties' || j === 'inputs' || j === 'outputs') { continue } @@ -798,14 +793,28 @@ export class LGraphNode } } + if (info.properties) { + for (const k in info.properties) { + this.properties[k] = info.properties[k] + this.onPropertyChanged?.(k, info.properties[k]) + } + } + if (!info.title) { this.title = this.constructor.title } - this.inputs ??= [] - this.inputs = this.inputs.map((input) => - toClass(NodeInputSlot, input, this) - ) + if (info.inputs) { + this.inputs = info.inputs.map((input) => + toClass(NodeInputSlot, input, this) + ) + } else { + this.inputs ??= [] + this.inputs = this.inputs.map((input) => + toClass(NodeInputSlot, input, this) + ) + } + for (const [i, input] of this.inputs.entries()) { const link = this.graph && input.link != null @@ -815,10 +824,17 @@ export class LGraphNode this.onInputAdded?.(input) } - this.outputs ??= [] - this.outputs = this.outputs.map((output) => - toClass(NodeOutputSlot, output, this) - ) + if (info.outputs) { + this.outputs = info.outputs.map((output) => + toClass(NodeOutputSlot, output, this) + ) + } else { + this.outputs ??= [] + this.outputs = this.outputs.map((output) => + toClass(NodeOutputSlot, output, this) + ) + } + for (const [i, output] of this.outputs.entries()) { if (!output.links) continue diff --git a/src/lib/litegraph/src/LiteGraphGlobal.ts b/src/lib/litegraph/src/LiteGraphGlobal.ts index e27377fed..738942904 100644 --- a/src/lib/litegraph/src/LiteGraphGlobal.ts +++ b/src/lib/litegraph/src/LiteGraphGlobal.ts @@ -1,3 +1,5 @@ +import _ from 'lodash' + import { ContextMenu } from './ContextMenu' import { CurveEditor } from './CurveEditor' import { DragAndScale } from './DragAndScale' @@ -641,7 +643,7 @@ export class LiteGraphGlobal { ): WhenNullish { if (obj == null) return null as WhenNullish - const r = JSON.parse(JSON.stringify(obj)) + const r = _.cloneDeep(obj) if (!target) return r for (const i in r) {