ComfyUI Node

HT Seed Advanced

Seeds for batches, iterations, and text — HT Seed Advanced

By ArtHommage·Created 2 years ago·Updated about a year ago· 4
HT Seed Advanced
    • seed
    • subseed
    • iteration_seed
    • seed_info
    seed0
    random_seedfalse
    force_random_seedfalse
    seed_modestandard
    iter_value1
    subseed_strength0.10
    iteration0
    text_input

    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 derived mode.
    • random_seed / force_random_seed - flip on random for quick exploration; force_random_seed makes 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.

    CategoryHommageTools

    Inputs (8)

    NameTypeDefaultDescription
    seedINT00–18446744073709550000
    random_seedBOOLEANfalse
    force_random_seedBOOLEANfalse
    seed_modeCOMBOstandard5 options: standard, fixed, iter_add, iter_mult, derived
    iter_valueINT1-999999–999999
    subseed_strengthFLOAT0.100–1
    iterationoptINT00–999999
    text_inputoptSTRING

    Outputs (4)

    NameTypeDescription
    seedINT
    subseedINT
    iteration_seedINT
    seed_infoSTRING