DDRK Omega Unified KSampler
One KSampler for Flux, SDXL, and everything in between
- model
- positive
- negative
- latent_image
- LATENT
If you've been around ComfyUI long enough to have opinions, you know the sampler rules flipped on you. DPM++ 2M Karras was the safe default on SD 1.5/SDXL, and then flow-matching models arrived and Karras went from safe to actively wrong on them. Suddenly you're running one Euler workflow for Flux and another sampler entirely for SDXL, relearning parameters every time you swap a checkpoint. DDRK Omega Unified KSampler is this pack's answer to exactly that whiplash: a drop-in replacement for the stock KSampler that figures out which model family it's talking to and recalibrates itself.
What it actually does
The node looks at your model's sigma schedule - sigma_max above ~5 means EDM (SDXL, SD 1.5, SD 2), otherwise flow matching (Flux, SD3, Qwen, Krea, HiDream, Chroma, Lumina) - and routes sampling through three phases, each with its own integrator policy and post-processing. The headline feature is the HC2 integrator, an exponential multistep method in the DPM-Solver++/UniPC family: second-order accuracy at one model call per step, which is roughly Heun quality at half the compute on flow-matching models. There's also ancestral SDE noise (FM only), Karras-style churn (EDM only), SABER spatial stabilization, and a final-step perceptual sharpen. The author measured all of this and, refreshingly, published the negative results too: HC2 shows no advantage on EDM, where auto or heun stays the sensible pick.
The inputs that matter
Beyond the usual model, positive, negative, latent_image, seed, steps and cfg, you mostly touch three things:
integrator-auto,hc2,rk4,heun,euler. Leave it onautounless you specifically want HC2.smart_defaults- auto-detects the family and sets scheduler, shift, integrator and enhancer levels. It never touches steps or CFG, which stay checkpoint-specific and are yours to set. It defaults to off; the README's quick start says turn it on.auto_optimize- caps or disables the enhancer stack by compute budget on FM few-step runs. On by default.
The EDM knobs (s_churn, s_tmin, s_tmax, s_noise) and the HC2 knobs (limiter_kappa, hc2_max_order, and the experimental hc2_corrector/sigma_adapt) live in the optional inputs and can stay at defaults until you know you need them. Output is a LATENT, wired straight into the VAE decode like any KSampler.
Installing it
No dependencies, no model downloads - the pyproject.toml ships with an empty dependency list. Either grab it from ComfyUI Manager (search "DDRK Omega Sampler") or:
cd ComfyUI/custom_nodes/
git clone https://github.com/HVOSTOVSKY/DDRK-Omega-Sampler.git
Restart ComfyUI and it's in the node menu.
Where people get burned
- At 6 steps or fewer, the node forces
eulerunless you've explicitly selectedhc2. The console reports the override, so check there if your low-step run suddenly isn't doing what you picked. - Compare at equal model calls, not equal steps. Heun costs 2 calls per step, RK4 costs 4, HC2 and Euler cost 1. An HC2 run at 20 steps is not "like" a Heun run at 20 steps; it's cheaper.
sharpnessdoes nothing on EDM. The parameter is shared across families; the feature isn't.denoisecan't go to 0.0 - it scales steps viasteps/denoise, so exactly zero is a division by zero. The minimum is 0.01, which is also just "do nothing."- If a run goes sideways, flip
debug_modeon and it writes per-step JSON/CSV/summary logs to your ComfyUI output folder. The README is honest that most of the 1.6.0 fixes were found reading those logs, not the code.
Fair warning up front: this is a young pack with essentially no community history yet, so you won't find a Reddit thread full of settings for it. What you get instead is an unusually well-documented project - read the README's "What is actually verified" section before you trust the numbers.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–1000 | — |
| cfg | FLOAT | 5.01–100 | — |
| denoise | FLOAT | 1.000.01–1 | Denoise strength, as in the stock KSampler. Minimum is 0.01, not 0.0: denoise scales the step count via steps/denoise, so exactly 0.0 is a division by zero, and 0.0 denoise means 'do nothing' anyway. |
| scheduler_type | COMBO | ddrk_auto | 9 options: ddrk_auto, ddrk_cosine, ddrk_beta, ddrk_flow_linear, ddrk_flow_cosmos, ddrk_fewstep, +3 |
| flow_shift | FLOAT | 3.01–10 | — |
| integrator | COMBO | auto | 5 options: auto, hc2, rk4, heun, euler |
| sde_strength | FLOAT | 0.080–0.5 | — |
| sharpness | FLOAT | 0.300–1.5 | — |
| saber_fusion | FLOAT | 0.300–1 | Stabilization blur. 0 = disabled. Disable for text/graphics. |
| warmup_steps | INT | 00–5 | — |
| beta_a | FLOAT | 2.00.1–10 | Shape parameter A, used only by ddrk_beta. Higher A front-loads larger steps at high sigma and leaves finer steps near sigma 0. Ignored by every other scheduler. |
| beta_b | FLOAT | 1.00.1–10 | Shape parameter B, used only by ddrk_beta. Raising B above ~2 shifts resolution toward high sigma and leaves a large final step, which is usually undesirable. A=2, B=1 gives Karras-like monotonically shrinking steps. |
| auto_optimize | BOOLEAN | true | Auto-disable SABER/SDE/momentum and force euler for FM few-step. Does NOT set steps/cfg. |
| smart_defaults | BOOLEAN | false | Auto-detect architecture and set scheduler/integrator/shift/saber/sharpness only. Steps/CFG are checkpoint-specific and must be tuned manually. |
| saber_modeopt | COMBO | auto | 3 options: auto, image, video |
| use_ema_saberopt | BOOLEAN | true | — |
| ema_decayopt | FLOAT | 0.700–0.99 | — |
| dyn_thresh_percentileopt | FLOAT | 0.9950.9–1 | — |
| latent_rescaleopt | FLOAT | 0.000–1 | Attenuates latent values beyond ~2 std from the per-image mean. 0 = disabled. Not classical CFG-rescale; renamed from 'cfg_rescale'. |
| hc2_correctoropt | 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_adaptopt | 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_orderopt | 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_kappaopt | 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_betaopt | FLOAT | 0.250–0.8 | — |
| sde_seedopt | INT | -1-1–18446744073709550000 | — |
| s_churnopt | FLOAT | 00–100 | EDM churn (Karras Alg 2). 0 = off. Try 5-15 for SDXL. EDM models only; silently ignored for Flow Matching. |
| s_tminopt | 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_tmaxopt | 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_noiseopt | FLOAT | 1.000–2 | EDM churn noise multiplier. 1.0 = standard. |
| content_awareopt | BOOLEAN | true | Content-aware SABER — edge-gated fusion. Disable for pixel-art/flat styles. |
| debug_modeopt | 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_tagopt | STRING | Optional label included in the debug log filename, e.g. 'test1'. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |