Combo Primitive
One sampler dropdown, five KSamplers
- combo
- text
The problem it solves
ComfyUI core has value primitives for numbers and strings: PrimitiveInt, PrimitiveString, the polymorphic Primitive that adopts whatever type you plug it into. What it does not have is a primitive for a dropdown. You can convert the sampler_name widget on your KSampler into an input socket, sure - but the socket you just made is a raw string input, and nothing in core will hand it the list euler, dpmpp_2m, res_multistep. So you either type the sampler name into a text box and hope, or you set the same dropdown on four different nodes by hand and forget one.
Combo Primitive is the missing piece. It copies the options of the dropdown its output is connected to, so one pick in one place drives several nodes. If you've built a graph with three samplers that all must run euler and karras, this is the node that makes that one decision instead of three.
How it works
The clever part is all frontend. When you connect combo to a converted dropdown input, the pack's JS (web/was_combo_primitive.js) reads the target node's widget, lifts its option list, and installs it as the option list on the Combo Primitive's own value dropdown. It re-reads whenever connections change, so swapping which node it feeds re-copies the list. The copied options are also stashed in a node property, which is why a saved workflow reopens showing dpmpp_2m rather than a blank.
The backend is almost comically small, and that's the point: it takes whatever string won the dropdown and returns it on two outputs. There's no lookup, no validation against a registry. The node trusts the list the frontend gave it and passes the choice along.
One rule worth knowing up front: connect it to more than one dropdown and the first one's options are the ones listed. Nothing stops you fanning out, but the list you're picking from comes from a single source.
Inputs and outputs
The only input is value, a combo whose default reads connect combo to a dropdown. Before you wire it up, that placeholder is literally the only option - pick it and the node refuses to run, with a message telling you to connect the output first. That's a nice bit of mercy; the alternative is a silent empty string flowing into your sampler.
Two outputs:
combo- the choice on a wildcard wire, so it will land onsampler_name,ckpt_name,scheduler, amodedropdown, whatever. Wire it into a socket you made by right-clicking the widget and choosing Convert widget to input.text- the same choice as a plain STRING. Handy when the value needs to end up somewhere that isn't a dropdown: a filename prefix, a note node, a Text Concatenate so your output files say which sampler made them.
Install
Standard for the pack - Manager, search WAS Node Suite v3, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Nothing gets pip-installed on you. The pack's requirements.txt is literally a comment saying there are no default requirements, and it needs ComfyUI 0.14.0+ and Python 3.10+. First start writes config.yaml, a state database and the wildcard/LUT folders under ComfyUI/user/was-node-suite/, then compiles the pack to bytecode - a couple of seconds, once, and again after each update.
Yes, you're installing a 536-node pack to get a dropdown. It's MIT, it's been in most people's custom_nodes since 2023, and if you're reading this page you probably already have it.
Where it goes wrong
The placeholder error. Combo Primitive has no choice yet. Connect combo to a node's dropdown, then pick from the list it copies. That means you never connected the output, or you connected it to something that isn't a dropdown. A converted INT or STRING input has no option list to copy, so the node has nothing to offer.
Stale options. The list is copied at connect time. Install a new checkpoint or LoRA, or move a folder, and the copied list can lag behind what the target now offers. Reconnect the wire - or refresh the browser - and it re-copies.
Sharing workflows. Because the chosen options ride along in the node's saved properties, a graph can look correct on someone else's machine before their target node has loaded. If the pick is invalid for their install, you get a failed run rather than a nice warning. Set the value fresh after opening a shared workflow.
If you want the opposite tool - a node that names the model file, sampler or scheduler itself and then feeds a dropdown - that's Combo Selector, in the same Logic category, doing the job from the other direction.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| value | COMBO | connect combo to a dropdown | The choice sent on, from the options of the dropdown combo is connected to, such as euler, karras or sd_xl_base_1.0.safetensors. With several connected, the first one's options are listed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| combo | * | The choice, on a wire any dropdown takes: connect it to sampler_name, ckpt_name or a node's mode. |
| text | STRING | The choice as text: euler, karras, sd_xl_base_1.0.safetensors. |