From 230d6f5eb08b3839f210dbe531402b2d24fabe5f Mon Sep 17 00:00:00 2001 From: t22m003 Date: Sat, 6 Dec 2025 20:33:29 +0900 Subject: [PATCH] Initial commit --- README.md | 26 +++++++++++++++ __init__.py | 12 +++++++ __pycache__/__init__.cpython-312.pyc | Bin 0 -> 381 bytes __pycache__/loop_node.cpython-312.pyc | Bin 0 -> 1972 bytes loop_node.py | 45 ++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 README.md create mode 100644 __init__.py create mode 100644 __pycache__/__init__.cpython-312.pyc create mode 100644 __pycache__/loop_node.cpython-312.pyc create mode 100644 loop_node.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b55f8e --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ + +# ComfyUI Loop Node + +Custom node that provides loop (for-loop) functionality in ComfyUI. +This allows you to repeat execution steps by outputting a list of integers, which triggers ComfyUI's list execution behavior. + +## Features + +- **For Loop (Count)**: Simple loop that runs `N` times. outputs `0` to `N-1`. +- **For Loop (Range)**: Loop based on python `range(start, stop, step)`. + +## Installation + +Navigate to your `ComfyUI/custom_nodes/` directory and clone this repository: + +```bash +git clone https://github.com/t22m003/ComfyUI_LoopNode.git +``` + +## Usage + +Found under the category: `Loop` + +## Sponsor + +[![Sponsor](https://img.shields.io/badge/Sponsor-t22m003-red)](https://github.com/sponsors/t22m003) diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..1e0ea57 --- /dev/null +++ b/__init__.py @@ -0,0 +1,12 @@ + +from .loop_node import SimpleForLoop, SimpleForLoopRange + +NODE_CLASS_MAPPINGS = { + "SimpleForLoop": SimpleForLoop, + "SimpleForLoopRange": SimpleForLoopRange, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "SimpleForLoop": "For Loop (Count)", + "SimpleForLoopRange": "For Loop (Range)", +} diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bd2e1d96f3da8cefb751b4867cc5cf232b2112d GIT binary patch literal 381 zcmX@j%ge<81loU%GZh#a7#@Q-Fu)9DeAWOmrZc24q%h_%cg-r~#wDv8g_Pf0BTxv7W+NZbHtz`HN)W-13ML#1yH&wqlBQq~OUq3lNH?30N8AOJ9 z>L-^Lm*nSyZ7PNd#)I7F2eey1K0Y%qvm`!Vub}c5hfQvNN@-52T@g3XP>_#{L80`4 snURt4IfKOqHU=@}8&WzSS((L|E-(mx;9(Hcfbiv*E;2|JaRL&Z7cIs^iRzBel=Qet}Qi2do!n>X{m<~M(i zjz$QKg@5ijyDA}nBSbkd%h)QW*YfE{bn zejv`VNkO8dAXDj(6ck&fu>Z7UU(l#h2vM~VrdmO#p~4Ui7a~*#%i+DDWQ31qo$_|c ze(17Q*WE5k{eD1J;A>;tM`VxGC8G|&RnIPMdT5&Xu#(zx%XZ4!aw^ZiKTjthm(nx=It>7@$d&KoDzpxA(Yinoh;>O>_UoKtOl9dJ%{QE^DNzkF-G` z1HtN`5H_#c$_DpBfyMckwhheTjuv#>Z4YS1L?G*?f!2N znPFwwIDm&<5($wqy9M%oY%tYMOp|DfP$PduC;!O5y#M>J=g~Wj@r8!IATl!QBiQkZ zRklr&M@+Nq(rO9i5!2kMTBTrxA(i-Wv1EB(+4i?w%4SeAl3B^+Ge%JF-pp8fvXbRv zYxx}ZBAqo?)7c!?ALfnaTzU!DqHpyE z^?}l7uvY_oK&Kc$kG!J0LDpf=_g!C6=KY(WAJ`+`G;CnQ2zVa{{NVi;euB5C!#iZ2 z7O)O@7#2+YIM)OxyL0_m5xg8S*ciINyM6&5aiU+q^cw0WP=~i6sc_BnE#@N~-EB67 ztH>*cG4>~gH)VhRilq7oc@y{i0?;Mo%q>C3SYv(T>~^LR&o<-pCqDy0g(i_{ObgA@ zYwL~ncIPay(U{I$hE=3&2q_!tP?q7z44)!4kAQ4p34o#s&>h$ZQM>OzI3iaw^*}yQ zPSFZRm#xp$1GUFkb_Z6HTENr$AhYigurfR%NNoOQl{^pGoxssY;F&Ax(_!&fVD8NU z0E=VsSKJ)E)?B0t=GdlC)c|)HK=*$+u?o&p6gE|C^V&j-NdVq|c|)3eM*zgJ F{{oSNx(@&V literal 0 HcmV?d00001 diff --git a/loop_node.py b/loop_node.py new file mode 100644 index 0000000..9037ecd --- /dev/null +++ b/loop_node.py @@ -0,0 +1,45 @@ + +class SimpleForLoop: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "total": ("INT", {"default": 1, "min": 1, "max": 100, "step": 1}), + } + } + + RETURN_TYPES = ("INT",) + RETURN_NAMES = ("index",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "execute" + CATEGORY = "Loop" + + def execute(self, total): + return (list(range(total)),) + +class SimpleForLoopRange: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "start": ("INT", {"default": 0, "min": 0, "max": 10000, "step": 1}), + "stop": ("INT", {"default": 10, "min": 0, "max": 10000, "step": 1}), + "step": ("INT", {"default": 1, "min": 1, "max": 10000, "step": 1}), + } + } + + RETURN_TYPES = ("INT",) + RETURN_NAMES = ("index",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "execute" + CATEGORY = "Loop" + + def execute(self, start, stop, step): + range_vals = list(range(start, stop, step)) + return (range_vals,)