From 9489bd23f61e53a13d86295f9c99fc117dca5a08 Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Fri, 17 Jul 2026 17:35:11 -0700 Subject: [PATCH] fix(api-nodes): disambiguate deprecated partner-node display names Five deprecated partner V1 nodes shared an exact display_name with their live V2 replacements, so the node picker (and any object_info consumer) showed two identically-named nodes and users/agents routinely landed on the deprecated one. The headline case: OpenAIGPTImage1 (deprecated) and OpenAIGPTImageNodeV2 (live) were both "OpenAI GPT Image 2", and the deprecated node listed gpt-image-1 first in its model combo, nudging picks onto an older, costlier-for-worse-output model even though it already defaults to gpt-image-2. For each of the five deprecated twins: - append " (legacy)" to display_name so it no longer collides with the live node - add a one-sentence description note: the class name is historical, kept only for existing-workflow compatibility, supports the current models, and names the live V2 class to prefer for new workflows - reorder the model combo so the current model leads where it was stale-first (OpenAIGPTImage1: gpt-image-2 now leads; GeminiNode: the gemini-3.1 generation now leads). Grok, Nano Banana 2, and ByteDance Seedream already led with the current model, so their combos are unchanged. Class names (node_id / class_type) are untouched, so existing workflows referencing these nodes still load and run. Only display_name, description, and combo order change; no object_info schema change. The six ControlNet display_name collisions noted in the same analysis live in core nodes, not comfy_api_nodes, and are left for a follow-up. --- comfy_api_nodes/nodes_bytedance.py | 9 +++++++-- comfy_api_nodes/nodes_gemini.py | 20 ++++++++++++++------ comfy_api_nodes/nodes_grok.py | 9 +++++++-- comfy_api_nodes/nodes_openai.py | 11 ++++++++--- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/comfy_api_nodes/nodes_bytedance.py b/comfy_api_nodes/nodes_bytedance.py index a84399ad3..94a685f31 100644 --- a/comfy_api_nodes/nodes_bytedance.py +++ b/comfy_api_nodes/nodes_bytedance.py @@ -545,9 +545,14 @@ class ByteDanceSeedreamNode(IO.ComfyNode): def define_schema(cls): return IO.Schema( node_id="ByteDanceSeedreamNode", - display_name="ByteDance Seedream 4.5 & 5.0", + display_name="ByteDance Seedream 4.5 & 5.0 (legacy)", category="partner/image/ByteDance", - description="Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", + description=( + "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution. " + "This class name is historical and is kept only for compatibility with existing workflows; " + "it supports the current models, " + "so prefer the ByteDanceSeedreamNodeV2 ('ByteDance Seedream 4.5 & 5.0') node for new workflows." + ), inputs=[ IO.Combo.Input( "model", diff --git a/comfy_api_nodes/nodes_gemini.py b/comfy_api_nodes/nodes_gemini.py index 283e2233d..419c49ffa 100644 --- a/comfy_api_nodes/nodes_gemini.py +++ b/comfy_api_nodes/nodes_gemini.py @@ -459,11 +459,14 @@ class GeminiNode(IO.ComfyNode): def define_schema(cls): return IO.Schema( node_id="GeminiNode", - display_name="Google Gemini", + display_name="Google Gemini (legacy)", category="partner/text/Gemini", description="Generate text responses with Google's Gemini AI model. " "You can provide multiple types of inputs (text, images, audio, video) " - "as context for generating more relevant and meaningful responses.", + "as context for generating more relevant and meaningful responses. " + "This class name is historical and is kept only for compatibility with existing workflows; " + "it supports the current Gemini models, " + "so prefer the GeminiNodeV2 ('Google Gemini') node for new workflows.", inputs=[ IO.String.Input( "prompt", @@ -475,11 +478,11 @@ class GeminiNode(IO.ComfyNode): IO.Combo.Input( "model", options=[ + "gemini-3-1-pro", + "gemini-3-1-flash-lite", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-3-pro-preview", - "gemini-3-1-pro", - "gemini-3-1-flash-lite", ], default="gemini-3-1-pro", tooltip="The Gemini model to use for generating responses.", @@ -1193,9 +1196,14 @@ class GeminiNanoBanana2(IO.ComfyNode): def define_schema(cls): return IO.Schema( node_id="GeminiNanoBanana2", - display_name="Nano Banana 2", + display_name="Nano Banana 2 (legacy)", category="partner/image/Gemini", - description="Generate or edit images synchronously via Google Vertex API.", + description=( + "Generate or edit images synchronously via Google Vertex API. " + "This class name is historical and is kept only for compatibility with existing workflows; " + "it supports the current models, " + "so prefer the GeminiNanoBanana2V2 ('Nano Banana 2') node for new workflows." + ), inputs=[ IO.String.Input( "prompt", diff --git a/comfy_api_nodes/nodes_grok.py b/comfy_api_nodes/nodes_grok.py index dc484536e..c41068702 100644 --- a/comfy_api_nodes/nodes_grok.py +++ b/comfy_api_nodes/nodes_grok.py @@ -227,9 +227,14 @@ class GrokImageEditNode(IO.ComfyNode): def define_schema(cls): return IO.Schema( node_id="GrokImageEditNode", - display_name="Grok Image Edit", + display_name="Grok Image Edit (legacy)", category="partner/image/Grok", - description="Modify an existing image based on a text prompt", + description=( + "Modify an existing image based on a text prompt. " + "This class name is historical and is kept only for compatibility with existing workflows; " + "it supports the current models, " + "so prefer the GrokImageEditNodeV2 ('Grok Image Edit') node for new workflows." + ), inputs=[ IO.Combo.Input( "model", diff --git a/comfy_api_nodes/nodes_openai.py b/comfy_api_nodes/nodes_openai.py index de2c94353..4a58e0a0a 100644 --- a/comfy_api_nodes/nodes_openai.py +++ b/comfy_api_nodes/nodes_openai.py @@ -383,9 +383,14 @@ class OpenAIGPTImage1(IO.ComfyNode): def define_schema(cls): return IO.Schema( node_id="OpenAIGPTImage1", - display_name="OpenAI GPT Image 2", + display_name="OpenAI GPT Image 2 (legacy)", category="partner/image/OpenAI", - description="Generates images synchronously via OpenAI's GPT Image endpoint.", + description=( + "Generates images synchronously via OpenAI's GPT Image endpoint. " + "This class name is historical and is kept only for compatibility with existing workflows; " + "the node is not limited to GPT Image 1 and defaults to the current gpt-image-2 model, " + "so prefer the OpenAIGPTImageNodeV2 ('OpenAI GPT Image 2') node for new workflows." + ), is_deprecated=True, inputs=[ IO.String.Input( @@ -459,7 +464,7 @@ class OpenAIGPTImage1(IO.ComfyNode): ), IO.Combo.Input( "model", - options=["gpt-image-1", "gpt-image-1.5", "gpt-image-2"], + options=["gpt-image-2", "gpt-image-1.5", "gpt-image-1"], default="gpt-image-2", optional=True, ),