ImageTextMultilineOutlined
The subtitle generator with edges you can actually read
- IMAGE
If you're making subtitles or captions in ComfyUI, this is the node to grab out of Allor's text family. It's the multiline text renderer and it strokes the glyphs with a second color, which is precisely the difference between captions you can read over any frame and captions that drown in busy backgrounds. Multi-line input, per-block alignment, outline control - it's the full set, and the four text nodes in the pack all funnel through this one's implementation.
It's part of the Allor Plugin (Nourepide/ComfyUI-Allor), and like everything in the pack the output is a transparent RGBA layer you composite onto your image or frames. That makes it the standard pick for burned-in subtitles in frame-by-frame or video work: one node renders the whole caption block, outlined and aligned, ready to drop over the footage.
How it works
PIL drawing with the multiline path: it measures the entire text block with multiline_textbbox, sizes the transparent canvas to it (plus margins and outline padding), and draws with align (left/center/right) applied to each line. The text fill uses red/green/blue; the stroke uses outline_red/outline_green/outline_blue at outline_size pixels. The pack's other multiline node, ImageTextMultiline, is literally this node with outline_size forced to 0 - so there's no downside to using this one and dialing the outline to 0 when you don't need it.
Text is a real multiline field. Fonts come from the pack's fonts folder (default ComfyUI/comfy_extras/fonts, with optional system/user font folders enabled via config.json). No font in the folder means an empty dropdown, the usual first-run stumble.
Inputs and outputs
text(STRING, multiline).font- dropdown of fonts in the fonts folder.align-left/center/right.size(INT, default 28).red/green/blue(default 255) - fill color.outline_size(INT, default 1) - stroke width; 0 disables it.outline_red/outline_green/outline_blue(default 0) - stroke color, black by default.alpha(FLOAT, default 1.0) - whole-layer opacity.margin_x/margin_y(INT, default 0) - padding around the block.
Output: a single RGBA IMAGE sized to the text block. Composite it over your image - it is not image-sized by itself.
Installing it
Same pack, same routine: ComfyUI Manager → "Allor Plugin" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nourepide/ComfyUI-Allor
Add a font to ComfyUI/comfy_extras/fonts and reload to populate the dropdown.
Where people get burned
The outline-thickness trap is real: outline_size 1 looks thin over detailed backgrounds, so subtitle work usually wants 2–3, and the canvas grows to fit it - watch that your text isn't touching the block edge and getting its stroke clipped. Another classic: alignment is within the block only, so "center the caption on a 1920-wide frame" still means doing the centering in the composite step. And if you set alpha low for a watermark effect, remember it dims the outline too - that's often fine, but it catches people who wanted a full-opacity stroke on a translucent fill (not something this node can split).
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| font | COMBO | 0 options: | |
| align | COMBO | 3 options: left, center, right | |
| size | INT | 28 | — |
| red | INT | 255 | — |
| green | INT | 255 | — |
| blue | INT | 255 | — |
| outline_size | INT | 1 | — |
| outline_red | INT | 0 | — |
| outline_green | INT | 0 | — |
| outline_blue | INT | 0 | — |
| alpha | FLOAT | 1.00 | — |
| margin_x | INT | 0 | — |
| margin_y | INT | 0 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |