Any to String
When ComfyUI won't let you plug a combo into a text box
- value
- string
The name does a lot of work for a node with one input and one output. If you've ever watched a Primitive in combo mode refuse to connect to a STRING input - even though the value is obviously just text - this is the bridge you were looking for.
ComfyUI's type system is stricter than it feels. A COMBO output (a dropdown value, or a Primitive in combo mode) only connects to a COMBO input, never to a plain text socket, no matter how string-like the value is. Any to String sidesteps that by declaring its value input as the wildcard type *, which accepts anything the graph can produce. When the run happens it just returns str(value) - a real STRING you can route anywhere text is accepted.
That's the whole mechanism, and that's the point: no API call, no LLM, no models, no settings. The node is basically a tiny adapter that turns ComfyUI's typing opinion into str().
The input that matters:
value- any type, COMBO included. This is the one you wire.
The output:
string- a proper STRING. Feed it into Preview Text, a prompt builder,Unlim Text Concat, a filename node, whatever takes text.
Where you'll actually hit this: a Primitive in combo mode feeding a text node, or any custom node that exposes an enum as an output instead of a plain string. If you use the Kinburg pack's own combo-flavored nodes, you'll notice the pattern - this is the general fix, and Combo to String is the targeted one for the Primitive case specifically.
Install it the usual way: ComfyUI Manager → search "Kinburg-Nodes" → install, or
cd ComfyUI/custom_nodes
git clone https://github.com/Kinburg/Kinburg-Nodes
then restart. It's a one-author personal pack (Kinburg) that's unusually well documented for its size - 95 nodes, docs per package, a real test suite - and nothing in this node needs a model or a heavy dependency. The pack's install.py auto-installs llama-cpp-python for the Local LLM nodes, but you don't need any of that for Any to String to work.
One honest caveat: this node stringifies. If you feed it a dict or list you'll get the Python repr, not pretty output - for readable JSON use the pack's Show Text (Markdown) or JSON Extract instead. And there's a tiny guard so a list arriving as value takes its first element. That's about the whole troubleshooting story, because there isn't much to break.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | Any value — including a COMBO output (e.g. Primitive) that won't connect to STRING inputs directly. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| string | STRING | — |