BLEND (JOV) ⚗️
30 blend modes, a mask port, and the one compositing node you'll actually keep
- 👾A
- 👾B
- 😷
- 🖼️
- 😷
BLEND (JOV) ⚗️ is the pack's marquee node, and it earns the billing: 30 blend modes, an optional mask input, and the fit/interpolation controls to make mismatched inputs behave. The README leads its highlight list with exactly this - "30 function BLEND node - subtract, multiply and overlay like the best." If you're compositing anything more complex than a simple paste, this is the node you'll reach for over a bare image-mix utility, because it gives you Photoshop-grade control without leaving ComfyUI.
What it does
It takes two images, an optional mask, and a blend mode, and produces a composite - plus a mask output so the alpha stays in your pipeline. The blend modes run the full gamut: the additive family (ADDITIVE, SCREEN, LIGHTEN, DODGE), the multiplicative family (MULTIPLY, DARKEN, BURN), and the screen-blend classics (OVERLAY, NEGATION, DIFFERENCE, DIVIDE), on top of NORMAL.
The inputs that matter:
- 👾A and 👾B - base and top image. Order matters for the non-commutative modes.
- 😷 - optional mask for alpha blending. This is the upgrade over the legacy Blend node: wire a gradient or a face mask here and the blend only applies where the mask is bright. Masked compositing without a second node.
- ⚒️ - the blend function (default NORMAL).
- ⬜ - alpha, 0–1, how hard B is applied (default 1).
- 🙃 - swap A and B. Handy when the result is backwards and you don't want to re-plumb.
- 🚦 - scale mode for mismatched sizes: NONE, FIT, CROP, ASPECT.
- 🎞️ - the interpolation used when scaling (LANCZOS4 by default - keep it unless you're doing pixel art, where NEAREST is right).
- 🔳 - a 0–1 amount that blends the output back toward the original input; leave at 0 for a full composite and nudge up when you want a softer result.
How it works
Each mode is a per-pixel arithmetic formula over the two images (overlay and multiply are classic compositing math), with the mask and alpha folded in as per-pixel weights. It's OpenCV-level cost - no model, no VRAM pressure - and it processes batches, which makes it the right tool for applying a consistent look across a frame stack or a video.
Installing it
Part of Jovimetrix:
- ComfyUI Manager - search "Jovimetrix", install.
- Manual -
git clone https://github.com/Amorano/Jovimetrix.gitintocustom_nodes/, thenpip install -r requirements.txt.
No models to download. Dependencies: numpy, OpenCV (opencv-contrib-python), Pillow, matplotlib, plus cozy_comfyui from GitHub. Needs ComfyUI 0.1.3+.
Where people get burned
The classic mistake is forgetting the mask input is per-pixel brightness - a black-white mask blends fully where it's white and not at all where it's black, which is intuitive until you feed in a mask that's inverted by default and wonder why nothing happens. The 🙃 swap and the mask's behavior are the two things to check first when output looks wrong. Also, at mode NONE with mismatched sizes, the smaller image just sits on the canvas as-is; switch to FIT or CROP. One note: this node's field names have been through Jovimetrix's rename churn (the legacy "Blend (jov)" is the same idea with 14 modes and no mask port), so if a shared workflow references the lowercase name, the current pack resolves it here.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| 👾Aopt | * | — | |
| 👾Bopt | * | — | |
| 😷opt | * | — | |
| ⚒️opt | COMBO | NORMAL | 30 options: NORMAL, ADDITIVE, NEGATION, DIFFERENCE, MULTIPLY, DIVIDE, +24 |
| ⬜opt | FLOAT | 1.000–1 | — |
| 🙃opt | BOOLEAN | false | — |
| 🚦opt | COMBO | NONE | 4 options: NONE, FIT, CROP, ASPECT |
| 🎞️opt | COMBO | LANCZOS4 | 7 options: NEAREST, LINEAR, CUBIC, AREA, LANCZOS4, LINEAR_EXACT, +1 |
| 🔳opt | FLOAT | 0.000–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 🖼️ | IMAGE | — |
| 😷 | MASK | — |