Templates and data

Docs Documentation

Templates and data

Design a scene once with blanks, fill it many times, and keep the values in records outside systems update by ref.

An event day is many screens with the same design and different words: every session in every room shows “Up next”, then the running session, then “Thank you”. Templates keep the design in one place; records keep the words.

Templates

A template is an ordinary scene whose text contains blanks: {title}, {speaker}, {next} — a letter followed by letters, digits or underscores. Blanks in the shots’ linked layouts count too. A filled scene has no shots of its own: it plays the template with its values in the blanks, so changing the template changes every filled scene.

  1. Design the template

    Build a scene as usual and type blanks where values go — a caption reading {title}, another reading {speaker} · {room}.

  2. Fill a scene

    On the template’s scene page the blanks are listed. Use Fill new scene, type the values and cast the filled scene into a story.

  3. Check the gaps

    A blank with no value stays visible as {name}, so a missing value is obvious on screen. A value set to empty shows nothing.

Four kinds of chapter

Every chapter in a story is one of four things, and every list says which:

  • Hand-made scene — you type the words.
  • Template — a design with blanks like {title}. A scene becomes one by itself the first time you type a blank; the Template switch in its header changes it by hand.
  • Filled scene — a template plus one record. Its badge says where the values come from: Filled from Conference sessions, or Filled from the current session for a chapter that always plays whichever session is on now.
  • Rolling — a template plus a whole collection: each pass plays the next records. Rolling through Sponsors.

On a story, Add chapter has a door for each: Design by hand, From a template + data and Rolling records. The Data page opens the same dialog from a record (Fill a chapter in a story) and from a roll preview (Roll through it in a story).

A chapter can also be a detail that never plays by itself: a visitor opens it by touching a row of a board, and it fills with that record. See Overview and detail.

Add chapter on a story: by hand, from a template filled with one record, or rolling records that show the next ones on every pass.

The Lobby welcome loop storyboard with three chapters (Welcome to the Belvedere, Today's agenda, Our partners — shared) and the Add chapter menu open: Design by hand, From a template + data, and Rolling records, each with a short description.

Add chapter on a story: by hand, from a template filled with one record, or rolling records that show the next ones on every pass.

From a template + data: pick a template, a collection and a record. Change the record in Data and the chapter follows.

The Add chapter dialog with From a template + data selected: the Session cards template, the Tech Summit 2026 · Programme collection, a searchable list of records with Designing calm interfaces picked, and the chapter title filled in.

From a template + data: pick a template, a collection and a record. Change the record in Data and the chapter follows.

Records and refs

A record is one set of values under a ref — your own key, such as your-event/session/b-14. A filled scene with that ref plays its template with the record’s values. (Entering an event program — rooms, times, linked speakers, pictures — is walked through in Your program as data.) One record can feed several scenes, and a record can exist before any scene uses it.

Refs are 1 to 200 letters, digits and . _ : / -. The slashes group records: Content → Data browses them as a tree and shows each record’s values, where they came from, and which scenes and stories they reach.

How records are organized

Records live in collections — named sets such as Tech Summit 2026 · Programme or Lunch menu, each with its own ref prefix — and the ref is the address: the parts between the slashes work like folders. A ref outside every collection still works. Pick a pattern once and every system uses it, for example:

  • your-event/session/b-14 — event, then kind, then the id from your system
  • your-event/room/hall-b
  • cafeteria/menu/monday

The Data page shows these parts as a tree, and the API lists one branch with ?prefix=your-event/session/. A record has no fixed fields either: its values are simply the blanks it fills — title, speaker, room — so records under the same prefix usually carry the same blanks because they feed the same template.

POST /api/v1/records
{
  "ref": "your-event/session/b-14",
  "values": { "title": "The AI-Native Startup", "speaker": "Ada Lovelace", "room": "Hall B" }
}

Record values and scene overrides

  • Save to record — every scene with the ref changes.
  • Only for this scene — an override, for one screen that should differ. The scene page marks overridden blanks.

Values from other systems

The system that owns your agenda — Studio Events, a CMS, a spreadsheet script — can send new values to Wunderframe, and every screen that plays the ref updates within seconds. Values are merged, so sending just the speaker keeps the title, and they are stored even before a scene uses the ref.

POST /api/v1/records/batch
{
  "items": [
    {
      "ref": "your-event/session/b-14",
      "fields": { "title": "The AI-Native Startup", "speaker": "Ada Lovelace", "room": "Hall B" }
    }
  ]
}

See Sync data into records for a complete integration — creating a record, changing one, and sending many at once.

Data sources

A source fills a collection with records by itself, so a feed or a spreadsheet keeps your screens up to date without anyone typing. Open Content → Data, open a collection and choose how its records arrive:

  • Feed — an RSS, Atom or JSON Feed. A website address works too: Wunderframe finds the feed it points to. The newest items become the records latest/1, latest/2 and so on, so a template can always show “the newest story”. Older items leave once they drop out of the feed.
  • JSON URL — any address that answers with JSON, such as your own system’s API. Say where the rows are (the Rows path, found automatically when you leave it empty) and which field is the record’s key. An optional Header carries a key the API needs; its value is kept on the server and never shown again.
  • CSV — upload a file (up to 5 MB) or paste rows, then match its columns to the template’s blanks. To use a spreadsheet such as Google Sheets or Excel, download it as CSV and upload it again when it changes.
  1. Add the source

    In the collection, choose Feed, JSON URL or CSV, give it a name and paste the address or the file. Wunderframe reads it once and shows what it found before you save.

  2. Choose who fetches it

    Fetched by is The server for public addresses. Pick The player (venue network) for an address only reachable inside the venue, such as a departure board or a local system — the app players at the venue fetch it themselves; browser players show the last values the server has.

  3. Choose how often

    Sync runs Every 5 minutes, Every 15 minutes, Every hour, Once a day, or Only when I press Sync. A source that fails is tried again later, and one that has not changed costs almost nothing.

Pictures in a feed or in your data play like your own media: screens download them ahead of time and keep them, so they appear at once and still show when the internet is gone. When new data arrives, a screen switches at the end of the shot it is playing; the panels of a wall switch together. Values are text, dates or times; a date or time can drive a countdown. For live values that change every few seconds, such as departures, use the Live list block instead of a source.

Content → Data → Sources lists every source with its last sync and any problem. In the collection, Sync now fetches a feed or JSON source at once, and Re-apply file reads a CSV again.