Author the machine exercise circuit with props and corrected hip machine motions

Fourteen Planet Fitness machine exercises join the rig library, each with
authored motion, info page, and schematic equipment via the new props layer
(scene shapes, cables, bars, pads) rendered in lockstep by render.py and the
in-app figure renderer. Abductor and Adductor are authored face-on with the
real seated machine motion — knees-bent legs swinging apart/together against
knee pads — replacing the earlier middle-split depiction. The watch target
now bundles the figure renderer and motion rigs too.

Claude-Session: https://claude.ai/code/session_01LEoff8bXGBS83tK1c55Mf7
This commit is contained in:
2026-07-06 16:29:31 -04:00
parent 888852cc2e
commit fce8fa4c17
130 changed files with 4116 additions and 82 deletions
@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Adductor</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<rect x="152" y="56" width="16" height="72" rx="5" fill="#c5cad4"/>
<rect x="130" y="126" width="60" height="10" rx="3" fill="#c5cad4"/>
<path d="M 136.0 78.0 L 136.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 188.0 78.0 L 188.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 197.0 110.0 L 197.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 123.0 110.0 L 123.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.0 33.0 L 145.9 55.3 L 141.8 85.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 166.0 118.0 L 120.0 119.3 L 104.0 156.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 160.0 116.0 Q 160.0 72.5 160.0 31.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 160.0 31.0 L 180.1 53.3 L 184.2 83.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 160.0 116.0 L 206.0 117.3 L 216.0 156.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="160.0" cy="11.0" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="242" y1="16" x2="258" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="264" y="20">R</text>
<line x1="282" y1="16" x2="298" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="304" y="20">L</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Adductor</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<rect x="152" y="56" width="16" height="72" rx="5" fill="#c5cad4"/>
<rect x="130" y="126" width="60" height="10" rx="3" fill="#c5cad4"/>
<path d="M 136.0 78.0 L 136.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 188.0 78.0 L 188.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 197.0 110.0 L 197.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 123.0 110.0 L 123.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.0 33.0 L 145.9 55.3 L 141.8 85.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 166.0 118.0 L 120.1 121.3 L 140.0 156.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 160.0 116.0 Q 160.0 72.5 160.0 31.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 160.0 31.0 L 180.1 53.3 L 184.2 83.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 160.0 116.0 L 205.1 124.9 L 180.0 156.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="160.0" cy="11.0" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="242" y1="16" x2="258" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="264" y="20">R</text>
<line x1="282" y1="16" x2="298" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="304" y="20">L</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+39
View File
@@ -0,0 +1,39 @@
# Adductor
The seated hip-adduction machine — squeezes the knees together to load the
inner thighs.
- **Category:** Main circuit
- **Type:** Machine-based hip adduction
- **Targets:** Adductors, inner thighs
- **Prescription:** 4 × 10
## Setup
Sit with your legs placed outside the pads, back flat against the seat, and
knees starting spread apart. Rest your hands on the seat sides and keep your
torso upright.
## Execution
1. Squeeze your knees together against the pads using your inner thighs.
2. Pause when the knees nearly touch, holding the contraction.
3. Let the legs spread back open under control — don't let the pads fling them
apart.
## Cues
- Drive the movement from the inner thighs, not by rocking the hips.
- Keep the torso upright and the back against the seat.
- Control both directions; the opening phase trains the muscle too.
## Common Mistakes
- Letting the pads throw the legs open at the start of each rep.
- Setting too wide a start range before the muscle is warm.
- Fast, swinging reps that rely on momentum instead of the adductors.
## Progression
Add weight once all four sets of ten are controlled in both directions; pause
two seconds with the knees together to strengthen the fully-shortened position.
+34
View File
@@ -0,0 +1,34 @@
{
"name": "Adductor",
"primary": 2,
"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"}
]}
],
"frames": [
{
"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]}
},
{
"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]}
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

+22
View File
@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Adductor</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<rect x="152" y="56" width="16" height="72" rx="5" fill="#c5cad4"/>
<rect x="130" y="126" width="60" height="10" rx="3" fill="#c5cad4"/>
<path d="M 136.0 78.0 L 136.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 188.0 78.0 L 188.0 108.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 197.0 110.0 L 197.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 123.0 110.0 L 123.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.0 33.0 L 145.9 55.3 L 141.8 85.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 166.0 118.0 L 120.1 121.3 L 140.0 156.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 160.0 116.0 Q 160.0 72.5 160.0 31.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 160.0 31.0 L 180.1 53.3 L 184.2 83.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 160.0 116.0 L 205.1 124.9 L 180.0 156.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="160.0" cy="11.0" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="242" y1="16" x2="258" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="264" y="20">R</text>
<line x1="282" y1="16" x2="298" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="304" y="20">L</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB