From f741fb51e79670005e1989ddb3f76b6e5688c013 Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Wed, 11 Feb 2026 11:51:08 +0900 Subject: [PATCH] [backport core/1.38] Austin/fix move subgraph input (#8792) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of #8777 to `core/1.38` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8792-backport-core-1-38-Austin-fix-move-subgraph-input-3046d73d3650816c9124c444022491de) by [Unito](https://www.unito.io) Co-authored-by: AustinMroz --- ...nkConnectorSubgraphInputValidation.test.ts | 22 +++++++++++++++++++ .../src/canvas/ToInputFromIoNodeLink.ts | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/src/lib/litegraph/src/canvas/LinkConnectorSubgraphInputValidation.test.ts b/src/lib/litegraph/src/canvas/LinkConnectorSubgraphInputValidation.test.ts index 8c29220056..931bc1e427 100644 --- a/src/lib/litegraph/src/canvas/LinkConnectorSubgraphInputValidation.test.ts +++ b/src/lib/litegraph/src/canvas/LinkConnectorSubgraphInputValidation.test.ts @@ -73,6 +73,28 @@ describe('LinkConnector SubgraphInput connection validation', () => { expect(toTargetNode.onConnectionsChange).toHaveBeenCalledTimes(1) expect(fromTargetNode.onConnectionsChange).toHaveBeenCalledTimes(1) }) + it('should allow reconnection to same target', () => { + const subgraph = createTestSubgraph({ + inputs: [{ name: 'number_input', type: 'number' }] + }) + + const node = new LGraphNode('TargetNode') + node.addInput('number_in', 'number') + subgraph.add(node) + + const link = subgraph.inputNode.slots[0].connect(node.inputs[0], node) + + const renderLink = new ToInputFromIoNodeLink( + subgraph, + subgraph.inputNode, + subgraph.inputNode.slots[0], + undefined, + LinkDirection.CENTER, + link + ) + renderLink.connectToInput(node, node.inputs[0], connector.events) + expect(node.inputs[0].link).not.toBeNull() + }) }) describe('MovingOutputLink validation', () => { diff --git a/src/lib/litegraph/src/canvas/ToInputFromIoNodeLink.ts b/src/lib/litegraph/src/canvas/ToInputFromIoNodeLink.ts index 073c777f1f..7e5880212b 100644 --- a/src/lib/litegraph/src/canvas/ToInputFromIoNodeLink.ts +++ b/src/lib/litegraph/src/canvas/ToInputFromIoNodeLink.ts @@ -58,6 +58,12 @@ export class ToInputFromIoNodeLink implements RenderLink { events: CustomEventTarget ) { const { fromSlot, fromReroute, existingLink } = this + if ( + existingLink && + node.id === existingLink.target_id && + node.inputs[existingLink.target_slot] === input + ) + return const newLink = fromSlot.connect(input, node, fromReroute?.id)