π§ Pixelize
Turning a generated image into pixel art that doesn't look like mush
- image
- IMAGE
Nearest-neighbor shrink-then-grow is not pixel art, it's just a blurry mess wearing a pixel-art costume. Pixelize is the essentials node that actually gets you there - it wraps PixelOE, a proper pixel-art downscaling algorithm, instead of doing a naive resize and calling it a day. Worth knowing: even paid API services have shipped worse than this. Fal AI's "image2pixel" model got called out by the community as literally just plain downscaling with bad color quantization, and the top reply pointed straight at PixelOE as "MILES better" - for free, running locally, in one node.
Why a resize isn't enough
Real pixel art isn't just small - every "pixel" is a deliberate, flat block of color chosen to represent a whole patch of the source image, with clean edges between regions instead of gradients. A plain downscale averages colors together and leaves you with muddy blends. Pixelize instead analyzes the image in blocks, picks a representative color per block using one of several algorithms, optionally draws outlines between regions the way hand-drawn pixel art does, and then blows the tiny result back up with crisp nearest-neighbor scaling so it actually displays at a normal size.
The inputs that matter
downscale_mode- the algorithm used to pick each block's color:contrast(edge-aware, good when you want detail preserved as pixel boundaries),bicubic,nearest,center, ork-centroid(clusters colors within each block - tends to look best on flat, cel-shaded source images). Worth trying more than one on the same image; they land pretty differently.patch_size(4β32, default 16) - how many source pixels collapse into one output pixel. Bigger means chunkier, more obviously "pixel art"; smaller keeps more detail at the cost of looking less stylized.target_size(default 128) - the resolution of the actual pixel grid before it gets scaled back up. This is the real pixel-art resolution; don't confuse it with your final image size.thickness(1β16, default 2) - outline width between color regions, mimicking the black linework in hand-drawn pixel sprites.color_matching(default true) - keeps the output palette close to the source instead of letting quantization drift the colors.upscale(default true) - rescales the tiny pixel grid back up to a normal viewing size with hard edges. Turn it off and you get a genuinely tiny image (whatevertarget_sizeis), which is correct but easy to mistake for a bug the first time.
Output is a single IMAGE.
Installing it
Through ComfyUI Manager, search "ComfyUI Essentials" and install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/cubiq/ComfyUI_essentials
Restart ComfyUI. One thing worth knowing up front: cubiq (Matteo), the author, put this whole pack into maintenance-only mode in April 2025 - he's said he doesn't use ComfyUI as his main tool anymore and isn't doing active development, just merging the occasional crucial PR. It still works; don't expect new features or fast bug turnaround.
Common issues & troubleshooting
Node doesn't load / import error at startup. The pack pulls in the pixeloe Python package as a dependency for this node specifically. Manager should install it automatically; on a manual clone, run pip install -r requirements.txt inside the cloned folder before restarting.
Output still looks blurry, not pixel-art. Wrong downscale_mode for your source is the usual culprit - k-centroid tends to do better on flat, illustrated images, contrast on photoreal ones with real edges to preserve. Try both before touching anything else.
Colors look muddy or off from the original. Toggle color_matching, and consider dropping patch_size for finer detail retention - a smaller patch size means fewer source pixels get averaged into each output block.
Output is tiny. That's upscale set to false, working as intended - the "real" image is target_size pixels; turn upscale back on if you want it displayed at a normal resolution.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| downscale_mode | COMBO | 5 options: contrast, bicubic, nearest, center, k-centroid | |
| target_size | INT | 1280β16384 | β |
| patch_size | INT | 164β32 | β |
| thickness | INT | 21β16 | β |
| color_matching | BOOLEAN | true | β |
| upscale | BOOLEAN | true | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |