Seed Control
A seed control that won't eat your good seed
- seed
- noise
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) - aNoise_RandomNoise-compatible object wrapping the same seed. This is the bit most seed nodes don't have: it plugs straight into a sampler'snoisesocket (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
seedinput to get the panel back. - Seed out of range (below 0 or above the 64-bit max) raises a
ValueErrorinstead 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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| seed_value | INT | 00–18446744073709550000 | Local seed value. The panel edits this; leave the native widget hidden. |
| seed_control_state | STRING | {"mode": "random", "last_seed": null, "recent": []} | Persisted seed-control state (JSON): mode, last_seed and recent seeds. |
| seedopt | INT | 00–18446744073709550000 | Optional external seed. When linked, the local controls are disabled and this value is passed through. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| seed | INT | — |
| noise | NOISE | — |