Nodes/ComfyUI-AbstractImaGen/Abstract Image Postprocessing
ComfyUI Node

Abstract Image Postprocessing

Grain, contrast, blur — the finish line that stops your abstract base from looking flat

By wakattac·Created about a year ago·Updated about a year ago· 1
Abstract Image Postprocessing
  • image
  • IMAGE
seed0
randomizefalse
apply_grainfalse
grain_amount0.050
grain_amount_random_min0.010
grain_amount_random_max0.080
apply_contrastfalse
contrast_factor1.00
contrast_random_min0.80
contrast_random_max1.30
apply_brightnessfalse
brightness_amount0
brightness_random_min-20
brightness_random_max20
apply_grayscalefalse
apply_blurfalse
blur_sigma0.80
blur_sigma_random_min0.40
blur_sigma_random_max1.20

Abstract Image Postprocessing is the last stop in the pack's chain, and the one that turns a passable abstract base into a convincing one. You've built a background, stacked shapes, lines, patterns, and noise - and at that point the image often looks, frankly, a bit synthetic. This node fixes that with the classic photography finishing kit: grain, contrast, brightness, grayscale, and blur. It's the difference between "generated clip art" and "something that could be a background plate."

The pack's intended workflow is Background → layer nodes → this → VAE Encode → KSampler. Because the post effects run on the final composite before it ever hits the model, they shape what the diffusion model sees as its starting canvas - and at 0.8–0.9 denoise, a touch of grain and contrast on the base does real work keeping the output from coming out muddy. Grain especially reads as film texture once the model gets through with it.

How the toggles work

Each effect has a simple structure that's worth understanding once, because it repeats across all five:

  • apply_grain / apply_contrast / apply_brightness / apply_grayscale / apply_blur - the on/off switch for each effect.
  • A fixed value when you're art-directing (grain_amount, contrast_factor, brightness_amount, blur_sigma).
  • A random range (grain_amount_random_min/max, etc.) that only matters when randomize is on.

The subtle bit: with randomize enabled, each enabled effect doesn't just randomize its parameter - it also gets a coin-flip on whether it applies at all this run. So apply_grain on + randomize on means grain might appear, at a random amount between the min and max. The toggles are gates, not guarantees. If you want a guaranteed finish, leave randomize off and set values directly.

What you'll actually reach for

  • apply_grain at a low grain_amount (0.01–0.08) - the single most valuable effect here for killing that sterile CG look.
  • apply_contrast with contrast_factor around 1.0–1.3 - punches up flat procedural color.
  • apply_blur with a small blur_sigma - softens harsh shape edges into something painterly before the sampler sees them.
  • apply_grayscale - the one to reach for when you want a pure value-study base for a monochrome result.

Effect order in the source is fixed: grain, then contrast, then brightness, then grayscale, then blur. Worth knowing when you're chasing a specific look - grayscale before blur, for instance, produces a different edge feel than blur before grayscale would.

Install

Part of the AbstractImaGen pack. ComfyUI Manager: search AbstractImaGen, install, restart, refresh. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/wakattac/ComfyUI-AbstractImaGen

Requirements are Pillow, numpy, scipy, and torch - nothing ComfyUI doesn't already have. No models, no config. After restart, the node lives under AbstractImage/Postprocessing.

Gotchas

  • brightness_amount runs −255 to 255 - that's a full-range additive shift, so values past ±50 will visibly wash or crush the image. Keep it small.
  • contrast_factor of 1.0 is "no change" - not a scale you eyeball loosely. Values above 5 are capped anyway.
  • This node processes a single frame; don't feed it batches expecting per-frame post.
  • If you're using the pack's V1 generator node instead of the modular chain, you don't need this node at all - post-processing is built into that one, controlled by probability inputs like add_grain_prob and final_blur_prob.
CategoryAbstractImage/Postprocessing

Inputs (20)

NameTypeDefaultDescription
imageIMAGE
seedINT00–18446744073709550000Seed for post-processing randomness.
randomizeBOOLEANfalseIf true, randomize which effects are applied and their parameters using the seed.
apply_grainBOOLEANfalseApply photographic grain (noise) to the image.
grain_amountFLOAT0.0500–1Amount of grain to apply.
grain_amount_random_minFLOAT0.0100–1Minimum grain amount if randomized.
grain_amount_random_maxFLOAT0.0800–1Maximum grain amount if randomized.
apply_contrastBOOLEANfalseAdjust the image contrast.
contrast_factorFLOAT1.000–5Contrast adjustment factor (1.0 is no change).
contrast_random_minFLOAT0.800–5Minimum contrast factor if randomized.
contrast_random_maxFLOAT1.300–5Maximum contrast factor if randomized.
apply_brightnessBOOLEANfalseAdjust the image brightness.
brightness_amountINT0-255–255Brightness adjustment amount (-255 is black, 255 is white).
brightness_random_minINT-20-255–255Minimum brightness amount if randomized.
brightness_random_maxINT20-255–255Maximum brightness amount if randomized.
apply_grayscaleBOOLEANfalseConvert the image to grayscale.
apply_blurBOOLEANfalseApply Gaussian blur to the image.
blur_sigmaFLOAT0.800–10Sigma for Gaussian blur.
blur_sigma_random_minFLOAT0.400–10Minimum blur sigma if randomized.
blur_sigma_random_maxFLOAT1.200–10Maximum blur sigma if randomized.

Outputs (1)

NameTypeDescription
IMAGEIMAGE