Einmalzahlung. Keine Rate Limits. Transparente WebP in zwei Stilen. Eingebaute Alternativen und Progressionen.
Jedes Bild im Classic-Stil hat einen echt transparenten Hintergrund. Auf Weiß, im Dark Mode, auf einer Markenfarbe, vor einem Foto — keine Masken, kein Compositing, kein „weißes Quadrat auf meinem dunklen UI". Wir haben keinen anderen Übungsdatensatz gefunden, der das liefert.




Selbe Datei. Keine themenspezifischen Asset-Varianten, keine Canvas-Tricks, kein Runtime-Compositing. images/classic/one-arm-kettlebell-floor-press-peak.webp.
Jede Übung kommt mit regression_of und progression_of Relationen. Geh die Progression-Leiter rauf und runter mit einer einzigen Abfrage — kein Backend, keine Coach-Logik.





Filter nach Gerät, Körperpartie oder per Hand zusammengestellt — alles im JSON. Kein Endpoint, kein Rate Limit, kein Warten auf unser CDN.






Jede Übung ist sicherheitsgekennzeichnet — knee_safe, shoulder_safe, lower_back_safe, no_axial_load. Reha-freundliche UIs ohne eigenen Classifier.






JSON. SQLite. TypeScript-Typen handgeschrieben oder generiert. Selbe Daten, drei Formen.
{
"id": "squat",
"name": "Langhantel-Kniebeuge",
"category": "strength",
"description": "Eine mehrgelenkige Unterkörperübung, die Quadrizeps, Gesäßmuskeln und Beinbeuger beansprucht.",
"instructions": [
"Lege die Stange auf den oberen Trapezmuskeln ab.",
"Entracke und tritt zurück, Füße schulterbreit.",
"Spanne den Core an und gehe herunter, bis die Oberschenkel parallel sind.",
"Drücke durch die Fersen zurück in den Stand.",
"Wiederhole."
],
"tips": [
"Halte die Brust während der gesamten Bewegung oben.",
"Drücke die Knie in Linie mit den Zehen nach außen."
],
"force_type": "push",
"mechanic": "compound",
"difficulty": "intermediate",
"equipment": "barbell",
"body_part": "upper_legs",
"primary_muscles": [
"gluteus_maximus",
"quadriceps"
],
"secondary_muscles": [
"erector_spinae",
"hamstrings"
],
"goals": [
"hypertrophy",
"strength",
"power"
],
"tags": [
"powerlifting",
"leg_day",
"big_three"
],
"variation_group": "squat",
"is_unilateral": false,
"is_bodyweight": false,
"is_placeholder": false,
"relations": [
{
"to": "banded-squat",
"type": "alternative"
},
{
"to": "banded-squat",
"type": "alternative"
},
{
"to": "db-squat",
"type": "alternative"
},
{
"to": "db-squat",
"type": "alternative"
},
{
"to": "heel-elevated-squat",
"type": "alternative"
},
{
"to": "heel-elevated-squat",
"type": "alternative"
},
{
"to": "smith-machine-squat",
"type": "alternative"
},
{
"to": "trx-squat",
"type": "alternative"
},
{
"to": "trx-squat",
"type": "alternative"
},
{
"to": "jump-squat",
"type": "progression"
},
{
"to": "front-squat",
"type": "progression_of"
},
{
"to": "pause-squat",
"type": "progression_of"
},
{
"to": "stability-ball-wall-squat",
"type": "regression"
},
{
"to": "goblet-squat",
"type": "regression_of"
},
{
"to": "smith-machine-squat",
"type": "regression_of"
}
],
"images": {
"classic": [
"start",
"peak"
],
"flat": [
"start",
"peak"
]
}
} INSERT INTO exercise (id, name, category, difficulty, equipment, body_part)
VALUES ('squat', 'Langhantel-Kniebeuge', 'strength', 'intermediate', 'barbell', 'upper_legs'); interface Exercise {
id: string;
name: string;
description?: string;
instructions?: string[];
tips?: string[];
category: "strength" | "cardio" | "olympic" | "plyometrics" | "strongman";
difficulty?: "beginner" | "intermediate" | "advanced";
equipment?: string;
body_part?: string;
primary_muscles?: string[];
secondary_muscles?: string[];
goals?: string[];
tags?: string[];
variation_group?: string;
relations?: { to: string; type: "alternative" | "progression_of" | "regression_of" }[];
images?: { classic?: string[]; flat?: string[] };
}
// Per-locale bundle: exercises.de.json — bare `name`/`description`/`instructions`/`tips`,
// plus a top-level `enum_labels` map so you can render category / difficulty /
// body_part / goals / force_type / mechanic without a hand-written translation table:
// bundle.enum_labels.category[ex.category] // e.g. "Kraft"
// Full bundle: exercises.json — fields suffixed _en/_de/_es to ship all languages at once. Keine unklare Urheberrechtslage. Kein DMCA-Risiko. Klare Tier-Bedingungen, damit dein Legal-Team in zehn Minuten zustimmt.
Keine Rate Limits. Kein Abo. Jeder Tier liefert das gleiche 359-exercise-Bundle — Tiers unterscheiden sich nur im Lizenzumfang. Neue Illustrationen kommen als kostenloses Update.