Nodes/Power Noise Suite for ComfyUI/Latent Adjustment 🦚
ComfyUI Node

Latent Adjustment 🦚

Brightness, contrast, saturation β€” applied while the image is still latent

By WASasquatchΒ·Created 3 years agoΒ·Updated 2 years agoΒ· 81
Latent Adjustment 🦚
  • latents
  • latents
  • previews
β—„brightness1.000β–Ί
β—„contrast1.000β–Ί
β—„saturation1.000β–Ί
β—„exposure0.000β–Ί
β—„alpha_sharpen0.00β–Ί
β—„high_pass_radius0.00β–Ί
β—„high_pass_strength1.00β–Ί
β—„clamp_min0.00β–Ί
β—„clamp_max1.00β–Ί
β—„latent2rgb_previewβ–Ύβ–Ί

Latent Adjustment is the pack's answer to "I wish I could just nudge the exposure" - but it does the nudging in latent space, before or between sampling passes, instead of on the finished pixels. You feed it a LATENT and it comes out the other side with its brightness, contrast, saturation, and exposure changed, plus optional sharpening and high-pass filtering. It's the node you reach for when a generation is consistently too dark or too flat and you'd rather fix the latent than fight the prompt.

The key thing to understand is why latent-space adjustments are worth having. A VAE encode-decode cycle is lossy - round-tripping a latent through pixels and back throws away fine detail. When you're chaining img2img or doing a multi-pass workflow, adjusting in latent space means you never pay that round trip. You're also working on the actual thing the model will denoise next, which is a more direct way to steer a result than adjusting a rendered image you've already committed to.

How it works

The math comes from PPFNLatentAdjustment in the pack's nodes.py. Each of the R, G, B channels of the latent is scaled around the 0.5 midpoint by contrast, shifted by brightness, then desaturated toward a luminance-weighted grey by saturation, and finally scaled by 2^exposure. If alpha_sharpen is above 0, a sharpen pass runs on the latent; if high_pass_radius is above 0, a high-pass filter with high_pass_strength is applied. clamp_min/clamp_max then normalize the output range so the result stays where the model expects values to be.

Inputs that matter

  • brightness, contrast, saturation, exposure - the four you'll actually use. All default to neutral (1 for the first three, 0 for exposure) so the node is a no-op until you move something.
  • alpha_sharpen - latent sharpening strength. A touch can recover definition in soft img2img passes; too much and you'll get crunchy artifacts.
  • high_pass_radius / high_pass_strength - high-pass filtering. Radius 0 means off. This is the "make the texture pop" control, and it's a genuine rarity - few other packs expose high-pass in latent space.
  • clamp_min / clamp_max - output range guardrails. Leave at 0/1 unless you know why you're changing them.
  • latent2rgb_preview - only affects the preview output; the actual latent is untouched by it. The README notes the RGB representation isn't very accurate, so trust it as a hint, not a truth.

Outputs: latents (the adjusted result) and previews (an IMAGE you can eyeball).

Where it fits

Two natural homes. First, right after a noise generator: darken or brighten your starting noise to bias the generation's overall exposure before the sampler ever runs. Second, between sampling passes: sharpen a latent or lift its contrast before a second, low-denoise pass, instead of decoding, adjusting pixels, and re-encoding with the loss that implies.

Install

It's a Power Noise Suite node, so the whole pack comes in one install. ComfyUI Manager β†’ search "Power Noise Suite", or:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/PowerNoiseSuite

Restart. No model files; torch is the only dependency.

Gotchas

Remember this works on raw latent values, not image values - the relationship between a latent value and what you eventually see is indirect, so adjustments here are coarser than the same slider on a rendered image. The pack's own preview tooltip warns the RGB preview isn't accurate for the same reason. And go easy on alpha_sharpen and the high-pass: they amplify whatever is in the latent, including noise, so aggressive settings give you artifacts that a pixel-space sharpen never would.

CategoryPower Noise Suite/Latent/Adjustements

Inputs (11)

NameTypeDefaultDescription
latentsLATENTβ€”
brightnessFLOAT1.000-1–2β€”
contrastFLOAT1.000-1–2β€”
saturationFLOAT1.0000–2β€”
exposureFLOAT0.000-1–2β€”
alpha_sharpenFLOAT0.000–10β€”
high_pass_radiusFLOAT0.000–1024β€”
high_pass_strengthFLOAT1.000–2β€”
clamp_minFLOAT0.00-10–10β€”
clamp_maxFLOAT1.00-10–10β€”
latent2rgb_previewoptCOMBO2 options: false, true

Outputs (2)

NameTypeDescription
latentsLATENTβ€”
previewsIMAGEβ€”