MD: Custom Noise Generator
Feed your sampler Perlin and Voronoi noise
- noise
- preview_image
Every diffusion run starts the same way: a random Gaussian noise field gets sculpted into an image. But nobody says the starting noise has to be Gaussian. MD_CustomNoiseGenerator hands you the keys to that initial tensor - 15 noise algorithms including Perlin, Voronoi, wavelets, and heavy-tail distributions - and feeds the result into your sampler as a custom NOISE object, with a preview image so you can see what you're about to inject.
The idea has a real lineage: structural noise (Perlin-style low-frequency patterns) biases generation toward coherent composition, which is why people experiment with it for landscapes and textures, while wavelet and pyramid schemes change how detail evolves across scales. It's a creative-control tool with an on-ramp you can actually see.
The inputs
noise_type- the algorithm.Gaussianis the baseline (and the default).PerlinandWavelet (Haar)are the author's recommendations for creative texture.Voronoi (Euclidean/Manhattan)gives cell-based patterns;Collatz (Orbit)is the weird one, straight out of number theory;Student-tandLaplacianare the heavy-tail distributions;HiRes PyramidandHiRes Pyramid (Bislerp)do multi-scale noise.scale- frequency/zoom of the pattern, 0.1 (macro, zoomed in) to 10 (micro, zoomed out). Default 1.0.strength- global amplitude multiplier, default 1.0. This controls how aggressively the noise replaces standard Gaussian.channel_mode- Shared (Monochrome) uses the same pattern on all latent channels, good for structural/compositional influence; Independent (Color) varies per channel, for color/texture variation.seed- deterministic generation, capped at JS-safe max so the UI can't round it into a different number.preview_width/preview_height- resolution of the preview image (default 512).
Outputs: noise (the NOISE object - this is what plugs into a sampler's noise input, like the noise input on SamplerCustom or a custom sampler that accepts one) and preview_image (the IMAGE visualization, so you know what you're injecting before you commit).
How to actually use it
The honest framing: this is an experimentation node, not a daily driver. Gaussian exists for a reason - the model was trained to denoise it, and anything structural biases the result. Where the bias is desirable (consistent composition, terrain-like texture, artistic variation), that's the experiment. The workflow is: pick a type, look at the preview, run a low-strength pass, compare against the Gaussian baseline on a fixed seed. If the effect is what you want, tune strength; if it's chaos, it's not a bug - structural noise at high strength is genuinely destructive to some checkpoints.
Installing it
Part of MD Nodes (MDMAchine/ComfyUI_MD_Nodes). ComfyUI Manager → search MD_Nodes → Install, restart, or:
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/MDMAchine/ComfyUI_MD_Nodes.git
cd ComfyUI_MD_Nodes
pip install -r requirements.txt
Restart ComfyUI. Python 3.10+, current ComfyUI, GPL v3. The preview needs matplotlib (in the pack's requirements); the heavier noise types (wavelets, Collatz) take a bit longer to generate, per the tooltip, but nothing GPU-breaking.
Common issues
The usual confusion is expecting strength to work like a denoise slider - it doesn't; it's an amplitude multiplier on the noise tensor, and values above 1.0 don't "add detail," they push the signal toward clipping territory. Start at 1.0 and move down, not up. And if your preview looks nothing like the final image, remember the preview is the noise field itself - the final image is what the model does with that field, which is the whole point of the experiment, not a mismatch.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| noise_type | COMBO | Gaussian | NOISE TYPE • Purpose: Select the mathematical algorithm used to generate the pattern. • Options: 17 types including Voronoi, Wavelets, and Heavy-tail distributions. • Trade-offs: Complex types (e.g., Wavelet, Collatz) take slightly longer to generate. ⭐ Recommended: Perlin or Wavelet for creative texture. |
| scale | FLOAT | 1.00.1–10 | NOISE SCALE • Purpose: Controls the frequency/zoom of the pattern. • Range: 0.1 (Macro/Zoomed in) to 10.0 (Micro/Zoomed out). ⭐ Recommended: 1.0 |
| strength | FLOAT | 1.000–10 | NOISE STRENGTH • Purpose: Global amplitude multiplier for the output tensor. • Effect: Determines how aggressively the noise replaces standard Gaussian generation. ⭐ Recommended: 1.0 |
| channel_mode | COMBO | Shared (Monochrome) | CHANNEL MODE • Purpose: Determines if noise patterns vary across latent channels. • Shared: Same pattern on all channels (Good for structural composition). • Independent: Different pattern per channel (Good for color/texture variation). ⭐ Recommended: Shared (Monochrome) |
| seed | INT | 00–9007199254740991 | RANDOM SEED • Purpose: Deterministic starting point for noise generation. • Note: Capped at 9 Quadrillion to prevent UI rounding errors. ⭐ Recommended: Use a fixed value for reproducible outputs. |
| preview_width | INT | 51264–2048 | PREVIEW WIDTH • Purpose: Resolution for the preview image output. |
| preview_height | INT | 51264–2048 | PREVIEW HEIGHT • Purpose: Resolution for the preview image output. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| noise | NOISE | — |
| preview_image | IMAGE | — |