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

ParameterTypeDefaultWhat it does
modeString"Template"String generation method. One of: Template, Counter, Random, Sequence, DateTime, CharMap.
inputAny—Value to inject as {input} in templates, or source string for CharMap mode
input_1Any—Value to inject as {input_1} in templates
templateString"${frame}"Template with ${...} expression islands. Variables: frame, time, index, count, normalized, input, input_1, random — e.g. ${pad(frame, 4)}, ${upper(input)}, ${frame * 2}. Legacy {frame:04} syntax is auto-migrated.
counter_startNumber1Starting number (offset by frame or index)
counter_stepNumber1Increment per frame (or per instance in Iterator)
number_formatString"Decimal"Number formatting style. One of: Decimal, Hex, Octal, Binary, Roman, Ordinal, Alpha.
min_digitsNumber1Minimum digits, zero-padded (e.g., 3 produces '007')
prefixString""String prepended before the number
suffixString""String appended after the number
charsetString"ABCDEFGHIJKLMNOPQRSTUVWXYZa..."Characters to draw from
random_lengthNumber8Number of characters to generate
seedNumber0Seed for reproducible randomness. Same seed + frame + index = same output.
random_varyString"Per Frame"Per Frame: new string each frame. Constant: same string always. Per Instance: unique per Iterator instance, stable across frames. One of: Per Frame, Constant, Per Instance.
sequence_itemsString"A,B,C,D"Comma-separated values to cycle through
sequence_delimiterString","Delimiter separating sequence items
sequence_index_sourceString"Frame"What drives the sequence index. One of: Frame, Input, Instance Index.
sequence_wrapString"Wrap"Behavior when index exceeds sequence length. One of: Wrap, Clamp, Ping-Pong.
datetime_formatString"SMPTE"Format: SMPTE for timecode, or %H:%M:%S.%f for custom. Tokens: %H=hour, %M=min, %S=sec, %f=ms
datetime_sourceString"Timeline"Wall Clock: real-time. Timeline: from frame/fps. Input Seconds: treat input as seconds. One of: Wall Clock, Timeline, Input Seconds.
fpsNumber30Frames per second for SMPTE timecode and timeline source
char_mapString""Character mapping table. Format: 'A=Alpha,B=Bravo'. Unmapped chars pass through.
map_delimiterString","Delimiter between mapping entries
map_separatorString"="Separator between key and value in each mapping entry

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