diff --git a/src/composables/graph/useGraphNodeManager.ts b/src/composables/graph/useGraphNodeManager.ts index 2456b8c30..e91d1f332 100644 --- a/src/composables/graph/useGraphNodeManager.ts +++ b/src/composables/graph/useGraphNodeManager.ts @@ -202,10 +202,17 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => { } }) + const nodeType = + node.type || + node.constructor?.comfyClass || + node.constructor?.title || + node.constructor?.name || + 'Unknown' + return { id: String(node.id), - title: node.title || 'Untitled', - type: node.type || 'Unknown', + title: typeof node.title === 'string' ? node.title : '', + type: nodeType, mode: node.mode || 0, selected: node.selected || false, executing: false, // Will be updated separately based on execution state @@ -612,7 +619,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 +664,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 1bca590dc..3197a872c 100644 --- a/src/renderer/extensions/vueNodes/components/NodeHeader.vue +++ b/src/renderer/extensions/vueNodes/components/NodeHeader.vue @@ -36,7 +36,7 @@