Nodes/ComfyUI-NO8D-controls/NO8DNormalizeDecodedImage
ComfyUI Node

NO8DNormalizeDecodedImage

The pixel-shuffle cleanup nobody wires by hand

By no8d·Created 2 months ago·Updated 14 days ago· 271
NO8DNormalizeDecodedImage
  • image
  • IMAGE

Some VAE decoders don't hand you a clean RGB image. They return a packed tensor - more than 3 channels, where the extra channels encode neighboring pixels that need to be shuffled back into place before you have a normal image. If you've ever seen a node output an image with a channel-count error, this is the failure family. NO8DNormalizeDecodedImage is the small cleanup node that takes that packed output and converts it to a standard ComfyUI IMAGE tensor.

The mechanism is pixel shuffle: if the tensor has 3 × factor² channels, it rearranges them into a proper RGB image with the original spatial layout. It's the kind of plumbing that exists because modern edit models and their VAEs occasionally do this, and it lives in the NO8D-controls/internal category with the DEPRECATED flag set - meaning it's not meant to be the star of your workflow. It's infrastructure, kept around for the cases that still need it.

What you set

  • image - the IMAGE tensor that may be VAE-packed.

Output is IMAGE - a normalized 3 (or 4) channel image. If the input is already 3- or 4-channel, the node passes it straight through untouched.

The honest picture

This is the node you'll probably never wire deliberately. In the NO8D pack it exists to serve NO8D-Generate, which builds graphs that can encounter packed decode output and uses this normalization internally as part of its expansion. If you're a normal user, your interactions with it are: it's deprecated (so treat the presence of it in a workflow as a hint that a newer version of the pack may have internalized the fix), and its one failure mode is loud - if the input has an unsupported channel count, it raises an error rather than producing garbage.

When you'd use it

The niche: you're working with a VAE or model that produces packed RGB, outside the NO8D-Generate shell. Then this is a ready-made, tested converter - wire your decode output through it before the image hits a save or preview node, and the channel mismatch stops being your problem. Given its internal status, though, the more likely outcome is that whatever workflow brought you here already has it placed, and your job is just to leave it alone.

Install

It ships in the same pack as everything else:

cd ComfyUI/custom_nodes
git clone https://github.com/no8d/ComfyUI-NO8D-controls.git
python -m pip install -r requirements.txt

ComfyUI Manager → "NO8D-controls". No models, no extra dependencies. And note the category: NO8D-controls/internal means you won't find it in the main NO8D-control menu - search by its full name if you're hunting for it.

CategoryNO8D-controls/internal

Inputs (1)

NameTypeDefaultDescription
imageIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE