ComfyUI Node

Substance Cooker

Compile Designer Graphs Without Opening Designer

By jasonjgardner·Created about a year ago·Updated about a year ago· 4
Substance Cooker
    • sbsar_file_path
    • cooking_log
    • output_directory
    sbs_file_path
    output_directory./output
    output_name
    optimization_level1
    enable_iconstrue
    merge_graphsfalse
    verbosefalse

    If you make materials in Substance Designer, you know the ritual: you edit a .sbs graph, then you cook it into a .sbsar archive before anything else - a game engine, a renderer, a texture pipeline - will touch it. SubstanceCooker is the node that does that compile step inside ComfyUI, so you can cook a Designer graph on demand and hand the result straight to the rest of your workflow, no round-trip through Designer's own export dialog.

    What it actually does

    Mechanically this node is refreshingly simple: it builds a command line and runs it. Specifically it shells out to sbscooker from Adobe's free Substance 3D Automation Toolkit - the CLI version of Designer's cooking pipeline - with something like sbscooker cook --inputs my_material.sbs --output-path ./output. No API, no license key, no bundled Substance engine. If you've already got the toolkit installed, this node is a thin, predictable wrapper around a tool that exists anyway.

    That "no magic" framing matters for what to expect: this node cooks a graph you already wrote. It won't generate materials for you, and it needs a .sbs file authored in Substance Designer (a paid Adobe app) as its input. If you don't own Designer, the Cooker is the wrong node for you - but you can still use the rest of this pack on free .sbsar archives from Adobe's Substance 3D asset library.

    The inputs that matter

    • sbs_file_path - path to your .sbs graph. Required, and the node will refuse anything that isn't a .sbs file.
    • output_directory - where the .sbsar lands. Required.
    • optimization_level (0–3) - the one you'll actually fiddle with. 0 is fastest but bloats the archive; 1 is the recommended balance; 3 is maximum compression and noticeably slower cooking. Map it to your urgency: level 1 unless you have a reason not to.
    • merge_graphs - squash all graphs in the file into one .sbsar. Off by default, which is usually what you want.
    • output_name - override the output filename. Leave it blank to get <graphname>.sbsar.
    • enable_icons, verbose - icon data goes in by default; verbose is your debugging friend when a cook fails.

    The outputs

    • sbsar_file_path - the money output. Wire it into this pack's Substance Renderer or Substance Info Extractor, or into anything else that wants a path string.
    • cooking_log - the raw CLI output. When something goes wrong, this is where the actual error message lives.
    • output_directory - the resolved output folder, in case ComfyUI's working directory isn't what you assumed.

    Installing it

    Install via ComfyUI Manager (search "Substance Designer Integration") or manually:

    cd /path/to/ComfyUI/custom_nodes/
    git clone https://github.com/jasonjgardner/comfui-substance-designer-integration
    

    Then restart ComfyUI. Here's the part that trips people up: the Python dependencies (torch, numpy, Pillow) are already present in any ComfyUI install, so pip install -r requirements.txt is effectively a no-op. The real dependency is external - download the Substance 3D Automation Toolkit from Adobe (free, but you need an Adobe account) and make sure sbscooker is findable, either on your PATH or in one of the install locations the plugin auto-checks. If auto-detection misses, you can point the plugin at the right binary via a config.json under substance_designer/ in your ComfyUI config directory.

    Common issues

    "Tool not found" is the classic. It means the toolkit isn't installed, isn't on the PATH, or isn't in a location the plugin checks - so install it, or override the path in config.json. Slow cooking with a big optimization level is expected behavior, not a bug; drop to level 0 for throwaway cooks. And remember the input must actually be a .sbs - pointing this at a .sbsar (that's what the Renderer eats) is the most common beginner mix-up.

    One honest caveat about this pack in general: it's young, MIT-licensed, and the code itself credits an AI agent rather than a person, so don't expect a big community or rich docs behind it. But the mechanism here is so thin - one subprocess call with well-defined flags - that it does what it says as long as the toolkit is present. It's the kind of node you install for a specific pipeline, use without ceremony, and don't think about again.

    Categorysubstance

    Inputs (7)

    NameTypeDefaultDescription
    sbs_file_pathSTRING
    output_directorySTRING./output
    output_nameoptSTRING
    optimization_leveloptINT10–3
    enable_iconsoptBOOLEANtrue
    merge_graphsoptBOOLEANfalse
    verboseoptBOOLEANfalse

    Outputs (3)

    NameTypeDescription
    sbsar_file_pathSTRING
    cooking_logSTRING
    output_directorySTRING