From 6669ce25c140aad04ed5c87b9045fd43ef3eb56d Mon Sep 17 00:00:00 2001 From: bymyself Date: Sat, 13 Sep 2025 12:26:27 -0700 Subject: [PATCH] update vue node data after configure --- src/composables/graph/useGraphNodeManager.ts | 17 ++++++++++---- .../vueNodes/components/NodeHeader.vue | 22 +++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/composables/graph/useGraphNodeManager.ts b/src/composables/graph/useGraphNodeManager.ts index 2456b8c307..602dbe43e4 100644 --- a/src/composables/graph/useGraphNodeManager.ts +++ b/src/composables/graph/useGraphNodeManager.ts @@ -204,8 +204,13 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => { return { id: String(node.id), - title: node.title || 'Untitled', - type: node.type || 'Unknown', + title: typeof node.title === 'string' ? node.title : '', + type: + node.type || + node.constructor?.comfyClass || + node.constructor?.title || + node.constructor?.name || + 'Unknown', mode: node.mode || 0, selected: node.selected || false, executing: false, // Will be updated separately based on execution state @@ -612,7 +617,7 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => { // Set up widget callbacks BEFORE extracting data (critical order) setupNodeWidgetCallbacks(node) - // Extract safe data for Vue + // Extract initial data for Vue (may be incomplete during graph configure) vueNodeData.set(id, extractVueNodeData(node)) // Set up reactive tracking state @@ -657,7 +662,11 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => { // Chain our callback with any existing onAfterGraphConfigured callback node.onAfterGraphConfigured = useChainCallback( node.onAfterGraphConfigured, - initializeVueNodeLayout + () => { + // Re-extract data now that configure() has populated title/slots/widgets/etc. + vueNodeData.set(id, extractVueNodeData(node)) + initializeVueNodeLayout() + } ) } else { // Not during workflow loading - initialize layout immediately diff --git a/src/renderer/extensions/vueNodes/components/NodeHeader.vue b/src/renderer/extensions/vueNodes/components/NodeHeader.vue index 3b3da31013..3ae528733a 100644 --- a/src/renderer/extensions/vueNodes/components/NodeHeader.vue +++ b/src/renderer/extensions/vueNodes/components/NodeHeader.vue @@ -74,15 +74,23 @@ const isEditing = ref(false) const nodeInfo = computed(() => props.nodeData || props.node) -// Local state for title to provide immediate feedback -const displayTitle = ref(nodeInfo.value?.title || 'Untitled') +const resolveTitle = (info: LGraphNode | VueNodeData | undefined) => { + const title = (info?.title ?? '').trim() + if (title.length > 0) return title + const type = (info?.type ?? '').trim() + return type.length > 0 ? type : 'Untitled' +} -// Watch for external changes to the node title +// Local state for title to provide immediate feedback +const displayTitle = ref(resolveTitle(nodeInfo.value)) + +// Watch for external changes to the node title or type watch( - () => nodeInfo.value?.title, - (newTitle) => { - if (newTitle && newTitle !== displayTitle.value) { - displayTitle.value = newTitle + () => [nodeInfo.value?.title, nodeInfo.value?.type] as const, + () => { + const next = resolveTitle(nodeInfo.value) + if (next !== displayTitle.value) { + displayTitle.value = next } } )