← TOOLSTOOLS — GIG PERFORMANCE JSON

GIG PERFORMANCE JSON

the gig, and its running order

En anglais uniquement

PLAIN JSONCC BY 4.0NO ACCOUNT

One gig, one file: what is played, in what order, and what the wall says at the end. gigVersion 1.

Its folder is an opaque id, minted when the gig is created and never changed. A name made from the date and the venue is a name that has to change when they do.

ONE WRITER, TWO READERS

Tramoya writes it. Pregonero reads all of it, and Muralista reads the part it needs, which is the repertoire.

THE KEYS

keytypewhat it holds
gigVersionnumber
idstringBorn at creation, never rewritten
datestringISO YYYY-MM-DD. Absent until known
venueobjectName and city
visualsstringA relative pointer, conventionally ./visuals.json
songsarrayThe repertoire: id, title, and a path relative to this file
setlistarrayThe running order, as song ids
setupobjectThe setup confirmation. Absent until setup has been confirmed once
messageHomeobjectlogo, url, handle, message. Every field optional

THREE RULES THAT ARE THE CONTRACT

A gig is identified from the moment it exists. Only three things are refused: not valid JSON, no gigVersion, no id. A gig with no setlist parses. Valid is not the same as ready, and readiness is a separate gate.

songs and setlist are deliberately two fields. One is the repertoire, the other is the order it is played in, and Muralista reads the first and ignores the second.

A setlist keeps its ids and reports what it cannot resolve. Deleting a song does not rewrite the record of a gig that happened.

A REAL FILE

A real gig's file, with the venue's own name in it. Only the camera's hardware identifier is removed, because that is a property of my laptop rather than of the format.

{
  "gigVersion": 1,
  "id": "frrw98jj8s",
  "date": "2026-09-23",
  "venue": {
    "name": "PC Deinze",
    "city": "Deinze"
  },
  "visuals": "./visuals.json",
  "songs": [
    {
      "id": "hasta-calmar-el-alma",
      "title": "Hasta calmar el alma",
      "file": "../../../../songs/song-performance/hasta-calmar-el-alma.json"
    },
    {
      "id": "libertad",
      "title": "Libertad",
      "file": "../../../../songs/song-performance/libertad.json"
    },
    {
      "id": "tragedia-de-cerdo-asado",
      "title": "Tragedia de cerdo asado",
      "file": "../../../../songs/song-performance/tragedia-de-cerdo-asado.json"
    }
  ],
  "setlist": [
    "hasta-calmar-el-alma",
    "libertad",
    "tragedia-de-cerdo-asado"
  ],
  "setup": {
    "confirmedAt": "2026-09-06T15:58:43.826Z",
    "against": {
      "songs": {
        "hasta-calmar-el-alma": "1d316bc8",
        "libertad": "f2dfcefc",
        "tragedia-de-cerdo-asado": "41ca4834"
      },
      "visuals": "c904e535",
      "display": "1920x1080@2* + 1280x800@1"
    }
  },
  "messageHome": {
    "logo": "Logo Chango Pepper - black.png",
    "url": "changopepper.com",
    "handle": "@changopepper",
    "message": "If one person here writes, that's the night."
  }
}
DOWNLOAD THIS EXAMPLE →

This is a snapshot of one real gig file, taken on 6 September 2026. It is a copy kept here to illustrate the format, not a live mirror — the working file goes on changing, and this one stays as it was.

THE LICENCE

Same as the song format: the page CC BY 4.0, the format itself unlicensed, reference code MIT.

CC BY 4.0 →