Nodes/ComfyUI-Chord/Chord - Material Estimation
ComfyUI Node

Chord - Material Estimation

Feed Chord one texture, get basecolor, normal, roughness and metalness back

By ubisoft·Created 10 months ago·Updated 3 months ago· 418
Chord - Material Estimation
  • chord_model
  • image
  • basecolor
  • normal
  • roughness
  • metalness

This is the node everyone means when they search for "Ubisoft Chord." Give it a single flat texture - a photo, a painted albedo, or the output of your text-to-image workflow - and it hands back a complete PBR material: base color, normal, roughness and metalness. The game-artist dream of "turn one image into a ready material" has been chased by a lot of tools, and Chord is the one that made the rounds as "pretty amazing" when it landed in March 2026.

PBR material estimation matters because a texture is a composite. A single color image bakes together the surface's actual color with its lighting, its micro-geometry and its reflectivity. Recovering the separate channels from that mess is an underdetermined problem - which is why older tools like AwesomeBump and Knald were "ancient and not that great," as one redditor put it. Chord attacks it differently, with diffusion.

How it works: the chain

Chord comes from a SIGGRAPH Asia 2025 paper called Chain of Rendering Decomposition. The name tells you the trick: instead of one network guessing all four maps at once, it decomposes the job into a chain of smaller estimates, each one feeding the next.

Roughly, it first predicts the base color using the input image as its starting "render." From that it estimates an approximate irradiance (loosely, the lighting baked into the image) and predicts the normal map. Then comes the clever part for roughness and metalness: it renders synthetic images of the estimated surface across a grid of roughness/metalness candidates, and picks the pair whose re-render best matches the original image. It's a brute-force render-and-compare search inside a diffusion model - slow-ish, but it's why the numbers actually line up with what the light does. The whole pipeline runs at 1024×1024 internally under fp16 autocast, and every output is resized back to your input's resolution before it leaves the node.

Inputs and outputs

Two inputs: chord_model (the output of ChordLoadModel - the tooltip spells it out: "The Chord model used to estimate material") and image (IMAGE). Four outputs, all IMAGE: basecolor, normal, roughness, metalness. Wire them into whatever material shader or export node you're using. The normal output plugs straight into the pack's own ChordNormalToHeight node if you also want a displacement map.

The example workflows in the repo show the intended setup: a T2I pass (Flux, SDXL or Z-Image) generates a texture, and ChordMaterialEstimation decomposes it into material maps - an image-to-material pipeline in one graph.

Install and the reality check

Same pack install as the others: ComfyUI Manager → search "ComfyUI-Chord", or cd ComfyUI/custom_nodes && git clone https://github.com/ubisoft/ComfyUI-Chord.git plus pip install -r ComfyUI-Chord/requirements.txt. And you need the chord_v1.safetensors checkpoint in models/checkpoints, which is gated on Hugging Face - you must agree to share your contact details to get it.

Set expectations before you lean on this. It's a full SD 2.1-based diffusion model, so it needs a real GPU and it's slower than a single-pass estimator - you're paying for several diffusion passes plus the render-and-compare search. Outputs come back at input resolution, so feed it something reasonable. And the pack does not make textures tileable - a known gap one commenter called out immediately. The bigger one is legal, not technical: the license is research-only and non-commercial, and the community was quick to correct anyone calling it open source. For hobby work and learning it's fantastic. For shipping a commercial asset, it isn't an option without reading the license very carefully.

CategoryChord

Inputs (2)

NameTypeDefaultDescription
chord_modelchord_modelThe Chord model used to estimate material.
imageIMAGE

Outputs (4)

NameTypeDescription
basecolorIMAGE
normalIMAGE
roughnessIMAGE
metalnessIMAGE