From 60b300f43e66037ff3d7d29110f9f1213d2cf68b Mon Sep 17 00:00:00 2001 From: Dariusz L Date: Sun, 10 May 2026 17:28:33 +0200 Subject: [PATCH] Add node title tracking and display for workflow models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 'node_title' field to model info dictionaries in get_node_model_info - Display custom node titles in missing models dialog when available - Show 'NodeLabel #id · CustomTitle' format for better model identification --- core/workflow_analyzer.py | 5 +++++ web/linker.js | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/workflow_analyzer.py b/core/workflow_analyzer.py index d632b76..cd75d6b 100644 --- a/core/workflow_analyzer.py +++ b/core/workflow_analyzer.py @@ -193,6 +193,7 @@ def get_node_model_info( model_refs = [] node_id = node.get("id") node_type = node.get("type", "") + node_title = str(node.get("title", "") or "").strip() widgets_values = node.get("widgets_values", []) # Check if node is connected (has any inputs or outputs with links) @@ -291,6 +292,7 @@ def get_node_model_info( "name": name, "strength": float(strength), "active": active, + "node_title": node_title, "category": "loras", "full_path": lora_full_path, "exists": lora_exists, @@ -340,6 +342,7 @@ def get_node_model_info( "node_type": node_type, "widget_index": idx, "original_path": value_str, + "node_title": node_title, "category": category, "full_path": full_path, "exists": exists, @@ -372,6 +375,7 @@ def get_node_model_info( "model_id": int(model_id), "version_id": int(version_id), }, + "node_title": node_title, "category": category, "full_path": None, "exists": False, @@ -398,6 +402,7 @@ def get_node_model_info( "node_type": node_type, "widget_index": idx, "original_path": value_str, + "node_title": node_title, "category": category, "full_path": full_path, "exists": exists, diff --git a/web/linker.js b/web/linker.js index 5be99ff..cfc5844 100644 --- a/web/linker.js +++ b/web/linker.js @@ -5967,6 +5967,11 @@ class LinkerManagerDialog extends ComfyDialog { } else { nodeLabel = missing.node_type || 'Node'; } + const customNodeTitle = String(missing.node_title || '').trim(); + const hasCustomNodeTitle = customNodeTitle && customNodeTitle !== nodeLabel; + const nodeChipText = this.escapeHtml(hasCustomNodeTitle + ? `${nodeLabel} #${missing.node_id} · ${customNodeTitle}` + : `${nodeLabel} #${missing.node_id}`); // Start card let html = `
`; @@ -6030,7 +6035,7 @@ class LinkerManagerDialog extends ComfyDialog { if (missing.is_top_level !== false) { html += this.getLocateIconHtml(); } - html += `${nodeLabel} #${missing.node_id}`; + html += `${nodeChipText}`; html += `
`; html += ``; html += ``;