Shima Seed Controller
Shima Seed Controller
- s33d
- mode
Every ComfyUI beginner gets bitten by control_after_generate at least once: you land a seed you like, flip the dropdown to "fixed" to keep it, and it's already gone, because the widget fires after the run. Shima Seed Controller is this pack's answer - a seed node that moves that logic into a node you can wire, instead of a dropdown hiding on a KSampler.
The pack calls this the "s33d standard." Notice the spelling: the widget is s33d, not seed. That's deliberate - the tooltip spells it out. If the node named its input seed, ComfyUI would auto-add a non-connectable dropdown to it, which defeats the whole point. Renaming it to s33d lets the pack expose a connectable seed port. It looks like a typo. It's a feature.
The workflow pattern is: drop this node at the top level of your graph, set your base seed, and run its s33d output into the external_s33d inputs on nodes inside subgraphs or islands. Because the pack leans hard on Use Everywhere auto-linking, one controller can drive seeds all over a large graph from a single place - which is exactly the "one seed, five samplers" idea the community's been preaching for years, just with a nicer control surface.
The inputs that matter
s33d- your base seed.fixeduses it as-is.mode-fixed,increment,decrement, orrandomize. Increment/decrement step bystepeach run; the node tracks the last emitted seed per node instance, so counting is cumulative rather than always relative to your base value. Randomize rolls a fresh seed every execution.external_mode/external_s33d- optional inputs that override the widgets when connected. This is the subgraph hook: a controller upstream can drive a controller downstream.allow_external_linking- lets the node broadcast/receive outside its island group.
Outputs are s33d (the processed INT, wire it to external_s33d ports) and mode (the mode as a string, handy for chaining or just confirming what ran).
Two implementation details worth knowing. It's marked OUTPUT_NODE, so it always executes even if nothing downstream changed. And its IS_CHANGED returns a fresh random value for the randomize/increment/decrement modes, which forces ComfyUI to actually re-run it each queue - the always-rerun trick from the plumbing layer, applied correctly.
Installing it
This node ships inside KDB-USJP/shima_wf (the "Shima" pack), so you install the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/KDB-USJP/shima_wf
Then restart ComfyUI. ComfyUI Manager can do it too - search for "Shima" in the install-custom-nodes list. One caveat from the field: the pack's author has shipped nodes in the past that Manager's scanner didn't pick up, so if the search comes up empty, just clone the repo directly - it's two commands and always works. On first launch the pack's install.py auto-clones ComfyUI-Impact-Pack and cg-use-everywhere if they're missing, because the islands assume both. The clone needs nothing extra from HuggingFace for this node.
Where people get burned
The increment/decrement memory is per-node and session-scoped - restart the server and it forgets, so a "run 12 from seed X" batch doesn't survive a reboot. Also, mode comes back as a string output, not a number, which surprises people who wire it into something expecting INT. And if you're only using one sampler, this node is arguably more machinery than you need - the whole point is multi-sampler and subgraph workflows, so don't add it just to control one KSampler.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| s33d | INT | 00–18446744073709550000 | Base seed value. Why 's33d'? Using this name prevents ComfyUI from auto-adding a non-connectable dropdown, allowing our own connectable version. |
| mode | COMBO | fixed | How to handle the seed: fixed (use as-is), increment (+1 each run), decrement (-1 each run), randomize (new random each run) |
| step | INT | 11–1000 | Step size for increment/decrement modes |
| external_modeopt | COMBO | Optional external mode - overrides widget when connected | |
| external_s33dopt | INT | Optional external seed - overrides widget when connected | |
| allow_external_linkingopt | BOOLEAN | false | If ON, this node broadcasts/receives OUTSIDE the Island (ignores group regex) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| s33d | INT | The processed seed value (connect to external_s33d on other nodes) |
| mode | STRING | The mode used (for chaining or debugging) |