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

ParameterTypeDefault
modeString"Template"
inputAny
input_1Any
templateString"${frame}"
counter_startNumber1
counter_stepNumber1
number_formatString"Decimal"
min_digitsNumber1
prefixString""
suffixString""
charsetString"ABCDEFGHIJKLMNOPQRSTUVWXYZa..."
random_lengthNumber8
seedNumber0
random_varyString"Per Frame"
sequence_itemsString"A,B,C,D"
sequence_delimiterString","
sequence_index_sourceString"Frame"
sequence_wrapString"Wrap"
datetime_formatString"SMPTE"
datetime_sourceString"Timeline"
fpsNumber30
char_mapString""
map_delimiterString","
map_separatorString"="

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

  1. Add a String Generator and leave it in Template mode.

  2. Set Template to Frame ${pad(frame, 4)} for a zero-padded frame label like Frame 0042.

  3. Wire a value into Input, then reference it as ${input} in the template to fold live graph data into the string.

  4. 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