Duck Text Multiline
A bigger text box for when your prompt outgrows the widget
- STRING
Duck Text Multiline is a plain multiline text field with a string output. No encoding, no parsing, no magic - you type (or paste) a prompt, and the exact text comes out the other end as a STRING you can wire anywhere. If that sounds too simple to be useful, you haven't yet hit the wall where the prompt you want to build doesn't fit inside a single-line widget, or where you want to edit one master prompt in one place instead of in six sampler widgets.
The underlying node is actually named StringLiteral in the pack's code, which tells you everything about the philosophy: a literal string that exists so other nodes can consume it. It's flagged for dynamic prompt handling too, so wildcard and {a|b|c} random-choice syntax in the box gets processed the way it does in a normal prompt widget - one more reason to make it your single source of truth for a prompt.
Input and output
- text - a multiline
STRINGwidget. Paste a long prompt, a structured block, a list of tags on separate lines. - Output STRING, exactly what you typed.
From there it wires into anything that takes a string: a Duck_Text_to_Conditioning (same pack) to encode it, a text-concat node to build it up, or a prompt-formatting node that needs the raw text.
Why a dedicated node instead of the built-in boxes
The built-in CLIP Text Encode has a multiline box, but that box lives on the encoding node and doesn't hand text out to other nodes. The moment you want to feed the same prompt text to a token counter, a save node, or a second encoder, you need the text as a wire - and that's what this is. It's also the natural hub when a whole team or a set of shared workflows should all read one canonical prompt: change it here, and every consumer sees the new text.
There's a small trap to know about: because this node outputs plain text, it is not itself a prompt. If you wire its output into a KSampler directly, nothing happens - you still need a text-to-conditioning step (CLIP Text Encode or its duckcomfy equivalent) between the string and the sampler.
Install
It's part of duckcomfy personal nodes. ComfyUI Manager → search "duckcomfy personal nodes" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/duckcomfy/duckcomfy_personal_nodes
Restart ComfyUI. The pack declares no extra pip dependencies and downloads no models; it's a personal grab-bag, much of it copied from established suites to trim dependency surface. That's why a string-literal node is in here at all - the author uses it daily and bundled it.
Gotchas
Beyond the "it's text, not conditioning" confusion, the main thing to remember is that newlines survive. If you paste a prompt with line breaks, those newlines go into the conditioning when you encode it, and CLIP will happily treat them as part of the text. Most people either keep prompts on one logical line or use line breaks deliberately as separators - just be aware they're not stripped for you.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |