Appearance
Are you an LLM? You can read better optimized documentation at /operating/data-sources.md for this page in Markdown format
Data sources
A data source lets graphics pull values from a spreadsheet or remote file rather than having every value typed by hand into the control form. Useful for fixtures, scoreboards, lineups, and anything else that lives in a sheet you're already maintaining.
Subscription tier limits
Data sources are a paid-tier feature. The number of sources you can configure per workspace, and how often they're polled for changes, varies by plan. See Subscription plans for the current limits. The Free tier doesn't include data sources at all.
Adding a data source
In the control panel navbar, find the Refresh data sources button and click the settings cog next to it. The data source configuration modal lists every source attached to the current workspace and lets you add new ones.
What you can connect depends on whether you're driving Lumora from a browser or from the desktop controller app:
From any browser
- Google Sheets
- Remote
.csvfiles via URL - Remote
.jsonfiles via URL
From the desktop controller app (additional)
- Local
.csvfiles - Local
.jsonfiles - Local Excel
.xlsxfiles
Local-file sources only work in the desktop controller because the browser sandbox can't read your filesystem directly.
Google Sheets: a range is required
Every Google Sheets source must specify a cell range in A1 notation, including the tab name — for example Sheet1!A1:D10. The range is mandatory; you can't save a Google Sheets source without one.
Only the cells inside that range are fetched, rather than the entire spreadsheet. This keeps each refresh small and fast, and means a Sheets source comfortably stays within the size limit. Choose a range that comfortably covers the cells your graphics read — there's no harm in leaving room to grow (for example Sheet1!A1:Z200).
When you bind a graphic field to a cell, the picker grid shows that range using your sheet's own column letters and row numbers. Importing Sheet1!C5:F20, for example, shows columns C–F and rows 5–20 — so the address you pick matches what you see in Google Sheets.
Pulling from more than one tab
A range targets a single tab, by design. To bring in data from multiple tabs, either:
- Consolidate the data you need into one range on a single tab (for example with cell references or
IMPORTRANGE), and point the source at that range; or - Add a separate Google Sheets data source for each tab — each with its own range.
How JSON is interpreted
Lumora expects an array of objects as the canonical JSON shape, where each object becomes a row and the object's keys become the columns:
json
[
{ "name": "Team A", "score": 3 },
{ "name": "Team B", "score": 2 }
]Other JSON shapes (a top-level object, nested arrays, mixed types) are converted on a best-effort basis. If a graphic isn't picking up the values you expect, normalising the source to the array-of-objects shape is the most reliable fix.
Size limits
Each data source has a maximum size per fetch or push. Sources over the limit are rejected with a clear error, and the previously fetched values keep serving your graphics.
| Source | Limit |
|---|---|
| Google Sheets | 5 MB per fetch |
Remote .csv / .json via URL | 5 MB per fetch |
Local .xlsx / .csv / .json (desktop controller) | 5 MB per push |
| Data API push | 1 MB per push |
For reference, a large esports control sheet is typically well under 1 MB, so these limits leave generous headroom. If you hit a limit, trim the sheet to the rows and columns the graphics actually use, or split it across multiple sources.
Linking a control form field to a data source cell
Once a data source is configured, you can bind any field on the graphic control form to a specific cell.
- Select the graphic in the rundown.
- On the control form, click the blue data link icon next to the field you want to bind.
- In the picker, choose the data source, then the cell.
- Click Link to cell.
The field now reflects the cell's current value, and updates whenever the data source is refreshed (manually via Refresh data sources, or automatically at the polling interval set by your subscription tier).
To unbind a field, click the data-link icon again and remove the binding.
See also
For programmatic access — pushing live JSON to a workspace from your own system — see the Data API.