Nodes/ComfyUI-TextureAlchemy/๐Ÿ“ฆ Marigold AOV Extractor (Render Passes)
ComfyUI Node

๐Ÿ“ฆ Marigold AOV Extractor (Render Passes)

Marigold's hidden render passes, pulled out and separated

By amtarrยทCreated 9 months agoยทUpdated 4 months agoยท 58
๐Ÿ“ฆ Marigold AOV Extractor (Render Passes)
  • marigold_lighting
  • marigold_appearance
  • normal_map
  • diffuse_albedo
  • lighting_direct
  • lighting_indirect
  • reflection_specular
  • ambient_occlusion
  • emission
  • beauty_composite
โ—„diffuse_gamma1.0โ–บ
โ—„shading_strength1.0โ–บ
โ—„specular_threshold0.50โ–บ
โ—„specular_strength1.0โ–บ
โ—„ao_strength1.0โ–บ
โ—„emission_threshold0.80โ–บ

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) and specular_strength (how strong it reads).
  • ambient_occlusion - derived from shading analysis, with ao_strength; feed the optional normal_map input 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_gamma is for - nudge it off 1.0 to taste.
  • "Specular shows everywhere or nowhere." You've got specular_threshold set 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_composite is 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.

CategoryTexture Alchemist/Lighting

Inputs (9)

NameTypeDefaultDescription
marigold_lightingIMAGEMarigold IId Lighting output (contains albedo + shading)
marigold_appearanceIMAGEMarigold IId Appearance output (contains residual/specular)
diffuse_gammaFLOAT1.00.1โ€“3Gamma correction for diffuse/albedo
shading_strengthFLOAT1.00โ€“3Lighting/shading intensity
specular_thresholdFLOAT0.500โ€“1Threshold for extracting specular from residual
specular_strengthFLOAT1.00โ€“3Specular/reflection intensity
ao_strengthFLOAT1.00โ€“2Ambient occlusion extraction strength
emission_thresholdFLOAT0.800โ€“1Threshold for extracting emission from bright areas
normal_mapoptIMAGEOptional normal map for enhanced AO extraction

Outputs (7)

NameTypeDescription
diffuse_albedoIMAGEโ€”
lighting_directIMAGEโ€”
lighting_indirectIMAGEโ€”
reflection_specularIMAGEโ€”
ambient_occlusionIMAGEโ€”
emissionIMAGEโ€”
beauty_compositeIMAGEโ€”