Flux Noise Injection (per-step)
Flux too clean? This node re-injects the noise ancestral samplers lost
- model
- MODEL
The reason your SD1.5 generations felt alive is partly a bug. Ancestral samplers like euler_ancestral or dpmpp_sde add a fresh splash of random noise at every step, so each step wanders a little and the image never fully settles. Flux's rectified-flow path is a clean, near-straight line to the picture - obedient, but a little sterile. FluxNoiseInjection re-adds the wandering, as a patch on the model itself, so you don't have to switch samplers to get the old chaos back.
This is the same "noise injection" trick the community has been pointing at since Flux shipped as the fix for its over-smooth plastic look - usually bundled into hand-tuned workflows. This node makes it a single knob.
How it works
It's a model patch, not a conditioning node: MODEL in, MODEL out. Behind the scenes it clones your model and registers a post_cfg_function on it, so after every sampling step it adds gaussian noise to the denoised latent. The kicker is the scaling: the noise is multiplied by the current sigma, so early steps get big doses of noise and, as the image resolves and sigma shrinks, the injection fades out on its own. It's self-limiting - it never keeps blasting the finished image.
Because the injection happens on the model rather than in the sampler, it works with any sampler. You don't need an ancestral one to get the wandering; you can run plain Euler and still get the per-step looseness. It also works with whatever guider you're using, and there's no conditioning involvement, so it can't fight your prompt encoders.
The inputs
Only two matter:
- amount (default 0.12): how much noise per step. The README's start point is 0.12; it's audible-but-subtle there. Push toward 0.3+ and images get grainier, looser, and eventually mushy.
- seed: makes the injected noise reproducible. Same seed, same chaos, run to run.
That's it. No sigma schedule to configure, no strength ramps.
Wiring it up
On the MODEL line, between your checkpoint/LoRA loading and the KSampler. Take the model output of whatever you're loading and run it through FluxNoiseInjection, then feed its MODEL output to the sampler's model input. It must be on the line that actually reaches the sampler - a patch on a model that goes nowhere does nothing.
Installing
It ships with FluxHallucinate and Flux Chaos Guidance in the same pack, so install once:
cd ComfyUI/custom_nodes
git clone https://github.com/isam2024/ComfyUI-FluxHallucinate
Restart ComfyUI (a node refresh won't register a brand-new package). No extra dependencies, no model downloads - pure torch, single file.
Common issues
- "Nothing changed" - at 0.12 on a clean workflow the effect is subtle by design; that's the point. A/B it against a higher amount like 0.3 to confirm the patch is live before dialing back.
- "Now it's all grain" - you overshot. amount is the only dial, and it's nonlinear; the difference between 0.2 and 0.5 is bigger than the numbers suggest.
- It fights ancestral samplers - not in a breaking way, but if you're also running euler_ancestral you're double-dosing noise. Pick one source of chaos: the sampler or this node.
- Seed surprises - the noise is seeded, so a "random" run that produces a different image is often just the seed drifting. Fix the seed if you want to isolate the effect.
Pair it with low guidance and a degraded prompt (the pack's FluxHallucinate does the latter) and you're basically reconstructing the SD1.5 experience - which is exactly the intent.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| amount | FLOAT | 0.120–2 | — |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |