Normal Intensity Adjuster
Flatten or exaggerate a normal map without touching its format
- normal
- normal
Normal maps come out of AI extraction with opinions about how bumpy things are, and those opinions are usually wrong. Too strong and your brick wall looks like it's made of stacked pillows; too weak and it reads flat. Normal Intensity Adjuster is the knob for that: one slider blends your normal map between perfectly flat and heavily exaggerated, without touching which format it's in or which way the channels point. If you've ever wished a normal map had a "strength" control that didn't break everything else, this is that control.
It's the smallest node in TextureAlchemy's Texture Alchemist/Normal family, and it's the one you'll want in the chain after any AI normal source, since those almost never land at the strength your target material wants.
How it works
The math is the classic normal-intensity trick: a normal map's three channels encode a unit vector, and the "flat" state - a surface facing straight at the camera - is the vector (0, 0, 1), which encodes as the color (0.5, 0.5, 1.0). To change intensity you blend each pixel's RGB between that flat color and the map's actual value:
- intensity = 1.0 - the map unchanged (the blend does nothing, and the node short-circuits to save a cycle).
- intensity = 0.0 - every pixel becomes flat blue (0.5, 0.5, 1.0). A completely smooth surface.
- intensity > 1.0 - the blend extrapolates past the original, pushing the X/Y channels further from center, which exaggerates the relief.
Because it works in color space rather than on the geometry itself, it keeps the map's format (green channel direction) intact - you're scaling bumpiness, not flipping handedness. That's the property that makes it safe to drop anywhere in the chain.
The single input beyond the map is intensity (0–5), and the single output is normal, same dimensions, same format.
Where it fits
The canonical placement: right after a Lotus or height-derived normal map, before it hits the PBR pipeline. A Lotus normal at strength 1.0 is often too subtle for game work - 1.2–1.5 is a common landing zone - and a baked texture-pack normal is often too strong for a realistic material, which is where 0.7–0.9 comes in. Because it's format-agnostic, you can also stack it with the format tools without ordering worries.
Installing it
Part of ComfyUI-TextureAlchemy. ComfyUI Manager → search "TextureAlchemy" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy
Restart, find it under Texture Alchemist → Normal. No pip packages or model downloads.
Common issues
- "I set 0 and got flat blue, not flat gray." Correct and expected - flat blue (0.5, 0.5, 1.0) is the encoded flat normal. Your engine interprets it as a level surface; it's not a bug.
- "The lighting still looks wrong after changing intensity." Then it wasn't a strength problem - it's format or a flipped channel. Run the Validator.
- "Very high values look noisy." Extrapolating past 1 amplifies whatever noise the source map had. Above ~1.5 you're usually fighting the source's imperfections, not enhancing detail.
- "At 1.0 it did nothing." Correct - 1.0 is identity by design. The node even prints a "no change needed" note.
It's a one-slider utility, and one-slider utilities are the ones that earn their place in a pack. When a normal map is the wrong height, this is the fastest correct fix available.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| normal | IMAGE | — | |
| intensity | FLOAT | 1.000–5 | Normal intensity (0.0=flat, 1.0=original, >1.0=enhanced) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| normal | IMAGE | — |