Abstract Image Postprocessing
Grain, contrast, blur — the finish line that stops your abstract base from looking flat
- image
- IMAGE
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_factoraround 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_probandfinal_blur_prob.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| seed | INT | 00–18446744073709550000 | Seed for post-processing randomness. |
| randomize | BOOLEAN | false | If true, randomize which effects are applied and their parameters using the seed. |
| apply_grain | BOOLEAN | false | Apply photographic grain (noise) to the image. |
| grain_amount | FLOAT | 0.0500–1 | Amount of grain to apply. |
| grain_amount_random_min | FLOAT | 0.0100–1 | Minimum grain amount if randomized. |
| grain_amount_random_max | FLOAT | 0.0800–1 | Maximum grain amount if randomized. |
| apply_contrast | BOOLEAN | false | Adjust the image contrast. |
| contrast_factor | FLOAT | 1.000–5 | Contrast adjustment factor (1.0 is no change). |
| contrast_random_min | FLOAT | 0.800–5 | Minimum contrast factor if randomized. |
| contrast_random_max | FLOAT | 1.300–5 | Maximum contrast factor if randomized. |
| apply_brightness | BOOLEAN | false | Adjust the image brightness. |
| brightness_amount | INT | 0-255–255 | Brightness adjustment amount (-255 is black, 255 is white). |
| brightness_random_min | INT | -20-255–255 | Minimum brightness amount if randomized. |
| brightness_random_max | INT | 20-255–255 | Maximum brightness amount if randomized. |
| apply_grayscale | BOOLEAN | false | Convert the image to grayscale. |
| apply_blur | BOOLEAN | false | Apply Gaussian blur to the image. |
| blur_sigma | FLOAT | 0.800–10 | Sigma for Gaussian blur. |
| blur_sigma_random_min | FLOAT | 0.400–10 | Minimum blur sigma if randomized. |
| blur_sigma_random_max | FLOAT | 1.200–10 | Maximum blur sigma if randomized. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |