DDRK Omega Sampler
When to reach for DDRK Omega Sampler
- SAMPLER
DDRK Omega Sampler is the low-level member of the DDRK Omega pack. Where the Unified KSampler does the whole job - model, conditioning, latent in, image latent out - this node only hands you a SAMPLER object for the stock SamplerCustom node to consume. If you just want images, use the Unified node and move on. Reach for this one when you're building a custom sampling graph where you control the SIGMAS yourself, doing img2img with a hand-picked schedule, or experimenting with the HC2 integrator in isolation.
What it is under the hood
Same engine as its big sibling: the sampler auto-detects whether your model is flow matching or EDM by reading the sigma schedule, routes sampling through three phases, and can use the HC2 exponential integrator - second order at one model call per step, a multistep method in the DPM-Solver++/UniPC line. The node itself takes no model input at all; it's a pure sampler configuration. Your wiring job is to pair it with a scheduler node that produces SIGMAS (the pack's DDRK Omega Scheduler works, so does any stock one) and feed both into SamplerCustom.
The inputs you'll actually set
integrator-auto,hc2,rk4,heun,euler. This is the main event.hc2is the pack's second-order-at-one-call integrator;autopicks per phase and step.sde_strength- ancestral stochastic noise, FM only (silently ignored on EDM, which usess_churninstead). 0 = deterministic.sharpness- final-step perceptual sharpen, FM only by design. Set it on SDXL and nothing happens.saber_fusion- spatial stabilization weight; 0 disables the module entirely. If you're doing text or graphics, that's usually the number to zero out.dyn_thresh_percentile- a percentile latent limiter, 1.0 = off. Despite the name this is not Imagen-style dynamic thresholding; the README is upfront that the renormalization step is deliberately missing.latent_rescale- attenuates values beyond ~2 std from the per-image mean. The tooltip hammers this home: it is not classical CFG-rescale, because ComfyUI combines conditional and unconditional predictions before the sampler runs, so the two tensors that method needs aren't available here. It was renamed fromcfg_rescaleto stop implying otherwise.
Then the specialized clusters: limiter_kappa and hc2_max_order control HC2's slope limiter and order; hc2_corrector and sigma_adapt are marked experimental and default off (no measurable effect in the author's testing); s_churn/s_tmin/s_tmax/s_noise are Karras Alg 2 churn for EDM; sde_seed set to -1 derives the noise seed from the workflow seed so runs repeat from the seed widget.
Installing and wiring it
Same pack, same install, no extras - the README lists no dependencies beyond what ComfyUI already requires.
cd ComfyUI/custom_nodes/
git clone https://github.com/HVOSTOVSKY/DDRK-Omega-Sampler.git
Restart, then: DDRK Omega Scheduler → SIGMAS and this node → SAMPLER, both into SamplerCustom.
Gotchas
- At ≤6 steps the integrator is forced to
eulerunless you pickedhc2; the console prints the override. - Remember the model-call arithmetic: HC2 and Euler cost one call per step, Heun two, RK4 four. On EDM, HC2's advantage evaporates - the author's measurements put it at +1.2% dynamic range while using 10% more calls.
autoorheunis the EDM call. sde_strengthdoing nothing on EDM andsharpnessdoing nothing on EDM are features, not bugs - they're gated per family.- Something weird in your latent?
debug_modewrites a per-step JSON+CSV+summary to the ComfyUI output folder, which is honestly the fastest way to see which enhancers actually fired.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| integrator | COMBO | auto | 5 options: auto, hc2, rk4, heun, euler |
| sde_strength | FLOAT | 0.080–0.5 | Stochastic noise. 0 = deterministic. FM only. |
| sharpness | FLOAT | 0.300–1.5 | Final sharpening. Auto-reduced for few-step. |
| saber_fusion | FLOAT | 0.300–1 | Stabilization. Auto-capped to 0.15 for FM photo models. |
| saber_mode | COMBO | auto | Auto detects video by 5D latent with >1 frame. |
| use_ema_saber | BOOLEAN | true | — |
| ema_decay | FLOAT | 0.700–0.99 | — |
| dyn_thresh_percentile | FLOAT | 0.9950.9–1 | Dynamic thresholding percentile. 1.0 = disabled. Universal (FM + EDM). |
| latent_rescale | FLOAT | 0.000–1 | Attenuates latent values far from the per-image mean (beyond ~2 std). 0 = disabled. NOTE: this is NOT classical CFG-rescale (Lin et al.), which compares conditional vs unconditional predictions — those are already combined before this sampler is called, so that method cannot be implemented here. Renamed from 'cfg_rescale' to stop implying otherwise. |
| hc2_corrector | FLOAT | 0.000–1 | HC2 selective corrector. 0 = off. Otherwise, on any step where the high-order correction exceeds this fraction of the first-order step, HC2 spends a SECOND model call to re-evaluate the denoiser at the step's endpoint and redo the step with an interpolated slope instead of an extrapolated one. Costs one extra call per firing. Small values (0.01-0.05) fire almost every step; larger values fire only on difficult steps. EXPERIMENTAL: strong on synthetic tests, unvalidated on images. |
| sigma_adapt | FLOAT | 0.000–0.5 | HC2 adaptive step placement. 0 = off. Otherwise the sampler may move the intermediate sigma values by up to this fraction to equalise estimated error across steps. Step COUNT, start and terminal zero are unchanged, so timing and the progress bar are unaffected. EXPERIMENTAL and the most speculative option here: schedules are already heavily tuned per model family, and nudging them may fight that tuning. Try 0.10-0.20. |
| hc2_max_order | INT | 21–3 | HC2 maximum order. 2 = second order, one model call per step (default). 3 = allow third order: uses two past denoiser evaluations, spends ONE extra model call on the first step to bootstrap (a multistep method's first step is otherwise first-order and caps the whole run's accuracy), and falls back to second order on any step where the expansion stops converging. Ignored by every other integrator. |
| limiter_kappa | FLOAT | 1.000.1–3 | HC2 slope limiter. Caps the 2nd-order correction at this multiple of the 1st-order step, per element. 1.0 = the correction may at most double or cancel the step, never reverse it. Lower it (0.5-0.7) if high CFG still blows out highlights; raise it toward 2-3 to let HC2 run closer to unlimited 2nd order on smooth content. Ignored by every other integrator. |
| momentum_beta | FLOAT | 0.250–0.8 | Velocity EMA. Reduces oscillation. 0 = disabled. |
| sde_seed | INT | -1-1–18446744073709550000 | SDE noise seed. -1 = random (non-deterministic). |
| s_churn | FLOAT | 00–100 | EDM churn (Karras Alg 2). 0 = off. Try 5-15 for SDXL. EDM models only; silently ignored for Flow Matching. |
| s_tmin | FLOAT | 0.00–999999 | EDM churn lower sigma bound (Karras Alg 2). Churn only fires while s_tmin <= sigma <= s_tmax. 0.0 = no lower bound. |
| s_tmax | FLOAT | 9999990–999999 | EDM churn upper sigma bound. Default (max) means unbounded, matching Karras Alg 2's s_tmax=inf. Lower it to restrict churn to high-sigma steps only. |
| s_noise | FLOAT | 1.000–2 | EDM churn noise multiplier. 1.0 = standard. |
| content_aware | BOOLEAN | true | Content-aware SABER — edge-gated fusion. Disable for pixel-art/flat styles. |
| auto_optimize | BOOLEAN | true | Auto-disable SABER/SDE/momentum and force euler for FM few-step. Does NOT set steps/cfg. |
| debug_mode | BOOLEAN | false | Write a per-step diagnostics log (JSON+CSV+summary) to your ComfyUI output folder. Off by default; adds overhead only when on. |
| debug_tag | STRING | Optional label included in the debug log filename, e.g. 'test1'. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SAMPLER | SAMPLER | — |