Random Normal Distribution
A list of jittered values, one per item in your batch
- random_samples
- first_sample
Random Normal Distribution is the odd one out in ComfyUI-list-filter. It's filed under the Random category, it doesn't touch strings, images, or indices, and it's the only node in the pack that has nothing to do with filtering. What it does: generate a list of random floats drawn from a normal (bell-curve) distribution, which is a surprisingly handy thing to have mid-graph.
The use case is batch processing where you want each item in the batch to get a slightly different value around a target, instead of one fixed number for everything. Feed the output list into anything that accepts a list of floats - per-image CFG scale, denoise strength, prompt weights - and each image gets its own value, clustered around the mean you chose. Same seed, same workflow, but the batch stops being monotonous. It's the kind of node you discover, use once for a "vary the denoise per frame" idea, and then remember whenever you need jitter anywhere in the graph.
How it works
For each of num_samples iterations it draws random.gauss(mean, std_dev), clamps the result to [min_value, max_value], and rounds it to one decimal place. Clamping means no sample ever escapes your chosen range - useful when you're feeding a value that would crash or look wrong outside bounds, like a denoise of 1.3.
Two outputs: random_samples, the full LIST of floats (one per sample), and first_sample, a plain FLOAT equal to the first entry - convenient if you only want one value and don't want to unpack a list.
The inputs that matter
mean- the center of the distribution (default0).std_dev- how much values spread out around the mean (default1).num_samples- how many values to generate (default10).min_value/max_value- the clamp range (defaults5and8).
The trap in the defaults
Look at those defaults again: mean 0, std_dev 1, min 5, max 8. A normal distribution centered on 0 with spread 1 essentially never produces values near 5, let alone 8 - so every single sample clamps to 5.0. Run it as-is and you get a list of ten identical 5.0s. That's not a bug; it's just defaults that only make sense together if you change the mean. Want values hovering around 7? Set mean 7, std_dev 0.5, keep the clamp wide. The moment you accept the defaults, you've got a very elaborate way to print the number 5.
Also worth knowing: num_samples = 0 will crash the node, because it returns random_samples[0] and there is no element 0. Give it at least one sample.
Installing it
Same drill as the rest of the pack - this is one of six nodes shipped together in ComfyUI-list-filter:
- ComfyUI Manager - search
ComfyUI-list-filter, install, restart. - Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/Kesin11/ComfyUI-list-filter, then restart ComfyUI.
No requirements.txt, no models, no pip installs - the pack is stdlib-only, and this node's only dependency is Python's random module.
It's not the node you'd show off, but for anyone doing per-image parameter variation it beats hand-typing ten different numbers, and it's a nice reminder that the smallest packs sometimes hide the least obvious utilities.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| mean | FLOAT | 0.00 | The mean of the normal distribution. |
| std_dev | FLOAT | 1.00 | The standard deviation of the normal distribution. |
| num_samples | INT | 10 | The number of random samples to generate. |
| min_value | FLOAT | 5.00 | The minimum value of the generated samples. |
| max_value | FLOAT | 8.00 | The maximum value of the generated samples. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| random_samples | LIST | The list of generated random samples. |
| first_sample | FLOAT | The first generated random sample. |