Seed Variation
A1111's 'variation seed' slider, as a Comfy node
- model
- model
If you came up in A1111, you remember the drill: lock a seed you like, then nudge the variation seed and variation strength sliders to explore around it without losing the composition. ComfyUI's native samplers never grew that. This node is the port - it hands you back a MODEL that makes any Comfy-native sampler mix its initial noise toward a second deterministic seed. You get related-but-different generations instead of "new seed, pray the pose survives."
How it works
Drop it between your checkpoint (or LoRA stack) and the sampler's model input. It doesn't touch the sampler settings or re-randomize anything global. Instead it wraps the model so that when the sampler generates its initial noise, that noise is spherically interpolated between the sampler seed's pattern and a pattern derived from variation_seed. The interpolation happens on the noise itself, not on a finished image, which is exactly why the results stay compositionally related - the two seeds share low-frequency structure by construction.
The inputs that matter
Only three, and this is one of the few nodes where you genuinely don't need anything else.
variation_strength- how far you drift.0leaves the sampler seed completely unchanged (the node is a pass-through),1uses pure variation-seed noise, and the range between is the sweet spot where you'll actually live, usually 0.3–0.7.variation_seed- the second seed that defines the direction of the drift. Change it to hop to a different "neighborhood" around the base seed. It hascontrol_after_generate, so you can walk variations automatically the same way you walk plain seeds.model- connect the checkpoint you're already using; the node returns the same model, patched.
The single output is the patched model, so it slots straight into the model input of any standard KSampler.
Two things people get burned on
First, with ancestral and SDE samplers (euler_a, dpmpp_2s, and friends), the sampler keeps using its own seed for the extra noise it injects after initialization. Variation applies to the initial noise only, so on heavily ancestral paths the effect is weaker than you'd expect - that's by design, not a bug.
Second, this is an initial-noise trick. If you're doing a low-denoise img2img pass, there's almost no initial noise left to mix, and you'll see almost no variation. Use it on the main txt2img-style pass, where the seed actually sets the composition.
Install
It ships in SimpleSyrup, so you install once and get all the pack's nodes. Easiest via ComfyUI Manager: search the node list for SimpleSyrup, install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Artificial-Sweetener/SimpleSyrup
cd SimpleSyrup
pip install -r requirements.txt # use the same Python as ComfyUI
One catch: SimpleSyrup is written against ComfyUI's newer V3 extension API, so it needs a reasonably current ComfyUI build - if the nodes don't appear after restart, update ComfyUI first. SimpleSyrup pulls a handful of extra packages (TorchLanc, Ultralytics, ONNX Runtime, Segment Anything) for its other features, but seed variation itself is lightweight and adds no model downloads.
It's a small utility, and that's fine - sometimes the thing you miss from an old UI is worth one clean node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Model whose sampler-provided initial noise will receive seed variation. | |
| variation_seed | INT | 00–18446744073709550000 | Seed for the second noise pattern. Change it to explore another variation direction from the sampler's seed. |
| variation_strength | FLOAT | 0.000–1 | Noise interpolation strength. 0 keeps the sampler seed unchanged; 1 uses the variation seed for initial noise. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Model that interpolates initial sampling noise toward the variation seed. |