The dataset
Every automation has one table β its dataset β shown in the Input dataset tab. Each row is the content of one video; each column is one field of it. On the right of the table, two columns you do not edit say what happened to each row: Status and Actions.
The toolbar
On the left, a chip says what kind of table this is and how many rows it has:
- Editable (a pencil) β the rows are yours. You started it from a template, from a file or blank, or you detached it from its source.
- Remote Β· Google Sheet, Remote Β· CSV URL or Remote Β· API (a padlock) β the rows are read from somewhere else and edited there. See Syncing a connected source.
On the right, depending on the table and your role:
| Button | What it does |
|---|---|
| Delete N rows | Appears while rows are ticked. Their values, and any render state they carry, go with them. |
| Add row | Adds an empty row at the end. |
| Import rows | Adds the rows of a CSV or JSON file. Editable tables only. β Import rows |
| Add column | Adds a column. Editable tables only. |
| Save state | Saved, Savingβ¦, Save now (an edit is waiting), Retry save (the last save failed), or Not saving β reload needed (see Two people, one automation). |
| Validate | Checks every row against the template and marks the ones that would fail. β What makes a row invalid |
| Render N selected | Appears while rows are ticked. Renders exactly those rows. β Rendering videos |
Changes save on their own a moment after you stop typing. There is no Save button to forget, and the browser warns you if you try to close the tab while an edit has not reached the server yet.
Anyone on the account can look at an automation. Changing one needs the Editor role or above; with a browse-only role the buttons are not offered and a notice says so.
Editing the table
In an Editable table:
- Click a cell to edit it.
- Paste a block from Excel or Google Sheets straight into the grid. It fills the cells from where you pasted, and adds rows if the block is longer than the table. Clear any sort, filter chip or search first, so the rows you see are the rows that get filled β the table asks you to if you have not.
- Search rows finds a row by any of its values, including the file names and other text inside object cells.
- Click a column header to sort by it; click again to reverse, a third time to go back to the table's own order.
- When the table is wider than the screen, its edge fades and N more columns β takes you to the rest. At the far end it reads β Back to the start.
- Edit in a row's Actions opens the whole row as a form, one field per column, with the same pickers the Video scripts form uses. It is the comfortable way to fill a row of ten fields and the only sane one for a row of a hundred. The arrows in its header move to the previous and next row.
A blank cell means "whatever the template says"
A row only holds what you put in it. Anything it leaves blank is filled in by the template when the video renders, with the template's own value.
So a blank cell in a column whose template variable has a default shows that default in grey italics β "This is the template's own value. Type here to use something else." It is not stored in the row; it is what the video will use. In the row form the same fields carry a Template default mark, which goes away as soon as you change them.
Columns
The menu on a column header offers Edit columnβ¦, Move left, Move right, Insert a column after this oneβ¦ and Delete column (and Edit item fieldsβ¦ on a list column).
- Renaming a column never breaks anything. A template's mapping remembers the column itself, not its name.
- Deleting a column removes it and its values from every row, in one save. If a template maps it, that template needs remapping before it can render again β the confirmation says so.
- Changing a column's type re-checks the rows. Values that no longer fit keep their text and are marked invalid; nothing is converted behind your back.
- A column can be Required, and can carry a Help text that shows in the row form.
On a Remote table you can still rename a column, change its type and move it β that is your view of the origin's data β but you cannot add or delete columns, because the origin decides what columns there are.
Column types
A column's type is the same list a template variable uses. Whatever the Editor can put in a template, a column can hold β and nothing else.
| Type | What a cell holds |
|---|---|
| Text | A line or a paragraph. A web address is text too β the template is what turns it into a file. |
| Number | A number. |
| Date | A date written year first (2026-09-18), so it can be sorted and filtered as a date. A template receives it as text. |
| Yes / no | Yes or no. |
| Option | One value out of a closed list. |
| Colour | A colour as the template writes it β #RRGGBB, or a name. |
| Object | A value with several fields inside it: a photo with its framing, a voice with its model, subtitles with their styling. Held whole in one cell and edited in its own window. |
| List of items | A list of items with their own fields. It feeds a scene that repeats. |
There is no Image, Video or Audio type. A plain address is Text. Anything richer than an address β and a template's photo variable usually is β is an Object.
Objects: a photo, a voice, subtitles
A template does not ask for "a photo URL". It asks for a photo: the file and the settings around it β the framing, the zoom. That whole thing is what the cell holds, and it is never split into one column per field.
An object column says which editor it opens with (Edited by in the column dialog):
| Edited by | What it edits |
|---|---|
| Image or video | A file from your media library, or an address. |
| Audio | An audio file and how loud it plays. |
| Voice | A text-to-speech voice and the model that speaks it. |
| Subtitles | How subtitles look and behave on this video. |
| Font | A font family and its weight. |
| Avatar image | The picture of a person, for a talking-avatar scene. |
| Text block | A block of text with its own size and alignment. |
An object column with no editor of its own opens as a plain form built from the fields it holds.
In the table:
- The cell shows what is in it: a thumbnail and the file name for a photo, the chosen voice, a "3 fields" chip for a plain object β and Empty when nothing has been put in it.
- Click the cell and its picker opens in a window of its own.
- An object cell is never typed into. Pasting a block of spreadsheet cells over an object or a list column is refused with a message, not silently dropped.
When is an object cell empty
An object cell is empty when what you would put there is blank β the file for a photo or an audio, the chosen voice, the family for a font, the text for a text block. The settings around them β the aspect ratio, the zoom, the volume β are the template author's choices, not your content, and they never make a cell count as filled.
Three places use that rule and always agree: the Empty label in the table, the is empty rule in a template's filter, and the check that refuses to render a row whose required photo has no file.
List columns
A List of items column holds several items in one cell β three rooms in a property, five products in a promo β each with its own fields. One item makes one copy of the scene that repeats.
The cell shows a count ("5 items"). Click it and a side panel opens with one form per item. Its footer says how many items the cell holds out of the maximum, and Edit fields changes which fields every item has.
- A field inside an item can be an object β a photo per room, with its own framing. It behaves there exactly as an object column does in the table. What an item field cannot be is another list.
- A list cell holds at most 100 items, and an item at most 50 fields. The render engine stops at the hundredth item, and items past it would vanish from the video with no error at all.
Which tables can hold objects and lists
| The table⦠| Object and list columns |
|---|---|
| Started from a template, blank, or from a CSV or JSON file | Yes. It is yours: add them, fill them in. A JSON file can bring them in directly. |
| Connected to an API endpoint | Yes, when the API sends them. |
| Connected to a Google Sheet or a CSV at a URL | No. A flat feed holds one value per cell, so these two refuse an object or a list column rather than storing JSON inside a string. |
A Google Sheet or a CSV URL can still drive a template that asks for a photo: map a column of addresses to it and the address is put where the template expects the file. What they cannot do is feed a scene that repeats.
Import rows
Import rows adds the rows of a CSV or JSON file to a table that already has its columns β typically one you started from a template, so the columns already have the right types and the right editors. It is offered on Editable tables only; a connected table gets its rows from its origin.
It always adds. Nothing already in the table is changed or replaced, so every row keeps its render state and its videos.
- File. Drop a CSV or JSON file (at most 5 MB) on the drop zone.
- Mapping. One line per column of the table: Column in this dataset on
the left, Comes from the file field on the right, with a sample value
beside each field. Fields whose names match are picked for you; change any of
them, or choose Leave empty. The dialog also says how many rows the table
has and how many more your plan allows.
- A list column is filled from a field holding a list, and then each of
its item fields from a field inside the items. Those appear as
list.fieldβreel_scenes.image_urlis theimage_urlof each item ofreel_scenes. - An object column can be filled whole from one field, or property by property β a column of addresses feeding the photo's file, for example β on top of the template's own settings.
- New columns. A field of the file that fills no column is not thrown
away: it is listed under New columns, ticked, and added to the table as
a new column β typed the way a new automation types it, and placed where
the file has it, so a
titlethat opens the file opens the table. Rows already in the table leave it empty. Untick a field to leave it out. A field named like an existing column belongs to that column and is never added twice.
- A list column is filled from a field holding a list, and then each of
its item fields from a field inside the items. Those appear as
- Preview. The rows exactly as they will be added, and what is left out: rows that fill no mapped column are skipped, and rows past your plan's row limit are cut and reported β "N rows do not fit and will not be added". New columns are marked New. Press Add N rows.
Choose another file and Back to mapping step back. When the import finishes, the new rows are at the end of the table.
JSON is the natural format for list columns. A CSV can fill one only when every cell of that field holds the list written as JSON β which is what you get if you build the file from JSON in the first place.
The Status column
Status says what happened to a row for one template. When the automation feeds several templates, Results for above the table picks which one; the Status column, the Actions column and the filter chips all follow it.
The pill:
| Status | Meaning |
|---|---|
| Not checked | The row has not been checked against the template yet β or it changed since it was. |
| Ready | Checked, and it will render. Nothing has been rendered from it. |
| Invalid | The pre-flight check refused it. It was not queued and not charged. |
| Queued | Picked up by a running batch, waiting for a free render slot. |
| Rendering | Rendering now. |
| Rendered | It has a video. |
| Failed | The render failed. Retry it from the Actions column. |
| On hold | Held back by a batch β usually because the account ran out of credits. Nothing is lost. |
Beside the pill, the one detail it needs:
- For a Rendered row, when it rendered and how long its video has left β
Β· 5d, turning amber inside the last two days, and Expired once the file has been deleted. Hover it for the exact date. - For an Invalid or Failed row, why β in plain words, the full list in the tooltip. Amber for a row the check refused, red for a render that failed.
- A warning icon beside a rendered row means the row has changed since, and would not pass the check as it is now. Its video is still there; the icon tells you the next render would be refused.
Before any template is linked the column says Not linked. When the template cannot render at all, it says why in a word β Needs mapping, Template changed, Template missing β and a notice above the table explains it.
The Actions column
Four small buttons on every row. A button that cannot be used right now is greyed out, never hidden, and its tooltip says why.
| Button | What it does |
|---|---|
| Edit | Opens the row as a form. On a Remote table it reads View and opens the same form read-only. |
| Preview | Plays the video this row would make, in your browser, without rendering it. Greyed out until a template is linked and mapped. β Previewing a row |
| Render | Renders this row on its own. Nothing is charged until you confirm what it costs in the Render videos dialog. |
| Render again | On a row that already has a video. It makes a new video and is charged again, so the dialog asks you to tick Also re-render rows that already have a video first. |
| Retry | On a row whose render failed. |
| Play | Plays the video over the table. From the player you can open it in a new tab or copy its link. Disabled once the video has expired. |
Render is disabled on a row that is invalid, already queued or rendering, or on hold; while a batch is already running on this template; and when the template cannot render anything yet.
Previewing a row
Preview plays the video a row would make, in your browser, before anything is rendered. It is built from exactly what a render of that row would use β the linked template, with this row's values β so what you watch is what you would get. Nothing is rendered, and the video itself costs no credits.
- Play, pause, and drag the bar to move through the video.
- The arrows at the top go to the previous and next row without closing, in the order the table shows them β filtered, searched and sorted.
- Render at the bottom renders this row: the preview closes and the usual Render videos dialog opens, with the cost.
- If you have just edited the row, the preview waits for the change to be saved first.
Any row can be previewed β rendered, failed or never touched β and previewing changes nothing, so it works on a Remote table too, and for team members who cannot edit.
The preview is drawn by your browser. It is very close to the render, but a font or an effect can look slightly different; when they disagree, the render is the reference.
When the preview has to generate something
A few things in a video are generated rather than downloaded β a voice-over made from text, for example. The preview generates them too, so that it can play them.
When generating one costs credits, the preview asks first. It lists what it would generate, what each one costs and your balance, and nothing is generated until you press Generate. Don't generate plays the rest of the video with a placeholder in that place; N not generated Β· Generate, over the video, asks again. Tick Don't ask again while this preview is open to stop the question until you close the window.
What the preview generates is kept. Render the row within 5 days, without changing it, and the render uses it instead of generating it, and charging for it, again.
Filter chips, search and Retry
Above the table:
- Filter chips β All, Pending, Invalid, Failed, Rendered, and Orphaned when there are orphaned rows. Each shows its count. Pending is every row that has not rendered, failed or been refused: not checked yet, ready, queued, rendering or on hold. The chips only choose what the table shows; they never decide what is rendered.
- Retry the N failed β when rows failed, one button opens the Render videos dialog for exactly those rows.
- Search rows.
Orphaned rows
On a connected table, a row the origin stops sending is not deleted: it holds the state of its own video, and deleting it would throw that away because someone tidied a spreadsheet. It is kept, drawn as orphaned, and found with the Orphaned chip. If it comes back at the origin, it carries on as itself. See Syncing.
Two people, one automation
A table is saved as a whole. If someone else β another person on your account, another browser tab, or a sync β saved it after you opened it, your save is stopped and a dialog says This dataset changed somewhere else. Nothing is overwritten silently, and there is no merging either:
- Reload the dataset brings in their version and drops the edits you made since.
- Keep editing (not saved) keeps your edits on screen so you can copy them out, but nothing more is saved until you reload.
Deleting an automation
Delete automation, the red button in the automation's header β or Delete in the menu of its line in the list β deletes the automation after you confirm: its table and rows, its links to templates, its schedule and its video history. It cannot be undone.
Videos it already rendered are ordinary renders: they stay in Render logs until they expire, and copies delivered to a destination are yours.