ZImage Timestep Noise
Z-Image looks identical on every seed? This is the fix
- model
- sigmas
- mask
- MODEL
If you've generated a few Z-Image Turbo images, you know the complaint: pick ten different seeds and you get ten near-identical pictures. Same pose, same lighting, same composition - the seed feels decorative. It was the defining Turbo criticism from launch week, and it's exactly the problem this node exists to solve. Instead of accepting the sameness, it jitters the sampling process itself so each seed actually follows a different path. The community calls this whole family of tricks "noise injection," and on Z-Image it's not a gimmick - it's the standard fix.
How it works
ZImageTimestepNoise patches your model so that, during denoising, the timestep the model perceives gets a small random nudge. The model believes it's slightly further along (or earlier) in the schedule than it really is, so it denoises differently. Two modes, picked by mode:
flow(default) - additive noise, built for Flow Matching models like Z-Image and Lumina2, where timesteps live in the 0–1 range. The node clamps the nudged value so it can't leave the valid range.sigma- multiplicative noise for traditional diffusion models, where timesteps are bigger numbers and a factor makes more sense.
The nudge is seeded, so a given seed reproduces the same perturbation. And because the node gets the actual sigmas from your scheduler, it can match the current step to a 0–1 progress value and only apply noise inside start_percent to end_percent.
The inputs that matter
You only really touch three of them:
noise_strength- the amplitude of the perturbation. Default 0.05. Start there; 0.05–0.1 is plenty. Above ~0.3 on flow mode, images start going mushy and incoherent.mode-flowfor Z-Image/Lumina2/AuraFlow,sigmafor SD/SDXL-lineage models.seed- changes which perturbation you get. Different seeds + noise = the variety Turbo is missing.
start_percent/end_percent (defaults 0 and 0.5) control when noise is applied. Early steps are where composition is set, so leaving the default window of the first half of sampling is sensible. There's also an optional mask - white areas get the noisy timestep, black areas run normally - for localizing the effect.
Inputs: model, sigmas, mode, noise_strength, seed, start_percent, end_percent, optional mask. Output: a single patched MODEL, which you wire into the sampler's model slot.
Wiring it up
The catch beginners hit immediately: it needs a SIGMAS input, and KSampler hides sigmas behind its step/cfg widgets. So you use the SamplerCustom route - exactly what the pack's own randomness_enhancer_zimage.json example does:
BasicScheduler (from your steps/denoise) → SigmasEditor → SamplerCustom
UNETLoader → ZImageTimestepNoise → SamplerCustom (model input)
If you want to verify it's doing anything, watch the console: the node logs [ZImageTimestepNoise] lines for the first few steps showing whether each step was APPLIED or SKIPPED and the timestep delta. That's a lifesaver when a setting isn't having an effect.
Installation
This is one of five nodes in the ComfyUI-LG_SamplingUtils pack, so install the pack and you get it (plus Model Sampling ZImage, Sigmas Editor, and the two Noise Injection nodes). ComfyUI Manager is easiest - search for ComfyUI-LG_SamplingUtils. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/LAOGOU-666/ComfyUI-LG_SamplingUtils.git
Restart ComfyUI. No Python dependencies, no model downloads - the node only needs your normal Z-Image files (z_image_turbo_bf16.safetensors in models/diffusion_models, the Qwen3 text encoder, a VAE). The pack is GPL-3.0, small, and authored by a Chinese ComfyUI tinkerer (LAOGOU-666); as of late 2025 it's a one-man project, so don't expect rapid updates.
Gotchas
- Strength too high is the #1 failure mode. Crank it to 1.0 and you get washed-out, structureless garbage. 0.05, then creep up.
sigmamode on a flow model (or vice versa) produces nonsense. Match the mode to the architecture.- This is the same idea as SeedVarianceEnhancer or ConditioningNoiseInjection, but those perturb the conditioning; this perturbs the timestep. They're not mutually exclusive, though the community wisdom is don't stack every diversity hack at once - you get chaos, not variety.
- If
end_percentis small, you only perturb the earliest, most composition-critical steps - which is usually where you want the variety anyway.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| sigmas | SIGMAS | — | |
| mode | COMBO | flow | sigma: 传统扩散模型(乘性噪声); flow: Flow Matching 模型(加性噪声) |
| noise_strength | FLOAT | 0.050–2 | 噪声强度 |
| seed | INT | 00–18446744073709550000 | 噪声种子 |
| start_percent | FLOAT | 0.000–1 | 开始应用噪声的采样进度 (0.0 = 开始) |
| end_percent | FLOAT | 0.500–1 | 停止应用噪声的采样进度 (1.0 = 结束) |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |