Text Input (FormInput)
The fill-in-the-blank box that turns your workflow into a form
- text
This node is one text box and one wire. You type, it passes the string through untouched. That's the whole thing - and for the workflow author who keeps handing graphs to people, that's exactly the point.
ComfyUI's big problem for newcomers is that a shared workflow looks like an explosion in a cable factory. There's no "fill in the blanks" layer; every value is buried in a widget somewhere on a node. Text Input (FormInput) is the pack's answer to that. It gives you a clearly labeled, always-visible text box sitting at the top of your graph that the person running it just types into. The pack README frames it exactly that way: "input elements to create forms or interact with your workflows." Build a form, share it, stop explaining where to click.
How it works. Under the hood it's a pass-through. The node declares one required input, text - a STRING with multiline set, which is why you get a resizable box that can hold a paragraph instead of a single line. The process_text function in nodes.py just does return (text,). No model, no API, no secret processing. The output is a STRING named text, and it's a single value (not a list), so it plugs into anything that wants one string.
Where the real utility is. You've got two honest options for a box like this in stock ComfyUI: the built-in Primitive node, which can hold a string or any other type, or this. If you're only building for yourself, the Primitive does 90% of this job and you may not need this node at all. But a fixed STRING type has one advantage: it always connects where strings connect, and it's one labeled node per purpose. In a workflow you intend to share, "Prompt - fill in" reads a lot better than a loose Primitive floating in the graph.
Wiring it in is where people trip once. You can't plug the STRING output straight into a CLIP Text Encode's prompt box - that's a widget, not a port. Right-click the CLIP Text Encode, choose "Convert widget to input," and suddenly the wire fits. Same trick works for any text widget, including things like filename_prefix on save nodes.
Install. Same as any custom node: search "FormInput" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/monkeyWie/ComfyUI-FormInput
Then restart ComfyUI and look under the "FormInput" category. There's no requirements.txt, no model downloads, no heavy dependency - this is one of the rare packs that cannot break your environment, because it doesn't import anything but ComfyUI's own types. The downside: it's a single-commit project from May 2025, so don't wait on rapid updates.
The traps. Expecting more than pass-through is the big one - nothing here transforms, sanitizes, or summarizes your text. And the box remembers what you typed: if you hardcode a value and save, it's baked into the workflow JSON you share. If you're shipping a blank-looking form, clear the field first, or your "empty" form shows up with your last prompt already in it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |