Nodes/Dazzle KSampler/Dazzle KSampler (DazzleNodes)
ComfyUI Node

Dazzle KSampler (DazzleNodes)

The sampler that lets you feed it noise instead of a seed — Dazzle KSampler explained

By DazzleNodes·Created 6 months ago·Updated 3 months ago· 3
Dazzle KSampler (DazzleNodes)
  • model
  • positive
  • negative
  • latent_image
  • sigmas
  • guides
  • options
  • output
  • denoised
  • options
eta0.50
sampler_nameres_2m
schedulerbeta57
steps30
steps_to_run-1
denoise1.00
cfg5.50
seed0
latent_roleauto
sampler_modestandard
bongmathtrue
noise_allgaussian
noise_type_initgaussian
noise_type_sdegaussian
noise_type_sde_substepgaussian

If you've copied a workflow and been told to set the sampler to res_2m and the scheduler to beta57, those names come from here. Dazzle KSampler is a drop-in replacement for the stock KSampler built on the RES4LYF sampling engine - the pack that quietly became where sampler tuning lives for flow-matching models - with one genuinely different trick bolted on: it can take your noise as an input instead of always inventing it from a seed.Stock ComfyUI samplers generate noise from a seed, period. Want to influence composition through the noise itself - fill patterns, image-shaped noise, spectrally blended textures from an upstream node? Tough luck; the seed-driven path overwrites it. DazzleKSampler closes that gap: when the incoming latent carries a shaped-noise payload, the sampler uses it verbatim. When it doesn't, it behaves exactly like a normal KSampler.

How it works

Two things make this node. First, the engine: 100+ RES4LYF RK methods and schedulers in one dropdown, defaulting to res_2m + beta57. If you're on any flow-matching model (Flux, Qwen-Image, Wan, Z-Image, Anima), that's the modern shortlist - Karras and exponential are known to fail on those architectures, and beta57 is the schedule people name when they post settings. If you're on SD 1.5/SDXL, the honest advice is that this pack buys you little; DPM++ 2M Karras is still your default.

Second, the latent_role widget, which controls how the input LATENT is interpreted. That's the DazzleNodes addition and the reason to reach for this node:

  • auto (default) - inspect the dict and dispatch. This is right for almost every workflow.
  • noise - use the upstream tensor as the initial noise at sigma_max; the init slot is zeroed.
  • latent_image - standard img2img: samples are the init, noise comes from the seed.
  • noise+latent_image - layered: noise from the upstream noise key, init from samples.
  • seed_driven - true txt2img: zero init, noise from seed. Ignores upstream flags.

The companion protocol is a four-shape contract for what an upstream node can stuff in the LATENT socket: pure init, pure noise (with use_as_noise: True), layered (init + separate noise key), or empty. SmartResCalc, the sibling DazzleNodes pack, produces the shaped-noise shapes; a stock EmptyLatentImage produces the empty shape, which falls through to seed-driven noise by design.

The inputs and outputs that matter

A beginner sets three things and leaves the rest alone:

  • latent_role - auto unless you have a specific reason to force a path.
  • eta - the per-step ancestral noise budget. This is the big one for determinism: set eta = 0 and, with latent_role = noise, the seed becomes a dead input and the output is fully determined by your upstream noise tensor. Verified bit-identical across seeds in the project's own tests.
  • noise_all - a master selector for the noise spectrum (gaussian by default; brown/pink are smoother and painterly, blue/violet are grainier). Set it to custom if you want to fiddle the three noise_type_* sub-widgets independently. Leave it at gaussian until you have a reason.

Wire model, positive, negative, and latent_image in exactly like a stock KSampler, and you get three outputs: output (LATENT, feed to a VAE Decode), denoised (the clean latent estimate before the last noise injection - handy for hi-res fix and img2img chains), and options (an OPTIONS object for RES4LYF-style parameter propagation downstream).

Installing it

ComfyUI Manager is the easy path - search "Dazzle KSampler" and install. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/DazzleNodes/ComfyUI-DazzleKSampler.git

