h4 - Varianator
H4's variation batch generator
- model
- clip
- vae
- latent_in
- positive_in
- negative_in
- variations
- latent_batch
- summary
You've got a prompt, a model, and an image you like. Now you want six subtly different remixes to pick from, without running the sampler six times by hand. H4_Varianator is that: one node that takes your model, conditioning, and a latent, then samples a batch of variations in a single run - different seeds, different denoise "riffs" per variation - and hands you all the results as one batched image plus the latents.
The README calls it "The Remix Node," and that's exactly the use case. Pick a base generation you're happy with, feed it back in, and let the Varianator explore around it.
How it works
It's a KSampler wrapped in a loop. For each of the variation_count passes it:
- Picks a seed according to seed_mode (
fixed,increment,random). - Picks a per-variation denoise within the range for your chosen variation_profile (
minimal,moderate,major) - that range is the "riff" amount, so minimal keeps remixes subtle and major lets them drift a lot. - Calls the stock ComfyUI KSampler with your sampler, scheduler, steps, and CFG, then decodes the result through your VAE.
- Collects everything, concatenates the images into one batch, and concatenates the latents too.
You get a summary string listing each variation's seed and denoise, which is the part people actually like - it's the difference between "I made six images" and "I know exactly what changed to make each one."
The inputs that matter
- variation_count (int, default 4, max 16) - how many remixes.
- variation_profile (enum: minimal / moderate / major) - how different they should be.
- seed_mode (enum: fixed / increment / random) - seed strategy across the batch.
fixedwithincrementoff gives you one seed, which is mostly useful for testing. - base_seed (int) - the anchor seed for the
fixed/incrementmodes. - sampler_name, scheduler_name, steps (default 18), cfg (default 7) - the standard sampler settings, same choices as a KSampler.
- denoise (float, default 1.0) - img2img strength; 1.0 is a fresh image, 0.5 a 50% remix.
Optional: model, clip, vae, latent_in, positive_in, negative_in. Note it's strict - it requires model, vae, latent, and both conditionings and raises a clear error if any are missing.
Outputs: variations (IMAGE, batched), latent_batch (LATENT, batched), summary (STRING).
Installing h4_Live
Part of the h4_Live pack. ComfyUI Manager: search h4_Live, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/m3rr/h4_Live
Restart. No model files, no pip extras.
Common issues
- It's a KSampler, so it samples. If you set
variation_countto 16 on a big model at high steps, that's 16 full sampling runs in one queue. The node does exactly what you asked; be sensible about steps and count. - Clip is accepted but not required. The schema lists clip as optional, and the sampler only needs model + conditioning + latent + vae. Feed the conditionings in from a standard CLIPTextEncode like you normally would.
- No per-variation prompt changes. Every variation uses the same positive/negative conditioning - the differences come from seeds and denoise, not text. If you want prompt-variation, that's H4_Switcheroo's job.
- Watch the shared-state context. This is a generation node, not a logic node, so it doesn't touch the loop counter directly - but if it's wired into an h4 loop graph, the usual single-global-counter rules for the rest of the pack still apply.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| variation_count | INT | 41–16 | How many remix versions do you want? |
| variation_profile | COMBO | moderate | How different should they be? Minimal = subtle, Major = big changes. |
| seed_mode | COMBO | increment | Control the randomness of the remixes. |
| base_seed | INT | 1234567890–9223372036854776000 | The starting random seed. |
| sampler_name | COMBO | euler | The logic used to draw the variations. |
| scheduler_name | COMBO | simple | Controls the noise removal steps. |
| steps | INT | 181–150 | Number of quality passes. |
| cfg | FLOAT | 7.01–30 | Creativity strength. |
| denoise | FLOAT | 1.000–1 | Img2Img Strength. 1.0 = New Image, 0.5 = 50% remix. |
| modelopt | MODEL | — | |
| clipopt | CLIP | — | |
| vaeopt | VAE | — | |
| latent_inopt | LATENT | — | |
| positive_inopt | CONDITIONING | — | |
| negative_inopt | CONDITIONING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| variations | IMAGE | — |
| latent_batch | LATENT | — |
| summary | STRING | — |