String Generator
Generate formatted text strings from templates and expressions.
What it does
String Generator builds text strings procedurally rather than transforming existing ones. Template mode interpolates ${...} expressions (frame, time, index, count, and wired inputs) into a pattern. Counter mode formats a running number as decimal, hex, roman numerals, ordinals or letters. Random mode draws a seeded random string from a character set. Sequence mode cycles through a list of values. DateTime mode formats wall-clock time, timeline time, or an incoming number of seconds as a timecode. CharMap mode looks each character of a source string up in a table, for Morse code or NATO-alphabet spellouts.
Inside an Iterator the node becomes instance-aware: it outputs a list with one string per instance, using per-instance indices, counts and, optionally, per-instance random seeding.
When to use it
A frame counter or shot/version label burned into a title: Counter mode
A one-off ID, filename suffix or randomised label: Random mode
A caption, tag or name cycled through a fixed list per frame or per instance: Sequence mode
A timecode overlay, SMPTE or custom: DateTime mode
A string built from other node outputs: Template mode with
${...}expressionsA string translated character-by-character into another alphabet or code: CharMap mode
| Parameter | Type | Default |
|---|---|---|
mode | String | "Template" |
input | Any | — |
input_1 | Any | — |
template | String | "${frame}" |
counter_start | Number | 1 |
counter_step | Number | 1 |
number_format | String | "Decimal" |
min_digits | Number | 1 |
prefix | String | "" |
suffix | String | "" |
charset | String | "ABCDEFGHIJKLMNOPQRSTUVWXYZa..." |
random_length | Number | 8 |
seed | Number | 0 |
random_vary | String | "Per Frame" |
sequence_items | String | "A,B,C,D" |
sequence_delimiter | String | "," |
sequence_index_source | String | "Frame" |
sequence_wrap | String | "Wrap" |
datetime_format | String | "SMPTE" |
datetime_source | String | "Timeline" |
fps | Number | 30 |
char_map | String | "" |
map_delimiter | String | "," |
map_separator | String | "=" |
Gotchas
Random mode's Vary setting decides stability. Per Frame gives a new string every frame, Constant freezes it, and Per Instance keeps it stable across frames but unique per Iterator instance. Use Constant or Per Instance for a random-looking ID that does not flicker on playback.
In CharMap mode, any character not found in the mapping table passes through unchanged, so only the characters to be translated need listing.
Template mode understands ${...} expression islands (${pad(frame, 4)}, ${upper(input)}, ${frame * 2}) with variables frame, time, index, count, normalized, input, input_1 and random. Older-style {frame:04} patterns are auto-migrated; write new templates with ${...}.
Counter mode advances by frame outside an Iterator and by instance index inside one. There is no separate switch, so moving a Counter generator into or out of an Iterator changes what drives it.
Worked example
Add a String Generator and leave it in Template mode.
Set Template to
Frame ${pad(frame, 4)}for a zero-padded frame label likeFrame 0042.Wire a value into Input, then reference it as
${input}in the template to fold live graph data into the string.Switch Mode to Counter, set Number Format to Roman and Min Digits, and wire the result into a text layer for chapter numbering.
See also
String Manipulation · Random · Convert · Numbers, signals & audio