Affine Poisson Blue Noise Options
Tuning Affine's Poisson blue noise
- noise_options
WASPoissonBlueOptions is a config node, not an effect node - it builds the settings dict for one specific mask pattern inside the WAS Affine pack. By itself it does absolutely nothing. Wire its output into an affine node that's using the poisson_blue_mask pattern and suddenly you control exactly how that mask is scattered. Miss that wiring and you've added a node that quietly does nothing, which is the whole trap with the Affine options family.
Affine works by blending a latent through z' = scale * z + bias in the regions a generated mask says to touch. The mask is the whole game, and the pattern choice decides which regions. Poisson blue noise is the "evenly scattered dots" option: instead of the effect landing in blobby, clumped patches (the kind of thing Perlin gives you), a Poisson-disk distribution keeps every dot a minimum distance from its neighbors. No clumps, no banding - just a uniform stipple of enhancement targets. That's why blue noise is a classic dithering tool, and why it reads so cleanly when you're adding fine detail to a surface without wanting any visible structure of its own.
The mechanism
The pattern is a distance field to a set of Poisson-disk samples. poisson_radius_px (default 6, range 1–256) sets the target minimum distance between dots - bigger radius, sparser, more widely-spaced dots. poisson_softness (default 5, range 0.1–256) blurs that distance field so the mask edges fade instead of slicing. Low softness gives you crisp hard dots; higher values melt them into soft pools. Both are floats, so you can be as precise as you like.
The README calls the pattern "blue-noise Poisson-disk distance field," and that's exactly what you're tuning. For a fine-detail enhancement pass over skin or fabric, this is one of the friendlier patterns because nothing about it announces itself - the effect is spread across the image like dust rather than concentrated in visible patches.
The one output that matters
It returns a single noise_options DICT. Feed that into the noise_options input on Latent Affine, KSampler Affine, or any of the Ultimate Affine KSampler variants. One detail from the source that saves confusion: pattern-specific noise_options are applied after the base options dict, so they override overlapping keys. You can set a common base with WASLatentAffineCommonOptions and layer this on top.
Don't forget the other half of the wiring: whatever node you connect this to also needs its pattern set to poisson_blue_mask. If it's left on the default white_noise, your carefully tuned dots are ignored.
Installing it
This ships inside WAS Affine (WASasquatch/was_affine) - same author as the old WAS Node Suite. In ComfyUI Manager, search "WAS Affine" and install, then restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was_affine.git
Restart ComfyUI afterward. No model downloads, and no heavy deps - the README lists just torch and numpy (the requirements.txt adds matplotlib for the schedule plot, which is nothing to worry about).
Where people get burned
- The node does nothing until the pattern is set to
poisson_blue_maskon the affine node it feeds. It's a config knob, not a processor. - At high resolutions, a
poisson_radius_pxthat looked right at 512px becomes a soup of overlapping dots. Scale the radius with your image size. - Keep
poisson_softnessabove 1 or the mask edges get crunchy enough to read as texture themselves. Start subtle - Affine's own docs warn that latent space is sensitive, and that goes double for a mask made of a million tiny dots.
It's a thin node, but when you specifically want scattered, even enhancement rather than blobs, it's the right knob to reach for.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| poisson_radius_px | FLOAT | 6.01–256 | Target Poisson-disk minimum distance in pixels (controls dot spacing). |
| poisson_softness | FLOAT | 5.00.1–256 | Softening of distance field to produce smoother mask. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| noise_options | DICT | — |