From 83e0314b2527eb49c4d59ca1dd7bed9ffa5886d9 Mon Sep 17 00:00:00 2001 From: pythongosssss <125205205+pythongosssss@users.noreply.github.com> Date: Wed, 29 Nov 2023 20:27:37 +0000 Subject: [PATCH] fix applying primitive --- tests-ui/tests/groupNode.test.js | 34 ++++++++++++++++++++++++++++++++ web/extensions/core/groupNode.js | 4 +--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/tests-ui/tests/groupNode.test.js b/tests-ui/tests/groupNode.test.js index c6267cf46..321f04a63 100644 --- a/tests-ui/tests/groupNode.test.js +++ b/tests-ui/tests/groupNode.test.js @@ -747,4 +747,38 @@ describe("group node", () => { expect(widget).toBeTruthy(); expect(widget.widget.type).toBe("button"); }); + test.only("internal primitive populates widgets for all linked inputs", async () => { + const { ez, graph, app } = await start(); + const img = ez.LoadImage(); + const scale1 = ez.ImageScale(img.outputs[0]); + const scale2 = ez.ImageScale(img.outputs[0]); + ez.PreviewImage(scale1.outputs[0]); + ez.PreviewImage(scale2.outputs[0]); + + scale1.widgets.width.convertToInput(); + scale2.widgets.height.convertToInput(); + + const primitive = ez.PrimitiveNode(); + primitive.outputs[0].connectTo(scale1.inputs.width); + primitive.outputs[0].connectTo(scale2.inputs.height); + + const group = await convertToGroup(app, graph, "test", [img, primitive, scale1, scale2]); + group.widgets.value.value = 100; + expect((await graph.toPrompt()).output).toEqual({ + 1: { + inputs: { image: img.widgets.image.value }, + class_type: "LoadImage", + }, + 2: { + inputs: { upscale_method: "nearest-exact", width: 100, height: 512, crop: "disabled", image: ["1", 0] }, + class_type: "ImageScale", + }, + 3: { + inputs: { upscale_method: "nearest-exact", width: 512, height: 100, crop: "disabled", image: ["1", 0] }, + class_type: "ImageScale", + }, + 4: { inputs: { images: ["2", 0] }, class_type: "PreviewImage" }, + 5: { inputs: { images: ["3", 0] }, class_type: "PreviewImage" }, + }); + }); }); diff --git a/web/extensions/core/groupNode.js b/web/extensions/core/groupNode.js index c6cf3e87d..4661e23ec 100644 --- a/web/extensions/core/groupNode.js +++ b/web/extensions/core/groupNode.js @@ -295,7 +295,6 @@ export class GroupNodeConfig { }; } - // TODO: handle reroute nodes console.warn("Skipping virtual node " + node.type + " when building group node " + this.name); } @@ -343,7 +342,6 @@ export class GroupNodeConfig { // We need to store this in the correct position so link ids line up converted.set(convertedIndex, inputName); widgetMap[inputName] = null; - this.newToOldWidgetMap[inputName] = { node, inputName }; } else { // Normal widget const { name, config } = this.getInputConfig(node, inputName, seenInputs, inputs[inputName]); @@ -369,7 +367,7 @@ export class GroupNodeConfig { const primitiveConfig = primitiveDef.input.required.value; const output = { widget: primitiveConfig }; const config = mergeIfValid(output, targetWidget, false, null, primitiveConfig); - primitiveConfig[1] = config?.customConfig ?? inputs[inputName][1] ?? {}; + primitiveConfig[1] = config?.customConfig ?? inputs[inputName][1] ? { ...inputs[inputName][1] } : {}; let name = this.oldToNewWidgetMap[sourceNodeId]["value"]; name = name.substr(0, name.length - 6);