Enviral Krea2 Seed Variance Enhancer
Same prompt, same seed, same composition every time? This node fixes that
- conditioning
- conditioning
If you've run Krea 2 or Z-Image Turbo for more than an afternoon, you know the specific annoyance this node exists for: nudge the seed and the model keeps returning the same composition with slightly different paint. Distilled flow-matching models are fast, but they're also narrow - the sampler lands in the same layout over and over, and breaking out of it feels like wrestling the prompt.
The Enviral Krea2 Seed Variance Enhancer attacks that from a different angle than prompting. Instead of touching the prompt, it adds seeded random noise directly to the CLIP text conditioning embedding after CLIPTextEncode. That makes the sampler's starting text representation genuinely different each seed, which is exactly the nudge these models need to stop repeating themselves. It's aimed at Krea2, Z-Image Turbo, and similar workflows, but nothing stops you using it on any model that takes CONDITIONING.
How it works
It's an adapted fork of ChangeTheConstants' SeedVarianceEnhancer v2.2.0 (MIT-0 licensed), so the core idea is community-tested. Every run, the node picks a percentage of embedding values - randomize_percent - and scales them by strength worth of noise, generated deterministically from the seed you give it.
The Enviral version makes two meaningful changes under the hood. It uses a torch.Generator seeded manually instead of touching PyTorch's global RNG, so it doesn't scramble the state of every other node in your graph. And it guards conditioning entries that carry untagged metadata, which matters when you're chaining conditioning through a bigger graph. Both are the kind of fixes you only appreciate after a random node upstream starts misbehaving.
The inputs that matter
conditioning- the output of CLIPTextEncode. Wire this in, take the output to KSampler.randomize_percent- how much of the embedding gets noise. Default 50 is a fine starting point.strength- the noise scale. Default 20; the author suggests starting around the range printed bylog_to_console(roughly std/10 to std×10 of your embedding tensor). Fun quirk: add1,000,000,000to this value to switch to the upstream v2.1 seed behavior - it's a flag hiding inside a float, so don't be alarmed when the number looks absurd.noise_insert- which sampler steps use the noisy embedding: beginning, ending, all, or disabled. Pair withsteps_switchover_percentfor the split point.seed- the one to vary for batch diversity.mask_starts_at/mask_percent- protect a chunk of the prompt (say, the first 20% where the subject usually sits) from noise, so variance doesn't wreck your subject.
Output is a single conditioning, straight into KSampler. Nothing else to wire.
Install
This ships in the Enviral Design Node Pack. Easiest is ComfyUI Manager - search "Enviral Design Node Pack" and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/EnviralDesign/comfyUI-enviral-design-node-pack
Then restart ComfyUI. No model downloads, no extra Python deps - it runs on ComfyUI's existing PyTorch.
Where people get burned
Set noise_insert to "disabled" and the node becomes a pass-through - handy for A/B testing whether noise is actually helping. If your results get less consistent, that's expected at high strength; it's a variance tool, not a quality tool. Turn on log_to_console and watch the ComfyUI console for the suggested strength range - that's the author's own calibration aid, and it beats guessing. The classic mistake is cranking strength to "more variety, please" and getting chaos; 10–30 with randomize_percent around 50 is the sane band to explore.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| randomize_percent | FLOAT | 501–100 | Percentage of embedding values that receive random noise. |
| strength | FLOAT | 20.0000-4294967295–4294967295 | Scale of the random noise. Add 1 billion to use the v2.1 seed behavior. |
| noise_insert | COMBO | Which generation steps use the noisy text embedding. | |
| steps_switchover_percent | FLOAT | 201–99 | Percentage of sampler steps before switching between noisy and original embeddings. |
| seed | INT | 00–18446744073709550000 | Seed used for embedding-value selection and noise generation. |
| mask_starts_at | COMBO | Which end of the prompt is protected from noise first. | |
| mask_percent | FLOAT | 00–99 | Percentage of the prompt protected from noise. |
| log_to_console | BOOLEAN | false | Log tensor statistics and suggested strength values. Source version 2.2.0. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |