Nodes/ComfyUI Image Saver/Sampler Selector (Image Saver)
ComfyUI Node Runs on cloud

Sampler Selector (Image Saver)

Pick a sampler once, get both the value and its name

By alexopus·Created 3 years ago·Updated 23 days ago· 190
Sampler Selector (Image Saver)
    • sampler
    • sampler_name
    sampler_name

    Small node, specific job: you pick a sampler from the dropdown and it hands you two things - the sampler value your KSampler wants, and the sampler name as a plain string your Image Saver wants. That dual output is the whole trick. Stock ComfyUI keeps the sampler locked inside the KSampler widget, where the metadata nodes can't read it. Sampler Selector pulls it out so one choice drives both the actual sampling and the recorded metadata, and they can't drift apart.

    It's part of the pack's "define a value once, feed it to the sampler and the saver" pattern. Niche on its own, useful when you care about your metadata being honest.

    How it works

    You choose from the full list of 44 ComfyUI samplers - euler, euler_ancestral, dpmpp_2m, dpmpp_2m_sde, dpmpp_3m_sde, res_multistep, uni_pc, ddim, and the rest. The node emits that choice twice: once as the typed sampler value that plugs into a KSampler's sampler input, and once as sampler_name, a string, that plugs into an Image Saver / Image Saver Metadata sampler_name field. Same selection, two shapes, so the image records exactly the sampler that made it.

    Why two outputs instead of one? Because a KSampler and a metadata field speak different languages. The sampler input wants a real, validated sampler token that ComfyUI can actually run; the saver just wants the human-readable name to write into the A1111 string. Selecting in one place and emitting both forms is the only clean way to keep the run and its record in sync.

    The inputs and outputs that matter

    • sampler_name (the input widget) - the dropdown, all 44 samplers.

    Outputs:

    • sampler - the real sampler value → your KSampler.
    • sampler_name - the string → your saver's metadata.

    Installing it

    ComfyUI Manager: search ComfyUI Image Saver, install, restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/alexopus/ComfyUI-Image-Saver
    cd ComfyUI-Image-Saver
    pip install -r requirements.txt
    

    Restart and hard-refresh. No downloads.

    Where people get tripped up

    Honestly, most people don't need this as a separate node - if you're already using Input Parameters, the sampler is bundled in there and this is redundant. Sampler Selector earns its place when you want to route the sampler independently, or feed several samplers around a graph without dragging the other parameters along.

    One real point of confusion: the two outputs aren't interchangeable. The sampler output is a value ComfyUI understands as a sampler; the sampler_name output is just text. Wire the value to the KSampler and the string to the saver - swap them and you'll get a type-mismatch error or garbage metadata. And which sampler you should pick is model-dependent: dpmpp_2m with a Karras schedule is the classic SD 1.5 / SDXL default, but on flow-matching models (Flux, Z-Image) people lean on euler, euler_ancestral or dpmpp_sde instead. The selector doesn't judge - it just records faithfully whatever you chose.

    CategoryImageSaver/utils

    Inputs (1)

    NameTypeDefaultDescription
    sampler_nameCOMBOsampler (Comfy's standard)

    Outputs (2)

    NameTypeDescription
    samplereuler,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_bh2sampler (SAMPLERS)
    sampler_nameSTRINGsampler name (STRING)