Image Pro
Thirty-one image operations, from histogram color-matching to glitch art, in one node
- image
- source
- reference
- background
- foreground
- mask
- image
- mask
- width
- height
- metadata_json
Image Pro is the pack's Swiss-army image knife: one node, a mode dropdown with 31 operations, and outputs for image, mask, width, height, and metadata_json. The modes split into five families: loaders (path, glob, random-from-folder, last-saved, Nth-in-sequence), value and color (invert, HSL shift, levels, posterize, solarize, threshold, histogram color-matching, alpha composite), spatial (pixelate, blur, sharpen, chromatic aberration, vignette, lens distortion, tile, pad-to-multiple), style (noise, film grain, JPEG degradation, glitch, halftone, frequency separation), and inspect (image info, channel ops, palette, histogram).
The two modes that justify the install on their own are color_match_histogram and image_composite_over. The first transfers one image's color distribution to another per-channel via CDF mapping, which is the classic trick for compositing: render a subject, then match its color to a background plate so it doesn't look pasted. strength blends between the original and the matched result, so you can push it partway. The second composites foreground over background with blend_mode (normal/add/multiply/screen), opacity, and an optional mask - and it respects the foreground's alpha channel if it's RGBA. Put those two together and you can assemble a believable composite without touching an external editor.
How it works
Same skeleton as the rest of the pack: pick mode, the relevant widgets appear, one process method dispatches, and unused outputs pad to empty defaults. A few inputs to know:
- Loaders take
path,folder,pattern,seed, orindexdepending on mode, and fillimage,width,height, andmetadata_json(which includes EXIF). color_match_histogramwantssourceandreferenceIMAGE inputs plusstrength.image_composite_overwantsbackground,foreground,mask,blend_mode,opacity.levelstakesblack_point,white_point,gamma;frequency_separationtakesblur_radiusand anoutput_kindofhigh_frequencyorlow_frequency- the retoucher's favorite, since it lets you smooth skin without flattening the whole image.
Installing it
It ships with Utility-MegaPack - one install gets all eight nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-Utility-MegaPack
Restart ComfyUI, or use ComfyUI Manager → search "Utility-MegaPack". No model files. Dependencies are the usual light set (numpy, Pillow, requests, simpleeval, Jinja2, PyYAML, cryptography); the heavy lifting here is Pillow and torch, which ComfyUI already has.
Where people get tripped up
Two things to know from the v0.3 changelog, because they explain past bugs you may hit in older copies: halftone_dots used to be pathologically slow (an O(N²) blowup that froze a 1024² image for seconds at dot_size=6 - fixed), and invert/threshold_binary used to destroy alpha on RGBA inputs (now preserved). If you're on the current release, neither bites you. The mask output socket exists on the node but no Image Pro mode actually produces a real mask - leave it unwired. And remember loaders like load_image_path read from disk by a raw path, so keep paths inside ComfyUI's folders unless you know what you're doing. One aside: quality_degrade_jpeg is a real PIL round-trip through JPEG, so it's great for data-augmentation-style workflows and terrible if you wanted a fake-looking "compressed" look with full control.
Inputs (43)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | blur_gaussian | 31 options: blur_gaussian, channel_op, chromatic_aberration, color_match_histogram, color_shift_hsl, film_grain, +25 |
| theme | COMBO | (use pack default) | 17 options: (use pack default), (use ComfyUI default), cyberpunk, minimalist, glassmorphic, retro_terminal, +11 |
| pathopt | STRING | — | |
| patternopt | STRING | *.png | — |
| folderopt | STRING | — | |
| seedopt | INT | -1-1–4294967295 | — |
| indexopt | INT | 00–100000 | — |
| imageopt | IMAGE | — | |
| hue_shiftopt | FLOAT | 0.00-1–1 | — |
| saturationopt | FLOAT | 1.000–2 | — |
| lightnessopt | FLOAT | 1.000–2 | — |
| black_pointopt | FLOAT | 0.000–1 | — |
| white_pointopt | FLOAT | 1.000–1 | — |
| gammaopt | FLOAT | 1.000.1–5 | — |
| bitsopt | INT | 41–8 | — |
| thresholdopt | FLOAT | 0.500–1 | — |
| sourceopt | IMAGE | — | |
| referenceopt | IMAGE | — | |
| strengthopt | FLOAT | 1.000–1 | — |
| backgroundopt | IMAGE | — | |
| foregroundopt | IMAGE | — | |
| blend_modeopt | COMBO | normal | 4 options: normal, add, multiply, screen |
| opacityopt | FLOAT | 1.000–1 | — |
| maskopt | MASK | — | |
| block_sizeopt | INT | 82–256 | — |
| radiusopt | FLOAT | 2.000.1–100 | — |
| amountopt | INT | 1500–500 | — |
| shift_pixelsopt | INT | 40–64 | — |
| softnessopt | FLOAT | 0.600.1–1 | — |
| kopt | FLOAT | 0.20-1–1 | — |
| colsopt | INT | 21–16 | — |
| rowsopt | INT | 21–16 | — |
| multipleopt | INT | 641–1024 | — |
| fill_valueopt | FLOAT | 0.000–1 | — |
| luminance_dependenceopt | FLOAT | 0.500–1 | — |
| qualityopt | INT | 301–100 | — |
| stripsopt | INT | 81–64 | — |
| max_shiftopt | INT | 160–256 | — |
| dot_sizeopt | INT | 62–32 | — |
| blur_radiusopt | INT | 81–64 | — |
| output_kindopt | COMBO | high_frequency | 2 options: high_frequency, low_frequency |
| channel_actionopt | COMBO | grayscale | 5 options: swap_rgb_to_bgr, isolate_r, isolate_g, isolate_b, grayscale |
| n_colorsopt | INT | 52–32 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| width | INT | — |
| height | INT | — |
| metadata_json | STRING | — |