EzFlex-ParamPresetOutput
The Half That Actually Hands Numbers to Your Sampler
- group
EzFlex-ParamPresetControl is the library. EzFlex-ParamPresetOutput is the part that does the work - it takes a parameter group off the wire and unpacks it into ordinary ComfyUI sockets: one port per active parameter, typed INT / FLOAT / BOOLEAN / STRING.
This is the node that makes parameter presets real. A group is an abstract object until something turns it back into numbers, and these numbers are what you wire into a KSampler's steps (after right-click → Convert widget to input, if you've never done that), a CFG, a LoRA weight, a filename builder.
Inputs
Two, and both are required:
- group - type
EZFLEX_PARAM_GROUP,forceInput, described in the tooltip as "A parameter-group output from EzFlex-ParamPresetControl." Wire it from the matching group port on the Control node. It's a custom type, so the canvas won't let you plug anything else in, and it won't let you plug this node's group port into a stock node either. - config - multiline STRING, default
"{}", holding the ids of parameters you disabled on this node's panel. Note the division of labour: the Control node's green/red buttons decide what appears in the dropdown and the output list; the Output node's own switches locally suppress individual parameters at emit time.
Outputs
The first port is unusual and worth understanding: "Data combo" - a passthrough of the entire group object. It exists so you can chain: one Control node, several Output nodes, each unpacking different parameters or the same group with different local masks.
After that comes one port per active parameter, named after the parameter card:
int→ INT,float→ FLOAT,bool→ BOOLEAN,string→ STRING- complex types - tuple, list, set, dictionary - come out as STRING containing JSON
If a parameter is disabled locally, it still gets a port, and it emits a neutral default rather than failing: 0, 0.0, false, or an empty string. That's a deliberate choice and it's the right one for workflow-building - a disabled CFG doesn't blow up your queue, it just sends 0.0 and you see the consequences in the image.
There's a type-hint behavior you'll meet eventually: the node checks the stored value against the declared type, and if they disagree - someone saved the text "7" into an int slot - it downgrades the port to STRING and highlights it red. Red means "this value isn't what the card claims it is", not "this node is broken".
How the ports stay in sync
Port count changes as you add parameters or toggle them, so the node rewrites its class-level RETURN_TYPES / RETURN_NAMES on every run and the panel POSTs to an output-sync route whenever the layout changes. The reason both sides have to do it is a ComfyUI engine detail: link validation reads the upstream class's return types, and a class's return types are one shared global tuple, not per-instance. Dynamic-port nodes live or die on that detail.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/blackbossokok/Comfyui-EzFlex-Presets
pip install -r requirements.txt # mutagen, the pack's only mandatory extra
Then restart and add it from the EzFlex category - or search EzFlex in ComfyUI Manager and let it do the clone. No model files, no keys, nothing to configure. The pack declares ComfyUI 0.3.13+ in its metadata, because the panels fetch the official i18n endpoint.
Common issues
"Cannot validate input" errors right after switching presets in the Control node. A real bug, fixed in v1.2.2 alongside the same fix in EzFlex-PreviewAny. The dynamic output layout lagged the preset switch. Update the pack before you spend an evening on it.
A port stopped existing. Parameter set to red on the Control node, or the group card got reordered. Both ends re-sync on the next run; if the canvas looks stale, hit a queue or refresh the tab.
Wrong number arrives downstream. Check the type hint color. A red card is emitting a string of JSON, and a sampler expecting a float will complain in its own confusing way.
Values look right but the sampler ignores them. Classic ComfyUI: the widget you want to control isn't converted to an input. Right-click the sampler's steps/cfg/seed and pick "Convert widget to input" so the socket exists at all.
Presets and layout live on your machine. Both nodes' presets are written into the pack's user_data/ folder inside custom_nodes, so they follow the install rather than the workflow file. Sharing a workflow does not share your parameter presets - worth saying out loud before someone posts one and asks why the dropdown is empty.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| group | EZFLEX_PARAM_GROUP | A parameter-group output from EzFlex-ParamPresetControl. | |
| config | STRING | {} | Config JSON generated by the Param Preset Output panel (ids of disabled parameters). |
Outputs (0)
No outputs