ComfyUI Node

Substance Renderer

Where Your Materials Actually Become Textures

By jasonjgardner·Created about a year ago·Updated about a year ago· 4
Substance Renderer
  • input_image_1
  • input_image_2
  • input_image_3
  • input_image_4
  • texture_paths
  • texture_images
  • organized_outputs
  • render_log
  • output_directory
sbsar_file_path
output_directory./textures
output_formatpng
bit_depth8
output_name
graph_selection
output_selection
parameters{}
preset_name
cpu_count0
memory_budget2000
resolution1024
return_imagestrue
verbosefalse
input_image_1_param
input_image_2_param
input_image_3_param
input_image_4_param

This is the node the pack is really about. If you've got a .sbsar material - one you cooked yourself, or a free archive pulled from Adobe's Substance 3D asset library - SubstanceRenderer is what turns it into an actual PBR texture set: diffuse/albedo, normal, roughness, metallic, height, AO, emission, and opacity maps sitting in a folder, ready for a game engine or a renderer. The other nodes in this pack are supporting cast; the Renderer is where the work gets done.

How it works

Like its sibling nodes, it doesn't contain any Substance engine. It shells out to sbsrender from Adobe's free Substance 3D Automation Toolkit and runs sbsrender render --input thing.sbsar --output-path ./textures --output-format png ..., passing every setting through as a CLI flag. Parameters become --set-value param@value entries, resolution becomes an $outputsize override, and any connected ComfyUI images get written to temp PNGs and handed in as --set-entry inputs. Predictable, no API key, and the logs you get back are the real CLI's own output.

The inputs that matter

  • sbsar_file_path - the .sbsar to render. Required.
  • output_directory - where maps land. Required.
  • output_format (png / tiff / exr / jpg / tga / hdr) and bit_depth (8 / 16 / 16f / 32f) - required, and worth setting deliberately. PNG at 8-bit is the sensible default; go 16-bit or EXR if a downstream tool needs the precision.
  • resolution - output size in pixels, 256–4096, default 1024 (the tooltip calls it "width and height"). Double it only when you actually need to; render time and memory go up fast.
  • parameters - a JSON object of parameter overrides. This is where you'd drop the output of the pack's Parameter Controller.
  • return_images - whether to also load the textures back into ComfyUI as an IMAGE tensor. On by default.
  • input_image_1 through input_image_4 with matching input_image_N_param fields - the interesting feature. Wire any ComfyUI IMAGE output into a slot, name the Substance parameter it should drive (say diffuse_input), and the renderer feeds your generated image into the material as an input texture. That's the hook for AI-generated content driving procedural materials.

The outputs

  • texture_paths - JSON list of every file that came out.
  • organized_outputs - the same files grouped by map type (diffuse, normal, roughness, metallic, height, ambient_occlusion, emission, opacity) based on filename patterns. This is the output you actually want to read when you're wiring things up.
  • texture_images - the maps as a ComfyUI IMAGE tensor. Two honest caveats here. First, it's one batch containing all maps stacked together, not separate per-map outputs - so if you wire it into a preview you'll see a strip of images, and you can't easily grab the normal map alone from it. Second, if loading fails the code quietly returns a dummy black tensor instead of erroring. If you're building on this node, treat the files and organized_outputs as the source of truth, not the tensor.
  • render_log and output_directory - the CLI output and the resolved output folder.

Installing and troubleshooting

Same story as the whole pack: install via ComfyUI Manager (search "Substance Designer Integration") or git clone https://github.com/jasonjgardner/comfui-substance-designer-integration into custom_nodes/, then restart. No real Python deps to worry about - the actual requirement is the Substance 3D Automation Toolkit installed and on your PATH (or in one of the auto-checked install dirs, or pointed to via config.json). The toolkit download needs an Adobe account but is free.

Common pain points: memory errors - drop memory_budget (default 2000 MB), lower the resolution, or render at 8-bit; parameter errors - your JSON is probably malformed or you guessed a parameter name wrong, so check it against what the Substance Info Extractor reports; black or missing images - remember the dummy-tensor fallback and check render_log plus the actual output folder rather than trusting the preview.

The pack is young, AI-generated code with a thin community footprint, so don't expect elaborate docs. But the core promise - turn a .sbsar into a real texture set inside a ComfyUI graph - is exactly what this node delivers, and the input_image slots are the genuinely fun part if you're trying to drive procedural materials with generated imagery.

Categorysubstance

Inputs (22)

NameTypeDefaultDescription
sbsar_file_pathSTRING
output_directorySTRING./textures
output_formatCOMBOpng6 options: png, tiff, exr, jpg, tga, hdr
bit_depthCOMBO84 options: 8, 16, 16f, 32f
output_nameoptSTRING
graph_selectionoptSTRING
output_selectionoptSTRING
parametersoptSTRING{}
preset_nameoptSTRING
cpu_countoptINT00–32
memory_budgetoptINT2000512–16384
resolutionoptINT1024256–4096Output texture resolution (width and height)
return_imagesoptBOOLEANtrue
verboseoptBOOLEANfalse
input_image_1optIMAGEFirst input image for material parameters
input_image_1_paramoptSTRING
input_image_2optIMAGESecond input image for material parameters
input_image_2_paramoptSTRING
input_image_3optIMAGEThird input image for material parameters
input_image_3_paramoptSTRING
input_image_4optIMAGEFourth input image for material parameters
input_image_4_paramoptSTRING

Outputs (5)

NameTypeDescription
texture_pathsSTRING
texture_imagesIMAGE
organized_outputsSTRING
render_logSTRING
output_directorySTRING