ComfyUI Node

Substance Parameter Controller

Tweak Material Parameters Without Touching the Graph

By jasonjgardner·Created about a year ago·Updated about a year ago· 4
Substance Parameter Controller
    • parameter_json
    • applied_parameters
    • material_info
    • preset_info
    sbsar_file_path
    parameter_overrides{}
    preset_name
    random_seed-1
    randomize_parametersfalse
    randomization_strength0.5
    extract_infotrue

    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_parameters with random_seed and randomization_strength - the variation engine. Flip randomization on, set a seed (-1 means "surprise me"), and randomization_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's parameters input 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.

    Categorysubstance

    Inputs (7)

    NameTypeDefaultDescription
    sbsar_file_pathSTRING
    parameter_overridesoptSTRING{}
    preset_nameoptSTRING
    random_seedoptINT-1-1–2147483647
    randomize_parametersoptBOOLEANfalse
    randomization_strengthoptFLOAT0.50–1
    extract_infooptBOOLEANtrue

    Outputs (4)

    NameTypeDescription
    parameter_jsonSTRING
    applied_parametersSTRING
    material_infoSTRING
    preset_infoSTRING