HT Seed Advanced
Seeds for batches, iterations, and text — HT Seed Advanced
- seed
- subseed
- iteration_seed
- seed_info
The community's most repeated piece of debugging advice is "change one variable at a time with a fixed seed." That requires a seed you can actually control and reason about - which is exactly where a plain KSampler seed widget falls short once you're running batches or iterations. HT Seed Advanced (from the HommageTools pack) is a seed generator with actual modes: it can walk a seed sequence, derive seeds from text, and hand you a matched subseed for variation work.
How it works
The core output is just an INT seed, but seed_mode decides how it's computed from your base seed and the optional iteration counter:
- standard - the base seed as-is (honors
random_seed/force_random_seed). - fixed - ignores iteration entirely; same seed every run, useful for a locked baseline.
- iter_add -
seed + iteration × iter_value. Steps through a sequence as you bump the iteration input, handy for batch sweeps. - iter_mult -
seed × (1 + iteration × iter_value / 1000). A slower, multiplying walk. - derived - hashes your
text_input(combined with the seed) into a seed, so the same text reliably produces the same seed. Type "portrait of a cat" once and every rerun with that string gives you the same starting point - a nice trick for reproducible prompt→seed pairings.
It also computes two bonus outputs. subseed is a second seed blended from the main one, with subseed_strength controlling how far it drifts (0 = same as seed, 1 = fully different). That's the A1111-style subseed concept for variation runs. iteration_seed and seed_info (a readable string describing what was computed) round out the outputs.
There's a small UI integration too - the node updates its own widget state as seeds change, so you can watch values shift without adding a text display node.
The inputs that matter
- seed and seed_mode - the pair that defines your strategy.
- iteration - the counter that drives iter_add/iter_mult. Feed it from a loop or counter node to sweep.
- text_input - only for
derivedmode. - random_seed / force_random_seed - flip on random for quick exploration;
force_random_seedmakes the node re-roll every execution (the difference: without it, cached results may mean the seed doesn't actually change on rerun).
Wire the seed output into your KSampler's seed input, and subseed into whatever node in your workflow consumes subseeds.
Installing it
Part of HommageTools:
cd ComfyUI/custom_nodes
git clone https://github.com/ArtHommage/HommageTools.git
cd HommageTools
pip install -r requirements.txt
Restart, or install via ComfyUI Manager → "HommageTools". No models needed.
Common issues
The iter_mult math is easy to misread - iter_value is treated as a thousandths modifier, so 100 means a 10% step per iteration, not a 100× jump. If your sequence jumps more than you expected, that's why. And remember the golden rule this node exists to serve: whatever mode you use, only change one variable at a time between runs, or you can't attribute the difference in your results to anything. Derived-mode seeds also depend on the exact text string - a trailing space or changed case gives you a different seed, which trips people up when they "reuse" a text input.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | — |
| random_seed | BOOLEAN | false | — |
| force_random_seed | BOOLEAN | false | — |
| seed_mode | COMBO | standard | 5 options: standard, fixed, iter_add, iter_mult, derived |
| iter_value | INT | 1-999999–999999 | — |
| subseed_strength | FLOAT | 0.100–1 | — |
| iterationopt | INT | 00–999999 | — |
| text_inputopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| seed | INT | — |
| subseed | INT | — |
| iteration_seed | INT | — |
| seed_info | STRING | — |