Restart ComfyUI. Nodes appear under RES4LYF/samplers (not a DazzleNodes menu - there's an open issue to move them). No pip dependencies and no model files to download; the engine is pure Python over ComfyUI's torch. One optional extra: install dazzle-comfy-plasma-fast if you want the DazNoise structured-noise options in the dropdowns. License is AGPL-3.0, inherited from RES4LYF.

Where people get burned

The two failure modes I've seen come from misreading latent_role. First: you wire up shaped noise upstream, nothing changes, and the seed still visibly drives everything. That usually means you're on a Shape A or D dict - the upstream node wasn't set to produce a use_as_noise latent (stock EmptyLatentImage and fill_type = black both fall through), so you're quietly in seed-driven mode. Check the console; the node prints mismatch and dispatch warnings on every run. Second: you expected full upstream determinism and the seed still matters. That's expected - latent_role only controls the initial noise tensor; per-step SDE noise is always seed-driven. That's exactly what eta = 0 exists for.

One honest caveat before you go deep: this pack is essentially invisible in community discussion - it's a new, low-profile fork. Its reputation rides on RES4LYF, which is genuinely mainstream, and the DazzleNodes-specific bits (noise passthrough, the role system) are young alpha software. Treat the exotic features as experimental and use res_2m + beta57 + eta = 0 as your safe lane.

CategoryRES4LYF/samplers

Inputs (22)

NameTypeDefaultDescription
etaFLOAT0.50-100–100Calculated noise amount to be added, then removed, after each step.
sampler_nameCOMBOres_2m119 options: none, res_2m, res_3m, dpmpp_2m, dpmpp_3m, abnorsett_2m, +113
schedulerCOMBObeta5710 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4
stepsINT301–10000
steps_to_runINT-1-1–10000
denoiseFLOAT1.00-10000–10000
cfgFLOAT5.50-100–100
seedINT0-2–18446744073709550000
latent_roleCOMBOautoHow to interpret the input latent dict. 'auto' inspects dict shape (use_as_noise flag, presence of 'noise' key) and dispatches accordingly. 'noise' = use upstream's noise tensor (samples for Shape B, noise key for Shape C); init zeroed. 'latent_image' = use samples as init image, generate noise from seed. 'noise+latent_image' = use 'noise' key as noise + samples as init (Shape C only; falls back otherwise). 'seed_driven' = true txt2img: zero init AND generate noise from seed (distinct from latent_image, which preserves samples as img2img init). Mismatch warnings printed to console when explicit role does not match incoming dict shape. seed=-2 magic is deprecated under 'auto'. Note: latent_role controls only the initial noise tensor at sigma_max -- the seed still drives per-step ancestral/SDE noise injection regardless of role. Set eta=0 for output fully determined by upstream noise.
sampler_modeCOMBOstandard3 options: unsample, standard, resample
bongmathBOOLEANtrue
noise_allCOMBOgaussianMaster noise selector. When set to anything other than 'custom', overrides all three noise_type_* widgets below with this value (the sub-widgets are auto-hidden by the JS extension). Set to 'custom' to expose noise_type_init, noise_type_sde, and noise_type_sde_substep for independent configuration. DazNoise:* options appear when dazzle-comfy-plasma-fast is installed.
noise_type_initoptCOMBOgaussianAdvanced. Leave at gaussian for default behavior. Spectrum of the *initial* noise tensor at sigma_max (only consumed when latent_role generates noise from seed -- ignored when latent_role=noise/noise+latent_image because initial noise then comes from upstream). Brown/pink emphasize low frequencies (smoother/painterly), blue/violet emphasize high frequencies (grainier/sharper), plasma/pyramid produce fractal/structured patterns. DazNoise:* options (Plasma/Pink/Brown/Greyscale/Gaussian) appear when dazzle-comfy-plasma-fast is installed -- they shape the initial canvas the model imagines into; for clean composition use SmartResCalc upstream with spectral_blend instead, since these are raw structured noise.
noise_type_sdeoptCOMBOgaussianAdvanced. Leave at gaussian for default behavior. Spectrum of the *per-step* ancestral/SDE noise injected at every sampler step (scaled by eta). Active for ALL latent_role values -- this is the dominant compositional noise budget under latent_role=noise. Same spectral choices as noise_type_init. Caveat: highly structured noise types (raw plasma, brown, pyramid) produce visual artifacts (chromatic fringing, halftoning) when used as per-step injection because the diffusion model expects ~unit-variance Gaussian statistics; for shaped per-step noise without artifacts, use SmartResCalc upstream with spectral_blend and latent_role=noise. DazNoise:Gaussian is safe (true Gaussian).
noise_type_sde_substepoptCOMBOgaussianAdvanced. Leave at gaussian for default behavior. Spectrum of per-substep noise injection (only relevant for samplers that use multi-substep SDE, e.g. some RES4LYF RK variants). Same caveat as noise_type_sde for highly structured types.
modeloptMODEL
positiveoptCONDITIONING
negativeoptCONDITIONING
latent_imageoptLATENT
sigmasoptSIGMAS
guidesoptGUIDES
optionsoptOPTIONS

Outputs (3)

NameTypeDescription
outputLATENT
denoisedLATENT
optionsOPTIONS