Academia SD Advanced Seed Generator ๐ฒ
A seed box with memory โ undo, history, and roll in one node
- seed
Every regular ComfyUI user has had the moment: you find a great seed, keep generating, and then realize you've scrolled past it with no way back. The stock seed widget forgets everything. This node is a seed generator that doesn't - it keeps a history of your last 10 seeds, lets you undo, click a past seed to reload it, copy it, and roll fresh ones without ever leaving the node. It's the upgrade the basic seed control has always needed.
How it works
Mechanically it's two layers. The Python side is almost nothing: seed_val and mode come in, the seed comes out on the seed (INT) port. All the real behavior lives in the frontend JS, which hides the stock widgets and draws its own compact UI (about 230px wide) with the seed field, mode buttons, and history tray. When you queue, the JS serializes the current seed with the mode applied - fixed stays put, randomize rolls a new one, increment adds 1, decrement subtracts 1 - and the value is written back into the node, which is why history persists even after you save and reload the workflow. The history is stored in the workflow JSON itself, so your past seeds travel with the file.
The UI modes map to what you'd expect: ๐ Fix, ๐ฒ Rand, +/-, plus Roll (instant random, then locks to Fix), Undo (steps back through history), and Copy. Clicking a history row reloads that seed and locks the mode. That's the whole pitch: seed discipline without a spreadsheet.
The input that matters
- seed_val - the active seed (0 to 9007199254740991, i.e. the JS safe-integer max).
- mode - fixed / randomize / increment / decrement.
Output is seed (INT), wired straight into your KSampler's seed input.
Install
Pack install: ComfyUI Manager โ "AcademySD", or git clone https://github.com/AcademiaSD/comfyui_AcademiaSD, restart. No extra dependencies.
The honest caveats
It's a seed UI, not a sampler - it won't change your output quality, just your ability to find a seed again. The history lives in the node's workflow properties, so it's per-workflow, not global: open a fresh canvas and the tray is empty. And one quirk of the design: the Python node always returns whatever seed_val holds, while the mode logic runs during serialization - which is fine in practice but means the node's "increment" only advances when the workflow actually queues. For the classic "locked seed, change one thing, compare" workflow - the discipline that makes A/B testing honest - this is the friendlier way to keep that habit.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| seed_val | INT | 00โ9007199254740991 | โ |
| mode | COMBO | fixed | 4 options: fixed, randomize, increment, decrement |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| seed | INT | โ |