CSV Export
Master Annotator exports your labeled trajectory data as CSV files. You can choose between two layout modes depending on how your downstream pipeline consumes label data.
Overview
Once you have labeled frames in a dataset, you can export the annotations as a CSV file. The export includes one row per frame and appends label information as additional columns to your original data columns (frame index, joint angles, etc.).
The two layout modes — Single Column and Multi Column — determine how labels are represented in the output. Both modes are configured from the Export Configuration panel.
Exporting from Dataset View
To export a dataset:
- Navigate to your project and open the dataset you want to export.
- Click the Export button in the dataset toolbar (top right).
- Select your preferred layout mode (Single Column or Multi Column).
- Configure any additional options (delimiter, empty value, column names).
- Click Download CSV to generate and download the file.
Export scope
The export always includes all frames in the dataset, regardless of whether they have been labeled. Unlabeled frames will use the configured empty value.
Single Column Mode
In single-column mode, all active labels for a given frame are combined into a single column value, separated by a configurable delimiter. This is useful when frames can have multiple simultaneous labels and your pipeline expects a compact representation.
frame,joint_1,joint_2,joint_3,labels
0,0.12,0.45,0.78,reach
1,0.15,0.50,0.82,reach
2,0.20,0.55,0.90,reach|grasp
3,0.25,0.60,0.95,grasp
4,0.30,0.65,1.00,grasp|lift
5,0.35,0.70,1.05,liftIn this example, the delimiter is |. Frame 2 has both "reach" and "grasp" labels active simultaneously, so they appear together separated by the pipe character.
Multi Column Mode
In multi-column mode, each label in your schema gets its own boolean column. The column value is set to the positive value (e.g., 1) when the label is active for that frame, and the negative value (e.g., 0) when it is not.
frame,joint_1,joint_2,joint_3,label_reach,label_grasp,label_lift
0,0.12,0.45,0.78,1,0,0
1,0.15,0.50,0.82,1,0,0
2,0.20,0.55,0.90,1,1,0
3,0.25,0.60,0.95,0,1,0
4,0.30,0.65,1.00,0,1,1
5,0.35,0.70,1.05,0,0,1Each label column is prefixed with label_ by default. You can customize the column naming pattern in the Export Configuration.
When to Use Each Mode
| Criteria | Single Column | Multi Column |
|---|---|---|
| Number of output columns | 1 (compact) | 1 per label (wide) |
| Multi-label frames | Delimiter-separated string | Multiple columns set to positive value |
| Ease of parsing | Requires string splitting | Direct boolean access |
| Best for | NLP-style pipelines, compact storage | ML training, pandas DataFrames, one-hot encoding |
| Column count growth | Fixed (1 column) | Grows with label count |
Recommendation
If you are training a classifier and want a ready-to-use feature matrix, Multi Column mode is typically the better choice. If you are storing labels for human review or feeding into a text-based pipeline, Single Column mode keeps things simple.
Unlabeled Frames
Frames that have not been labeled will use the configured empty value in the output. By default, unlabeled frames produce an empty string in single-column mode and 0 for all label columns in multi-column mode.
frame,joint_1,joint_2,labels
0,0.12,0.45,reach
1,0.15,0.50,
2,0.20,0.55,graspIn the example above, frame 1 has no labels assigned, resulting in an empty value in the labels column. You can customize this to output a specific string like none or unlabeled in the Export Configuration.
Downloading the File
After clicking Export CSV, the file is generated server-side and downloaded directly to your browser. The file name follows the pattern:
{dataset-name}-labeled.csv
The file uses UTF-8 encoding with a comma as the field separator. If your data contains commas, values are automatically quoted following standard CSV escaping rules (RFC 4180).
Large datasets
The export button will show a loading state while the file is being prepared on the server. For very large datasets, this may take a few seconds.