Blend Modes
Photoshop's 30 blend modes as one ComfyUI node
- backdrop
- source
- mask
- IMAGE
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_adjustdecides what happens:stretchsquishes it to fit exactly (can distort the aspect ratio),cropscales it to cover the backdrop while keeping proportions and trims the overflow.blend_mode- twenty-nine options.normalis the default (plain alpha compositing). The other named ones you'll actually reach for:multiplyfor shadows and darkening,screenfor glows and lightening,color burn/linear burnfor punchier darkening,color dodge/linear dodge (add)for punchier lightening,darker color/lighter colorfor a full-pixel (not per-channel) comparison.opacity(0–1, default 1) - how strongly the blendedsourceshows through over thebackdrop, which always stays at full opacity underneath.mask(optional) - either lets an external mask control exactly where the blend applies, or preserves thesourceimage'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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| backdrop | IMAGE | — | |
| source | IMAGE | — | |
| blend_mode | COMBO | 29 options: normal, dissolve, darken, multiply, color burn, linear burn, +23 | |
| opacity | FLOAT | 1.000–1 | — |
| source_adjust | COMBO | 2 options: crop, stretch | |
| invert_mask | COMBO | 2 options: yes, no | |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |