From 684e115f30684c46916d5d669c2026d2f7e06680 Mon Sep 17 00:00:00 2001 From: space-nuko <24979496+space-nuko@users.noreply.github.com> Date: Thu, 25 May 2023 21:59:03 -0500 Subject: [PATCH] Fixes for tag scoping --- src/lib/components/ComfyApp.ts | 2 +- src/lib/components/ComfyPromptSerializer.ts | 17 +++++++++-------- src/lib/nodes/actions/ComfySetNodeModeAction.ts | 2 +- .../actions/ComfySetNodeModeAdvancedAction.ts | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/lib/components/ComfyApp.ts b/src/lib/components/ComfyApp.ts index 1639d93..6f0e579 100644 --- a/src/lib/components/ComfyApp.ts +++ b/src/lib/components/ComfyApp.ts @@ -968,7 +968,7 @@ export default class ComfyApp { const thumbnails = [] for (const node of workflow.graph.iterateNodesInOrderRecursive()) { - if (node.mode !== NodeMode.ALWAYS || (tag != null && !nodeHasTag(node, tag))) + if (node.mode !== NodeMode.ALWAYS || (tag != null && !nodeHasTag(node, tag, true))) continue; if ("getPromptThumbnails" in node) { diff --git a/src/lib/components/ComfyPromptSerializer.ts b/src/lib/components/ComfyPromptSerializer.ts index d1af719..1e1a540 100644 --- a/src/lib/components/ComfyPromptSerializer.ts +++ b/src/lib/components/ComfyPromptSerializer.ts @@ -15,18 +15,17 @@ function isGraphInputOutput(node: LGraphNode): boolean { return node.is(GraphInput) || node.is(GraphOutput) } -export function nodeHasTag(node: LGraphNode, tag: string): boolean { - // Ignore tags on reroutes since they're just movable wires and it defeats - // the convenience gains to have to set tags for all them - if (isReroute(node)) - return true; - +export function nodeHasTag(node: LGraphNode, tag: string, checkParents: boolean): boolean { while (node != null) { if ("tags" in node.properties) { if (node.properties.tags.indexOf(tag) !== -1) return true; } + if (!checkParents) { + return false; + } + // Count parent subgraphs having the tag also. node = node.graph?._subgraph_node; } @@ -38,8 +37,10 @@ export function isActiveNode(node: LGraphNode, tag: string | null = null): boole if (!node) return false; - // Check tags but not on graph inputs/outputs - if (!isGraphInputOutput(node) && (tag && !nodeHasTag(node, tag))) { + // Ignore tags on reroutes since they're just movable wires and it defeats + // the convenience gains to have to set tags for all them + // Also ignore graph inputs/outputs + if (!isReroute(node) && !isGraphInputOutput(node) && (tag && !nodeHasTag(node, tag, true))) { console.debug("Skipping tagged node", tag, node.properties.tags, node) return false; } diff --git a/src/lib/nodes/actions/ComfySetNodeModeAction.ts b/src/lib/nodes/actions/ComfySetNodeModeAction.ts index 22e4818..1a193b7 100644 --- a/src/lib/nodes/actions/ComfySetNodeModeAction.ts +++ b/src/lib/nodes/actions/ComfySetNodeModeAction.ts @@ -53,7 +53,7 @@ export default class ComfySetNodeModeAction extends ComfyGraphNode { for (const node of this.graph._nodes) { if ("tags" in node.properties) { const comfyNode = node as ComfyGraphNode; - const hasTag = tags.some(t => nodeHasTag(comfyNode, t)); + const hasTag = tags.some(t => nodeHasTag(comfyNode, t, false)); if (hasTag) { let newMode: NodeMode; if (enabled) { diff --git a/src/lib/nodes/actions/ComfySetNodeModeAdvancedAction.ts b/src/lib/nodes/actions/ComfySetNodeModeAdvancedAction.ts index 7ec2aca..6563c4d 100644 --- a/src/lib/nodes/actions/ComfySetNodeModeAdvancedAction.ts +++ b/src/lib/nodes/actions/ComfySetNodeModeAdvancedAction.ts @@ -69,7 +69,7 @@ export default class ComfySetNodeModeAdvancedAction extends ComfyGraphNode { for (const node of this.graph.iterateNodesInOrderRecursive()) { if ("tags" in node.properties) { const comfyNode = node as ComfyGraphNode; - const hasTag = nodeHasTag(comfyNode, action.tag); + const hasTag = nodeHasTag(comfyNode, action.tag, false); if (hasTag) { let newMode: NodeMode;