Number Range
The node that makes ComfyUI run a graph once per number
- start
- stop
- ARRAY
- NUMBER
- floats
- ints
- count
Number Range is where half the interesting WAS Node Suite workflows start. It produces a series of numbers between start and stop - and because each number leaves on a list output, every node wired below it runs once per value. That one trick turns "type ten denoise values by hand" into "render ten frames," step a camera move, sweep a CFG, or build a 24-frame animation loop. It's the poor man's scheduler, and most of the time it's enough.
You've probably seen the pattern in someone else's graph already: a Number Range feeding a KSampler's denoise or a batch of frames, with the whole thing looping until the list runs out. This is the node doing that heavy lifting, dressed up as a simple calculator.
How it works
Set start and stop, then pick a mode. In count mode the node spreads exactly count values across the whole span - start 0, stop 1, count 10 gives 0, 0.1, 0.2 … 1. In step mode it walks by step instead, and the direction of the step is read from start-to-stop, so 0.1 and -0.1 behave the same.
A few details that will save you a confused five minutes:
endpointdecides whether the last value lands exactly onstop. Turn it off for a seamless animation loop - the last frame of a loop is the first frame of the next, so you don't want to render it twice.easingredistributes the values in count mode:ease_in_outstarts and ends slow, which is what makes a camera move look deliberate instead of mechanical.backandelasticovershoot past both ends on purpose.decimalscontrols rounding. This is what keeps0.30000000000000004out of your filenames and logs.countof 1 gives youstartalone. Astepof 0 stops with an error, because there's no sensible answer.
The outputs that matter
The NUMBER socket is the one beginners actually wire. It's a list - one NUMBER per value - so anything downstream runs once for each. That's the socket that drives a series of renders or frames. floats and ints carry the same values as decimals and whole numbers (ints are cut off, not rounded, so they're handy for seeds and frame numbers), and count tells you how many runs to expect.
The ARRAY output is the quieter half of the node: the whole series on one wire, for list nodes like Text List Get or for feeding Number Easing if you want to reshape it further. The trio Number Range → Number Easing → a sampler is the WAS-native way to write a denoise or strength schedule by hand.
Installing it
Number Range ships in WAS Node Suite v3 - search ComfyUI Manager for WAS Node Suite v3, or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui
Then restart ComfyUI. You need ComfyUI 0.14.0+ and Python 3.10+. This is the notable part: v3 installs nothing. No pip packages, no weights downloaded at startup. The original v2 of this pack shipped twenty dependencies and was notorious for breaking after ComfyUI updates; the 2026 v3 rewrite runs everything on torch and ComfyUI's own device, so the old "Import Failed" class of problem is gone. First startup just takes a second or two longer while it compiles.
Where people get burned
The two classic mistakes are leaving endpoint on for a loop (you render the join frame twice) and expecting step mode to end exactly on stop - a step that doesn't divide the span cleanly ends on the last whole step before it. And remember the outputs are lists: if a node downstream only takes a single number and it runs twenty times, that's the list semantics working as designed, not a bug.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| start | FLOAT,NUMBER,INT | 0-1000000000–1000000000 | The first value of the series. |
| stop | FLOAT,NUMBER,INT | 1-1000000000–1000000000 | The value the series runs to. Lower than start counts downwards, which is how a fade-out is written. |
| mode | COMBO | What decides the values. `count` produces exactly that many, spread across the whole span, the mode to use when the number of frames is what is fixed. `step` walks from start towards stop by a fixed amount and produces however many values fit, for a series where the spacing is what matters. | |
| count | INT | 101–10000 | How many values to produce, read in `count` mode. A count of 1 gives start alone. Every node below this one runs this many times, so a large count is a large queue. |
| step | FLOAT | 0.10-1000000000–1000000000 | The gap between one value and the next, read in `step` mode. A step of 0 stops with an error. |
| easing | COMBO | How the values are distributed across the span, in `count` mode. `linear` spaces them evenly. Not read in `step` mode, where the spacing is fixed. | |
| endpoint | BOOLEAN | true | Whether the last value is exactly stop, in `count` mode. Turn it off for a seamless loop: the final frame of a loop is the first frame of the next pass, so emitting both repeats it. |
| decimals | INT | 60–12 | How many decimal places each value is rounded to. This is what keeps 0.30000000000000004 out of a filename or a log line. 0 rounds to whole numbers. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| ARRAY | ARRAY | Every value on one wire, for Number Easing, Text List Get, Text List Length and the other list nodes. |
| NUMBER | NUMBER | One NUMBER per value. Because this is a list, a node reading it runs once for each. This is the socket that drives a series of renders. |
| floats | FLOAT | The same values as decimals, one per run. |
| ints | INT | The same values as whole numbers, cut off rather than rounded, one per run. For a step count, a frame number or a seed. |
| count | INT | How many values were produced, which is how many times the graph below this node runs. |