Nodes/ComfyUI-Leputen-Utils/Normal Map Strength
ComfyUI Node

Normal Map Strength

Normal map strength, two ways

By lilquail·Created 9 months ago·Updated 9 months ago· 1
Normal Map Strength
  • image
  • IMAGE
strength1.00
mode

Somewhere between "the detail is invisible" and "the lighting looks like a cheese grater" there's a strength setting for every normal map. Normal Map Strength scales that bumpiness up or down, and it does it properly - instead of just multiplying the blue channel and calling it a day, it re-derives Z from the scaled X/Y so the output stays a valid, unit-length normal map. A naive strength multiply leaves you with non-normalized vectors and the same flat, wrong shading this pack's Normalize node exists to fix.

You reach for it when a generated or downloaded normal map is too subtle to read (strength below 1 smooths it out) or so aggressive it artifacts at grazing angles (strength above 1 adds pop). For game materials, it's the quick way to tune a map to your engine's lighting model without re-exporting from the source tool.

How it works - and why the mode matters

The node converts the image into vector space (−1 to 1), scales the X and Y components by your strength value, then recomputes z = sqrt(1 - x² - y²) so every vector stays on the unit sphere. The mode input picks how X/Y get scaled:

  • Partial Derivatives - straight multiply: X and Y are scaled by strength directly. Predictable, fast, and what most people actually want. Strength 1 is a no-op; 2 doubles the slope; 0 flattens the map entirely.
  • Angles - instead of scaling the vector length, it scales the angle of the perturbation (via atan2 + magnitude, then re-rotating). The effect is subtler at low strength and keeps the map from blowing out as aggressively at high strength. It's the mode to try when Partial Derivatives starts looking overdriven.

Either way, the Z channel is rebuilt afterward, which is the part naive tools skip. That renormalization is the whole reason the output plugs cleanly into a material without a normalize node in between.

Inputs and output

Three inputs: image (the normal map), strength (0–4 float, default 1.0 - that's a 4× range, which is generous enough for almost anything), and mode (the two-way enum above). One IMAGE out with the adjusted map.

A practical note on range: you'll rarely want to go past 2. Above that, the tangent-space math can start producing crazy angles that catch highlights oddly at glancing angles. Tune with a real render preview, not by eyeballing the texture flat in the graph.

Install

Leputen Utils is lilquail's Windows-oriented texture toolkit. Install with ComfyUI Manager (search "ComfyUI-Leputen-Utils") or:

cd ComfyUI/custom_nodes
git clone https://github.com/lilquail/ComfyUI-Leputen-Utils

Restart ComfyUI. This node is pure tensor math - it doesn't load models or touch the pack's DDS/DeepBump dependencies, so it runs anywhere the pack installs.

Where people get burned

The usual mistake is cranking strength and wondering why highlights get noisy - that's the high-angle blowout, and it's a sign to back off, not to add a blur. Also: if your input map isn't already reasonably normalized, scaling its X/Y and re-deriving Z can amplify whatever was wrong in the source. When in doubt, run Normalize first, then adjust strength - that ordering is genuinely better than the reverse.

CategoryLeputen-Utils/NormalMap

Inputs (3)

NameTypeDefaultDescription
imageIMAGEThe input normal map whose strength needs adjustment.
strengthFLOAT1.000–4The desired strength of the normal map.
modeCOMBOThe method used to adjust the normal map strength.

Outputs (1)

NameTypeDescription
IMAGEIMAGE