Realisim Enhancor
Make AI images look captured, not generated
- image
- image
The name is the whole joke. MoreJPEG - listed in the node menu as Realisim Enhancor under Realisim Nodes/image effects - is the "needs more JPEG" meme given a node: it re-compresses your image through JPEG as many times as you like and optionally dumps noise, blur, posterization, and pixelation on top. Feed it a clean render and it hands back something that looks like it was taken on a 2013 phone, screenshotted twice, and uploaded to Instagram.
It's not just a meme, though, and that's why it earns a spot in your toolbox. The community's photorealism notes keep coming back to the same finding: real photos have imperfections, and too-smooth skin is still the first giveaway that something is AI. Film grain in post is a well-established realism trick for exactly this reason - it makes an image look captured. JPEG compression is the same instinct from a different angle: heavy compression reads as "uploaded," meaning a human actually shared this. If you've ever generated something and been put off by how sterile and rendered it looks, a pass or two of JPEG at moderate quality will take the edge off faster than any prompt will.
How it works
Under the hood it's pure Pillow, no models, no API, no key. It takes your IMAGE tensor, converts it to PIL images, and applies effects in a fixed order: grayscale → exponential noise → sharpness → contrast → posterize → blur → pixelate → emboss/edge_enhance/invert → then the JPEG roundtrip, repeated passes times. That roundtrip is the core trick - it encodes to a JPEG buffer at your chosen quality and decodes it back, which is exactly where the blocking and banding come from. The noise is exponential-distribution rather than flat Gaussian, which reads a lot closer to real sensor noise. seed seeds both Python's random and numpy, so the same seed and settings reproduce identically - worth remembering if you land on a look you like.
The inputs that matter
- recipe - five presets. The code shows exactly what they do:
custom(your sliders),lite(quality 10, everything else neutral),noise(quality 95 +noise_scale30 - the genuinely subtle one, the only preset you'd actually use in a serious workflow),artifact_hell(quality 0), andpro_plus(quality 0, sharpness and contrast 100, 2-bit posterize, inverted - a joke). - jpeg_quality - 10 is brutal. 60–85 is "uploaded to a social site" territory, which is the range that actually serves the realism goal.
- passes - how many times the image is recompressed. Damage compounds fast; each pass re-encodes what the last pass already mangled.
- noise_scale - sensor-style grain when you want "film" without the blocking.
- seed - reproducibility.
Recipes override most of the manual sliders, but grayscale, emboss, edge_enhance, and passes still apply on top of a preset. One trap: sharpness and contrast are multipliers where 1 means unchanged, even though the slider runs 0–100 - a value of 2 already bites hard. The single output is an image tensor; wire it to Save Image, or run it into an upscaler/grain pass afterward.
Install
Nothing to it - the pack ships zero dependencies beyond torch, numpy, and Pillow, which every ComfyUI portable install already has.
cd ComfyUI/custom_nodes
git clone https://github.com/amrnidal999-tech/comfyui-realisim-enhancor.git
Restart ComfyUI. If it's been published to the Comfy Registry by the time you read this, ComfyUI Manager searching Realisim Enhancor works too.
Where people get burned
- The default
jpeg_qualityof 10 looks wrecked on purpose. If you're after subtle "uploaded" realism, raise it - don't blame the node. - It's RGB-only, so a transparent PNG gets flattened to a solid background. Keep it out of alpha pipelines.
- It's CPU-bound Pillow, so on a big batch it's slow, not GPU-accelerated. It's a tiny pass; it'll finish, just know it's not a "free" op.
- Chaining it repeatedly accumulates loss like any lossy cycle. That's the point here, but don't leave it in a loop and wonder why everything turned to mush.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| recipe | COMBO | custom | 5 options: custom, lite, noise, artifact_hell, pro_plus |
| jpeg_quality | INT | 100–100 | — |
| passes | INT | 11–20 | — |
| noise_scale | FLOAT | 00–255 | — |
| sharpness | FLOAT | 1.00–100 | — |
| contrast | FLOAT | 1.00–100 | — |
| posterize_bits | INT | 81–8 | — |
| blur_radius | FLOAT | 0.00–100 | — |
| pixelate_box | INT | 11–256 | — |
| invert | BOOLEAN | false | — |
| grayscale | BOOLEAN | false | — |
| emboss | BOOLEAN | false | — |
| edge_enhance | BOOLEAN | false | — |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |