You can use Data Groups in non-Consensus Projects and Consensus Projects with Review & Refine nodes. Determine Consensus nodes are not yet supported.
Create Data Groups
Each of the code examples does the following:- Specifies the data units to add to a Data Group.
- Creates the Data Groups and specifies the layout in the Label Editor.
- Adds the Data Groups to a Dataset.
- Adds the Dataset to a Project.
Data Group - Grid (Default)
Grid Data Groups allow you to arrange multiple data units in a fixed, ordered grid within the Label Editor. The order of the data units in the group determines their visual arrangement in the grid.The Grid layout can display up to 12 data units. Attempting to create a Data Group with more than 12 data units results in an error.
12 data unit Data Group Grid
Requirements
To display data units in a grid layout, you need:
- A list of data unit UUIDs in the exact order they should appear in the grid.
- A call to DataGroupGrid(…) when creating the data group:
Data Group - Grid
Data Group - Carousel/List
The order of data units in a Data Group determines how they are arranged in the Label Editor. In the carousel/list layout, a scrollable panel on the left shows all data units in the Data Group, while the currently selected data unit appears in the main editor view.
Requirements
To display data units in a grid layout, you need:
- A list of data unit UUIDs in the exact order they should appear in the grid.
-
A call to
DataGroupList(...)when creating the data group:
Data Group - Carousel
Data Group - Custom
Custom Data Groups give you full control over how multiple data units are arranged in the Label Editor. Unlike grid or carousel layouts (which use ordered lists of UUIDs), custom layouts use keys:- Map keys to data unit UUIDs.
-
Build a layout tree that references those keys and defines:
- Split direction (“row” or “column”)
- Space split (“splitPercentage”)
- Where each tile (data unit) appears in the Label Editor
- A layout tree (layout):
-
A nested structure of:
- Container nodes with:
- “direction”: “row” or “column”
- “first” and “second”: child nodes
- “splitPercentage”: how much space goes to “first” vs “second”
-
Data unit tiles with:
- “type”: “data_unit”
- “key”: a string key referencing a data unit
- A mapping from keys to data unit UUIDs (layout_contents):
-
A dictionary of:
- “[key]” > UUID(“[data_unit_id]”)
-
(Optional) Tile settings (settings):
For example, to make a tile read-only:
tile_settings["instructions"]["is_read_only"] = True
| Item | Notes |
|---|---|
| Keys | Symbolic names for data unitsInstead of a list, you define a mapping: |
| Layout tree | How the screen is split. Containers control how space is split. Keys control what appears in that space. A layout is a structure consisting of:
{"type": "data_unit", "key": "top-left"}
|
| Settings | Optional tile behavior. For example, to make an “instructions” tile read-only: |
Data Group - 2-panel split
- Uses a column layout overall.
- Shows “instructions” (a text data unit) at the top (20% height, read-only).
-
Underneath “instructions”, a 2×2 grid of videos:
- Row 1: “top-left” | “top-right”
- Row 2: “bottom-left” | “bottom-right”
Data Group - Custom Layout

