Each NN_name.json file is one target pose. The game loads the files
sorted by filename and plays all of them — one pose per round — taking the
target joint angles to compare players against. Edit them by hand or record
them with the camera via run_recorder.sh
(see tools/).
| # | File | Name | Difficulty | Tolerance | Multiplier |
|---|---|---|---|---|---|
| 01 | 01_tpose.json |
T-Pose | easy | ±25° | ×1.0 |
| 02 | 02_lshape.json |
L-Shape | easy | ±25° | ×1.0 |
| 03 | 03_warrior.json |
Warrior II | medium | ±50° | ×1.3 |
| 04 | 04_sprinter.json |
Sprinter | hard | ±50° | ×1.6 |
| 05 | 05_star.json |
Star | hard | ±50° | ×1.6 |
| 06 | 06_cactus.json |
Cactus | easy | ±35° | ×1.0 |
| 07 | 07_ypose.json |
Y-Pose | easy | ±25° | ×1.0 |
| 08 | 08_squat.json |
Wall-sit | medium | ±30° | ×1.3 |
| 09 | 09_flamingo.json |
Flamingo | medium | ±40° | ×1.3 |
| 10 | 10_crossed.json |
Mummy | easy | ±35° | ×1.0 |
The game plays every file in this folder, so dropping in an 11th JSON adds an 11th round automatically.
0 nose 1 left eye 2 right eye 3 left ear 4 right ear
5 left shoulder 6 right shoulder 7 left elbow 8 right elbow
9 left wrist 10 right wrist
11 left hip 12 right hip 13 left knee 14 right knee
15 left ankle 16 right ankle
A joint angle is computed from the triple of keypoints in points (e.g. elbow
= shoulder-elbow-wrist angle). reference_keypoints are used only to draw the
skeleton on the Memorize screen — they do not affect scoring.
Optional, defaults to false. When true, the rendered reference skeleton is
flipped horizontally (left/right keypoints swapped) so the player sees it as in
a mirror and intuitively raises the matching limb — but scoring stays on the
original anatomical sides, because the camera is not flipped. Used by
asymmetric poses: 04_sprinter.json and 09_flamingo.json.
{ "name": "T-Pose", "difficulty": "easy", // easy / medium / hard "tolerance_deg": 25, // allowed angle spread "multiplier": 1.0, // score multiplier (1.0 / 1.3 / 1.6) "mirror": false, // optional: flip the rendered reference only (see below) "joints": [ { "name": "left_elbow", "points": [5, 7, 9], // COCO indices: shoulder, elbow, wrist "target_angle": 180.0, // desired angle in degrees "weight": 1.0 // weight (arms/elbows 1.2, the rest 1.0) } // ... ], "reference_keypoints": [ // 17×2 normalised to [0,1] — preview skeleton only [0.50, 0.16], [0.485, 0.15] /* ... */ ] }