DokumentaceJSON formáty

JSON formáty

Tohle není veřejné API. Eutepio nemá žádný endpoint, ke kterému by šlo zvenčí přistupovat. Popsané struktury jsou interní formáty — dokumentujeme je proto, aby sis mohl přečíst obsah vlastní zálohy, ne proto, abys proti nim stavěl integraci. Mohou se mezi verzemi změnit.

K čemu tahle stránka je

Existují dvě místa, kde v Eutepiu narazíš na JSON:

  1. Synchronizace — co si zařízení mezi sebou posílají, když si vyžádají píseň nebo setlist
  2. Záloha .eutbackup — soubory songs.json a setlists.json uvnitř archivu

Liší se záměrně: přes síť jde jen to, co má smysl sdílet, kdežto do zálohy jde všechno.

Píseň v synchronizaci

json
{
  "leaderSongId": 42,
  "syncId": "e3b0c442-98fc-1c14-9afb-f4c8996fb924",
  "title": "Ukázková píseň",
  "artist": "Kapela",
  "variantName": "akustická",
  "key": "G",
  "bpm": 120,
  "timeSignature": "4/4",
  "capo": 2,
  "tags": ["rock", "koncert"],
  "chordProContent": "{c: Sloka}\n[G]Ráno jsem [D]vstal…",
  "durationSeconds": 225,
  "autoScrollMode": "continuous",
  "autoScrollDelaySeconds": 3,
  "version": 4
}
Všimni si, co tam není: osobní poznámky, transpozice, velikost písma, rychlosti autoscrollu, cesty k přílohám ani MIDI příkaz. Ta pole se přes síť neposílají vůbec — proto je nemá jak nikdo přepsat.

Setlist v synchronizaci

json
{
  "name": "Klub Fléda, sobota",
  "eventDateIso": "2026-09-12",
  "songs": [
    {
      "leaderSongId": 42,
      "title": "Ukázková píseň",
      "artist": "Kapela",
      "variantName": "akustická",
      "syncId": "e3b0c442-98fc-1c14-9afb-f4c8996fb924"
    }
  ]
}

Setlist nese jen odkazy na písně, ne jejich obsah. Píseň, kterou člen nemá, se dotahuje zvlášť.

Píseň v záloze

Záloha odděluje sdílená a osobní data do dvou bloků:

json
{
  "syncId": "e3b0c442-98fc-1c14-9afb-f4c8996fb924",
  "matchKey": "ukazkova-pisen|kapela|akusticka",
  "contentHash": "9f86d081884c7d65…",
  "version": 4,
  "createdAt": "2026-05-14T18:22:04.000Z",
  "updatedAt": "2026-07-02T09:41:11.000Z",
  "deletedAt": null,
  "shared": {
    "title": "Ukázková píseň",
    "artist": "Kapela",
    "variantName": "akustická",
    "key": "G",
    "bpm": 120,
    "timeSignature": "4/4",
    "capo": 2,
    "tags": ["rock", "koncert"],
    "chordProContent": "{c: Sloka}\n[G]Ráno jsem [D]vstal…",
    "durationSeconds": 225,
    "autoScrollMode": "continuous",
    "autoScrollDelaySeconds": 3
  },
  "perDevice": {
    "privateNotes": "druhá sloka o půl tónu níž",
    "localTranspose": -2,
    "fontSizeScale": 1.2
  }
}
PoleVýznam
syncIdTrvalý identifikátor písně napříč zařízeními
matchKeyOdvozený klíč z názvu, interpreta a varianty — slouží k párování
contentHashSHA-256 sdílených polí; podle něj se pozná, že se obsah nezměnil
versionZvyšuje se při každé úpravě sdílených polí
deletedAtVyplněné = měkce smazaná píseň

Setlist v záloze

json
{
  "matchKey": "klub-fleda-sobota|2026-09-12",
  "name": "Klub Fléda, sobota",
  "eventDate": "2026-09-12T00:00:00.000Z",
  "venue": "Klub Fléda",
  "startTime": "20:30",
  "estimatedDurationMin": 90,
  "version": 2,
  "createdAt": "2026-08-01T12:00:00.000Z",
  "deletedAt": null,
  "customFieldsJson": "{}",
  "songRefs": ["e3b0c442-98fc-1c14-9afb-f4c8996fb924"],
  "breaks": [
    { "afterSongIndex": 7, "durationMinutes": 15, "label": "Přestávka" }
  ],
  "songNotes": [
    { "songId": 42, "note": "začíná Petr sám" }
  ],
  "perDevice": { "sortOrder": 3 }
}

Poznámky ke kompatibilitě

  • Aktuální verze formátu zálohy je 2. Aplikace umí načíst i verzi 1 z dřívějších buildů.
  • Zálohu s vyšší verzí schématu než umí aktuální build aplikace obnova odmítne — raději nic než poloviční import.
  • Čísla s desetinnou částí načtená ze starších záznamů mohou chybět; při obnově se nahrazují výchozí hodnotou.
  • Přílohy v JSONu nejsou. Jsou to samostatné soubory v archivu a JSON na ně odkazuje jménem.
  • MIDI příkaz u písně v záloze není. Zůstává jen na zařízení, kde jsi ho nastavil.