diff --git a/browser_tests/assets/group_node_identical_nodes_hidden_inputs.json b/browser_tests/assets/group_node_identical_nodes_hidden_inputs.json new file mode 100644 index 000000000..db6b85c69 --- /dev/null +++ b/browser_tests/assets/group_node_identical_nodes_hidden_inputs.json @@ -0,0 +1,163 @@ +{ + "last_node_id": 19, + "last_link_id": 14, + "nodes": [ + { + "id": 19, + "type": "workflow>two_VAE_decode", + "pos": [ + 1368.800048828125, + 768.7999877929688 + ], + "size": [ + 418.1999816894531, + 86 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": null + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "VAEDecode IMAGE", + "type": "IMAGE", + "links": null + } + ], + "properties": {} + } + ], + "links": [], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 1, + "offset": [ + 0, + 0 + ] + }, + "node_versions": {}, + "ue_links": [], + "groupNodes": { + "two_VAE_decode": { + "nodes": [ + { + "id": -1, + "type": "VAEDecode", + "pos": [ + 1368.800048828125, + 768.7999877929688 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": null, + "localized_name": "samples" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "localized_name": "vae" + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null, + "localized_name": "IMAGE" + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "index": 0 + }, + { + "id": -1, + "type": "VAEDecode", + "pos": [ + 1368.800048828125, + 873.7999877929688 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": null, + "localized_name": "samples" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "localized_name": "vae" + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null, + "localized_name": "IMAGE" + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "index": 1 + } + ], + "links": [], + "external": [], + "config": { + "1": { + "input": { + "samples": { + "visible": false + }, + "vae": { + "visible": false + } + } + } + } + } + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/browser_tests/groupNode.spec.ts b/browser_tests/groupNode.spec.ts index 7e44ec7ab..0d9ed140f 100644 --- a/browser_tests/groupNode.spec.ts +++ b/browser_tests/groupNode.spec.ts @@ -134,6 +134,37 @@ test.describe('Group Node', () => { expect(await manage2.getSelectedNodeType()).toBe('g2') }) + test('Preserves hidden input configuration when containing duplicate node types', async ({ + comfyPage + }) => { + await comfyPage.loadWorkflow('group_node_identical_nodes_hidden_inputs') + await comfyPage.nextFrame() + + const groupNodeId = 19 + const groupNodeName = 'two_VAE_decode' + + const totalInputCount = await comfyPage.page.evaluate((nodeName) => { + const { + extra: { groupNodes } + } = window['app'].graph + const { nodes } = groupNodes[nodeName] + return nodes.reduce((acc: number, node) => { + return acc + node.inputs.length + }, 0) + }, groupNodeName) + + const visibleInputCount = await comfyPage.page.evaluate((id) => { + const node = window['app'].graph.getNodeById(id) + return node.inputs.length + }, groupNodeId) + + // Verify there are 4 total inputs (2 VAE decode nodes with 2 inputs each) + expect(totalInputCount).toBe(4) + + // Verify there are 2 visible inputs (2 have been hidden in config) + expect(visibleInputCount).toBe(2) + }) + test('Reconnects inputs after configuration changed via manage dialog save', async ({ comfyPage }) => {