VA Seed
Reroll with one click, and it remembers the seed you just burned
- seed
You know the pain this node exists for: KSampler finally gives you something good, you nudge the prompt, and the seed that got you there is already gone because "control_after_generate" rolled it away. VA Seed is a tiny answer to that specific annoyance - a pass-through seed node with a 🎲 button that rerolls and stashes the old seed where you can actually see it before it does.
It ships in va-nodes by vahidzxc, a small work-in-progress pack (the README says so itself). This is the pack's flagship node, and it's about as light as a custom node gets: zero Python dependencies, zero models, just one INT in and one INT out.
How it actually works
The Python side is almost boring. process() takes the seed you feed it and returns it unchanged, tracking the last value it saw. The real behavior lives in the frontend extension (js/va_seed.js). Clicking the 🎲 button copies the current seed into previous_seed, picks a fresh random value up to 2^40, then calls app.queuePrompt() so ComfyUI actually fires a run.
Now the honest bit. The README's headline feature is "smart re-execution control" that supposedly skips unnecessary workflow runs via an IS_CHANGED hook. As written, that guard effectively never fires - the flag it checks is set on the node instance, but IS_CHANGED reads it off the class, so the two never meet. It doesn't break anything, because changing the seed widget already re-queues the run downstream. Just don't buy the "prevents unnecessary runs" claim. It's a reroll button that remembers your old seed, and that's a perfectly fine thing to be.
The inputs and output that matter
Only two inputs, and you touch one of them:
- seed (INT, 0 to 2^40 ≈ 1.1 trillion) - the value passed through to your sampler. Usually you don't type here; you click 🎲.
- previous_seed (INT, readonly) - set automatically by the button to the seed you had before. This is the whole selling point: when you like an image, you can read back exactly what produced it instead of guessing.
- Output: seed (INT) - wire this into the KSampler's seed input.
One note so you're not surprised: the 2^40 ceiling is actually smaller than KSampler's own 64-bit range. At a trillion-plus values you'd have to burn a new seed every second for about 35,000 years to notice, so treat it as a non-issue.
Installing it
Easiest via ComfyUI Manager: search va-nodes and hit install, then restart. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/vahidzxc/va-nodes
Then restart ComfyUI. The requirements.txt explicitly says standard library only, so there's nothing else to install - no torch-adjacent surprises, no model downloads. Needs Python 3.10+.
Gotchas worth knowing
- The README's clone URL is stale. It points at
va_nodes.git(underscore); the real repo isvahidzxc/va-nodes(dash). Use the one above or let Manager handle it. - No 🎲 button after install? The frontend extension didn't load. Restart ComfyUI properly, then hard-refresh the browser tab (Ctrl+Shift+R) - stale cached JS is the usual culprit.
- previous_seed is readonly, so you can't paste a seed back into it. To restore an old image, set
seedto the recorded value manually.
Should you switch your whole workflow over to it? Probably not - KSampler's built-in randomize toggle already covers most of this, and if you want serious seed tooling the bigger packs (rgthree, Efficiency) give you far more. But if you want one small node that keeps your seed history visible without dragging in a mega-pack, this does the job. Pair it with the classic discipline - lock the seed, change one parameter at a time, compare - and the "what seed was that?" moment stops happening entirely.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–1099511627776 | — |
| previous_seed | INT | 00–1099511627776 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| seed | INT | — |