add hidden index input from frontend and output it

add support for custom hidden fields
This commit is contained in:
pythongosssss
2026-01-23 17:01:19 -08:00
parent e89b22993a
commit 53094efd1d
3 changed files with 22 additions and 6 deletions

View File

@@ -1344,7 +1344,8 @@ class Schema:
"""The category of the node, as per the "Add Node" menu.""" """The category of the node, as per the "Add Node" menu."""
inputs: list[Input] = field(default_factory=list) inputs: list[Input] = field(default_factory=list)
outputs: list[Output] = field(default_factory=list) outputs: list[Output] = field(default_factory=list)
hidden: list[Hidden] = field(default_factory=list) hidden: list[Hidden | str] = field(default_factory=list)
"""Hidden inputs. Use Hidden enum for system values (PROMPT, UNIQUE_ID, etc.) or plain strings for custom frontend-provided values."""
description: str="" description: str=""
"""Node description, shown as a tooltip when hovering over the node.""" """Node description, shown as a tooltip when hovering over the node."""
search_aliases: list[str] = field(default_factory=list) search_aliases: list[str] = field(default_factory=list)
@@ -1443,7 +1444,10 @@ class Schema:
input = create_input_dict_v1(self.inputs) input = create_input_dict_v1(self.inputs)
if self.hidden: if self.hidden:
for hidden in self.hidden: for hidden in self.hidden:
input.setdefault("hidden", {})[hidden.name] = (hidden.value,) if isinstance(hidden, str):
input.setdefault("hidden", {})[hidden] = (hidden,)
else:
input.setdefault("hidden", {})[hidden.name] = (hidden.value,)
# create separate lists from output fields # create separate lists from output fields
output = [] output = []
output_is_list = [] output_is_list = []
@@ -1504,7 +1508,10 @@ class Schema:
add_to_dict_v3(output, output_dict) add_to_dict_v3(output, output_dict)
if self.hidden: if self.hidden:
for hidden in self.hidden: for hidden in self.hidden:
hidden_list.append(hidden.value) if isinstance(hidden, str):
hidden_list.append(hidden)
else:
hidden_list.append(hidden.value)
info = NodeInfoV3( info = NodeInfoV3(
input=input_dict, input=input_dict,

View File

@@ -104,7 +104,11 @@ class CustomComboNode(io.ComfyNode):
category="utils", category="utils",
is_experimental=True, is_experimental=True,
inputs=[io.Combo.Input("choice", options=[])], inputs=[io.Combo.Input("choice", options=[])],
outputs=[io.String.Output()] outputs=[
io.String.Output(display_name="STRING"),
io.Int.Output(display_name="INDEX"),
],
hidden=["index"],
) )
@classmethod @classmethod
@@ -115,8 +119,8 @@ class CustomComboNode(io.ComfyNode):
return True return True
@classmethod @classmethod
def execute(cls, choice: io.Combo.Type) -> io.NodeOutput: def execute(cls, choice: io.Combo.Type, index: int = 0) -> io.NodeOutput:
return io.NodeOutput(choice) return io.NodeOutput(choice, index)
class DCTestNode(io.ComfyNode): class DCTestNode(io.ComfyNode):

View File

@@ -192,6 +192,11 @@ def get_input_data(inputs, class_def, unique_id, execution_list=None, dynprompt=
hidden_inputs_v3[io.Hidden.auth_token_comfy_org] = extra_data.get("auth_token_comfy_org", None) hidden_inputs_v3[io.Hidden.auth_token_comfy_org] = extra_data.get("auth_token_comfy_org", None)
if io.Hidden.api_key_comfy_org.name in hidden: if io.Hidden.api_key_comfy_org.name in hidden:
hidden_inputs_v3[io.Hidden.api_key_comfy_org] = extra_data.get("api_key_comfy_org", None) hidden_inputs_v3[io.Hidden.api_key_comfy_org] = extra_data.get("api_key_comfy_org", None)
# Handle custom hidden inputs from prompt data
system_hidden_names = {h.name for h in io.Hidden}
for hidden_name in hidden:
if hidden_name not in system_hidden_names and hidden_name in inputs:
input_data_all[hidden_name] = [inputs[hidden_name]]
else: else:
if "hidden" in valid_inputs: if "hidden" in valid_inputs:
h = valid_inputs["hidden"] h = valid_inputs["hidden"]