Nodes/DDRK Omega Sampler/DDRK Omega Unified KSampler
ComfyUI Node

DDRK Omega Unified KSampler

One KSampler for Flux, SDXL, and everything in between

By HVOSTOVSKY·Created about a month ago·Updated about a month ago· 0
DDRK Omega Unified KSampler
  • model
  • positive
  • negative
  • latent_image
  • LATENT
seed0
steps20
cfg5.0
denoise1.00
scheduler_typeddrk_auto
flow_shift3.0
integratorauto
sde_strength0.08
sharpness0.30
saber_fusion0.30
warmup_steps0
beta_a2.0
beta_b1.0
auto_optimizetrue
smart_defaultsfalse
saber_modeauto
use_ema_sabertrue
ema_decay0.70
dyn_thresh_percentile0.995
latent_rescale0.00
hc2_corrector0.00
sigma_adapt0.00
hc2_max_order2
limiter_kappa1.00
momentum_beta0.25
sde_seed-1
s_churn0
s_tmin0.0
s_tmax999999
s_noise1.00
content_awaretrue
debug_modefalse
debug_tag

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 on auto unless 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 euler unless you've explicitly selected hc2. 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.
  • sharpness does nothing on EDM. The parameter is shared across families; the feature isn't.
  • denoise can't go to 0.0 - it scales steps via steps/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_mode on 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.

Categorysampling/unified_samplers

Inputs (37)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
seedINT00–18446744073709550000
stepsINT201–1000
cfgFLOAT5.01–100
denoiseFLOAT1.000.01–1Denoise 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_typeCOMBOddrk_auto9 options: ddrk_auto, ddrk_cosine, ddrk_beta, ddrk_flow_linear, ddrk_flow_cosmos, ddrk_fewstep, +3
flow_shiftFLOAT3.01–10
integratorCOMBOauto5 options: auto, hc2, rk4, heun, euler
sde_strengthFLOAT0.080–0.5
sharpnessFLOAT0.300–1.5
saber_fusionFLOAT0.300–1Stabilization blur. 0 = disabled. Disable for text/graphics.
warmup_stepsINT00–5
beta_aFLOAT2.00.1–10Shape 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_bFLOAT1.00.1–10Shape 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_optimizeBOOLEANtrueAuto-disable SABER/SDE/momentum and force euler for FM few-step. Does NOT set steps/cfg.
smart_defaultsBOOLEANfalseAuto-detect architecture and set scheduler/integrator/shift/saber/sharpness only. Steps/CFG are checkpoint-specific and must be tuned manually.
saber_modeoptCOMBOauto3 options: auto, image, video
use_ema_saberoptBOOLEANtrue
ema_decayoptFLOAT0.700–0.99
dyn_thresh_percentileoptFLOAT0.9950.9–1
latent_rescaleoptFLOAT0.000–1Attenuates latent values beyond ~2 std from the per-image mean. 0 = disabled. Not classical CFG-rescale; renamed from 'cfg_rescale'.
hc2_correctoroptFLOAT0.000–1HC2 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_adaptoptFLOAT0.000–0.5HC2 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_orderoptINT21–3HC2 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_kappaoptFLOAT1.000.1–3HC2 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_betaoptFLOAT0.250–0.8
sde_seedoptINT-1-1–18446744073709550000
s_churnoptFLOAT00–100EDM churn (Karras Alg 2). 0 = off. Try 5-15 for SDXL. EDM models only; silently ignored for Flow Matching.
s_tminoptFLOAT0.00–999999EDM churn lower sigma bound (Karras Alg 2). Churn only fires while s_tmin <= sigma <= s_tmax. 0.0 = no lower bound.
s_tmaxoptFLOAT9999990–999999EDM 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_noiseoptFLOAT1.000–2EDM churn noise multiplier. 1.0 = standard.
content_awareoptBOOLEANtrueContent-aware SABER — edge-gated fusion. Disable for pixel-art/flat styles.
debug_modeoptBOOLEANfalseWrite a per-step diagnostics log (JSON+CSV+summary) to your ComfyUI output folder. Off by default; adds overhead only when on.
debug_tagoptSTRINGOptional label included in the debug log filename, e.g. 'test1'.

Outputs (1)

NameTypeDescription
LATENTLATENT