diff --git a/tests-ui/tests/groupNode.test.js b/tests-ui/tests/groupNode.test.js index f02f9c223..625890a09 100644 --- a/tests-ui/tests/groupNode.test.js +++ b/tests-ui/tests/groupNode.test.js @@ -912,6 +912,9 @@ describe("group node", () => { const r1 = ez.Reroute(); const r2 = ez.Reroute(); + latent.widgets.width.value = 64; + latent.widgets.height.value = 128; + latent.widgets.width.convertToInput(); latent.widgets.height.convertToInput(); latent.widgets.batch_size.convertToInput(); @@ -947,6 +950,9 @@ describe("group node", () => { expect(p2.widgets.value.widget.options?.max).toBe(8192); // width/height max expect(p2.widgets.value.widget.options?.step).toBe(80); // width/height step * 10 + expect(p1.widgets.value.value).toBe(128); + expect(p2.widgets.value.value).toBe(64); + p1.widgets.value.value = 16; p2.widgets.value.value = 32; diff --git a/web/extensions/core/groupNode.js b/web/extensions/core/groupNode.js index be171a7a5..d4a06caa2 100644 --- a/web/extensions/core/groupNode.js +++ b/web/extensions/core/groupNode.js @@ -966,17 +966,44 @@ export class GroupNodeHandler { return true; } + populateReroute(node, nodeId, map) { + if (node.type !== "Reroute") return; + + const link = this.groupData.linksFrom[nodeId]?.[0]?.[0]; + if (!link) return; + const [, , targetNodeId, targetNodeSlot] = link; + const targetNode = this.groupData.nodeData.nodes[targetNodeId]; + const inputs = targetNode.inputs; + const targetWidget = inputs?.[targetNodeSlot].widget; + if (!targetWidget) return; + + const offset = inputs.length - (targetNode.widgets_values?.length ?? 0); + const v = targetNode.widgets_values?.[targetNodeSlot - offset]; + if (v == null) return; + + const widgetName = Object.values(map)[0]; + const widget = this.node.widgets.find(w => w.name === widgetName); + if(widget) { + widget.value = v; + } + } + + populateWidgets() { if (!this.node.widgets) return; for (let nodeId = 0; nodeId < this.groupData.nodeData.nodes.length; nodeId++) { const node = this.groupData.nodeData.nodes[nodeId]; - - if (!node.widgets_values?.length) continue; - - const map = this.groupData.oldToNewWidgetMap[nodeId]; + const map = this.groupData.oldToNewWidgetMap[nodeId] ?? {}; const widgets = Object.keys(map); + if (!node.widgets_values?.length) { + // special handling for populating values into reroutes + // this allows primitives connect to them to pick up the correct value + this.populateReroute(node, nodeId, map); + continue; + } + let linkedShift = 0; for (let i = 0; i < widgets.length; i++) { const oldName = widgets[i];