Export Data
Export Data writes a data file about the pictures in your graph: a CSV, a JSON file, or text you shape yourself, such as XML, CSS, or code. Wire images, batches, texture sets, or atlases into it, pick a Preset or choose the Columns, and press Export.
Like Export Image, Export Batch, and Export Texture, it never writes while the graph cooks: a file appears only when you press Export, or run Export Selected or Export All.
This page is the reference. For recipes and a real output sample for every preset, read Exporting Data.
The Input pin is an array: wiring the last pin adds another, so several sources can go into one file, each adding rows in pin order.
- An image is one row.
- A batch is one row per frame, in batch order. A frame that failed to load, or whose name is blocked, is left out with a note, but it still counts toward
{data:position}and{index}, so the numbers keep matching the exported file names. - A texture set is one row per set or one row per map, chosen by Texture Sets (Each Set or Each Map). On Each Map rows
{channel}names the map (base_color,normal, …). - An atlas from Arrange, Sprite Sheet, or Trim Sheet (its Sheet output), wired straight in, is one row per sprite or one row for the whole sheet, chosen by Atlases (Each Sprite or Each Atlas). An Export Batch with Generate Sprite Sheet on is an atlas too: wire the batch it packs.
Atlases and Texture Sets appear only when the wired inputs give them meaning. They combine for an Arrange of texture sets: Each Map with Each Sprite gives one row per map of each placed set.
Rows decides what one row is: Each Image (the default), or Each Written File, one row per file an export writes. With Each Written File, an image that a PNG export and a WebP export both write gives two rows, and on each row {data:file} and the export tokens read that row’s own export; an image no export writes has no row, with a note.
Found exports
Section titled “Found exports”You never wire an export node into Export Data. Wire the same image or batch into both, and any Export Image, Export Batch, or Export Texture writing it is a found export, wherever it sits (a Tag, Reroute, or Collect in between is fine). While the node is selected, dashed lines run on the canvas from each found export to it.
{data:file} is the easy column for “the file this image became”: the exported file when an export writes the image, else the source file it was read from, decided row by row. Before a write the export tokens give the files the export will write; after it, the files it actually wrote, including a name changed by a collision suffix.
The Found Exports section lists each export with its kind, row count, and status, which {data:export_status} also writes:
| Status | Meaning |
|---|---|
| Saved | The files are on disk and match the graph, also after closing and reopening the project. |
| Not saved yet | The export has not written these images, or the graph changed since it did. |
| Updating… | The graph is still cooking; rows read Updating… instead of an old value. |
| Failed | The last export could not write some files, or was cancelled. |
When one image is written by several exports, an export token reads the one created first; name another by its Node ID after the token, as in {data:export_filename:ExportBatch2}. The picker lists each export with its custom label beside its Node ID and inserts the Node ID, which never changes. A label also works there when exactly one export carries it, and renaming that node rewrites such a reference for you; two exports sharing the label leave the cell empty with a note naming both.
Atlases
Section titled “Atlases”Placement comes from the node that packed the sheet: Arrange (two or more inputs), Sprite Sheet, Trim Sheet (each trim is one region, with its name and color), or a sheet-mode Export Batch.
- Trimmed sprites. With Sprite Sheet’s Trim Transparency on,
{data:w}and{data:h}are the placed, trimmed size,{data:offset_x}and{data:offset_y}say how far trimming moved the corner,{data:trimmed}readstrue, and{width}and{height}stay the untrimmed size. - Grid cells.
{data:grid_column}and{data:grid_row}answer for an Arrange in Grid direction and a Sprite Sheet in Grid mode. - UVs.
{data:u0}to{data:v1}give the rectangle as 0 to 1 fractions of the sheet from the top-left corner;{data:v0_from_bottom}and{data:v1_from_bottom}measure the top and bottom edges from the bottom, and{data:y_from_bottom}the pixel Y, for tools whose v or Y axis points up.{data:uv_w}and{data:uv_h}give the rectangle’s size as fractions. - Colors.
{color}writes the row image’s swatch color (a Palette Remap variant’s, or a Trim Sheet trim’s) as hex;{data:color_r},_g,_bwrite it as sRGB 0 to 1 and{data:color_linear_r},_g,_bas linear 0 to 1. - The atlas picture is whatever export writes the packer’s output;
{data:atlas_filename}and{data:atlas_relative_path}name its file.
Presets
Section titled “Presets”Preset sets a whole look (format, Rows, columns, Advanced choices, Atlases, Texture Sets, and Custom Text) but never Split, Folder, or File Name. Change anything afterward and the menu reads Custom. The line under it says what the preset is for, and amber notes say when the wired inputs cannot fill it (no atlas, no texture set, or more than one atlas for a one-atlas format, which offers a Split: One per Atlas button).
| Group | Presets |
|---|---|
| Lists | Image List, Review Spreadsheet, XML Image List, Markdown Table |
| Sprite Atlases | Atlas Coordinates, Atlas JSON (Hash), Atlas XML, CSS Sprites, ZenUV Trim Sheet |
| Code | C# Sprite Table, GDScript Regions, TypeScript Image Module |
| Web and Data | Web Image Manifest, Dataset Metadata |
| Texture Sets | Material Maps |
Save as Preset… at the end of the Yours group saves the look (never Folder or File Name) for every Export Data node in every project; Manage Presets… renames, deletes, exports, and imports them. Each preset has a recipe and a sample in Exporting Data. To pass a setup to a teammate, see Sharing your setup.
Columns and tokens
Section titled “Columns and tokens”Each column has a Header (the name at the top of a CSV, the JSON key, or the name Custom Text uses) and a Value: text with tokens in braces, such as {name} or {width}x{height}. Drag a column’s grip to reorder it (right-click the grip for Move, Remove, and Write as).
- Add Column appends one.
- Paste Keys and Values builds the list from two comma-separated lines.
- Copy Keys and Values copies the list as those two lines.
The </> button at the end of a Value opens the token picker, grouped by where each value comes from (This node, Image, Source, Atlas, Texture Set, Exported files, Document, and Variables), with a live sample from the first row beside each token. A token that needs something you have not wired is grayed with the reason, and typing { offers matching tokens. Every token field in ArcBrush opens the same picker; see Naming with Tokens.
A column’s Value mixes text and tokens. For example, on the row for icon_heart:
{name}writesicon_heart; on a packed atlas,{data:x},{data:y}writes where the sheet placed it, such as64,0.{data:export_path:ExportImage2|relative}writessprites/icon_heart.png, the file Export Image 2 wrote for that image, relative to the data file.
The {data:...} tokens are Export Data’s own: the row, the atlas placement, the texture set, and the files found exports write. Values are data, not file names: they are never cleaned up the way file names are, and paths use / unless you add |backslash. Padding works on Export Data’s numbers ({data:position:3} writes 007), and |or: gives a missing value a default ({data:x|or:0}). An unknown token is written as typed, with a note, so a typo shows in the preview instead of vanishing. Every token is in the Token Reference.
Formats
Section titled “Formats”| Format | What it writes | Extension |
|---|---|---|
| CSV | Comma separated, with a header line when Include Header is on | .csv |
| CSV for Excel | CSV with Windows line endings, a UTF-8 byte order mark, and formula protection | .csv |
| TSV | Tab separated | .tsv |
| JSON | An array of objects keyed by the headers; JSON numbers are written as numbers unless a column’s Write as says otherwise | .json |
| JSON Keyed by First Column | One object keyed by the first column, which must be present and unique on every row | .json |
| Custom Text | Your own text around the rows | You choose |
Advanced, collapsed by default, holds what each format sets for you: Delimiter (Comma, Semicolon, Tab, or Pipe), Protect Spreadsheet Formulas, Line Endings, and Write UTF-8 BOM. Picking a Format resets them to its convention. For CSV and TSV, a note says when values in the first column repeat.
Write as, in a column’s right-click menu, sets how JSON writes it: Auto (a JSON number as a number, anything else as a string), Text (always a string, so an id like 007 stays intact), Number, or True or False (from true, yes, 1 or false, no, 0, empty). A value that does not fit is written as a string, with a note. A typed column shows a TEXT, NUM, or BOOL chip after its header; other formats gray the choices (“only JSON writes types”).
Custom Text builds the file from four boxes:
- Before Rows once at the top.
- Each Row for every row (where
{header}is that column). - Between Rows between two rows (
\nfor a line break). - After Rows once at the end.
Escape Values (None, As JSON or C# Strings, As XML, As CSV) escapes only the substituted values, never your typed text. Extension offers data and code types only; a file your computer would run when opened is never offered.
A brace starts a token only when a letter follows it and a } closes it on the same line, so code and JSON need no escaping; {{name}} writes {name}. Add Second Pass adds Middle and a second Each Row and Between Rows: the rows are written again, in the same order, after the first pass, so one file can hold an enum and a matching array. See Custom Text from scratch.
Preview and notes
Section titled “Preview and notes”The Preview shows the first 200 rows as a Table or as Raw text exactly as it will be written, with the row count, size, line endings, and byte order mark on the line below.
Problems in red stop Export and Copy. Notes in amber explain every empty cell and every token written as typed, with the column, the token, the reason, and how many rows it affects, for example "x": {data:x} is empty: needs an atlas. The node body on the canvas reads the row count and format, such as 3 rows · CSV, with a badge for notes.
Exporting
Section titled “Exporting”Export writes the file to the Writes path shown under Folder and File Name; the extension comes from the format. A new node’s File Name is {this.label|or:this.id}, so the file is named for the node: an Export Data labeled “icons_atlas” writes icons_atlas.json, an unlabeled one ExportData1.json. Export Data reads several inputs, so {input.label} is grayed here; Naming with Tokens shows the atlas recipe.
Split writes One File, One per Input, or One per Atlas. Put {name} in the File Name to name each file for its input or atlas; without it Export is off with a note. With a Split, the Writes line lists the files, the preview shows the first one, the button reads Export N Files, and the files are written together: if one cannot be written, none is. Copy puts the same text on the clipboard. An existing file asks before it is overwritten, as with every export.
Save Them First. If a found export has not saved the images this file lists, Export asks first; it never saves images silently.
- Save Them First (the default) exports those images, then writes the data file with their actual names, as one run.
- This File Only writes just the data file with the planned names.
- Cancel does nothing.
Export Selected and Export All write Export Data nodes last, after every image export in the run, so a data file lists the files just written. A node with no rows is skipped, so no header-only file is written. Reveal in Explorer (Reveal in Finder on macOS) in the node’s right-click menu shows the file it last wrote.
A file holds at most 1,000,000 rows and 64 MiB. The same graph and settings always write the same bytes, whatever the computer’s language settings, and numbers never use a comma for the decimal point.
Parameters
Section titled “Parameters”Pins
Data
A starting look for the whole file: format, columns and options. Changing anything afterward shows Custom. A preset never changes Folder or File Name
The file convention
What one row is
Write the column names as the first line
The file's columns, in order, each a Header and a Value with tokens such as {name}. Edited in the Columns list, never as text
Rows for an Arrange, Sprite Sheet or Trim Sheet input: one per sprite, or one per atlas
Rows for a texture set input: one per set, or one per map
Advanced
The character between fields
Start a value that begins with = + - or @ with an apostrophe, so a spreadsheet does not run it as a formula
What ends each line: LF, or CRLF for older Windows tools
Start the file with a byte order mark so Excel reads it as UTF-8
Custom Text
Text written once before the first row. Tokens such as {data:row_count} work here
Text written for every row. {key} is the column with that header; any other name is read as a token
Text written between two rows, on one line. Use \n for a new line and \t for a tab
Text written once after the last row
Write the rows a second time after the first pass, so one file can hold two lists in the same order, such as an enum and an array
Text written once between the first pass and the second
Text written for every row in the second pass. {key} is the column with that header
Text written between two rows in the second pass, on one line. Use \n for a new line
How substituted values are escaped. Your typed text is never changed
The file extension. Only data and code extensions are offered
Output
How many files Export writes. Put {name} in the File Name to give each file its own name
Folder the Export action writes into. Tokens work; add a transform such as {graph|snake}
File name without the extension, which comes from the Format. The default is this node's label, else its Node ID. Tokens work; with Split on, {name} is each file's input or atlas
Usage Tips
Section titled “Usage Tips”- For a game atlas, wire the Sprite Sheet or Arrange output itself into Export Data, not an image after it, and pick an Atlas preset.
- For Blender’s ZenUV add-on, the simplest route is the Trim Sheet node’s own Copy Trims for ZenUV. Export Data writes the same text when you want it as a file or from trims you edited: wire the Sheet output into Export Data, pick ZenUV Trim Sheet, and press Copy (or set Folder and press Export for a
.jsonfile), then in Blender choose Paste Trims from Clipboard from the Trim List’s dropdown menu. Trims are keyed by name, so a repeated name earns a note. - Formats that describe one sheet (Atlas JSON, Atlas XML, CSS Sprites, GDScript Regions) write one file per atlas: set Split to One per Atlas and put
{name}in the File Name. - Use a Tag node upstream to add labels or other metadata as
{tag:key}columns. - Build a look once and save it with Save as Preset… so it is one pick in every project.