ComfyUI Node

Diffusion

Orton-style diffusion for skin and highlights

By criskb·Created 7 months ago·Updated 5 months ago· 0
Diffusion
  • image
  • mask
  • image
  • mask
  • diffusion_info
settings_json{"radius":12.0,"highlight_threshold":0.68,"highlight_softness":0.1,"highlight_strength":0.48,"diffusion_strength":0.45,"contrast_softness":0.25,"shadow_lift":0.1,"mix":1.0,"mask_feather":12.0,"invert_mask":false}

If you've ever wondered how portrait photographers get that soft, glowy, slightly ethereal light on skin - the "dreamy" look - it's called diffusion. You blur the highlights, screen them back over the image, and suddenly harsh light becomes soft haloed light. x1Diffusion wraps that whole move in one node, and it's a staple of the MKRShift finishing pack for a reason: it's the single fastest way to make an over-sharp, crunchy AI portrait read as "shot on film."

It's from MKRShift Nodes by Cris K B, under MKRShift Nodes/VFX/Photo.

How it works

The mechanism is the classic diffusion/Orton pass, straight out of analog photography. The node isolates the bright parts of the image using highlight_threshold (0.68 default) with highlight_softness controlling the edge between "highlight" and "not highlight" - soft gates, no hard clipping. Those highlights get blurred by radius (12px default), tinted, and screened back over the original, scaled by highlight_strength. diffusion_strength then controls how much of that glowing blur bleeds into the overall result.

Two supporting knobs give it more of a real-grade feel: contrast_softness which fades contrast in the shadows so the softness doesn't just sit on top, and shadow_lift which raises the dark end - the combination is what keeps diffusion from turning into "everything slightly hazy." mix is the global wet/dry dial.

The practical difference between this and just blurring the image: diffusion only smears the highlights. Shadows stay defined, edges stay crisp, and what you get is the specific "glowing skin, sharp eyes" portrait look rather than a blurry mess. This is the same effect Lightroom sells as "Diffusion" / "Soft Glow" and that negative-clarity tricks approximate - wrapped as one node.

The inputs that matter

All inside the settings_json input (edit it directly or in the node's UI):

  • radius - how wide the glow spreads (default 12). Bigger = dreamier, mushier.
  • highlight_threshold / highlight_softness - what counts as a highlight and how hard the boundary is.
  • highlight_strength / diffusion_strength - glow intensity, and overall blend.
  • shadow_lift - protects shadows from the haze.
  • mix - how much of the effect survives to the output.

Optional mask input plus mask_feather / invert_mask if you want diffusion only on skin, not on the eyes or the background. Outputs: image, the applied mask, and a diffusion_info string.

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart ComfyUI, or install via ComfyUI Manager (search MKRShift_Nodes). No requirements file, no models, no keys - pure pixel math.

Where it fits

In the finishing stack it plays well right before a film grain pass: diffusion softens the "AI sharpness," grain adds the "camera noise," and together they do more for realism than another upscale ever will (the post-processing KB makes exactly this argument). The trap is overdoing radius and diffusion_strength together - at high values skin turns to plastic. Keep diffusion_strength around 0.4–0.6, radius 8–16, and dial mix back if it still feels too strong. It's the soft-glow move, done properly.

CategoryMKRShift Nodes/VFX/Photo

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"radius":12.0,"highlight_threshold":0.68,"highlight_softness":0.1,"highlight_strength":0.48,"diffusion_strength":0.45,"contrast_softness":0.25,"shadow_lift":0.1,"mix":1.0,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
diffusion_infoSTRING