JLC Seed Generator
The Seed Node That Stops Your Base Seed From Walking Away
- seed
- seed_int
Every ComfyUI user has hit this: you set control after generate to increment, queue four runs, and your visible seed marches off to 5 while you're trying to remember what seed you actually started from. JLC Seed Generator fixes the annoying half of that. It's a shared seed source that keeps your base seed visible and stable, while a display row tells you the last seed the sampler actually used.
The use case is a workflow where one seed has to feed several places: multiple samplers, or multi-stage inference where stage one makes a latent and stage two partially denoises it with the same seed. Wire seed_int into every KSampler seed input and they all march together per run. That's the whole point of the "shared" in shared seed source.
How it works
The backend does nothing clever: it uses ComfyUI's normal control after generate queue behavior, so the per-run seed values (increment, decrement, or randomize) go out in the prompt data exactly as ComfyUI would do it. The clever part is frontend. A companion script (jlc_seed_display.js) restores the visible widget to your original base seed after queueing and paints the last seed actually used into a display row.
That explains the second "input" in the schema, which trips everyone up: a spacer STRING field that looks like a text input but is really a reserved display row. Type all you want; the backend ignores it. If the frontend script is unavailable, it just sits there as an inert separator line and nothing breaks.
Outputs: seed is a small SEED-style dictionary (handy for consumers that expect one), and seed_int is the plain integer you'll actually reach for when wiring sampler sockets.
Why you'd want it over a stock seed widget
Parameter trials. The author's design goal is that you can queue several variations, abort, tweak parameters, and still see the original starting seed in the input without having to remember or restore it. In a multi-stage workflow it also keeps you honest: one seed source feeding both samplers means you're actually testing the change you made, not a seed change you didn't notice - which is the exact "lock the seed, change one variable" discipline that most parameter experiments quietly violate.
The one real limitation
randomize mode. With randomize, ComfyUI may generate a different sequence of random seeds per queued run, and while the display shows you the last seed actually used, the node doesn't yet replay an entire randomized sequence. The pack's own docs flag this as a planned feature, not a current one. So: use it confidently with fixed, increment, and decrement; treat randomize as "shows you what happened," not "lets you reproduce it."
Install
It's part of jlc-comfyui-nodes by Damkohler, on the ComfyUI Registry and in ComfyUI Manager:
# ComfyUI Manager: Install Custom Nodes → search "JLC ComfyUI Nodes"
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Damkohler/jlc-comfyui-nodes.git
Restart after installing. No extra Python dependencies, no model files. If the display row ever shows nothing, the node still works - it just means the frontend script didn't load, so refresh the page and check your browser console.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–9223372036854776000 | Stable base seed input. During queued runs, ComfyUI may use incremented, decremented, or randomized seeds, but this visible input is restored to the value you entered. The display row below shows the last seed actually used. |
| spacer | STRING | ──────── seed display ──────── | This row shows the last seed actually used; the seed input above remains the starting seed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| seed | SEED | — |
| seed_int | INT | — |