OmniMotion®
GuideDraft

Data Repeater

Cloning a layer from a list, JSON or a URL, bindings per copy, cascade.

A Data Repeater draws one layer many times and fills each copy from a row of data — a product grid from an API, a list of names, a ring of avatars. You design one card; the data decides how many there are and what each one says. It is an ability you add to a layer in the Properties panel, like a shadow or a layout.

It is not an array. The rows live in a list (Variables tab → Lists); the Repeater prints them. The same rows can be edited in either place.

Three cousins are easy to confuse:

What decides the copiesGuide
Virtual RepeatA count you type — every copy looks like the masterDesign
Data RepeaterA row of data — each copy can show a different fieldThis page
ClonesVisual only — how 3D copies sit and look. Not a list3D

Data Repeater is the one where each copy is different because a row says so. In + Add it reads Print from a list — each copy is a row.

01Adding it

Select the layer that will be the template — a shape, a text, an artboard you use as a card, or a 3D mesh — and click + Add › Data Repeater. It links to your first list — or, if the scene has none, makes a list called Products with two rows — and one copy appears per row. Nothing is bound yet, so they all look the same. On a mesh, this card is the list and Clones is only the look (ring, grid, effects).

The Data Repeater section on a card artboard: Layout Linear, Data List, the Products table, two identical copies on the canvas

02Layout

Layout decides where the copies go; the rows below it change with the choice.

LayoutExtra controls
LinearGap between copies
GridGap and Columns
Flex (wrap)Gap — copies wrap to a new line when they run out of room
RadialCenter, Radius, Radius Δ (added on each copy, for spirals), Arc Start / Span, Rotate w/ Arc and, with it on, Face Outward
CircleThe same controls as Radial

If the host layer already has a Layout ability, the linear, grid and flex layouts read their gap, columns and wrapping from there too — the section says so.

Two switches shape the copies themselves:

  • Content Only — do not draw the template's own background on the copies, only its children. Turn this on when the template is an artboard used as a card so the artboard rectangle is not repeated.
  • Hide Master — with a plain count, hides the original and shows only the copies. Once data drives the repeater this switch goes away: every row is content, none is a master.

03Data

Data picks where the rows come from:

DataWhat you give it
ListA list from the Variables tab (Data sources). Its items are editable right here, and Name renames it. New next to the picker makes another list. Two repeaters can share one list; a text or a map can read the same rows
CountA Rows count and a small table, one line per copy (#1, #2…), one box per binding
JSONRows of your own. Rows of objects show as the same item editor; anything else shows as JSON text
URLA feed fetched from a URL — see below

The number of copies follows the rows; with Count, the Rows number.

JSON and URL carry Share as list: the rows become a list in the Variables tab and the repeater switches to List — the way to let a headline, a counter or a second repeater read the same data.

URL

The URL rows: URL with Share as list, Path, Refresh with Fetch now, and the status line
  • URL — the endpoint. It must allow browser requests from other origins; if it does not, the status line says so.
  • Path — where the array is inside the response, as a dotted path such as data.items. Leave it empty when the response is the array.
  • Refresh — how often, in seconds, to fetch again while the scene plays. 0 fetches only when the scene loads and when you press Fetch now.
  • Fetch now — fetch immediately. The status line reads the last attempt: 12 rows · 14:02, loading…, or the error.

The last successful fetch is kept inside the scene file. Open the scene with no network and the copies show that saved snapshot — the status says N rows (saved snapshot) until a fetch succeeds.

A rule can refresh too: the Refresh Data action in Sentences re-fetches the repeater's URL — on a click, on a timer, on a signal.

04Bindings — what each copy shows

A binding connects one field of the data to one layer in the template. Click + Binding and a row appears with three pickers:

A binding row: title → Name → Text, and a second one image → Photo → Image URL
  1. The field — the list is read from your first row, nested paths included (user.avatar.url). Pick custom… to type a path that is not there.
  2. The target layer — (template itself) or any child of the template, by name. Name the layers in your card before you bind; a renamed layer shows as (missing) until you pick it again.
  3. What it sets — Text for a text layer's content, Fill for a color, Image URL for an image, or Property plus a fourth picker for any numeric property of that layer: X, Opacity, Font Size…

The first + Binding guesses for you: the first field of the data into the first text child. Remove a binding with ×.

Children are matched by name, so a template with layers called Name, Price and Photo and rows with name, price and image fields takes three bindings and no code.

Click a child inside one of the copies on the canvas and the section's first line, Editing, reads Name · row 3 — per-copy override (the master is untouched). Changes you make there apply to that copy only and leave the template untouched.

05Cascade — how the copies enter

Below the bindings, Cascade animates the copies in. Switch Enable on and choose a Rule:

RuleWhat it doesIts controls
SequenceCopies enter one after anotherOrder (Index, Reverse, Random, Center), Stagger / Duration ms (80 / 400 by default), Easing
FocusThe copy at the focus is fully in; the others fall back to their start state with distanceFocus / Range
WaveThe start state ripples across the copiesFrequency / Phase — animate Phase and the wave travels

From sets where a copy starts — Fade Up, Fade In, Slide Left, Slide Right, Scale Pop — and the eight fields under it (X / Y, Z / Rot X°, Rot Y° / Angle°, Scale / Opacity) let you edit that start state freely. The preset stays the base; Reset to preset clears your changes.

Progress is the cascade's own clock, 0–100, and it carries a badge like every property: keyframe it to play the entrance on the timeline, or bind it to scroll progress so the cards arrive as the page scrolls.

Cards cascading in with Fade Up, staggered from the center

Cascade also exists on its own: a group or artboard without a repeater can take the Cascade ability from + Add to stagger its real children the same way.

06Copies in rules and streams

Wherever a value is asked for, the Copies group offers Copy index (0, 1, 2…), Copy progress (0 → 1 across the set — a free stagger for anything you bind) and Clicked copy, the index of the copy last clicked, so one rule on the template can react to whichever card the visitor chose.

When the repeater reads a list, the row itself is reachable too: {Products.clicked.name} in a text template, or data('Products','clicked','price') in a stream, is the field of the copy the visitor clicked; hover is the copy under the pointer. See Data sources.

Checked against the tool on 2026-09-30.