Nodes/RES4LYF-tester-loop/RES4LYF Combo Loop (Sampler + Scheduler)
ComfyUI Node

RES4LYF Combo Loop (Sampler + Scheduler)

Sampler × scheduler × mode, all in one node

By KY-2000·Created about a year ago·Updated about a year ago· 9
RES4LYF Combo Loop (Sampler + Scheduler)
    • sampler_name
    • scheduler
    • sampler_mode
    • sampler_index
    • scheduler_index
    • sampler_mode_index
    • total_combinations
    • label
    sampler_loop_mode
    scheduler_loop_mode
    seed0
    resetfalse
    skip_samplers
    skip_schedulers
    loop_sampler_modefalse
    sampler_mode_method
    skip_sampler_modes

    This is the node the pack is named for. RES4LYFComboLoop is the tester-loop in its most complete form: one node that cycles your sampler, your scheduler, and RES4LYF's sampler mode at the same time, then tells you exactly what combination produced the image. If you're running a sampler sweep, this is the one you'd reach for - the separate Sampler and Scheduler loop nodes exist mainly for when you want to hold one axis fixed.

    The context you need: RES4LYF is ClownsharkBatwing's pack of high-order solvers and schedules that became the default place sampler tuning happens for flow-matching models. The catch has always been the sheer breadth of it - over a hundred solvers across categories like exponential, hybrid, fully implicit, and a handful of schedules, with almost no guidance on which pairs well with which. Manually A/B-ing that space is miserable. This node is KY-2000's answer: let each queue run advance the combo, so a batch of images is your experiment.

    How it works

    It keeps three independent counters - one for samplers, one for schedulers, one for sampler modes - each with its own mode of sequential / random / ping_pong. On each execution it selects one value from each list (all pulled live from your RES4LYF install) and reports all three plus their indices. total_combinations is the honest product of what you actually enabled: samplers × schedulers × modes, with skip_ lists and disabled mode-looping shrinking it accordingly. If RES4LYF isn't found, it falls back to the pack's built-in lists and logs a console warning.

    The inputs that matter

    • sampler_loop_mode and scheduler_loop_mode - set each axis's traversal: sequential, random, or ping_pong.
    • seed - reproduces random draws on both axes.
    • reset - restart the whole sweep from the first combination.
    • skip_samplers / skip_schedulers - comma/newline lists to prune (start with none for samplers).
    • loop_sampler_mode + sampler_mode_method + skip_sampler_modes - fold RES4LYF's unsample / standard / resample modes into the loop or leave it off.

    Outputs are the whole picture at once: sampler_name, scheduler, sampler_mode, the three _index integers, total_combinations, and a label like exponential/res_2s | beta57 | standard. Wire sampler_name, scheduler, and sampler_mode into RES4LYF's ClownsharKSampler_Beta node - that's exactly what the repo's sample workflow does, then it tags the image with the label via AddLabel so each output tells you its own settings.

    Install

    RES4LYF first, then the loop pack, both in ComfyUI/custom_nodes/:

    cd ComfyUI/custom_nodes/
    git clone https://github.com/ClownsharkBatwing/RES4LYF.git
    git clone https://github.com/KY-2000/RES4LYF-tester-loop.git
    

    Restart ComfyUI. No pip installs, no model downloads - pure Python stdlib. ComfyUI Manager finds both packs by title.

    Where people get burned

    Watch the math: 100+ samplers × 11 schedulers × 3 modes is a lot of runs. total_combinations exists so you can see it coming, and the skip lists are how you keep it sane. Since every instance of the class shares its counters, two Combo Loops in one workflow advance together - run one sweep at a time. And when you're reviewing output, remember the loop is deliberately generating dead combinations too: on flow-matching models, scheduler names like karras and exponential are known failures, and that's the sweep doing its job, not the sampler lying to you.

    CategoryRES4LYF/Loop

    Inputs (9)

    NameTypeDefaultDescription
    sampler_loop_modeCOMBO3 options: sequential, random, ping_pong
    scheduler_loop_modeCOMBO3 options: sequential, random, ping_pong
    seedINT00–18446744073709550000
    resetBOOLEANfalse
    skip_samplersoptSTRING
    skip_schedulersoptSTRING
    loop_sampler_modeoptBOOLEANfalse
    sampler_mode_methodoptCOMBO3 options: sequential, random, ping_pong
    skip_sampler_modesoptSTRING

    Outputs (8)

    NameTypeDescription
    sampler_namenone,multistep/res_2m,multistep/res_3m,multistep/dpmpp_2m,multistep/dpmpp_3m,multistep/abnorsett_2m,multistep/abnorsett_3m,multistep/abnorsett_4m,multistep/deis_2m,multistep/deis_3m,multistep/deis_4m,exponential/res_2s_rkmk2e,exponential/res_2s,exponential/res_2s_stable,exponential/res_3s,exponential/res_3s_non-monotonic,exponential/res_3s_alt,exponential/res_3s_cox_matthews,exponential/res_3s_lie,exponential/res_3s_sunstar,exponential/res_3s_strehmel_weiner,exponential/res_4s_krogstad,exponential/res_4s_krogstad_alt,exponential/res_4s_strehmel_weiner,exponential/res_4s_strehmel_weiner_alt,exponential/res_4s_cox_matthews,exponential/res_4s_cfree4,exponential/res_4s_friedli,exponential/res_4s_minchev,exponential/res_4s_munthe-kaas,exponential/res_5s,exponential/res_5s_hochbruck-ostermann,exponential/res_6s,exponential/res_8s,exponential/res_8s_alt,exponential/res_10s,exponential/res_15s,exponential/res_16s,exponential/etdrk2_2s,exponential/etdrk3_a_3s,exponential/etdrk3_b_3s,exponential/etdrk4_4s,exponential/etdrk4_4s_alt,exponential/dpmpp_2s,exponential/dpmpp_sde_2s,exponential/dpmpp_3s,exponential/lawson2a_2s,exponential/lawson2b_2s,exponential/lawson4_4s,exponential/lawson41-gen_4s,exponential/lawson41-gen-mod_4s,exponential/ddim,hybrid/pec423_2h2s,hybrid/pec433_2h3s,hybrid/abnorsett2_1h2s,hybrid/abnorsett3_2h2s,hybrid/abnorsett4_3h2s,hybrid/lawson42-gen-mod_1h4s,hybrid/lawson43-gen-mod_2h4s,hybrid/lawson44-gen-mod_3h4s,hybrid/lawson45-gen-mod_4h4s,linear/ralston_2s,linear/ralston_3s,linear/ralston_4s,linear/midpoint_2s,linear/heun_2s,linear/heun_3s,linear/houwen-wray_3s,linear/kutta_3s,linear/ssprk3_3s,linear/ssprk4_4s,linear/rk38_4s,linear/rk4_4s,linear/rk5_7s,linear/rk6_7s,linear/bogacki-shampine_4s,linear/bogacki-shampine_7s,linear/dormand-prince_6s,linear/dormand-prince_13s,linear/tsi_7s,linear/euler,diag_implicit/irk_exp_diag_2s,diag_implicit/kraaijevanger_spijker_2s,diag_implicit/qin_zhang_2s,diag_implicit/pareschi_russo_2s,diag_implicit/pareschi_russo_alt_2s,diag_implicit/crouzeix_2s,diag_implicit/crouzeix_3s,diag_implicit/crouzeix_3s_alt,fully_implicit/gauss-legendre_2s,fully_implicit/gauss-legendre_3s,fully_implicit/gauss-legendre_4s,fully_implicit/gauss-legendre_4s_alternating_a,fully_implicit/gauss-legendre_4s_ascending_a,fully_implicit/gauss-legendre_4s_alt,fully_implicit/gauss-legendre_5s,fully_implicit/gauss-legendre_5s_ascending,fully_implicit/radau_ia_2s,fully_implicit/radau_ia_3s,fully_implicit/radau_iia_2s,fully_implicit/radau_iia_3s,fully_implicit/radau_iia_3s_alt,fully_implicit/radau_iia_5s,fully_implicit/radau_iia_7s,fully_implicit/radau_iia_9s,fully_implicit/radau_iia_11s,fully_implicit/lobatto_iiia_2s,fully_implicit/lobatto_iiia_3s,fully_implicit/lobatto_iiia_4s,fully_implicit/lobatto_iiib_2s,fully_implicit/lobatto_iiib_3s,fully_implicit/lobatto_iiib_4s,fully_implicit/lobatto_iiic_2s,fully_implicit/lobatto_iiic_3s,fully_implicit/lobatto_iiic_4s,fully_implicit/lobatto_iiic_star_2s,fully_implicit/lobatto_iiic_star_3s,fully_implicit/lobatto_iiid_2s,fully_implicit/lobatto_iiid_3s
    schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal,bong_tangent,beta57
    sampler_modeunsample,standard,resample
    sampler_indexINT
    scheduler_indexINT
    sampler_mode_indexINT
    total_combinationsINT
    labelSTRING