Zum Inhalt springen

JSON-Format von Tempisto

Tempisto speichert Trainings als Session-Dateien und Zeitpläne als Plan-Dateien. Beide sind JSON und lassen sich von Hand oder von einer KI erzeugen.

Mit KI verwenden

Kopieren Sie den Prompt für Tempisto in eine KI. Er enthält die vollständige Formatspezifikation und funktioniert ohne Internetzugang.

Enthält Aufgabenstellung, Format-Referenz und Beispiele – zum Einfügen in einen KI-Assistenten.

Format

  • Alle Dauern sind ISO-8601-Strings der Form P[nD][T[nH][nM][nS]]. Jahre und Monate sind nicht erlaubt.
  • Zusammengesetzte Ansage-Felder folgen [scope_][aggregate_]metric mit scope total/step/split/lap, aggregate avg/max/min/remaining und metric time/distance/pace/speed/power/cadence/heart_rate/elevation. Standalone-Felder sind step_name, step_target, target_deviation, countdown, distance_source, step_duration, next_step, go, average_speed.
  • session file — .session.json
    • format — "tempisto.session/1" ( Pflicht )
    • name — string ( Pflicht )
    • sport — string ( optional ) — optional, Standard "running"
    • notes — string ( optional )
    • steps — array ( Pflicht ) — mindestens ein Step oder Repeat-Block
      • step — object — ein Step
        • type — string ( Pflicht ) — eines von "warmup", "work", "recovery", "cooldown", "rest"
        • name — string ( optional )
        • duration — object ( Pflicht )
          • time — string — ISO-8601-Dauerstring, z. B. "PT15M", "PT2M30S", "PT10S"
          • distance — object
            • value — number ( Pflicht )
            • unit — "m" | "km" | "mi" ( Pflicht )
          • until — object — die Begrenzung "maxTime" (ISO-Dauer) oder "maxDistance" (Distanz-Objekt) ist Pflicht
            • metric — string ( Pflicht ) — eine von "power", "pace", "speed", "heart_rate", "cadence"
            • below | above — number ( Pflicht ) — genau eines von "below" oder "above" verwenden
            • for — string ( optional ) — ISO-8601-Dauerstring, z. B. "PT15M", "PT2M30S", "PT10S"
            • maxTime | maxDistance — string | object ( Pflicht ) — die Begrenzung "maxTime" (ISO-Dauer) oder "maxDistance" (Distanz-Objekt) ist Pflicht
          • lap — boolean — Konstante: {"lap": true}
        • target — object ( optional ) — eine Metrik als Schlüssel, z. B. {"power": {"relative": [0.65, 0.75]}}
          • power | pace | speed | heart_rate | cadence — relative: [lower, upper]
        • announce — object ( optional )
          • rules — array — dieselbe Regelform wie announcements.rules
      • repeat block — object — wiederholt die inneren Steps; Blöcke sind verschachtelbar
        • repeat — number ( Pflicht ) — Anzahl der Wiederholungen, mindestens 1
        • steps — array ( Pflicht ) — Liste aus Step-Objekten oder Repeat-Blöcken
    • announcements — object ( optional )
      • voice — object
        • enabled — boolean
        • rate — number — Zahl zwischen 0.35 und 0.75, 0.5 ist der Systemstandard
        • duckOtherAudio — boolean
        • voiceIdentifier — string ( optional )
        • languageCode — string ( optional ) — BCP-47-Tag
      • haptics — boolean
      • rules — array — dieselbe Regelform wie announcements.rules
        • trigger — object ( Pflicht ) — genau ein Trigger: "every" (Distanz oder Zeit), "on": "step_start" | "step_end" | "target_violation" oder "on": "last_seconds" mit "at"
        • say — array of string ( Pflicht ) — Ansage-Felder; die Liste darf nicht leer sein
        • minInterval — string ( optional ) — ISO-8601-Dauerstring, z. B. "PT15M", "PT2M30S", "PT10S"
    • modifiedEpochMillis — number ( optional ) — Epoch-Millisekunden, von den Editoren geschrieben, für handgeschriebene Dateien optional
    • archived — boolean ( optional ) — behält die Datei auf der Platte und von Plänen referenziert, entfernt sie nur aus den Auswahllisten
  • plan file — .plan.json
    • format — "tempisto.plan/1" ( Pflicht )
    • name — string ( Pflicht )
    • starts — string ( Pflicht ) — Datum als YYYY-MM-DD
    • entries — array ( Pflicht )
      • session — string ( Pflicht ) — Dateiname einer Session-Datei
      • rrule | date — string ( Pflicht ) — genau eines von rrule (iCal-Wiederholungsregel, z. B. "FREQ=WEEKLY;BYDAY=MO,WE;COUNT=16") oder date

Beispiele

5x1000.session.json
                  {
  "format": "tempisto.session/1",
  "name": "5 × 1000 m @ CP",
  "sport": "running",
  "notes": "Keep the recoveries honest.",
  "steps": [
    {
      "type": "warmup",
      "duration": { "time": "PT15M" },
      "target": { "power": { "relative": [0.65, 0.75] } }
    },
    {
      "repeat": 5,
      "steps": [
        {
          "type": "work",
          "name": "1000 m",
          "duration": { "distance": { "value": 1000, "unit": "m" } },
          "target": { "power": { "relative": [0.98, 1.02] } },
          "announce": { "rules": [
            { "on": "step_start", "say": ["step_name", "step_target"] },
            { "on": "last_seconds", "at": "PT10S", "say": ["countdown"] },
            { "on": "step_end", "say": ["step_avg_power", "step_time"] }
          ] }
        },
        {
          "type": "recovery",
          "duration": { "until": { "metric": "heart_rate", "below": 130,
                                   "for": "PT10S" },
                        "maxTime": "PT3M" }
        }
      ]
    },
    { "type": "cooldown", "duration": { "time": "PT10M" } }
  ],
  "announcements": {
    "voice": { "enabled": true, "rate": 0.5, "duckOtherAudio": true },
    "haptics": true,
    "rules": [
      { "every": { "distance": { "value": 500, "unit": "m" } },
        "say": ["split_avg_pace", "total_distance"] },
      { "every": { "time": "PT5M" }, "say": ["total_avg_power", "total_time"] },
      { "on": "target_violation", "say": ["target_deviation"],
        "minInterval": "PT20S" }
    ]
  }
}
                
base-build.plan.json
                  {
  "format": "tempisto.plan/1",
  "name": "Base build, 8 weeks",
  "starts": "2026-08-10",
  "entries": [
    { "session": "easy-45.session.json",
      "rrule": "FREQ=WEEKLY;BYDAY=MO,WE;COUNT=16" },
    { "session": "5x1000.session.json",
      "rrule": "FREQ=WEEKLY;BYDAY=TU;COUNT=8" },
    { "session": "long-run.session.json",
      "rrule": "FREQ=WEEKLY;BYDAY=SU;COUNT=8" },
    { "session": "benchmark.session.json", "date": "2026-10-04" }
  ]
}