Sampler Name (obvpm)
Put the sampler dropdown on a wire
- sampler
- sampler_name
The sampler is one of the two settings that decide whether a generation works at all - the other is the scheduler, and the community treats the pair as one choice (that's why names like "DPM++ 2M Karras" fuse them). It's also stuck as a widget inside the sampler node, which means you can't route it, can't switch it, and can't share it between two samplers without typing it twice.
Sampler Name moves that choice onto a wire. It's a picker node: choose a sampler, output it.
What it does
The dropdown holds every sampler this ComfyUI knows about - Euler, the whole DPM++ family, the CFG++ variants, res_multistep, gradient_estimation, uni_pc, the lot. On a current install that's 44 entries, and it's the same live list a KSampler shows, so anything a pack registers globally turns up here too.
Two outputs, and the difference between them matters:
sampleris typed as the live sampler list. That typing is the trick - it's what lets the value plug straight into anysampler_namecombo input (KSampler, KSamplerSelect, and everything else that asks for a sampler).sampler_nameis the same choice as a plain string, for bundling into a preset, feeding a caption, or writing into an API-format prompt.
Nothing is loaded and nothing is sampled. The value is a name.
Why you'd wire it instead of setting it
The obvious case is two consumers that must agree: a base pass and a refiner, or two branches you're A/B-ing. One picker, two wires, and they cannot drift apart. Fan the value into a Bundle and it travels with your steps and CFG, which is what makes preset switching possible at all - the pack's Value Presets node borrows this exact dropdown with @SamplerName (obvpm).sampler_name, and a Lazy Case Switch can flip sampler and scheduler together between two branches.
The other case is honestly just deduplication. A sampler name is a value in more than one place, and the plumbing layer's own advice for that is one source fanned out rather than two copies drifting. This is the node that makes the sampler a value you can do that with.
To use it, right-click the sampler_name widget on your sampler node and convert it to an input, then connect. That's the standard widget-to-input mechanic, not something special the pack adds - but note the field keeps the name sampler_name on purpose. A converted widget re-binds by name when a workflow loads, so keeping the original name means swapping a picker into an existing graph is a node-type change and nothing else. (The pack credits ComfyUI-Image-Saver's Sampler Selector for the shape of the idea, which is where a lot of people will have seen it before.)
The output type, briefly
You'll see the sampler output described as a long list of names rather than as STRING, and that's not a display bug - the output type is the sampler list, which is how a wire gets accepted by a combo input whose options are built at refresh time. If you plug sampler_name (the string) somewhere text-shaped, that's fine; use the typed one for anything that wants a sampler.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm
Restart, or install via ComfyUI Manager by searching comfyui-obvpm. No Python dependencies beyond what ComfyUI already ships. The node's class id is SamplerName (obvpm) - every node in the pack carries that suffix, and searching the node menu for obvpm finds all of them at once.
The pack is days old as of this writing (0.2.0, 2026-09-13) and has no reddit footprint at all, so treat anything you read about it as new rather than battle-tested.
Common issues
The sampler you want isn't in the list. The list is whatever your install knows about at refresh time. If you're chasing something like res_2m or res_2s, that lives in RES4LYF, and it only appears once that pack is installed and ComfyUI restarted.
Nothing changed when you switched the picker. Check what's actually connected - if the consumer still has its own widget, or the wire goes to a node you bypassed, the picker isn't in the path. The picker never overrides anything; it only supplies a value.
A workflow you didn't build references a sampler you've never heard of. That's not this node failing; it's a missing pack. The 2026 shortcut is to install RES4LYF and re-check.
Old workflows with a bare SamplerName id. Before 0.2.0 the pack registered bare class ids, which clashed with another pack's nodes. Anything saved then is migrated automatically on open; if a node still looks wrong, delete it and re-add a fresh one from the menu.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler_name | COMBO | Any sampler this ComfyUI knows about. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| sampler | euler,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 | The choice, typed to match a sampler_name combo. |
| sampler_name | STRING | The same choice as a plain string. |