Surface machine settings in the exercise library and refine machine rigs

Library detail screens now lead with the user's recorded machine settings
(per-split when they disagree, empty-state card for machine-based entries)
and append the weight progression chart. Starter seeds mark machine
exercises with an empty machineSettings list so the settings UI lights up
before first use. The figure rig gains a frontal body profile for face-on
machines, props that can ride mid joints (knees/elbows), and an
alternating four-frame Bird Dog loop.

Claude-Session: https://claude.ai/code/session_01LEoff8bXGBS83tK1c55Mf7
This commit is contained in:
2026-07-06 18:35:15 -04:00
parent ff1ffbb1f6
commit 669ecf1259
76 changed files with 733 additions and 268 deletions
@@ -1,17 +1,17 @@
{
"name": "Abductor",
"primary": 2,
"figure": "frontal",
"working": ["leg_r", "leg_l"],
"hide": [],
"props": [
{"type": "scene", "shapes": [
{"kind": "rect", "x": 152, "y": 56, "w": 16, "h": 72, "r": 5},
{"kind": "rect", "x": 130, "y": 126, "w": 60, "h": 10, "r": 3},
{"kind": "line", "pts": [[136, 78], [136, 108]], "w": 4, "color": "prop"},
{"kind": "line", "pts": [[188, 78], [188, 108]], "w": 4, "color": "prop"},
{"kind": "line", "pts": [[213, 110], [213, 132]], "w": 9, "color": "prop"},
{"kind": "line", "pts": [[107, 110], [107, 132]], "w": 9, "color": "prop"}
]}
{"kind": "line", "pts": [[160, 136], [160, 150]], "w": 6}
]},
{"type": "pad", "at": ["knee_r"], "angle": 90, "halfLen": 13, "w": 6},
{"type": "pad", "at": ["knee_l"], "angle": 90, "halfLen": 13, "w": 6}
],
"frames": [
{
@@ -19,16 +19,14 @@
"root": [160, 116],
"spine": [90, 90], "neck": 90,
"arm_r": [-48, -82], "arm_l": [-132, -98],
"leg_r": [-22, 0], "leg_l": [-158, 0],
"pins": {"foot_r": [180, 156], "foot_l": [140, 156]}
"leg_r": [-75, -90], "leg_l": [-105, -90]
},
{
"hold": 0.5, "tween": 1.1,
"root": [160, 116],
"spine": [90, 90], "neck": 90,
"arm_r": [-48, -82], "arm_l": [-132, -98],
"leg_r": [-22, 0], "leg_l": [-158, 0],
"pins": {"foot_r": [216, 156], "foot_l": [104, 156]}
"leg_r": [-30, -90], "leg_l": [-150, -90]
}
]
}
@@ -1,17 +1,17 @@
{
"name": "Adductor",
"primary": 2,
"figure": "frontal",
"working": ["leg_r", "leg_l"],
"hide": [],
"props": [
{"type": "scene", "shapes": [
{"kind": "rect", "x": 152, "y": 56, "w": 16, "h": 72, "r": 5},
{"kind": "rect", "x": 130, "y": 126, "w": 60, "h": 10, "r": 3},
{"kind": "line", "pts": [[136, 78], [136, 108]], "w": 4, "color": "prop"},
{"kind": "line", "pts": [[188, 78], [188, 108]], "w": 4, "color": "prop"},
{"kind": "line", "pts": [[197, 110], [197, 132]], "w": 9, "color": "prop"},
{"kind": "line", "pts": [[123, 110], [123, 132]], "w": 9, "color": "prop"}
]}
{"kind": "line", "pts": [[160, 136], [160, 150]], "w": 6}
]},
{"type": "pad", "at": ["knee_r"], "angle": 90, "halfLen": 13, "w": 6},
{"type": "pad", "at": ["knee_l"], "angle": 90, "halfLen": 13, "w": 6}
],
"frames": [
{
@@ -19,16 +19,14 @@
"root": [160, 116],
"spine": [90, 90], "neck": 90,
"arm_r": [-48, -82], "arm_l": [-132, -98],
"leg_r": [-22, 0], "leg_l": [-158, 0],
"pins": {"foot_r": [216, 156], "foot_l": [104, 156]}
"leg_r": [-30, -90], "leg_l": [-150, -90]
},
{
"hold": 0.5, "tween": 1.1,
"root": [160, 116],
"spine": [90, 90], "neck": 90,
"arm_r": [-48, -82], "arm_l": [-132, -98],
"leg_r": [-22, 0], "leg_l": [-158, 0],
"pins": {"foot_r": [180, 156], "foot_l": [140, 156]}
"leg_r": [-75, -90], "leg_l": [-105, -90]
}
]
}
@@ -6,8 +6,8 @@
"props": [
{"type": "scene", "shapes": [
{"kind": "line", "pts": [[116, 134], [150, 134]], "w": 8},
{"kind": "line", "pts": [[146, 42], [176, 68]], "w": 8},
{"kind": "line", "pts": [[176, 68], [176, 128]], "w": 5}
{"kind": "line", "pts": [[136, 52], [164, 70]], "w": 8},
{"kind": "line", "pts": [[164, 70], [164, 128]], "w": 5}
]},
{"type": "bar", "at": ["hand_r", "hand_l"], "angle": 90, "halfLen": 6}
],
@@ -16,7 +16,7 @@
"hold": 0.4, "tween": 1.0,
"root": [130, 124],
"spine": [88, 86], "neck": 82, "gaze": -18,
"arm_r": [-35, -52], "arm_l": [-35, -52],
"arm_r": [-35, -58], "arm_l": [-35, -58],
"leg_r": [-8, -72], "leg_l": [-8, -72],
"pins": {"foot_r": [176, 150], "foot_l": [180, 151]}
},
@@ -24,7 +24,7 @@
"hold": 0.4, "tween": 1.2,
"root": [130, 124],
"spine": [88, 86], "neck": 82, "gaze": -18,
"arm_r": [-35, 138], "arm_l": [-35, 138],
"arm_r": [-35, 50], "arm_l": [-35, 50],
"leg_r": [-8, -72], "leg_l": [-8, -72],
"pins": {"foot_r": [176, 150], "foot_l": [180, 151]}
}
@@ -1,7 +1,7 @@
{
"name": "Bird Dog",
"primary": 2,
"working": ["arm_r", "leg_l"],
"working": ["arm_r", "leg_l", "arm_l", "leg_r"],
"frames": [
{
"hold": 0.5, "tween": 0.8,
@@ -18,6 +18,22 @@
"arm_r": [161, 161], "arm_l": [-90, -90],
"leg_r": [-83, 0], "leg_l": [15, 15],
"pins": {"hand_l": [111, 154]}
},
{
"hold": 0.5, "tween": 0.8,
"root": [190, 106],
"spine": [171, 171], "neck": 187, "gaze": 205,
"arm_r": [-90, -90], "arm_l": [-90, -90],
"leg_r": [-83, 0], "leg_l": [-83, 0],
"pins": {"hand_r": [105, 152], "hand_l": [111, 154]}
},
{
"hold": 1.4, "tween": 0.8,
"root": [190, 106],
"spine": [171, 171], "neck": 187, "gaze": 195,
"arm_r": [-90, -90], "arm_l": [161, 161],
"leg_r": [15, 15], "leg_l": [-83, 0],
"pins": {"hand_r": [105, 152]}
}
]
}
@@ -9,10 +9,10 @@
{"kind": "line", "pts": [[138, 128], [138, 150]], "w": 5},
{"kind": "line", "pts": [[120, 150], [156, 150]], "w": 5},
{"kind": "rect", "x": 198, "y": 147, "w": 34, "h": 6, "r": 1},
{"kind": "line", "pts": [[183, 62], [183, 124]], "w": 4},
{"kind": "rect", "x": 170, "y": 121, "w": 27, "h": 7, "r": 2},
{"kind": "line", "pts": [[183, 62], [183, 122]], "w": 4},
{"kind": "line", "pts": [[164, 76], [183, 76]], "w": 3, "color": "prop"}
]},
{"type": "pad", "at": ["knee_r", "knee_l"], "angle": 0, "halfLen": 14, "w": 7},
{"type": "pad", "at": ["foot_r", "foot_l"], "angle": 15, "halfLen": 7, "w": 5}
],
"frames": [
@@ -1,7 +1,7 @@
{
"name": "Dead Bug",
"primary": 2,
"working": ["arm_r", "leg_l"],
"working": ["arm_r", "leg_l", "arm_l", "leg_r"],
"frames": [
{
"hold": 0.5, "tween": 0.8,
@@ -16,6 +16,20 @@
"spine": [180, 180], "neck": 168, "gaze": 90,
"arm_r": [135, 135], "arm_l": [90, 90],
"leg_r": [64, -10], "leg_l": [16, 16]
},
{
"hold": 0.5, "tween": 0.8,
"root": [185, 148],
"spine": [180, 180], "neck": 168, "gaze": 90,
"arm_r": [90, 90], "arm_l": [90, 90],
"leg_r": [64, -10], "leg_l": [64, -10]
},
{
"hold": 0.9, "tween": 0.8,
"root": [185, 148],
"spine": [180, 180], "neck": 168, "gaze": 90,
"arm_r": [90, 90], "arm_l": [135, 135],
"leg_r": [16, 16], "leg_l": [64, -10]
}
]
}
@@ -6,30 +6,29 @@
"props": [
{"type": "scene", "shapes": [
{"kind": "line", "pts": [[126, 130], [162, 130]], "w": 8},
{"kind": "line", "pts": [[124, 130], [124, 56]], "w": 5},
{"kind": "line", "pts": [[124, 56], [198, 12]], "w": 5},
{"kind": "rect", "x": 170, "y": 112, "w": 40, "h": 7, "r": 3}
{"kind": "line", "pts": [[144, 132], [144, 150]], "w": 5},
{"kind": "circle", "c": [272, 19], "r": 4, "fill": true, "color": "prop"}
]},
{"type": "cable", "from": [198, 8], "to": ["hand_r", "hand_l"]},
{"type": "bar", "at": ["hand_r", "hand_l"], "halfLen": 28}
{"type": "cable", "from": [272, 19], "to": ["hand_r", "hand_l"], "w": 4},
{"type": "bar", "at": ["hand_r", "hand_l"], "halfLen": 24}
],
"frames": [
{
"hold": 0.4, "tween": 1.0,
"root": [150, 122],
"spine": [93, 90], "neck": 85, "gaze": 55,
"arm_r": [20, 10], "arm_l": [20, 10],
"arm_r": [35, 35], "arm_l": [35, 35],
"leg_r": [-12, -80], "leg_l": [-12, -80],
"pins": {"hand_r": [198, 24], "hand_l": [202, 26],
"pins": {"hand_r": [194, 1], "hand_l": [198, 3],
"foot_r": [193, 150], "foot_l": [197, 151]}
},
{
"hold": 0.4, "tween": 1.2,
"root": [150, 122],
"spine": [93, 90], "neck": 85, "gaze": 30,
"arm_r": [-115, -20], "arm_l": [-115, -20],
"arm_r": [-38, 38], "arm_l": [-38, 38],
"leg_r": [-12, -80], "leg_l": [-12, -80],
"pins": {"hand_r": [165, 66], "hand_l": [169, 68],
"pins": {"hand_r": [194, 35], "hand_l": [198, 37],
"foot_r": [193, 150], "foot_l": [197, 151]}
}
]
@@ -17,7 +17,7 @@
"hold": 0.4, "tween": 1.0,
"root": [140, 122],
"spine": [85, 82], "neck": 80, "gaze": 5,
"arm_r": [-10, -25], "arm_l": [-10, -25],
"arm_r": [-40, -8], "arm_l": [-40, -8],
"leg_r": [-8, -75], "leg_l": [-8, -75],
"pins": {"hand_r": [200, 62], "hand_l": [204, 64],
"foot_r": [188, 148], "foot_l": [192, 149]}
@@ -17,17 +17,19 @@
"hold": 0.4, "tween": 1.1,
"root": [118, 124],
"spine": [100, 98], "neck": 86, "gaze": 6,
"arm_r": [-78, 30], "arm_l": [-78, 30],
"arm_r": [-108, 12], "arm_l": [-108, 12],
"leg_r": [-24, -74], "leg_l": [-24, -74],
"pins": {"foot_r": [156, 151], "foot_l": [160, 152]}
"pins": {"hand_r": [124, 62], "hand_l": [128, 64],
"foot_r": [156, 151], "foot_l": [160, 152]}
},
{
"hold": 0.4, "tween": 1.1,
"root": [118, 124],
"spine": [100, 98], "neck": 86, "gaze": 6,
"arm_r": [-78, -88], "arm_l": [-78, -88],
"arm_r": [-81, -61], "arm_l": [-81, -61],
"leg_r": [-24, -74], "leg_l": [-24, -74],
"pins": {"foot_r": [156, 151], "foot_l": [160, 152]}
"pins": {"hand_r": [124, 96], "hand_l": [128, 98],
"foot_r": [156, 151], "foot_l": [160, 152]}
}
]
}
@@ -10,6 +10,17 @@
"shin": 40,
"leftOffset": [6, 2]
},
"frontal": {
"headR": 10,
"neck": 20,
"spine1": 43,
"spine2": 42,
"upperArm": 30,
"foreArm": 30,
"thigh": 22,
"shin": 26,
"leftOffset": [6, 2]
},
"female": {
"headR": 9,
"neck": 19,