Text Processor
Overview
The Text Processor (text) renders one or more lines of text onto an existing RGBA image. It supports:
- Google-Fonts or local
.ttf/.otf
- Pixel-based sizing (
size), including relative sizing as a fraction of image height
- Wrapping (
max_width) with pixel-accurate measurement
- Horizontal (
align) and vertical (valign) block alignment
- Per-line justification (
justify)
- Line spacing (
line_height), stroke outline (stroke_width + stroke_fill), padding (padding)
- Optional semi-opaque background box (
background)
- Input sanitization and clamping to prevent unreasonable values
Example Usage
- processor:
processor: "text"
inputs:
source: "mem/photo.png"
params:
text: |
Hello, World!
This is multi-line text.
font: "gf:Roboto:normal" # gf:<Family>:<light|normal|bold>
size: 0.03 # as fraction of image height (3%)
color: "#FFFFFF"
anchor: "rel(0.5,0.1)"
align: "center"
valign: "top"
justify: "center"
max_width: 600
min_height: 100
max_height: 300
line_height: 1.2
stroke_width: 2
stroke_fill: "rgba(0,0,0,0.7)"
padding: 8
background: "rgba(0,0,0,0.5)"
outputs:
target: "mem/photo_with_text.png"
assigns:
text_left: "txt_x"
text_top: "txt_y"
text_width: "txt_w"
text_height: "txt_h"
Inputs
| Key |
Required |
Description |
| source |
Yes |
Path to the RGBA PNG to draw text on. |
Params
| Key |
Type |
Required |
Default |
Description |
|
|
| text |
string |
Yes |
— |
UTF-8 text to render; may include \n for line breaks. |
|
|
| font |
string |
Yes |
— |
Local path or `gf:<Family>:<light |
normal |
bold>` Google-Font spec (sanitized). |
| size |
float |
Yes |
— |
Font height in pixels or fraction of image height (0.0–1.0). |
|
|
| color |
string |
No |
#000000 |
Text fill color (#RRGGBB, rgba(), or named). |
|
|
| anchor |
string |
No |
"rel(0.0,0.0)" |
(x,y) in pixels or rel(x,y) relative to canvas [0.0–1.0]. |
|
|
| align |
enum |
No |
left |
Horizontal block alignment: left, center, right. |
|
|
| valign |
enum |
No |
top |
Vertical block alignment: top, center, bottom. |
|
|
| justify |
enum |
No |
left |
Per-line text justification: left, center, right. |
|
|
| max_width |
int |
No |
(none) |
Wrap text to fit within this pixel width (clamped ≤ 2×image width). |
|
|
| min_height |
int |
No |
0 |
Ensure text box ≥ this tall (clamped ≤ 2×image height). |
|
|
| max_height |
int |
No |
(none) |
Clip any text beyond this height (no vertical overflow, clamped ≤ 2×image height). |
|
|
| line_height |
float |
No |
1.0 |
Multiplier of size for line-to-line spacing. |
|
|
| stroke_width |
int |
No |
0 |
Outline (stroke) width in pixels (0 = no outline). |
|
|
| stroke_fill |
string |
No |
#000000 |
Color for the text outline; supports RGBA transparency. |
|
|
| padding |
int |
No |
0 |
Pixels of padding inside the background box. |
|
|
| background |
string |
No |
(none) |
Box fill color (rgba() or hex); if omitted, no box is drawn. |
|
|
Outputs
| Key |
Required |
Description |
| target |
Yes |
Path where the output PNG is written. |
Assigns
| Variable |
Description |
text_left |
X-coordinate of the left edge of the text box. |
text_top |
Y-coordinate of the top edge of the text box. |
text_width |
Width of the rendered text box (including padding). |
text_height |
Height of the rendered text box (including padding). |