diff --git a/src/scripts/app.ts b/src/scripts/app.ts index a0237894b..3a033453f 100644 --- a/src/scripts/app.ts +++ b/src/scripts/app.ts @@ -62,6 +62,7 @@ import { deserialiseAndCreate } from '@/utils/vintageClipboard' import { type ComfyApi, PromptExecutionError, api } from './api' import { defaultGraph } from './defaultGraph' +import { pruneWidgets } from './domWidget' import { getFlacMetadata, getLatentMetadata, @@ -707,6 +708,8 @@ export class ComfyApp { node.onAfterGraphConfigured?.() } + pruneWidgets(this.nodes) + return r } } diff --git a/src/scripts/domWidget.ts b/src/scripts/domWidget.ts index 981b0235d..933ef6f2b 100644 --- a/src/scripts/domWidget.ts +++ b/src/scripts/domWidget.ts @@ -314,3 +314,18 @@ LGraphNode.prototype.addDOMWidget = function < return widget } + +/** + * Prunes widgets that are no longer in the graph. + * @param nodes The nodes to prune widgets for. + */ +export const pruneWidgets = (nodes: LGraphNode[]) => { + const nodeSet = new Set(nodes) + const domWidgetStore = useDomWidgetStore() + for (const widgetState of domWidgetStore.widgetStates.values()) { + const widget = widgetState.widget + if (!nodeSet.has(widget.node as LGraphNode)) { + domWidgetStore.unregisterWidget(widget.id) + } + } +}