Nodes/CRT-Nodes/Latent Noise Injection Sampler (CRT)
ComfyUI Node

Latent Noise Injection Sampler (CRT)

A KSampler with a built-in detail fix

By PGCRT·Created 2 years ago·Updated 7 days ago· 129
Latent Noise Injection Sampler (CRT)
  • model
  • positive
  • negative
  • latent_image
  • image
  • vae
  • latent
  • image
sampler_nameeuler
schedulersimple
cfg1.0
steps10
denoise1.00
seed0
edit_model_flux2kleinfalse
stage1_sigma_factor1.005
stage2_sigma_factor0.995
stage1_sigma_start0.300
stage1_sigma_end0.500
stage2_sigma_start0.000
stage2_sigma_end0.700
details_amount_stage10.50
details_amount_stage20.15
enable_noise_injectionenable
injection_point0.50
injection_seed_offset1
injection_strength0.10
normalize_injected_noiseenable

Plastic skin. Over-smoothed detail. That flat, slightly airbrushed look you get out of Flux and a few other flow-matching models at default settings. There's a known community fix for it - re-inject a bit of fresh noise partway through sampling rather than letting the whole trajectory denoise cleanly - and this node is that fix, built into the sampler itself instead of something you bolt on separately.

How it works

Under the hood this is a full custom KSampler: model, positive/negative conditioning, sampler and scheduler choice, CFG, steps, denoise, seed - the standard set. On top of that it layers two systems. First, a two-stage sigma-shaping pass (stage1_sigma_factor/stage1_sigma_start/stage1_sigma_end and the matching stage2_* fields, plus details_amount_stage1/stage2), which reshapes how aggressively detail gets resolved across two separate noise ranges - conceptually similar to the "detail daemon" style sigma tricks the community has been hand-building with third-party sampler packs. Second, and the node's namesake: at a chosen point in the sampling trajectory (injection_point), it injects a controlled amount of extra noise (injection_strength) using its own seed offset (injection_seed_offset), optionally normalized (normalize_injected_noise), and continues denoising from there. This is exactly the "use noise injection in ComfyUI" fix that's floated around as a mitigation for Flux's homogenized-face problem - this node makes it a built-in toggle instead of a separate manual step.

There's also an edit_model_flux2klein flag that enables ReferenceLatent-style conditioning specifically for edit models like Flux 2 Klein, which has largely displaced Kontext as the community's preferred local editor.

The inputs that actually matter for a first run

This node has a lot of knobs, and most of them are not what you should touch first:

  • model, positive, and optional negative, latent_image - the usual sampler wiring.
  • sampler_name / scheduler / cfg / steps / denoise / seed - standard KSampler fields, same behavior as anywhere else.
  • enable_noise_injection (default "enable") and injection_strength (default 0.1) - the one dial worth adjusting if output looks too smooth: nudge injection_strength up a bit, or turn injection off entirely (disable) if you want a plain sampler with none of this behavior.
  • Everything under stage1_*/stage2_*/details_amount_* and the rest of the injection fields - leave these at default until you understand exactly what they're doing. They're genuinely advanced sigma-manipulation controls, not settings a first pass needs.

Optional image and vae let it run as an image-to-latent sampler too. Outputs are latent and image.

How to install it

Part of CRT-Nodes - via ComfyUI Manager, search CRT-Nodes and install; manually, git clone https://github.com/PGCRT/CRT-Nodes.git into custom_nodes, pip install -r requirements.txt, restart.

Common issues & troubleshooting

Output looks noisier or grittier than a plain KSampler, not more detailed. injection_strength is too high relative to your model and step count - back it off in small increments rather than large jumps; this parameter is sensitive.

No visible effect at all. Check enable_noise_injection is actually set to "enable" - it's an enum, not a boolean, and it's easy to assume it's on by default when toggling other fields.

Trying to use it as a plain edit-model sampler and getting odd conditioning behavior. edit_model_flux2klein changes how conditioning is applied specifically for reference-based editing - leave it off unless you're actually working with an edit model like Klein that expects that ReferenceLatent-style setup.

CategoryCRT/Sampling

Inputs (26)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
cfgFLOAT1.00–100
stepsINT101–10000
denoiseFLOAT1.000–1
seedINT00–18446744073709550000
edit_model_flux2kleinBOOLEANfalseEnable ReferenceLatent-style conditioning for edit models
stage1_sigma_factorFLOAT1.0050–100
stage2_sigma_factorFLOAT0.9950–100
stage1_sigma_startFLOAT0.3000–1
stage1_sigma_endFLOAT0.5000–1
stage2_sigma_startFLOAT0.0000–1
stage2_sigma_endFLOAT0.7000–1
details_amount_stage1FLOAT0.50-5–5
details_amount_stage2FLOAT0.15-5–5
enable_noise_injectionCOMBOenable2 options: disable, enable
injection_pointFLOAT0.500–1
injection_seed_offsetINT1-100–100
injection_strengthFLOAT0.10-20–20
normalize_injected_noiseCOMBOenable2 options: enable, disable
negativeoptCONDITIONING
latent_imageoptLATENT
imageoptIMAGE
vaeoptVAE

Outputs (2)

NameTypeDescription
latentLATENT
imageIMAGE