Nodes/ComfyUI-UtilsCollection/NoHalo / LoHalo Downscale
ComfyUI Node

NoHalo / LoHalo Downscale

Shrink images without the glow you've been ignoring

By silveroxides·Created 3 months ago·Updated about 18 hours ago· 30
NoHalo / LoHalo Downscale
  • image
  • image
methodlohalo
megapixels1.00
multiple16

Downscaling sounds like the easiest thing in the image pipeline, and then you actually look at the result: thin white halos around every hard edge, ringing where a bright highlight meets dark pixels. That's what classic resamplers do when they don't have enough taps - a bright line bleeds a lighter fringe into the surrounding pixels. The NoHalo and LoHalo samplers were built by the GEGL crowd specifically to stop that, and this node brings them to ComfyUI as a megapixel-targeted downscale.

It earns its keep two ways. First, any time you're shrinking an image that will be upscaled again later, halo artifacts get amplified by the next stage - so feeding a clean downscale into a generative upscaler matters more than it sounds. The KB's upscaling playbook already knows this: for soft sources, the recommended move is to drop the image to a smaller megapixel base before the upscaler rebuilds detail. This node is the "drop it cleanly" step. Second, video models want their inputs at aligned resolutions (multiples of 8 or 16), and the multiple control handles exactly that alignment while it resizes.

How it works

Under the hood it's an axis-aligned implementation of the GEGL NoHalo/LoHalo samplers, computed in sigmoid space. LoHalo (the default) runs a Mitchell filter on the image after an inverse-sigmoidal transform, then maps the result back - interpolating in that compressed space preserves tonality through the bright highlights where ringing lives, so the halo never forms. NoHalo is the leaner sibling, tuned for 1:1-ish scale factors where LoHalo's wider support isn't needed. Both are tile-aware, so they don't blow up your VRAM on large images.

Two controls shape the output:

  • megapixels - target size, default 1.0 MP. The node computes dimensions to land at this total, from 0.01 MP up to 16.
  • multiple - forces both dimensions to align to this step (default 16, adjustable 4–128). This is the knob for video models and DiT latent-alignment requirements.

Set method to lohalo or nohalo; output is a single image.

A small honest caveat

megapixels is a target, not a promise - the actual output dimensions are the ones that satisfy both the megapixel target and the multiple alignment, so don't expect an exact 1.000000 MP if alignment fights it. That's the right trade: alignment is usually the constraint you actually needed.

When to reach for it

  • Prepping a high-res render for a video model at a multiple-of-16 latent size.
  • The "downscale-then-upscale" trick before a generative upscaler - the upscaling doc's 0.35 MP advice, with a halo-free downscale.
  • Batch-trimming images before a detail pass, where halos would otherwise turn into weird edges around faces.

If you've been resizing with bicubic and squinting at the result, this is the fix you didn't know you needed. One node, no model download, instant.

Categoryadvanced/image

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
methodCOMBOlohalo2 options: lohalo, nohalo
megapixelsFLOAT1.000.01–16
multipleINT164–128

Outputs (1)

NameTypeDescription
imageIMAGE