Nodes/SAX Bridge/SAX Primitive Store
ComfyUI Node

SAX Primitive Store

One place for every number in your workflow — SAX Primitive Store

By so16tm·Created 6 months ago·Updated 3 months ago· 0
SAX Primitive Store
    • out_0
    • out_1
    • out_2
    • out_3
    • out_4
    • out_5
    • out_6
    • out_7
    • out_8
    • out_9
    • out_10
    • out_11
    • out_12
    • out_13
    • out_14
    • out_15
    • out_16
    • out_17
    • out_18
    • out_19
    • out_20
    • out_21
    • out_22
    • out_23
    • out_24
    • out_25
    • out_26
    • out_27
    • out_28
    • out_29
    • out_30
    • out_31
    items_json[]

    SAX Primitive Store is a glorified shelf for your workflow's numbers - and that's a good thing. Instead of typing the same seed into three samplers, the same CFG into two, and the same width into a crop node, you define each value once here and fan it out. Every item you add becomes its own output slot, so changing a number in one place updates every consumer. This is the "one source, many consumers" pattern from the plumbing layer, packaged as a single node with a decent editor instead of five loose primitive nodes.

    The difference from plain ComfyUI primitives is the SEED type. This node treats a seed as a first-class citizen with a random mode, which is exactly the thing you want when you're comparing runs without typing seeds by hand.

    How it works

    Items live in an items_json string that the UI manages for you - you don't hand-edit JSON. Each item has a type and a value: INT, FLOAT, STRING, BOOLEAN, or SEED. On execution the node parses the list, converts each value to its type, and emits it from the matching out_0 through out_31 slot (32 max). Unused slots just output None.

    The clever bit is inside IS_CHANGED. When an item is a SEED set to random mode, the node returns float("NaN") from IS_CHANGED, which forces ComfyUI to re-execute it every single run - that's the engine's documented always-rerun trick, and it's what makes "give me a fresh random seed each run" work from a node that otherwise looks static. It's also the footgun: a random SEED here makes everything downstream of it rerun every time, which costs you the cache and can slow a big workflow.

    The inputs that matter

    • items_json - the only real input, and you barely touch it directly; the node UI turns it into a proper editor with drag-to-change ints and float sliders.
    • Outputs: out_0out_31, all *-typed, each wired to the nodes that need that value.

    When you'd use it

    Any workflow where the same value appears twice. The classic one is a seed shared by a KSampler and a filename template; the SAX-flavored one is a shared steps/cfg that both a main sampler and a detailer read, so you tune generation settings in one spot. If a value genuinely belongs to only one node, don't bother - the store adds a hop for no benefit.

    Installing it

    It ships in the SAX_Bridge pack. ComfyUI Manager → "Install via Git URL" → https://github.com/so16tm/SAX_Bridge, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/so16tm/SAX_Bridge
    

    Restart, and it's under SAX/Bridge/Utility. No dependencies beyond ComfyUI.

    Gotchas

    Renaming isn't supported - the docs say to delete and re-add an item to rename it, and that breaks any wires attached to the old slot. Budget for that. And keep an eye on the random-seed rerun cost: if a workflow suddenly feels slower, a SEED in random mode is usually the culprit, poisoning the cache for everything downstream.

    CategorySAX/Bridge/Utility

    Inputs (1)

    NameTypeDefaultDescription
    items_jsonoptSTRING[]

    Outputs (32)

    NameTypeDescription
    out_0*
    out_1*
    out_2*
    out_3*
    out_4*
    out_5*
    out_6*
    out_7*
    out_8*
    out_9*
    out_10*
    out_11*
    out_12*
    out_13*
    out_14*
    out_15*
    out_16*
    out_17*
    out_18*
    out_19*
    out_20*
    out_21*
    out_22*
    out_23*
    out_24*
    out_25*
    out_26*
    out_27*
    out_28*
    out_29*
    out_30*
    out_31*