Substance Parameter Controller
Tweak Material Parameters Without Touching the Graph
- parameter_json
- applied_parameters
- material_info
- preset_info
Say you've got a .sbsar material and you want a version with lower roughness, a different tiling, or twenty variations to pick from. You could open it in Designer every time. Or you could point SubstanceParameterController at it, hand it a JSON override, and get back the exact parameter set the Substance Renderer should render with. It's the "knob-twister" of this pack: it doesn't produce textures itself, it produces the parameter data that makes rendering produce different textures.
How it works
The node reads the .sbsar with sbsrender info from Adobe's free Substance 3D Automation Toolkit, then merges three sources into one final parameter set: your explicit JSON parameter_overrides, an optional named preset_name baked into the material, and (if you enable it) a seeded randomization pass. The result is a JSON string you wire into the Renderer's parameters input. It's pure data manipulation on top of the toolkit's CLI - no rendering happens here, which is why you can use it to explore variations cheaply before committing to a full render.
The inputs that matter
sbsar_file_path- the material to read parameters from. Required.parameter_overrides- a JSON object of name/value pairs, like{"roughness": 0.7, "tiling": 2.0}. This is the main way you actually steer the material.randomize_parameterswithrandom_seedandrandomization_strength- the variation engine. Flip randomization on, set a seed (-1means "surprise me"), andrandomization_strength(0.0–1.0, default 0.5) controls how wild the jitter gets. Fixed seed plus fixed overrides equals reproducible variations, which is exactly what you want when you're hunting for one good look across a batch.preset_name- apply a preset that already exists inside the.sbsar, if the material ships one.extract_info- on by default; populates the info outputs.
The outputs
parameter_json- the finished parameter set as a JSON string. This is the one to use. Feed it into the Substance Renderer'sparametersinput and the whole loop clicks into place: override → render → look → tweak.applied_parameters- a more detailed record of what actually got applied, for debugging when the render doesn't match your intent.material_info/preset_info- extracted metadata about the material and any preset, handy when you're unfamiliar with what a downloaded archive actually exposes.
Installing and the usual gotchas
Install via ComfyUI Manager (search "Substance Designer Integration") or git clone https://github.com/jasonjgardner/comfui-substance-designer-integration into custom_nodes/ and restart. The Python deps are already in ComfyUI; the real requirement is the Substance 3D Automation Toolkit (free download, Adobe account needed) so sbsrender is on the PATH or in an auto-detected install location.
The classic failure here is parameter names that don't match the material. A .sbsar only accepts the parameter names it was cooked with, and guessing "roughness" when the graph calls it "Roughness_Global" gets you a render error, not a helpful one. Run the pack's Substance Info Extractor on the file first to see the real names before you write overrides. Also keep an eye on JSON syntax - a stray quote in parameter_overrides and the whole thing fails to parse. And one expectation check: this node's randomization is a simple jitter over the material's own parameter ranges, not an AI "variation" engine. It's a batch-friendly way to explore a material's space, not a creative generator. For a young, AI-generated pack with a thin community footprint, that's honestly fine - it's a small, well-scoped utility that does its one job.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| sbsar_file_path | STRING | — | |
| parameter_overridesopt | STRING | {} | — |
| preset_nameopt | STRING | — | |
| random_seedopt | INT | -1-1–2147483647 | — |
| randomize_parametersopt | BOOLEAN | false | — |
| randomization_strengthopt | FLOAT | 0.50–1 | — |
| extract_infoopt | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| parameter_json | STRING | — |
| applied_parameters | STRING | — |
| material_info | STRING | — |
| preset_info | STRING | — |