ComfyUI Node

Export Tools

Save your whole storyboard plan as one versioned JSON file

By SurrealByDesign·Created 3 months ago·Updated 3 months ago· 1
Export Tools
    • saved_path
    filename_prefixstoryboard
    shot_json
    layout_json
    bbox_json
    title

    Every other node in this pack passes JSON around as strings on wires - ephemeral, invisible, gone when you close the graph. Export Tools is the one that makes your layout real: it bundles whatever parts of the pipeline you've connected into a single project JSON file and writes it to disk, versioned so you never clobber an earlier attempt. It's the hand-off node - the thing you use when the layout needs to leave ComfyUI and go somewhere else, whether that's another tool, another machine, or just next week's you.

    What it bundles

    Wire in any combination of the three JSON outputs the pipeline produces:

    • shot_json - the normalized shot record.
    • layout_json - composition plus slot assignments.
    • bbox_json - the actual subject boxes.

    The node doesn't care which subset you connect. One stage connected, or all three - it packs up whatever's there into a StoryboardProject envelope with a schema version, a generator and created timestamp in the metadata, and an optional title string you can set on the node. The file it writes conforms to the pack's project.schema.json, so it's a stable interchange format, not a dump of whatever happened to be in the sockets. You must connect at least one of the three JSONs, though - export with nothing wired errors out with "provide at least one of shot_json, layout_json, bbox_json".

    The filename behavior

    The one required input is filename_prefix (default storyboard). Export writes to ComfyUI's output directory - the same folder your saved images go to. The first run produces storyboard.json; if that file already exists, it steps up to storyboard_001.json, then storyboard_002.json, and so on. That's the versioning, and it's why you can iterate a shot plan five times and keep all five on disk instead of silently overwriting. The output, saved_path, is a STRING with the full path it just wrote - wire it into a Text/Display node if you want it visible, or just check the output folder.

    Why you'd reach for it

    Layout work in a pipeline is all about hand-off. You've built a shot plan in ComfyUI - now the bbox JSON needs to feed your actual render workflow, or a review tool, or a teammate who isn't running ComfyUI at all. A single human-readable project file is the cleanest possible way to make that move. It's also just a good habit for iteration: because the pack is deterministic, you can diff two exported files and see exactly what changed between attempts.

    Install and gotchas

    Same install as the rest of the pack - cd ComfyUI/custom_nodes && git clone https://github.com/SurrealByDesign/ComfyUI-Storyboard-Layout, restart, or grab it from ComfyUI Manager. No extra dependencies, no models to download. This is an OUTPUT_NODE, so it always runs at the end of the graph (it won't get skipped by ComfyUI's caching), and it shows the standard "save output" indicator in the UI.

    Things to watch:

    • Files land in your output directory, not in custom_nodes. People go looking for the file next to the node and it's not there. The output folder is where saved images go; that's where your project JSONs go too.
    • The storyboard_001 suffix means a previous file exists, not that something's wrong. Delete old exports if you want storyboard.json back.
    • Non-blank inputs that aren't valid JSON objects get a hard error, not a silent skip. The pack would rather tell you than write a broken file - which is the right call for an export node.

    If you're using this pack at all, Export Tools is worth having at the end of the chain even when you think you don't need it yet. The file it writes is the artifact you'll be glad you have.

    Categorystoryboard/layout

    Inputs (5)

    NameTypeDefaultDescription
    filename_prefixSTRINGstoryboard
    shot_jsonoptSTRING
    layout_jsonoptSTRING
    bbox_jsonoptSTRING
    titleoptSTRING

    Outputs (1)

    NameTypeDescription
    saved_pathSTRING