2🐕Mutant seed sampler
Nudge a detail without moving the scene
- model
- positive
- negative
- latent_image
- LATENT
You've probably hit the variant problem: seed 12345 gives you a composition you like, but the face is off, so you bump the seed and get a different face - and a different everything else. Seed farming is a lottery for exactly this reason. EGBYZZCYQ, the "2🐕Mutant seed sampler," attacks that from the noise side. It's a KSampler clone that builds the initial noise from your base seed, then blends in noise from a second seed inside a centered window. Outside the window the noise is untouched, so the composition holds; inside it, detail gets re-rolled. It's a poor man's regional variation, no mask and no inpainting pass.
How it works
A diffusion sample starts from noise, and the seed is that noise. This node's prepare_noise() makes two noise tensors: base noise from seed, and variation noise from variation_seed. If variation_strength is 0, you get the base noise and the node behaves like a regular KSampler. Above 0, it blends the two inside a rectangle defined by variation_width × variation_height, centered on the latent:
combined = (1 - strength) * base + strength * variation # inside the window
combined = base # everywhere else
Then the standard comfy.sample.sample() pipeline runs on the blended noise. Because only a region of the starting noise changed, only that region tends to differ in the output - a face that isn't seed A's and isn't seed B's, while the rest of the frame barely notices. That's the same "mutate the latent, keep the pose" idea behind prompt-only seed tweaks, except here the mutation is a tunable blend instead of a dice roll.
The inputs that matter
- seed and variation_seed: the two noise sources. Bump the variation seed until the detail lands; leave the base seed alone and everything else stays put.
- variation_strength (0–1): how much of the window is re-rolled. 0 = plain KSampler; 0.2–0.5 is the sweet spot for "tweak the detail"; 1.0 inside the window is basically new content in that box.
- variation_width / variation_height: the window size. Trap here: these are latent pixels, so they're 8× smaller than image pixels - a 128×128 window is 1024×1024 on screen. They get clamped to the latent and rounded to multiples of 8, so you can't blow past the image edges.
- denoise (default 1.0): same semantics as any KSampler. If you're feeding an existing image latent (img2img) and want to stay close, drop it.
- device (CPU by default): where the noise is generated. The CPU torch RNG and the CUDA RNG don't produce the same sequence, so the same seed gives a different image on CPU vs GPU. Pick one and stay consistent, or your "same seed" experiments will lie to you.
- The usual suspects: model, positive/negative, steps, cfg, sampler_name, scheduler, latent_image.
Output and wiring
One output: LATENT. It's a drop-in KSampler replacement - feed it a latent (Empty Latent Image for txt2img, VAE Encode for img2img) plus conditioning, and decode the result with VAE Decode. There's no VAE or image input on the node itself; it only touches noise.
Installing it
Same pack as its sibling. ComfyUI Manager → search "Comfyui-ergouzi-samplers", or:
cd ComfyUI/custom_nodes
git clone https://github.com/11dogzi/Comfyui-ergouzi-samplers
Restart after. Dependencies are just torch/numpy/colorama/pillow, all already present, no models to download.
Where people get burned
- The CPU/GPU device gotcha above is the one that bites. Set device=GPU, get a nice image, then wonder why the "same" workflow gives different results on another machine. Noise RNG is device-specific.
- variation_strength at 1.0 with a big window stops being a "tweak" - it's a new image in that region. Start small.
- It's a niche node showing its 2024 age: batch handling is basically absent (all batch rows get the same noise), and the maintainer - the same Bilibili creator behind the Local sampler - hasn't touched it in a while. It works, but don't hold your breath for updates.
For "keep the composition, fix one thing," the Local sampler is usually the cleaner tool - a mask beats a noise window when you know what to change. This one is for when you don't know what to change and want to roll a handful of variants that all respect the scene. Different job, and it does it with two seeds and no inpainting pass.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 34 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +28 | |
| scheduler | COMBO | 9 options: normal, karras, exponential, sgm_uniform, simple, ddim_uniform, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| denoise | FLOAT | 1.000–1 | — |
| variation_seed | INT | 00–18446744073709550000 | — |
| variation_strength | FLOAT | 0.000–1 | — |
| variation_width | INT | 00–512 | — |
| variation_height | INT | 00–512 | — |
| device | COMBO | CPU | 2 options: GPU, CPU |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |