Parameter Unpacker
Your Workflow's Control Panel, Unpacked Into Real Sockets
- params_bundle
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
Every serious ComfyUI workflow eventually becomes a wall of widgets: prompts, steps, CFG, seeds, LoRA choices, resolutions - each one a loose field you hunt for when you want to change something. The lhyNodes answer is a two-node system: Dynamic Parameter Panel builds a tidy set of native controls from a JSON config, and Parameter Unpacker turns that bundled result back into real, wireable sockets. This article is the second half of that pair.
Parameter Unpacker (class ParameterUnpacker) takes one input - params_bundle, a DYNAMIC_PARAMS object - and unpacks it into up to 32 outputs, all typed *. The bundle comes from the pack's Dynamic Parameter Panel node, which lets you define controls as JSON (strings, ints, floats, booleans, even dropdowns populated from your model folders) and bundles the current values plus their config into a single object. The Unpacker sits on the far side, splitting that object back apart so each value lands on its own socket and can fan out to the nodes that need it.
The payoff is the same as the context/pipe pattern the plumbing docs describe, but for human-facing controls: you get one clean, labeled panel where you adjust the generation settings, and a bundle of wires that carry those settings into the graph - instead of fourteen widgets scattered across fourteen nodes. Change a value in the panel, every node wired to its unpacked socket follows.
How it works
Mechanically it's honest about being a dumb middleman: the bundle carries both the values and the config (which keys exist), and the Unpacker walks the config in order, emitting each key's value on successive sockets. If a key has no value, you get None on that socket - which, conveniently, is exactly the "not connected" state that fallback/switch nodes downstream know how to skip. Up to 32 keys, which covers essentially any panel you'd build.
The outputs are named * and typed *, so this is a node you'll wire by socket position rather than by name. It's not a mystery once you see it once: first socket = first key in your JSON config, second = second, and so on. Keep the config key order in mind when you wire the other side, and you'll never confuse them.
The inputs that matter
params_bundle- the singleDYNAMIC_PARAMSinput from Dynamic Parameter Panel. That's the whole input list; the node is all output.
For a beginner the honest framing is: don't start with this unless you already feel the pain of a crowded graph. It's a "my workflows got big enough that I need a control panel" node, not a first-week node. But when that day comes, the JSON config system is forgiving - booleans, ints, floats, and string combos all work, and the panel regenerates its widgets when you edit the JSON.
Installing it
Part of lhaoyun6/ComfyUI-lhyNodes. Install through ComfyUI Manager by searching for lhyNodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/lihaoyun6/ComfyUI-lhyNodes.git
python -m pip install -r ComfyUI-lhyNodes/requirements.txt
Restart ComfyUI after. Shared pack requirements are ultralytics, opencv-python, numpy, and yarl; this node itself is pure Python and downloads no models.
The combo takes a little setup - the JSON config is the learning curve - but for a workflow you run fifty times a week, having every knob in one place is worth the hour it costs you once. This is the "make a UI for your workflow" move, and it's a good one.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| params_bundle | DYNAMIC_PARAMS | — |
Outputs (32)
| Name | Type | Description |
|---|---|---|
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |
| * | * | — |