Perturbation Texture
Color-aware grain with skin, film and detail presets
- image
- mask
- textured_image_output
- texture_layer
This is the grown-up version of Noise Plus Blend. Same core idea - add realistic texture to fight the plastic, over-smoothed look AI gives skin and surfaces - but instead of one generic noise field, it generates multi-channel noise that respects the image's own color distribution and ships with presets tuned for different jobs. So the noise it lays over a cheek looks like skin, and the noise it lays over fabric looks like weave. It's the one I'd reach for when I actually care about the result.
Great for portraits, film-grain looks, and any surface that AI renders too clean. And unlike a lot of texture tricks, it works either pre- or post-upscale, right on the pixels.
How it works
You feed it an image and pick a texture_type, and it builds a noise pattern matched to that intent rather than a flat overlay. The four presets do meaningfully different things:
- Skin Pore - subtle realism for close-up portraits and faces.
- Film Grain - cinematic noise for final renders and creative looks.
- Natural - balanced organic texture, a safe general default that won't overwhelm detail.
- Fine Detail - high-frequency texture for fabric, mechanical parts, intricate objects.
Because the noise tracks the source colors, it enhances the material instead of dumping uniform static on top.
The inputs and outputs that matter
texture_type- pick the preset that matches your surface. This is the first decision.noise_scale- the author's recommended range is 0.25-0.50 (the node will let you go higher, but that's the useful band).texture_strength- how much texture (0-100); recommended 10-50.perturbation_factor- how far the noise pushes pixel values; recommended 0.10-0.25.frequency- texture fineness.use_mask+ optionalmask- flipuse_maskon and supply a mask to texture only part of the image (a face, say). There's also an optionalseedfor reproducibility.
Outputs: textured_image_output (the result) and texture_layer (just the texture, for inspecting or blending manually).
How to install it
ComfyUI Manager → search ControlAltAI Nodes → install → restart, or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/gseth/ControlAltAI-Nodes
then restart. No model downloads - it's all procedural noise.
Common issues
The recommended ranges and the defaults don't fully agree (the node defaults texture_strength to 50 and perturbation_factor to 0.3, both at the top of or past the author's suggested bands), so don't assume the defaults are the sweet spot - start lower, around texture_strength 20-30 and perturbation_factor 0.10-0.25, and climb until it reads right. Overcook any of these and the "texture" turns into obvious noise.
Turning use_mask on without actually connecting a mask is a common trip-up - either supply the mask or leave the toggle off for a whole-image pass. And as with Noise Plus Blend, if you're using this before an upscale, the point is to give a subsequent low-denoise sampler pass something to hold; the texture reads best after that pass reinterprets it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| noise_scale | FLOAT | 0.500–1 | — |
| texture_strength | INT | 500–100 | — |
| texture_type | COMBO | Skin Pore | 4 options: Film Grain, Skin Pore, Natural, Fine Detail |
| frequency | FLOAT | 1.00.2–5 | — |
| perturbation_factor | FLOAT | 0.300.01–0.5 | — |
| use_mask | BOOLEAN | false | — |
| maskopt | MASK | — | |
| seedopt | INT | -1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| textured_image_output | IMAGE | — |
| texture_layer | IMAGE | — |