ComfyUI Node

Blend Modes

Photoshop's 30 blend modes as one ComfyUI node

By chrisfreilich·Created 2 years ago·Updated about a year ago· 93
Blend Modes
  • backdrop
  • source
  • mask
  • IMAGE
blend_mode
opacity1.00
source_adjust
invert_mask

If you've ever wanted to drop one image on top of another and pick "multiply" or "screen" the way you would in Photoshop's layer panel, this is that node. It takes two images and composites them using one of thirty blend-mode formulas - the full set, not a curated subset. No round-trip to another app, no fighting a prompt to describe a lighting effect that's actually just "screen this glow layer over the base image." You wire two IMAGE inputs into it and pick a mode.

This is also, as far as the pack goes, the original node. Its author (GitHub: chrisfreilich, posting as CineMaster1 on r/StableDiffusion) shipped Blend Modes first and built out the rest of Virtuoso Nodes - Blend If, the adjustment layers, the blur nodes - over the following weeks in response to what people asked for after using this one. So it's the most battle-tested node in the pack, and the reason the rest of it exists.

How it works

For every pixel, the node runs the backdrop and source values through whichever blend formula you picked - multiply darkens by multiplying values together, screen lightens by inverting-multiplying-inverting, overlay-family modes boost contrast, linear dodge (add) literally adds the two - then blends that result back toward the original backdrop by your opacity setting. It's the same math Photoshop, GIMP, and every other layer-based editor use; this node just gives you node-graph access to it instead of a dropdown in a desktop app.

The inputs and outputs that matter

  • backdrop - the bottom image. The output inherits its dimensions, so this is effectively your canvas.
  • source - the top image. If its size doesn't match the backdrop, source_adjust decides what happens: stretch squishes it to fit exactly (can distort the aspect ratio), crop scales it to cover the backdrop while keeping proportions and trims the overflow.
  • blend_mode - twenty-nine options. normal is the default (plain alpha compositing). The other named ones you'll actually reach for: multiply for shadows and darkening, screen for glows and lightening, color burn/linear burn for punchier darkening, color dodge/linear dodge (add) for punchier lightening, darker color/lighter color for a full-pixel (not per-channel) comparison.
  • opacity (0–1, default 1) - how strongly the blended source shows through over the backdrop, which always stays at full opacity underneath.
  • mask (optional) - either lets an external mask control exactly where the blend applies, or preserves the source image's own alpha channel if you don't feed one in.
  • invert_mask - flip the mask before it's applied, for when your mask is the wrong way around.

Output is a single IMAGE, ready to feed into the next node or a Save Image.

How to install it

Easiest path: ComfyUI Manager, search Virtuoso Nodes for ComfyUI, install, restart. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/chrisfreilich/virtuoso-nodes
pip install -r virtuoso-nodes/requirements.txt

Restart and it shows up under the Virtuoso category. There's nothing to download - no checkpoints, no model weights. It's plain image math, so it loads instantly and runs cheap even on CPU.

Common issues & troubleshooting

The blend looks stretched or oddly cropped. That's source_adjust doing its job on a size mismatch you didn't expect - check which of stretch or crop you actually want before assuming the node is broken.

Nothing visible changed. Check three things in order: is opacity actually above 0, is the blend_mode still on normal (which is closer to a plain overlay than a dramatic effect), and - if you attached a mask - is invert_mask flipping it to cover the wrong region.

You mixed up backdrop and source. It's an easy swap to make, and it inverts which image is "on top." If the composite reads backwards from what you expected, that's usually it.

Trying to recombine split channels. If you're feeding this node the red/green/blue outputs from Split RGB, linear dodge (add) twice is the mode the pack's own docs recommend over the dedicated Merge RGB node - it gets you the same recombination but with per-layer opacity control if you want to grade the channels differently before merging.

CategoryVirtuoso

Inputs (7)

NameTypeDefaultDescription
backdropIMAGE
sourceIMAGE
blend_modeCOMBO29 options: normal, dissolve, darken, multiply, color burn, linear burn, +23
opacityFLOAT1.000–1
source_adjustCOMBO2 options: crop, stretch
invert_maskCOMBO2 options: yes, no
maskoptMASK

Outputs (1)

NameTypeDescription
IMAGEIMAGE