π€ Text
The boring node that stops you typing the same prompt five times
- Output
Every workflow grows to the point where one string needs to be in five places - the positive prompt on two encoders, a filename, a console print, a note node - and every one of those is a separate widget you have to update by hand. Text is the smallest possible fix: a multiline box that outputs its contents as a STRING, so the value has one home and the wires fan out from it.
How it works
execute returns the string. That's genuinely the entire node - there's no parsing, no templating, no wildcard substitution, no variable interpolation. One input, one output, identical bytes.
What makes it more than a curiosity is ComfyUI's caching model and the "value node" pattern it belongs to. A widget baked into a node is only that node's value. A socket is shared, and the engine only re-runs what it has to: change the string once and everything downstream of it invalidates, which is the behaviour you want when you're iterating on a prompt with a fixed seed.
It's also the pack's required upstream for several of its own nodes. Text Match, Text Replace, Text Case Switch and both preview nodes declare their text input as a forced input - you can't type into them, you have to connect something. Text is the something. In a pack where the string-handling nodes take their input from a wire, this is the source you drop at the top.
The inputs and outputs that matter
Text - a multiline STRING, default empty, and - small detail with a real effect - the widget's display name is blank. It's an unlabelled box, which is why the node looks slightly naked until you realise the whole node is the label.
Output - the same string, as a STRING socket. Wire it into a CLIP Text Encode (convert the encoder's text widget to an input first), into Text Concatenate as one channel of many, into Save Image's filename after a Text Replace, into Print to Console, or into any of the pack's matchers.
Two patterns this unlocks:
One prompt, many consumers. Text β CLIP Text Encode (positive) and Text β Text Preview, so you can see the exact string the encoder got. That second wire sounds redundant until the day a prompt behaves strangely and you find out the encoder was looking at something else entirely.
The editable prompt file. A Text node holding your prompt is easy to swap wholesale between runs - keep three of them stacked, each labelled by position, and mute the ones you don't want. It's cruder than a proper wildcard pack and it's also completely transparent, which for prompt work is often the point. Nothing is substituted behind your back.
Note what it doesn't do: no {a|b} alternatives, no __wildcard__ lookup, no seed-driven selection. If you want any of that, this is the wrong node and you want a dynamic-prompts pack. Text is for literal text.
How to install it
Part of Avaray/honda-nodes - ComfyUI Manager β Node Pack β search Honda Nodes β Install β restart. Manual:
cd ComfyUI/custom_nodes
git clone --depth 1 https://github.com/Avaray/honda-nodes.git
cd honda-nodes
python install.py
Nothing in the installer is needed for this node (pure stdlib), but it's what downloads the jq and ime binaries the rest of the pack uses. The pack requires ComfyUI 0.38.0 or newer - all its nodes are written against the V3 schema API, so on an older build nothing from honda-nodes appears at all. No pip packages, no models.
Common issues
The node has no visible label on its text box. Correct - the widget's display name is empty by design. If you have several of them, add a core Note node next to each rather than trying to rename the widget.
The string arrives with leading or trailing whitespace. Faithfully passed through - this node doesn't trim. Use Text Replace or Text Concatenate's trim option downstream, or just clean up the paste.
Editing it doesn't re-run the graph. ComfyUI cached the run because nothing upstream changed; the widget is the input, so a change here should invalidate. If it doesn't, check whether the branch you're looking at is actually downstream of the node you edited - with a fan-out, it's easy to have edited the copy feeding the branch that isn't running.
You wanted a variable. Not here. Text is literal. For "insert the seed into the prompt", you need Text Concatenate with the seed wired in, and a separate Text node for the static parts.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Enter any text here. The content will be passed to the Output socket. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Output | STRING | β |