ComfyUI Node

Seed Control

A seed control that won't eat your good seed

By darksidewalker·Created 5 months ago·Updated 2 days ago· 90
Seed Control
    • seed
    • noise
    seed_value0
    seed_control_state{"mode": "random", "last_seed": null, "recent": []}
    seed0

    If you've ever fallen for the oldest trick in ComfyUI - you land a great frame, flip the KSampler's seed to fixed to keep it, and the box already contains the next seed, not the one that made the image - you know the built-in seed widget is a footgun. DaSiWa Seed Control is the MiniMax H3 Director's seed panel pulled out as its own node, and it fixes that by being honest about what state you're in. Random means roll fresh every queue. Fixed means this exact number, every time. The value in the box is the one that will run, because the mode switch commits in place instead of firing after generation like control_after_generate does.

    It comes from the ComfyUI-DaSiWa-Nodes pack, a collection aimed at MiniMax H3 and LTX video workflows. If you live in the H3 Director's timeline you already have this UX built in; this node is for everyone else. It owns the full unsigned 64-bit seed space (0 to 0xFFFFFFFFFFFFFFFF) that H3 uses, so no more squeezing a 16-digit seed into a widget that silently rounds it.

    How it works

    The panel is a DOM widget (js/dasiwa_seed_control.js) that keeps the seed as a decimal string, not a number. That detail matters: JavaScript's Number loses precision past ~9 quadrillion, so a "lossless" 16-digit seed read back as an int would desync the spinner. The string is the source of truth; the native INT widget below is just a mirror the backend actually reads. Mode, last seed, and the ten-entry history live in a hidden seed_control_state JSON widget, so they survive save and reload. In Random mode with no local value set, the backend rolls a fresh 64-bit seed (secrets.randbits(64)) on every queue - which means API clients get identical behaviour to the panel, no DOM required.

    The inputs and outputs that matter

    • seed_value (INT, hidden) - the local seed. You edit it through the panel's spinner or by typing; stepping wraps at the 64-bit bounds and locks the seed to Fixed.
    • seed (INT, optional) - the external override. Wire anything here and the local controls grey out to an "External seed connected" note; the linked value passes straight through. Handy for seed-farming from another node.
    • seed (INT output) - the effective seed. Feed it to a sampler's seed input or a text-node filename.
    • noise (NOISE output) - a Noise_RandomNoise-compatible object wrapping the same seed. This is the bit most seed nodes don't have: it plugs straight into a sampler's noise socket (the LTX sampler accepts one), so you can carry a single seed all the way through without a conversion node.

    Installing it

    Search DaSiWa-Nodes in ComfyUI Manager, or do it by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/darksidewalker/ComfyUI-DaSiWa-Nodes
    cd ComfyUI-DaSiWa-Nodes
    pip install -r requirements.txt
    

    Restart ComfyUI and it lands under the DaSiWa category. Fair warning: this pack is a toolbox, and requirements.txt drags in heavy stuff - transformers, accelerate, nvidia-vfx, av, imageio-ffmpeg. The RTX 530+ driver requirement in the README is for the RTX upscaler, not this node, but installing the pack pulls all of it regardless. If you want one small seed panel, you're paying for the whole garage.

    Where people get tripped up

    • Controls suddenly disabled? An external seed is connected. Unplug the seed input to get the panel back.
    • Seed out of range (below 0 or above the 64-bit max) raises a ValueError instead of silently wrapping - the safest failure mode, but it surprises people who are used to forgiving widgets.
    • The node persists mode and history in the workflow, so a shared/copied workflow carries someone else's last 10 seeds. Not a bug - just don't be confused when the history isn't empty.

    It's a small node doing one job, and it does that job better than the stock widget. If you're pasting workflows around or farming seeds for H3, it's worth the slot.

    CategoryDaSiWa

    Inputs (3)

    NameTypeDefaultDescription
    seed_valueINT00–18446744073709550000Local seed value. The panel edits this; leave the native widget hidden.
    seed_control_stateSTRING{"mode": "random", "last_seed": null, "recent": []}Persisted seed-control state (JSON): mode, last_seed and recent seeds.
    seedoptINT00–18446744073709550000Optional external seed. When linked, the local controls are disabled and this value is passed through.

    Outputs (2)

    NameTypeDescription
    seedINT
    noiseNOISE