Token Reference
This page lists every token. To learn the system from examples, start with Naming with Tokens, which builds a file name step by step and ends with recipes for game engines, texture sets, captions, and data files.
A token is a name in braces, such as {name} or {this.label}, that a field replaces with a value when it is used. Your own variables are written the same way. The </> button at the end of every token field lists every token that works there, with its live value, so nothing on this page needs memorizing.
The picker, the field’s hover, and the Example column below say a value the same way: the value, from where it came, such as Hero, from Levels 2 (wired in).
Two names for every node
Section titled “Two names for every node”- Its custom label, the name you type in its title. It is empty until you give one.
- Its Node ID, such as
ExportImage2orLevels2: the node’s type and number, given when it is created. It never changes, and no two nodes in a document share one.
The node tokens pair a subject with one of those names. this is the node that owns the field; input is the node wired into its input, following the wire through any Reroutes (never the picture’s history). .label gives the custom label and .id the Node ID. A label never falls back on its own: write {this.label|or:this.id} for “the label, else the ID”. The guide shows both on a small graph.
The tokens, by place
Section titled “The tokens, by place”The sections below follow the picker’s groups, in the picker’s order.
This node
Section titled “This node”The node that owns the field: the Export Image whose path you are typing, the Text node whose text it is.
| Token | Gives | Example sentence |
|---|---|---|
{this.label|or:this.id} | This node’s custom label, else its Node ID. The picker’s first row, Label or ID | Hero export, from this node |
{this.label} | This node’s custom label; empty, with a note, when it has none | Hero export, from this node |
{this.id} | This node’s Node ID, such as ExportImage2. It never changes | ExportImage2, from this node |
{quality} | This node’s lossy quality setting; empty for lossless formats | 90, from this node's settings |
{compression} | This node’s codec, mode, or level, such as a PNG level, TGA RLE, WebP lossy or lossless, or a TIFF codec; empty when its format has none | 6, from this node's settings |
{node} | The same as {this.id}. Hidden from the picker; typed, it still works | ExportImage2, from this node |
Wired in
Section titled “Wired in”The node wired into this node’s input, through Reroutes.
| Token | Gives | Example sentence |
|---|---|---|
{input.label} | The custom label of the node wired into this one; empty, with a note, when it has none | Hero, from Levels 2 (wired in) |
{input.id} | The Node ID of the node wired into this one | Levels2, from Levels 2 (wired in) |
The group is grayed at its header when there is no single node to read: “nothing is wired into this node”, or on Export Data, “Export Data reads several inputs”, where {data:input} names each row’s instead.
The picture or frame arriving at this node.
| Token | Gives | Example sentence |
|---|---|---|
{name} | The image’s frame or variant name (on a frame of a Trim Sheet’s Trims, the trim’s name), else its source’s name, else frame_N. On Export Texture, the set’s name | red, from the image |
{width}, {height} | The size in pixels of the image this node receives | 1024, from the image |
{color} | The image’s variant color as a 6-digit lowercase hex code (Palette Remap variants and Trim Sheet trims); empty otherwise | a020f0, from the image |
{index} | The image’s position in the batch this node writes, from 1, padded to fit the batch. {index:3} pads to three digits | 07, from the image |
{count} | How many images the batch this node writes holds. It also sets {index}’s default padding | 12, from the image |
{channel} | The map being written, such as base_color or normal. Export Texture only | base_color, from the image |
{tag:key} | The value a Tag node upstream set on the image for that key, such as {tag:variant}. The picker lists one row for each key upstream | night, from the image's variant tag |
Source
Section titled “Source”The file the pixels came from, followed back through the graph, and the node that loads it. Behind a Composite or Merge, the source is the one that node declares (for Composite, its Background).
| Token | Gives | Example sentence |
|---|---|---|
{source} | The source’s name, such as hero for hero.png | hero, from hero.png (Image In 1) |
{label} | Source label, else name: the source node’s custom label, else {source} | hero, from hero.png (Image In 1) |
{source_filename} | The primary source file’s name with its extension | hero.png, from hero.png (Image In 1) |
{source_stem} | The primary source file’s name without its extension | hero |
{source_extension} | The primary source file’s extension, without the dot | png |
{source_path} | The full path of the primary source file, exactly as stored | D:/Projects/Dungeon/art/hero.png |
{source_relative_path} | The primary source file’s path inside the project folder | art/hero.png |
{source_directory} | The folder that holds the primary source file | D:/Projects/Dungeon/art |
{source_sha256} | The primary source file’s SHA-256 content hash, in hex | a1b2c3... (64 hex digits) |
{source_id} | The primary source’s durable lineage ID, in hex, stable across edits to the graph | 9f3c... |
{source_count} | How many sources contribute to the image this node receives | 1 |
The single-source tokens need one unambiguous source. Downstream of a Merge or Composite an image can have several origins; check {source_count} before relying on them, and the picker notes “this image mixes 2 sources”.
A source survives steps that reshape a picture rather than replace it: through Split, Collect, and channel or bit-depth conversions {source} keeps naming the original file, while {name} follows a rename. Nodes that paint on top of an input (Paint, Mask Paint, Text, Scatter) report the connected image as the source.
Document
Section titled “Document”The document and this computer.
| Token | Gives | Example sentence |
|---|---|---|
{graph} | The document’s file name without its extension; empty until it is saved | hero_scene, from the document |
{project_dir} | The folder the document is saved in; empty until it is saved. The portable anchor for paths | D:/Projects/Dungeon, from the document |
{date} | The date the file is written, YYYY-MM-DD | 2026-10-01, from this computer |
{time} | The local time the file is written, HH-MM-SS (24-hour) | 14-30-52, from this computer |
{user} | The user name signed in to this computer | ako, from this computer |
{app_version} | The ArcBrush version that writes the file | 1.7.0, from ArcBrush |
{date} and {time} are fixed when you click Export, so every file of one run shares them.
Variables
Section titled “Variables”Every variable you defined in Window > Variables, Project, External, or Global, written {NAME}. When two scopes define the same name, only the one in effect is listed. See Variables.
Export Data’s own places
Section titled “Export Data’s own places”Export Data reads one row per image, and its columns, Custom Text, and File Name add tokens that only it knows, in three more groups between Source and Document. Its Image group adds the row facts.
| Token | Gives |
|---|---|
{data:file} | The file an export node wrote for the row’s image, else its source file |
{data:position}, {data:position0} | The row image’s position in its input, from 1 and from 0 |
{data:input} | The node wired into the row’s input pin: its custom label, else its Node ID |
{data:row}, {data:row_count} | The row’s number in this file, and how many rows the file holds |
{data:kind} | What the row describes: image, set, map, region, or atlas |
{data:channel_count}, {data:bit_depth} | The row image’s channels, and bits per channel |
{data:color_r}, {data:color_g}, {data:color_b} | The row image’s swatch color, sRGB, 0 to 1; 1 when it has none (in Export Data, {color} writes ffffff then) |
{data:color_linear_r}, {data:color_linear_g}, {data:color_linear_b} | The same color, linear, 0 to 1, for tools that store linear color, such as Blender |
{data:atlas} | Atlas: the atlas the Arrange, Sprite Sheet, or Trim Sheet node upstream placed the row image on |
{data:x}, {data:y}, {data:w}, {data:h} | Where that node placed the row image on its atlas, and its placed size |
{data:grid_column}, {data:grid_row} | The row image’s grid cell on the atlas |
{data:offset_x}, {data:offset_y}, {data:trimmed} | How far trimming moved the row image, and whether it trimmed anything |
{data:sheet_width}, {data:sheet_height}, {data:sprite_count} | The whole atlas: its size and how many images share it |
{data:u0}, {data:v0}, {data:u1}, {data:v1} | The row image’s rectangle on its atlas, 0 to 1 from the top-left corner |
{data:v0_from_bottom}, {data:v1_from_bottom} | The rectangle’s top and bottom edges, 0 to 1, measured from the bottom edge, for tools whose v points up |
{data:uv_w}, {data:uv_h} | The rectangle’s width and height as fractions of its atlas, 0 to 1 |
{data:y_from_bottom} | The row image’s Y on its atlas, measured from the bottom |
{data:set} | Texture Set: the texture set the row’s map belongs to (with {channel} for the map) |
{data:export_filename}, {data:export_relative_path}, {data:export_path}, {data:export_directory} | Exported files: the file an export node wrote for the row’s image, its path in the project, its full path, and its folder |
{data:export_format}, {data:export_status} | The format that export wrote, and whether it is saved yet |
{data:export_node} | The export node that wrote the file: its custom label, else its Node ID |
{data:atlas_filename}, {data:atlas_relative_path} | The file an export node wrote for the row’s atlas, and its path in the project |
When several exports write one image, add the export node’s Node ID after an export token to pick one: {data:export_path:ExportImage2}. The picker lists each export with its label beside its Node ID and inserts the Node ID, which never changes. A custom label also works there when exactly one export carries it. Every parameter, status, and format is on the Export Data node page; the presets are in Exporting Data.
Where each token works
Section titled “Where each token works”| Field | Node tokens | Notes |
|---|---|---|
| Export Image Output Path | this and input | Batch tokens and {channel} are grayed with the reason |
| Export Batch Output Directory | this and input | Per-file tokens are grayed: “the folder is chosen before any file” |
| Export Batch Filename Template | this and input | Every image token, per frame |
| Export Batch Sheet Filename | this and input | {count} and the whole-export tokens; per-frame tokens do not apply |
| Export Texture Folder | this and input | {name} (the set’s name) gives each asset its own folder; {channel}, {label}, {width}, and {height} are empty |
| Export Texture Filename Template | this and input | {name} and {channel} name each file |
| Export Data File Name and Folder | this only | {name} names each file with a Split; Wired in is grayed |
| Export Data columns and Custom Text | this only | Plus every {data:...} token |
| Text | this and input | Export-only tokens are drawn as typed (see below) |
| Tag rule | none | The nine name tokens, Project variables, and the node’s own {tag:key} |
| Import paths (Image In, SVG Import, Image Folder, Texture Folder) | none | Your variables plus {project_dir}, {graph}, {user}, and {app_version} |
Export-only tokens. {date}, {time}, {index}, {count}, {channel}, and the exact source family ({source_path} and the rest) resolve when a file is written. A Text node draws them as typed: a live clock would change the picture every second, and a Text node sees one image at a time, with no view of its place in a batch. {source} and {label} do work in Text.
A Tag rule reads {name}, {source}, {label}, {index}, {count}, {width}, {height}, {color}, {graph}, Project variables, and its own tags. Its This node and Wired in groups are grayed with “node tokens do not work in a Tag rule: a tag travels with the image”: a tag goes wherever the image goes, far from the node that set it.
Transforms, fallbacks, and padding
Section titled “Transforms, fallbacks, and padding”Inside the braces, after the name, come optional parts, read left to right. They work in every token field: export file names and folders, Export Data, Text, Tag rules, import paths, and variable values.
Transforms reshape a value: add | and a name, and several run in order, as in {name|snake|upper}.
| Transform | Does | Hero Knight becomes |
|---|---|---|
upper | Capital letters | HERO KNIGHT |
lower | Small letters | hero knight |
snake | Words joined with _, small letters | hero_knight |
kebab | Words joined with -, small letters | hero-knight |
pascal | Each word capitalized, joined | HeroKnight |
camel | Like pascal, first word small | heroKnight |
identifier | Anything but English letters, digits, and _ becomes _; a leading digit gets a _ in front | Hero_Knight |
backslash | Every / becomes \. Export Data only | (paths) |
relative | A path made relative to the data file’s folder. Export Data only | (paths) |
Words split at anything that is not a letter or a digit, and where a small letter or a digit meets a capital (heroKnight is two words). Letters outside English keep their case.
Fallbacks name what to use when a value is empty: {this.label|or:this.id} writes the custom label, or the Node ID when there is none. Chain as many as you need, as in {tag:title|or:input.label|or:name}; the first with a value wins. A fallback that names nothing known is plain text, so {tag:kind|or:misc} writes misc. A transform before |or: belongs to the first choice: {this.label|snake|or:this.id}. The picker inserts the common fallbacks for you (the Label or ID row and the empty-label fix); for any other, type |or: and the { list offers the tokens.
Padding works on {index} and Export Data’s numbers: {index:3} writes 007, and a transform after it runs on the padded number. In the picker, Pad sets the width and Insert as adds a transform to the token you pick next.
A transformed or fallback value is cleaned up for a file name like the plain token, so it can never add a folder level or climb out of the export folder. In Export Data, values are data and are written as they are.
Notes under a field
Section titled “Notes under a field”A token field shows an amber note when part of the template will not do what it looks like. A note never stops an export.
| Note | What it means |
|---|---|
{nmae} is not a known value; it is written as typed. | A typo or an undefined variable. The braces and name are written as typed. A node token with an unknown member, such as {this.foo}, reads the same way |
{this.label} is empty: Export Image 2 has no custom label. | The token writes nothing. Use the Node ID when empty beside it rewrites the token to {this.label|or:this.id} (or {input.label|or:input.id}) |
Unknown transform |snek; it is ignored. | The value is written without the misspelled transform |
|relative works only in Export Data; it is ignored here. | relative and backslash make sense only for paths written inside a data file |
Pad works on {index} only; {width:4} writes 1920 unpadded. | A number after : pads {index} alone in a file name |
{date} stays as typed here: resolves only when a file is written. | In a Text node, a token only an export can fill is drawn as typed |
A node token inside a variable’s value is also written as typed, with a note, so a variable never hides which node it reads.
Grayed groups and tokens
Section titled “Grayed groups and tokens”A token or a whole group that cannot work in a field is grayed with its reason, never hidden. You can still insert it; it behaves as the reason says, and graying never changes what a file is called.
| Reason | Where you see it |
|---|---|
| nothing is wired into this node | Wired in, when the input is empty |
| Export Data reads several inputs | Wired in on Export Data; {data:input} names each row’s input instead |
| node tokens do not work in a Tag rule: a tag travels with the image | This node and Wired in, in a Tag rule |
| node tokens do not work in an import path | This node and Wired in, in an import path |
| resolves only when a file is written | {date}, {time}, {index}, {count}, and the exact source family, in a Text node |
| only Export Texture writes maps | {channel} on any other node |
| the folder is chosen before any file | A per-file token in a Folder or Output Directory field |
| save the document first | {graph} or {project_dir} in a document never saved |
Older versions
Section titled “Older versions”A template without a | inside its braces, and without a node token, writes exactly the file names it always did. The node tokens, transforms, and fallbacks need ArcBrush 1.7.0 or later. ArcBrush 1.6 opens the document, reads each such token as an unknown name, and writes it as text:
| Template | ArcBrush 1.6 writes |
|---|---|
{this.label} | {this.label}.png, with its unknown-token warning |
{name|snake} | {name_snake}.png, and a batch {name_snake}_01.png, _02, … |
{label|or:name} | {label_or_name}.png |
{index:3|upper} | nothing: the export fails with “Invalid filename template” |
| any of these in a Text node or an import path | the braces as typed, or a file that is not found |
Templates saved by 1.6 write the same names in 1.7, with one exception: {node} in a Text node now draws the Node ID, such as Text1, where 1.6 drew the word Text until the node was selected. Global variables live in your app settings, which every installed version shares, so a transform in a Global variable’s value reaches an older build too; see Variables.
Related
Section titled “Related”- Naming with Tokens: the same system, taught with examples and recipes.
- Variables: your own values, their scopes, and sharing a project.
- Exporting Data: Export Data’s presets and Custom Text.