๐ฆ Marigold AOV Extractor (Render Passes)
Marigold's hidden render passes, pulled out and separated
- marigold_lighting
- marigold_appearance
- normal_map
- diffuse_albedo
- lighting_direct
- lighting_indirect
- reflection_specular
- ambient_occlusion
- emission
- beauty_composite
Most people use Marigold for depth. The interesting thing is that Marigold's newer "IId" decomposition models can split an image into lighting-relevant layers - albedo, shading, residual - and almost nobody knows what to do with that output, because the raw split is in a form you can't drop into a material pipeline. Marigold AOV Extractor is the node that turns those two Marigold outputs (lighting + appearance) into a proper set of render passes, naming them like the Octane AOVs they're modeled on: diffuse albedo, direct and indirect lighting, reflection/specular, ambient occlusion, and emission.
It's the most ambitious node in the TextureAlchemy pack, and it's honest about its ambition in the source - it's built on the Octane render-pass convention, so if you've ever worked in a real renderer, the output names will feel familiar rather than invented.
How it works
Marigold IId emits two decompositions: a lighting pass, which is roughly albedo ร shading (the color of the surface and how light falls on it), and an appearance pass, which carries the residual - the stuff albedo-and-shading didn't capture, i.e. specular and reflections. The node normalizes both inputs to RGB, then decomposes:
- diffuse_albedo - the surface color with lighting pulled out, gamma-controlled by
diffuse_gamma. - lighting_direct and lighting_indirect - the illumination split, scaled by
shading_strength. - reflection_specular - extracted from the residual using
specular_threshold(what counts as a highlight) andspecular_strength(how strong it reads). - ambient_occlusion - derived from shading analysis, with
ao_strength; feed the optionalnormal_mapinput to get better AO, since occlusion correlates with surface orientation. - emission - bright regions above
emission_threshold, for self-lit pixels (screens, lava, neon). - beauty_composite - the passes recombined, for a sanity check that nothing was lost.
Each pass has its own threshold or strength control, so you're not stuck with the model's opinion of where a highlight starts.
The inputs that matter
- marigold_lighting and marigold_appearance - from Marigold's IId nodes (Kijai's ComfyUI-Marigold wrapper). Both required.
- specular_threshold - 0.5 default; raise it to keep only strong highlights, lower it to catch more.
- emission_threshold - 0.8 default; only pixels brighter than this count as emissive.
- normal_map - optional but worth wiring if you have one; it improves the AO.
Installing it
Ships with ComfyUI-TextureAlchemy. ComfyUI Manager โ search "TextureAlchemy" โ install โ restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy
Restart, look under Texture Alchemist โ Lighting. The node has no dependencies, but it's dead without Marigold upstream - install Kijai's ComfyUI-Marigold and a Marigold IId checkpoint. Marigold is the slow-but-quality depth/decomposition option per the KB's depth essay, so budget for it.
Common issues
- "The albedo is too dark or too bright." That's what
diffuse_gammais for - nudge it off 1.0 to taste. - "Specular shows everywhere or nowhere." You've got
specular_thresholdset wrong for this particular image. It's a per-image knob, not a set-once-and-forget one. - "Passes don't seem to add up to the original." They're approximations with thresholds doing the separating, so they won't sum perfectly to the input.
beauty_compositeis there precisely so you can check how much fidelity survived. - "I get a 1 or 2-channel output." The node converts grayscale and 2-channel Marigold outputs to RGB automatically, so downstream nodes shouldn't choke.
Honest caveat before you fall in love: this pack is a small, low-profile project - essentially no community footprint on reddit, near-zero page impressions - so you're relying on the author's implementation rather than a battle-tested ecosystem standard. That's fine for a tool this specialized; just keep a Marigold-depth comparison on hand to validate against, and treat the passes as starting points for material work rather than ground truth.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| marigold_lighting | IMAGE | Marigold IId Lighting output (contains albedo + shading) | |
| marigold_appearance | IMAGE | Marigold IId Appearance output (contains residual/specular) | |
| diffuse_gamma | FLOAT | 1.00.1โ3 | Gamma correction for diffuse/albedo |
| shading_strength | FLOAT | 1.00โ3 | Lighting/shading intensity |
| specular_threshold | FLOAT | 0.500โ1 | Threshold for extracting specular from residual |
| specular_strength | FLOAT | 1.00โ3 | Specular/reflection intensity |
| ao_strength | FLOAT | 1.00โ2 | Ambient occlusion extraction strength |
| emission_threshold | FLOAT | 0.800โ1 | Threshold for extracting emission from bright areas |
| normal_mapopt | IMAGE | Optional normal map for enhanced AO extraction |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| diffuse_albedo | IMAGE | โ |
| lighting_direct | IMAGE | โ |
| lighting_indirect | IMAGE | โ |
| reflection_specular | IMAGE | โ |
| ambient_occlusion | IMAGE | โ |
| emission | IMAGE | โ |
| beauty_composite | IMAGE | โ |