Nodes/Bjornulf_custom_nodes/♻ Loop (My combos Sampler⚔Scheduler)
ComfyUI Node

♻ Loop (My combos Sampler⚔Scheduler)

Sweep pairings in one run

By justUmen·Created 2 years ago·Updated about a year ago· 545
♻ Loop (My combos Sampler⚔Scheduler)
    • sampler_name
    • scheduler
    combination

    Picking a sampler and a scheduler is one of those things everyone does by vibes. You read "DPM++ 2M Karras is the safe default" somewhere, type it in, and never revisit it. This node is the antidote: it fires the same prompt and seed through a batch of sampler+scheduler pairs and lays the results side by side so you can actually see the difference instead of guessing.

    Why pairs, not just one of each

    A sampler is the algorithm that walks noise back into an image; a scheduler decides how much noise comes off at each step. They interact. Karras concentrates the denoising in the middle of the trajectory, which is a genuine improvement on the curved noise path of SD 1.5 and SDXL - but on a flow-matching model like Flux it's a distortion, and "euler, no Karras" is the going advice. The point is that the combination is what matters, and the right combination depends on your model. Testing sampler and scheduler independently misses the pairing effects entirely. This node bakes in curated combos so you compare the pairs that actually matter.

    Where it fits in the wider workflow: this is a testing tool, not a production one. You run the sweep once when you're characterizing a new checkpoint, note the two or three pairings that look best, then hard-wire the winner and delete the loop. Keeping it in a workflow you run every day just multiplies your GPU time for no reason.

    How it works

    The node has one input, combination, an enum with 27 options. Some are single explicit pairs like sgm_uniform/euler or normal/ddim. Others are batch presets - ALL 6 COMBINATIONS (sgm_uniform), ALL 7 COMBINATIONS (simple) - that fan out into every sampler the author paired with that scheduler. Pick a batch preset and the node loops, emitting one pairing per iteration; pick a single combo and it just hands you that one.

    The outputs are sampler_name (a list, since a batch preset produces several) and scheduler. You wire those straight into the matching inputs on a KSampler. In ComfyUI you convert the KSampler's sampler_name and scheduler widgets to inputs (right-click the node, "convert widget to input"), then connect this node to them. Run the graph and each loop iteration renders with the next pairing.

    What it doesn't do

    It doesn't touch steps, CFG, seed, or the model - those stay fixed, which is exactly what you want for a fair comparison. Change one variable at a time. If you also want to sweep steps or CFG, that's a different node (Loop Integer / Loop Float); don't try to do both at once or you won't be able to read the grid.

    The combos are the author's own opinionated shortlist - a subset of every possible pairing, chosen because they're the ones worth looking at. If you want the exhaustive "every sampler, one scheduler" sweep instead, the pack's Loop All Samplers node does that; this one is the curated version.

    Installing the pack

    One pack covers all ~170 Bjornulf nodes. ComfyUI Manager → Install Custom Nodes → search Bjornulf_custom_nodes → install → restart. Or manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/justUmen/Bjornulf_custom_nodes
    

    Restart and it's under the Bjornulf category. This node is pure logic - no models, no heavy dependencies - so it works the moment the pack loads.

    Common issues

    The main gotcha isn't the node, it's what you attach it to. If your KSampler's sampler_name and scheduler are still plain widgets, there's nothing to plug into - convert them to inputs first. And read your results against your model family: if you're on Flux or another flow-matching checkpoint and the Karras-scheduled rows all look mushy, that's not a bug, that's the well-documented "Karras doesn't work on flow-matching" behavior showing up exactly where the theory says it should. Use the sweep to confirm what suits your model, then lock it in and move on.

    CategoryBjornulf

    Inputs (1)

    NameTypeDefaultDescription
    combinationCOMBO27 options: ALL 6 COMBINATIONS (sgm_uniform), ALL 5 COMBINATIONS (normal), ALL 5 COMBINATIONS (ddim_uniform), ALL 7 COMBINATIONS (simple), sgm_uniform/euler, sgm_uniform/dpm_2, +21

    Outputs (2)

    NameTypeDescription
    sampler_nameeuler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2
    schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal