Nodes/ComfyUI-TinyBee/Encode Any Properties (Dynamic)
ComfyUI Node

Encode Any Properties (Dynamic)

Build a Whole Metadata Bundle at Once

By TinyBeeman·Created about a year ago·Updated 2 months ago· 1
Encode Any Properties (Dynamic)
  • 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
◄num_properties3►
◄name_1property_1►
◄name_2property_2►
◄name_3property_3►
◄name_4property_4►
◄name_5property_5►
◄name_6property_6►
◄name_7property_7►
◄name_8property_8►
◄name_9property_9►
◄name_10property_10►
◄name_11property_11►
◄name_12property_12►
◄name_13property_13►
◄name_14property_14►
◄name_15property_15►
◄name_16property_16►

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 removes name_N / value_N input slots on the node.
  • For each N from 1 to num_properties: name_N (the label, default property_N) and value_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:

  1. 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.

Category🐝TinyBee/Util

Inputs (33)

NameTypeDefaultDescription
num_propertiesINT31–16—
name_1optSTRINGproperty_1—
value_1opt*—
name_2optSTRINGproperty_2—
value_2opt*—
name_3optSTRINGproperty_3—
value_3opt*—
name_4optSTRINGproperty_4—
value_4opt*—
name_5optSTRINGproperty_5—
value_5opt*—
name_6optSTRINGproperty_6—
value_6opt*—
name_7optSTRINGproperty_7—
value_7opt*—
name_8optSTRINGproperty_8—
value_8opt*—
name_9optSTRINGproperty_9—
value_9opt*—
name_10optSTRINGproperty_10—
value_10opt*—
name_11optSTRINGproperty_11—
value_11opt*—
name_12optSTRINGproperty_12—
value_12opt*—
name_13optSTRINGproperty_13—
value_13opt*—
name_14optSTRINGproperty_14—
value_14opt*—
name_15optSTRINGproperty_15—
value_15opt*—
name_16optSTRINGproperty_16—
value_16opt*—

Outputs (1)

NameTypeDescription
propertiesTINYPROPS—