diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index 6d870e548d..17fce3eddd 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -11,6 +11,7 @@ import { LayoutSource } from '@/renderer/core/layout/types' import { adjustColor } from '@/utils/colorUtil' import type { ColorAdjustOptions } from '@/utils/colorUtil' +import { SUBGRAPH_OUTPUT_ID } from '@/lib/litegraph/src/constants' import type { DragAndScale } from './DragAndScale' import type { LGraph } from './LGraph' import { BadgePosition, LGraphBadge } from './LGraphBadge' @@ -45,8 +46,8 @@ import type { Rect, Size } from './interfaces' -import { LiteGraph } from './litegraph' -import type { LGraphNodeConstructor, Subgraph, SubgraphNode } from './litegraph' +import { LiteGraph, Subgraph } from './litegraph' +import type { LGraphNodeConstructor, SubgraphNode } from './litegraph' import { createBounds, isInRect, @@ -3062,6 +3063,17 @@ export class LGraphNode for (const link_id of links) { const link_info = graph._links.get(link_id) if (!link_info) continue + if ( + link_info.target_id === SUBGRAPH_OUTPUT_ID && + graph instanceof Subgraph + ) { + const targetSlot = graph.outputNode.slots[link_info.target_slot] + if (targetSlot) { + targetSlot.linkIds.length = 0 + } else { + console.error('Missing subgraphOutput slot when disconnecting link') + } + } const target = graph.getNodeById(link_info.target_id) graph._version++ diff --git a/src/lib/litegraph/src/subgraph/SubgraphOutput.ts b/src/lib/litegraph/src/subgraph/SubgraphOutput.ts index a33654cc23..460e49ff58 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphOutput.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphOutput.ts @@ -158,6 +158,7 @@ export class SubgraphOutput extends SubgraphSlot { //should never have more than one connection for (const linkId of this.linkIds) { const link = subgraph.links[linkId] + if (!link) continue subgraph.removeLink(linkId) const { output, outputNode } = link.resolve(subgraph) if (output)