Encode Any Properties (Dynamic)
Build a Whole Metadata Bundle at Once
- value_1
- value_2
- value_3
- value_4
- value_5
- value_6
- value_7
- value_8
- value_9
- value_10
- value_11
- value_12
- value_13
- value_14
- value_15
- value_16
- properties
If you've used Encode Any Property a few times in a row, you know the pain: one node per metadata field, then a Combine Properties node to stitch them together - the graph starts to look like a plumbing diagram. Encode Any Properties (Dynamic) collapses all of that into a single node that can hold up to 16 named name/value pairs and emit the whole bundle in one go. It's the "do it all at once" version, and if you're assembling metadata for a queue or save workflow, it's the one you'll actually reach for.
How it works
One control input plus up to 16 dynamic pairs:
num_properties- how many pairs to expose (1–16, default 3). Changing this adds or removesname_N/value_Ninput slots on the node.- For each
Nfrom 1 tonum_properties:name_N(the label, defaultproperty_N) andvalue_N(any type,*).
Output: properties, a single TINYPROPS bundle - a dictionary mapping each name to its encoded {"name", "type", "value"} object.
Each pair is encoded exactly like Encode Any Property with type UNKNOWN, so the same auto-detection applies: parseable strings become JSON, ints become INT, lists become LIST, and so on. Names are stripped of whitespace, and a pair with an empty name is silently skipped - so num_properties is a ceiling, not a contract.
The dynamic-input mechanism is the actual point. In ComfyUI a node can expose a variable number of inputs based on another input's value, and this node leans on that properly - set num_properties to 6 and six name/value slots appear. No orphaned inputs cluttering the node. The tradeoff is the usual one with dynamic nodes: the number of slots is decided at queue time, and the node re-runs whenever its inputs change.
Where you'd actually use it
- One-stop metadata assembly: seed, prompt, CFG, steps, model, sampler - all in one node, wired straight into Combine Properties or a save-with-metadata node.
- Queue bundles: this pack's Queue category runs on
TINYPROPS, and this is the fastest way to produce one. - Replacing a cluster: swap five Encode Any Property nodes plus a combiner for one dynamic node.
Installing it
Part of ComfyUI-TinyBee under 🐝TinyBee/Util:
- ComfyUI Manager → Install Custom Nodes → search "ComfyUI-TinyBee" → Install, then restart ComfyUI.
cd ComfyUI/custom_nodes
git clone https://github.com/TinyBeeman/ComfyUI-TinyBee
Restart. No models; pure JSON assembly from the standard library.
Gotchas
Empty-name pairs are dropped without warning - if you think you set a property and it's not in the bundle, check whether the name field has whitespace or was left blank. And because num_properties controls how many slots exist, editing it mid-workflow changes the node's shape; values in pairs above the new count aren't lost but they're not sent either. One more: the dynamic slots can't be ordered arbitrarily, so if you later want to override a subset of these properties elsewhere in the graph, Combine Properties (with override_existing off) is how you merge rather than clobber.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| num_properties | INT | 31–16 | — |
| name_1opt | STRING | property_1 | — |
| value_1opt | * | — | |
| name_2opt | STRING | property_2 | — |
| value_2opt | * | — | |
| name_3opt | STRING | property_3 | — |
| value_3opt | * | — | |
| name_4opt | STRING | property_4 | — |
| value_4opt | * | — | |
| name_5opt | STRING | property_5 | — |
| value_5opt | * | — | |
| name_6opt | STRING | property_6 | — |
| value_6opt | * | — | |
| name_7opt | STRING | property_7 | — |
| value_7opt | * | — | |
| name_8opt | STRING | property_8 | — |
| value_8opt | * | — | |
| name_9opt | STRING | property_9 | — |
| value_9opt | * | — | |
| name_10opt | STRING | property_10 | — |
| value_10opt | * | — | |
| name_11opt | STRING | property_11 | — |
| value_11opt | * | — | |
| name_12opt | STRING | property_12 | — |
| value_12opt | * | — | |
| name_13opt | STRING | property_13 | — |
| value_13opt | * | — | |
| name_14opt | STRING | property_14 | — |
| value_14opt | * | — | |
| name_15opt | STRING | property_15 | — |
| value_15opt | * | — | |
| name_16opt | STRING | property_16 | — |
| value_16opt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| properties | TINYPROPS | — |