From 635aaf79d5dd09f6e702fa146fe53d17d882f09f Mon Sep 17 00:00:00 2001 From: Austin Mroz Date: Sat, 24 Jan 2026 10:32:04 -0800 Subject: [PATCH 1/4] Add ConvertToList node --- comfy_extras/nodes_toolkit.py | 43 +++++++++++++++++++++++++++++++++++ nodes.py | 3 ++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 comfy_extras/nodes_toolkit.py diff --git a/comfy_extras/nodes_toolkit.py b/comfy_extras/nodes_toolkit.py new file mode 100644 index 000000000..08002115c --- /dev/null +++ b/comfy_extras/nodes_toolkit.py @@ -0,0 +1,43 @@ +from __future__ import annotations +from typing_extensions import override +from comfy_api.latest import ComfyExtension, io +from comfy_api.latest import _io + + +class ConvertToList(io.ComfyNode): + @classmethod + def define_schema(cls): + template_matchtype = io.MatchType.Template("type") + template_autogrow = _io.Autogrow.TemplatePrefix( + input=io.MatchType.Input("input", template=template_matchtype), + prefix="input", + ) + return io.Schema( + node_id="ConvertToList", + display_name="Convert to List", + category="logic", + is_input_list=True, + inputs=[_io.Autogrow.Input("inputs", template=template_autogrow)], + outputs=[ + io.MatchType.Output(template=template_matchtype, is_output_list=True), + ], + ) + + @classmethod + def execute(cls, inputs: _io.Autogrow.Type) -> io.NodeOutput: + output_list = [] + for input in inputs.values(): + output_list += input + return io.NodeOutput(output_list) + + +class ToolkitExtension(ComfyExtension): + @override + async def get_node_list(self) -> list[type[io.ComfyNode]]: + return [ + ConvertToList, + ] + + +async def comfy_entrypoint() -> ToolkitExtension: + return ToolkitExtension() diff --git a/nodes.py b/nodes.py index 1cb43d9e2..1e8fae3bd 100644 --- a/nodes.py +++ b/nodes.py @@ -2433,7 +2433,8 @@ async def init_builtin_extra_nodes(): "nodes_image_compare.py", "nodes_zimage.py", "nodes_lora_debug.py", - "nodes_color.py" + "nodes_color.py", + "nodes_toolkit.py", ] import_failed = [] From 9e91a00130b5e66668dd6a3c723c7319e9782546 Mon Sep 17 00:00:00 2001 From: Austin Mroz Date: Sat, 24 Jan 2026 11:14:31 -0800 Subject: [PATCH 2/4] Add search aliases --- comfy_extras/nodes_toolkit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/comfy_extras/nodes_toolkit.py b/comfy_extras/nodes_toolkit.py index 08002115c..26148a864 100644 --- a/comfy_extras/nodes_toolkit.py +++ b/comfy_extras/nodes_toolkit.py @@ -17,6 +17,7 @@ class ConvertToList(io.ComfyNode): display_name="Convert to List", category="logic", is_input_list=True, + search_aliases=["Image Iterator", "Text Iterator", "Iterator"], inputs=[_io.Autogrow.Input("inputs", template=template_autogrow)], outputs=[ io.MatchType.Output(template=template_matchtype, is_output_list=True), From ef208d0ba7170670de9e88e1cbda8675b551c637 Mon Sep 17 00:00:00 2001 From: Austin Mroz Date: Thu, 29 Jan 2026 20:24:15 -0800 Subject: [PATCH 3/4] Add missing comma and output display name --- comfy_extras/nodes_toolkit.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/comfy_extras/nodes_toolkit.py b/comfy_extras/nodes_toolkit.py index 26148a864..07d235fa6 100644 --- a/comfy_extras/nodes_toolkit.py +++ b/comfy_extras/nodes_toolkit.py @@ -20,7 +20,11 @@ class ConvertToList(io.ComfyNode): search_aliases=["Image Iterator", "Text Iterator", "Iterator"], inputs=[_io.Autogrow.Input("inputs", template=template_autogrow)], outputs=[ - io.MatchType.Output(template=template_matchtype, is_output_list=True), + io.MatchType.Output( + template=template_matchtype, + is_output_list=True, + display_name="list", + ), ], ) From 535ef70698a49896b1bfe3a8f9c3cc88278d7a12 Mon Sep 17 00:00:00 2001 From: Austin Mroz Date: Fri, 30 Jan 2026 11:02:16 -0800 Subject: [PATCH 4/4] Update imports and name --- comfy_extras/nodes_toolkit.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/comfy_extras/nodes_toolkit.py b/comfy_extras/nodes_toolkit.py index 07d235fa6..71faf7226 100644 --- a/comfy_extras/nodes_toolkit.py +++ b/comfy_extras/nodes_toolkit.py @@ -1,24 +1,23 @@ from __future__ import annotations from typing_extensions import override from comfy_api.latest import ComfyExtension, io -from comfy_api.latest import _io -class ConvertToList(io.ComfyNode): +class CreateList(io.ComfyNode): @classmethod def define_schema(cls): template_matchtype = io.MatchType.Template("type") - template_autogrow = _io.Autogrow.TemplatePrefix( + template_autogrow = io.Autogrow.TemplatePrefix( input=io.MatchType.Input("input", template=template_matchtype), prefix="input", ) return io.Schema( - node_id="ConvertToList", - display_name="Convert to List", + node_id="CreateList", + display_name="Create List", category="logic", is_input_list=True, search_aliases=["Image Iterator", "Text Iterator", "Iterator"], - inputs=[_io.Autogrow.Input("inputs", template=template_autogrow)], + inputs=[io.Autogrow.Input("inputs", template=template_autogrow)], outputs=[ io.MatchType.Output( template=template_matchtype, @@ -29,7 +28,7 @@ class ConvertToList(io.ComfyNode): ) @classmethod - def execute(cls, inputs: _io.Autogrow.Type) -> io.NodeOutput: + def execute(cls, inputs: io.Autogrow.Type) -> io.NodeOutput: output_list = [] for input in inputs.values(): output_list += input @@ -40,7 +39,7 @@ class ToolkitExtension(ComfyExtension): @override async def get_node_list(self) -> list[type[io.ComfyNode]]: return [ - ConvertToList, + CreateList, ]