Dazzle KSampler (DazzleNodes)
The sampler that lets you feed it noise instead of a seed — Dazzle KSampler explained
- model
- positive
- negative
- latent_image
- sigmas
- guides
- options
- output
- denoised
- options
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 upstreamnoisekey, init fromsamples.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-autounless you have a specific reason to force a path.eta- the per-step ancestral noise budget. This is the big one for determinism: seteta = 0and, withlatent_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 tocustomif you want to fiddle the threenoise_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.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| eta | FLOAT | 0.50-100–100 | Calculated noise amount to be added, then removed, after each step. |
| sampler_name | COMBO | res_2m | 119 options: none, res_2m, res_3m, dpmpp_2m, dpmpp_3m, abnorsett_2m, +113 |
| scheduler | COMBO | beta57 | 10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4 |
| steps | INT | 301–10000 | — |
| steps_to_run | INT | -1-1–10000 | — |
| denoise | FLOAT | 1.00-10000–10000 | — |
| cfg | FLOAT | 5.50-100–100 | — |
| seed | INT | 0-2–18446744073709550000 | — |
| latent_role | COMBO | auto | How 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_mode | COMBO | standard | 3 options: unsample, standard, resample |
| bongmath | BOOLEAN | true | — |
| noise_all | COMBO | gaussian | Master 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_initopt | COMBO | gaussian | Advanced. 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_sdeopt | COMBO | gaussian | Advanced. 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_substepopt | COMBO | gaussian | Advanced. 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. |
| modelopt | MODEL | — | |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — | |
| latent_imageopt | LATENT | — | |
| sigmasopt | SIGMAS | — | |
| guidesopt | GUIDES | — | |
| optionsopt | OPTIONS | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| output | LATENT | — |
| denoised | LATENT | — |
| options | OPTIONS | — |