From 8cce1b4de27471147cdea931bcff4958f98cbfb3 Mon Sep 17 00:00:00 2001 From: bymyself Date: Sat, 17 Jan 2026 20:38:40 -0800 Subject: [PATCH 1/2] feat(canvas): show 'Show Advanced' button on nodes with advanced widgets --- .../vueNodes/components/LGraphNode.vue | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/renderer/extensions/vueNodes/components/LGraphNode.vue b/src/renderer/extensions/vueNodes/components/LGraphNode.vue index b990c957a1d..83091f4bfd9 100644 --- a/src/renderer/extensions/vueNodes/components/LGraphNode.vue +++ b/src/renderer/extensions/vueNodes/components/LGraphNode.vue @@ -482,18 +482,31 @@ const lgraphNode = computed(() => { const showAdvancedInputsButton = computed(() => { const node = lgraphNode.value - if (!node || !(node instanceof SubgraphNode)) return false + if (!node) return false - // Check if there are hidden inputs (widgets not promoted) - const interiorNodes = node.subgraph.nodes - const allInteriorWidgets = interiorNodes.flatMap((n) => n.widgets ?? []) + // For subgraph nodes: check for unpromoted widgets + if (node instanceof SubgraphNode) { + const interiorNodes = node.subgraph.nodes + const allInteriorWidgets = interiorNodes.flatMap((n) => n.widgets ?? []) + return allInteriorWidgets.some((w) => !w.computedDisabled && !w.promoted) + } - return allInteriorWidgets.some((w) => !w.computedDisabled && !w.promoted) + // For regular nodes: show button if there are advanced widgets and they're currently hidden + const hasAdvancedWidgets = nodeData.widgets?.some((w) => w.options?.advanced) + return hasAdvancedWidgets && !node.showAdvanced }) function handleShowAdvancedInputs() { - const rightSidePanelStore = useRightSidePanelStore() - rightSidePanelStore.focusSection('advanced-inputs') + const node = lgraphNode.value + if (!node) return + + if (node instanceof SubgraphNode) { + const rightSidePanelStore = useRightSidePanelStore() + rightSidePanelStore.focusSection('advanced-inputs') + } else { + node.showAdvanced = true + useCanvasStore().canvas?.setDirty(true, true) + } } const nodeMedia = computed(() => { From 8440a6bca8e7ccbdfd2f5028e9c187b8d5806340 Mon Sep 17 00:00:00 2001 From: bymyself Date: Mon, 19 Jan 2026 19:34:23 -0800 Subject: [PATCH 2/2] fix: remove unnecessary setDirty call and check both widget.advanced patterns Addresses review comments: - Remove setDirty call since reactivity is handled by property instrumentation - Check both widget.options.advanced (new) and widget.advanced (legacy) --- src/renderer/extensions/vueNodes/components/LGraphNode.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/renderer/extensions/vueNodes/components/LGraphNode.vue b/src/renderer/extensions/vueNodes/components/LGraphNode.vue index 83091f4bfd9..1d96cda830f 100644 --- a/src/renderer/extensions/vueNodes/components/LGraphNode.vue +++ b/src/renderer/extensions/vueNodes/components/LGraphNode.vue @@ -505,7 +505,6 @@ function handleShowAdvancedInputs() { rightSidePanelStore.focusSection('advanced-inputs') } else { node.showAdvanced = true - useCanvasStore().canvas?.setDirty(true, true) } }