Multi-Texture Blender
The poor man's Substance layer stack
- base
- layer1
- layer1_mask
- layer2
- layer2_mask
- layer3
- layer3_mask
- result
Texture work is layer work. You have a base, you want moss in the cracks, dust in the corners, and some grime only where the mask says - that's a layer stack, and this node is a mini layer stack in a single box. It's the one I reach for instead of chaining five blend nodes in a row.
The idea is simple and genuinely useful: one base image, then up to three optional layers, each with its own blend mode, opacity, and mask. The result is a single result IMAGE. Where this shines is material assembly - take a base albedo, multiply a detail map, overlay some weathering, and mask it so the grime only lands in crevices. The pack's own philosophy leans on exactly this pattern for "brick + moss" style layering.
How it works
Each connected layer is composited onto the running result in order, Photoshop-style. Fourteen blend modes are available - normal, multiply, screen, overlay, soft/hard light, color dodge/burn, linear dodge/burn, difference, subtract, lighter, darker. The important defaults are chosen thoughtfully: layer 1 defaults to normal, layer 2 to multiply, layer 3 to overlay, so the node behaves sensibly even if you only connect images and never touch a dropdown. Masks are optional per layer; a connected mask limits the blend to where it's white.
The inputs
base- required. Everything stacks on this.layer1/layer2/layer3- optional images. Unconnected layers are skipped cleanly, so you can build a 2-layer stack and add a third later.- Each layer's
_mode(blend mode),_opacity(0–1), and_mask(optional IMAGE).
Output is one result IMAGE.
Gotchas worth knowing
Masks are IMAGE type, not MASK type - if you're coming from a mask-editing node that emits a MASK, run it through an image conversion first or the socket won't connect. And opacity isn't smart about masks: with both a mask and a low opacity, the two multiply together, which is usually what you want but can be surprising if you expected one to dominate. Blend modes also assume images are the same size; feed it mismatched dimensions and you'll get a shape mismatch rather than an auto-resize. Keep your layers at the same resolution.
Installation
Ships in amtarr/ComfyUI-TextureAlchemy under Add Node → Texture Alchemist → Blending. Install via ComfyUI Manager (search "TextureAlchemy") or:
cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy
Restart ComfyUI. No requirements.txt, no model files - this is pure torch compositing, so there's nothing else to install.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| base | IMAGE | — | |
| layer1opt | IMAGE | — | |
| layer1_modeopt | COMBO | normal | 14 options: normal, multiply, screen, overlay, soft_light, hard_light, +8 |
| layer1_opacityopt | FLOAT | 1.000–1 | — |
| layer1_maskopt | IMAGE | — | |
| layer2opt | IMAGE | — | |
| layer2_modeopt | COMBO | multiply | 14 options: normal, multiply, screen, overlay, soft_light, hard_light, +8 |
| layer2_opacityopt | FLOAT | 1.000–1 | — |
| layer2_maskopt | IMAGE | — | |
| layer3opt | IMAGE | — | |
| layer3_modeopt | COMBO | overlay | 14 options: normal, multiply, screen, overlay, soft_light, hard_light, +8 |
| layer3_opacityopt | FLOAT | 1.000–1 | — |
| layer3_maskopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | IMAGE | — |