Image Blend Advance (UTK)
Photoshop-style layer compositing with 18 blend modes, inside the graph
- layer_image
- background_image
- layer_mask
- image
- mask
Most "image blend" nodes in ComfyUI are one trick ponies: paste image B on image A at some opacity, done. Image Blend Advance (UTK) is the one that behaves like a layer stack in Photoshop - you can position, scale, rotate, mirror, and pick from 18 blend modes, all while keeping the compositing inside your workflow instead of shipping it to an editor. It's the node from ComfyUI-UniversalToolkit I'd actually reach for when a composition is more than "stick it on top."
The lineage matters for trust: the pack says it's adapted from LayerStyle, which is a well-regarded layer-systems pack, and the code lives in image_blend_advance_v3.py with a proper changelog. It's not a random half-finished toy.
How it works
You feed a layer_image and, optionally, a background_image. If no background is given, the node generates one automatically - so it never dies on a missing input. Then it transforms the layer: scale (multiplier), aspect_ratio (stretch on one axis), rotate (degrees, with anti_aliasing levels 0–16 for smooth edges), mirror (horizontal/vertical), and x_percent / y_percent for positioning - those are percentages, so 50/50 centers the layer, and the range goes to ±999 if you want it mostly off-canvas.
The blend_mode dropdown is the star: normal, multiply, screen, overlay, soft/hard light, color dodge/burn, darken, lighten, difference, exclusion, plus the HSL family (hue, saturation, color, luminosity) and addition/subtract. That's a proper Photoshop set, and the HSL modes are the ones people don't expect to find in a free node - they let you grade a layer's color behavior instead of just mixing pixels.
layer_mask gives you a soft-edged region control, and invert_mask defaults to true, which is worth internalizing: out of the box, a white mask region is hidden and black shows the layer through. That trips people up constantly. opacity is 0–100 and is applied on top of everything.
Inputs and outputs
The two you'll actually set: blend_mode and opacity. Then x_percent/y_percent for placement and scale for size. The output has two slots - image (the composite) and mask (the transformed layer mask, useful if you're chaining more compositing). If you're doing simple overlays, the defaults are sane: normal blend, opacity 100, centered.
Install and gotchas
Install via ComfyUI Manager (search "ComfyUI-UniversalToolkit") or:
cd ComfyUI/custom_nodes
git clone https://github.com/whmc76/ComfyUI-UniversalToolkit
pip install -r requirements.txt
Restart ComfyUI. No models, no keys - numpy/PIL/torch math.
Gotchas worth knowing before you fight it: the inverted-mask default, and the fact that anti_aliasing on a huge rotate value can get slow on CPU (it supersamples). Also, because x_percent/y_percent are percentages rather than pixels, moving the layer "5 pixels over" isn't a thing - it's proportional to canvas size, which is actually nicer when you're swapping between resolutions. If a mask comes out reversed, check invert_mask before you suspect a bug.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| layer_image | IMAGE | — | |
| invert_mask | BOOLEAN | true | — |
| blend_mode | COMBO | normal | 18 options: normal, multiply, screen, overlay, soft_light, hard_light, +12 |
| opacity | INT | 1000–100 | — |
| x_percent | FLOAT | 50.00-999–999 | — |
| y_percent | FLOAT | 50.00-999–999 | — |
| mirror | COMBO | None | 3 options: None, horizontal, vertical |
| scale | FLOAT | 1.000.01–100 | — |
| aspect_ratio | FLOAT | 1.000.01–100 | — |
| rotate | FLOAT | 0.00-999999–999999 | — |
| transform_method | COMBO | lanczos | 6 options: lanczos, bicubic, hamming, bilinear, box, nearest |
| anti_aliasing | INT | 00–16 | — |
| background_imageopt | IMAGE | — | |
| layer_maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |