PBR Combiner
Bundle Your Maps Into One PBR_PIPE Wire
- pbr_pipe
- albedo
- normal
- ao
- height
- roughness
- metallic
- transparency
- emission
- pbr_pipe
Half the battle with PBR work in ComfyUI is just wiring. Eight separate maps means eight dangling outputs that have to reach every downstream node, and one mistaken connection turns your whole material into noise. PBR Combiner is the pack's answer: it bundles any number of maps into a single PBR_PIPE connection, and from then on one wire carries the entire material.
Every map input is optional, which is what makes this node so flexible. You can build a pipe from scratch (albedo + normal + roughness = a perfectly good start), or you can feed an existing pbr_pipe in and override or extend it - add a height map you generated later, drop in an emission map, replace a roughness you're unhappy with. The README's examples lean on exactly this: the canonical workflow pipes Marigold/Lotus extraction into a Combiner, then merges Lotus normals and height on top.
How it works
Mechanically it's boring in the best way: a dict of map-name → image. It starts from the existing pipe if you gave it one, or an empty pipe if not, then writes every connected input into its slot. Output is a single pbr_pipe that downstream pipeline nodes (Adjuster, Mixer, Preview, Saver, Splitter) all accept.
The eight map slots, all optional: albedo, normal, ao, height, roughness, metallic, transparency, and emission - the last two being the pack's v2.1 additions for cutout materials and glowing parts (lights, lava, screens).
Installing it
Part of TextureAlchemy:
cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy
or ComfyUI Manager (search "TextureAlchemy"), then restart. Under Texture Alchemist → Pipeline. No dependencies, no model downloads.
Real-world gotcha
The one thing people get stuck on with this pack isn't the Combiner itself - it's figuring out where the source maps come from. There was a genuine thread on r/comfyui from someone who couldn't make the PBR extractor work because they expected marigold_appearance and marigold_lighting to be model-loading nodes; they're actually IMAGE outputs from kijai's ComfyUI-Marigold, which produces appearance and lighting passes as images. The fix that kept getting pointed to: the pack ships example workflows in its examples/ folder - load 01_quick_start_pbr_extraction.json and everything becomes obvious. So if you're stuck, don't reverse-engineer from the README, just load an example.
When you'd skip it
If you're only ever handling a single map, you don't need a pipe - wire the image straight through. The pipe system pays off when you have multiple maps and multiple downstream consumers. Once you're past two or three maps, bundling saves you from spaghetti and makes the whole material easy to move, mix, and save as one unit.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| pbr_pipeopt | PBR_PIPE | — | |
| albedoopt | IMAGE | — | |
| normalopt | IMAGE | — | |
| aoopt | IMAGE | — | |
| heightopt | IMAGE | — | |
| roughnessopt | IMAGE | — | |
| metallicopt | IMAGE | — | |
| transparencyopt | IMAGE | — | |
| emissionopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pbr_pipe | PBR_PIPE | — |