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
+5 -6
View File
@@ -3,15 +3,14 @@
<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 213.0 110.0 L 213.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 107.0 110.0 L 107.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 160.3 139.3 L 160.3 165.3" 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"/>
<path id="leg_r" d="M 160.0 116.0 L 165.7 137.3 L 165.7 163.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 165.7 150.3 L 165.7 124.3" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.3 152.3 L 160.3 126.3" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+5 -6
View File
@@ -3,15 +3,14 @@
<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 213.0 110.0 L 213.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 107.0 110.0 L 107.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 146.9 129.0 L 146.9 155.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"/>
<path id="leg_r" d="M 160.0 116.0 L 179.1 127.0 L 179.1 153.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 179.1 140.0 L 179.1 114.0" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.9 142.0 L 146.9 116.0" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+7 -9
View File
@@ -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]
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 164 KiB

+5 -6
View File
@@ -3,15 +3,14 @@
<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 213.0 110.0 L 213.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 107.0 110.0 L 107.0 132.0" stroke="#6b7180" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 146.9 129.0 L 146.9 155.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"/>
<path id="leg_r" d="M 160.0 116.0 L 179.1 127.0 L 179.1 153.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 179.1 140.0 L 179.1 114.0" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.9 142.0 L 146.9 116.0" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+5 -6
View File
@@ -3,15 +3,14 @@
<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 d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 146.9 129.0 L 146.9 155.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"/>
<path id="leg_r" d="M 160.0 116.0 L 179.1 127.0 L 179.1 153.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 179.1 140.0 L 179.1 114.0" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.9 142.0 L 146.9 116.0" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+5 -6
View File
@@ -3,15 +3,14 @@
<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 d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 160.3 139.3 L 160.3 165.3" 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"/>
<path id="leg_r" d="M 160.0 116.0 L 165.7 137.3 L 165.7 163.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 165.7 150.3 L 165.7 124.3" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.3 152.3 L 160.3 126.3" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+7 -9
View File
@@ -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]
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 165 KiB

+5 -6
View File
@@ -3,15 +3,14 @@
<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 d="M 160.0 136.0 L 160.0 150.0" stroke="#c5cad4" stroke-width="6" 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="leg_l" d="M 166.0 118.0 L 160.3 139.3 L 160.3 165.3" 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"/>
<path id="leg_r" d="M 160.0 116.0 L 165.7 137.3 L 165.7 163.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 165.7 150.3 L 165.7 124.3" stroke="#6b7180" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 160.3 152.3 L 160.3 126.3" stroke="#6b7180" 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"/>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+5 -5
View File
@@ -2,14 +2,14 @@
<title>Arm Curl</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 116.0 134.0 L 150.0 134.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.0 42.0 L 176.0 68.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 176.0 68.0 L 176.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 183.5 82.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 136.0 52.0 L 164.0 70.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 70.0 L 164.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 180.9 83.8" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 136.0 126.0 L 179.5 111.0 L 180.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 130.0 124.0 Q 130.8 80.5 134.4 39.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 177.5 80.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 174.9 81.8" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 130.0 124.0 L 173.8 110.1 L 176.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 180.5 87.0 L 180.5 75.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 177.9 88.8 L 177.9 76.8" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="137.2" cy="19.3" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="146.7" y1="22.4" x2="153.4" y2="24.6" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+5 -5
View File
@@ -2,14 +2,14 @@
<title>Arm Curl</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 116.0 134.0 L 150.0 134.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.0 42.0 L 176.0 68.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 176.0 68.0 L 176.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 142.7 38.3" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 136.0 52.0 L 164.0 70.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 70.0 L 164.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 184.3 35.4" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 136.0 126.0 L 179.5 111.0 L 180.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 130.0 124.0 Q 130.8 80.5 134.4 39.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 136.7 36.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 178.3 33.4" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 130.0 124.0 L 173.8 110.1 L 176.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 139.7 43.3 L 139.7 31.3" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 181.3 40.4 L 181.3 28.4" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="137.2" cy="19.3" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="146.7" y1="22.4" x2="153.4" y2="24.6" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+4 -4
View File
@@ -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]}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 136 KiB

+5 -5
View File
@@ -2,14 +2,14 @@
<title>Arm Curl</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 116.0 134.0 L 150.0 134.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 146.0 42.0 L 176.0 68.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 176.0 68.0 L 176.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 142.7 38.3" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 136.0 52.0 L 164.0 70.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 70.0 L 164.0 128.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 140.4 41.1 L 165.0 58.3 L 184.3 35.4" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 136.0 126.0 L 179.5 111.0 L 180.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 130.0 124.0 Q 130.8 80.5 134.4 39.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 136.7 36.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 134.4 39.1 L 159.0 56.3 L 178.3 33.4" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 130.0 124.0 L 173.8 110.1 L 176.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 139.7 43.3 L 139.7 31.3" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 181.3 40.4 L 181.3 28.4" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="137.2" cy="19.3" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="146.7" y1="22.4" x2="153.4" y2="24.6" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Bird Dog</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 196.0 108.0 L 201.6 153.7 L 241.6 153.7" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 190.0 106.0 Q 147.0 99.2 106.0 92.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 106.0 92.7 L 110.1 122.4 L 105.0 152.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="86.2" cy="95.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="77.1" y1="99.4" x2="70.8" y2="102.3" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Bird Dog</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 196.0 108.0 L 240.4 96.1 L 279.1 85.7" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 190.0 106.0 Q 147.0 99.2 106.0 92.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 106.0 92.7 L 77.7 82.9 L 49.3 73.2" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="86.2" cy="95.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="76.5" y1="97.7" x2="69.8" y2="99.5" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Bird Dog</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 196.0 108.0 L 201.6 153.7 L 241.6 153.7" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 190.0 106.0 Q 147.0 99.2 106.0 92.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 106.0 92.7 L 110.1 122.4 L 105.0 152.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="86.2" cy="95.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="77.1" y1="99.4" x2="70.8" y2="102.3" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<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: 1.5 KiB

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Bird Dog</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 112.0 94.7 L 83.7 84.9 L 55.3 75.2" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 196.0 108.0 L 201.6 153.7 L 241.6 153.7" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 190.0 106.0 Q 147.0 99.2 106.0 92.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 106.0 92.7 L 110.1 122.4 L 105.0 152.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 234.4 94.1 L 273.1 83.7" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="86.2" cy="95.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="76.5" y1="97.7" x2="69.8" y2="99.5" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<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: 1.5 KiB

+17 -1
View File
@@ -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]}
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 212 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Bird Dog</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 112.0 94.7 L 116.1 124.4 L 111.0 154.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 196.0 108.0 L 240.4 96.1 L 279.1 85.7" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 190.0 106.0 Q 147.0 99.2 106.0 92.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 106.0 92.7 L 77.7 82.9 L 49.3 73.2" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 190.0 106.0 L 195.6 151.7 L 235.6 151.7" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="86.2" cy="95.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="76.5" y1="97.7" x2="69.8" y2="99.5" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+2 -2
View File
@@ -5,14 +5,14 @@
<path d="M 138.0 128.0 L 138.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 120.0 150.0 L 156.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="198" y="147" width="34" height="6" rx="1" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 124.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="121" width="27" height="7" rx="2" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 122.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 76.0 L 183.0 76.0" stroke="#6b7180" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 134.1 35.9 L 162.0 47.1 L 170.0 76.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 146.0 120.0 L 192.0 118.0 L 216.0 150.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 140.0 118.0 Q 131.0 75.4 128.1 33.9" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 128.1 33.9 L 155.7 45.8 L 166.0 74.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 140.0 118.0 L 186.0 117.6 L 212.0 148.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 175.0 117.8 L 203.0 117.8" stroke="#6b7180" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 207.2 150.8 L 220.8 147.2" stroke="#6b7180" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="131.6" cy="14.2" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="141.5" y1="15.9" x2="148.4" y2="17.1" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

+2 -2
View File
@@ -5,14 +5,14 @@
<path d="M 138.0 128.0 L 138.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 120.0 150.0 L 156.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="198" y="147" width="34" height="6" rx="1" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 124.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="121" width="27" height="7" rx="2" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 122.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 76.0 L 183.0 76.0" stroke="#6b7180" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 134.1 35.9 L 162.0 47.1 L 170.0 76.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 146.0 120.0 L 190.9 109.9 L 216.0 141.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 140.0 118.0 Q 131.0 75.4 128.1 33.9" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 128.1 33.9 L 155.7 45.8 L 166.0 74.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 140.0 118.0 L 185.2 109.3 L 212.0 139.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 174.0 109.6 L 202.0 109.6" stroke="#6b7180" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 207.2 141.8 L 220.8 138.2" stroke="#6b7180" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="131.6" cy="14.2" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="141.5" y1="15.9" x2="148.4" y2="17.1" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

+2 -2
View File
@@ -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": [
Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 163 KiB

+2 -2
View File
@@ -5,14 +5,14 @@
<path d="M 138.0 128.0 L 138.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 120.0 150.0 L 156.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="198" y="147" width="34" height="6" rx="1" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 124.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="121" width="27" height="7" rx="2" fill="#c5cad4"/>
<path d="M 183.0 62.0 L 183.0 122.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 164.0 76.0 L 183.0 76.0" stroke="#6b7180" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 134.1 35.9 L 162.0 47.1 L 170.0 76.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 146.0 120.0 L 190.9 109.9 L 216.0 141.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 140.0 118.0 Q 131.0 75.4 128.1 33.9" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 128.1 33.9 L 155.7 45.8 L 166.0 74.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 140.0 118.0 L 185.2 109.3 L 212.0 139.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 174.0 109.6 L 202.0 109.6" stroke="#6b7180" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 207.2 141.8 L 220.8 138.2" stroke="#6b7180" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="131.6" cy="14.2" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="141.5" y1="15.9" x2="148.4" y2="17.1" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Dead Bug</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 191.0 150.0 L 211.2 108.7 L 250.6 115.6" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 185.0 148.0 Q 141.5 148.0 100.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 100.0 148.0 L 100.0 118.0 L 100.0 88.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="80.4" cy="143.8" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="80.4" y1="133.8" x2="80.4" y2="126.8" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Dead Bug</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 191.0 150.0 L 235.2 137.3 L 273.7 126.3" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 185.0 148.0 Q 141.5 148.0 100.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 100.0 148.0 L 78.8 126.8 L 57.6 105.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="80.4" cy="143.8" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="80.4" y1="133.8" x2="80.4" y2="126.8" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Dead Bug</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 191.0 150.0 L 211.2 108.7 L 250.6 115.6" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 185.0 148.0 Q 141.5 148.0 100.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 100.0 148.0 L 100.0 118.0 L 100.0 88.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="80.4" cy="143.8" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="80.4" y1="133.8" x2="80.4" y2="126.8" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<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: 1.5 KiB

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Dead Bug</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 106.0 150.0 L 84.8 128.8 L 63.6 107.6" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 191.0 150.0 L 211.2 108.7 L 250.6 115.6" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 185.0 148.0 Q 141.5 148.0 100.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 100.0 148.0 L 100.0 118.0 L 100.0 88.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 229.2 135.3 L 267.7 124.3" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="80.4" cy="143.8" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="80.4" y1="133.8" x2="80.4" y2="126.8" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<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: 1.5 KiB

+15 -1
View File
@@ -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]
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 188 KiB

+2 -2
View File
@@ -1,11 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Dead Bug</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 106.0 150.0 L 106.0 120.0 L 106.0 90.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 191.0 150.0 L 235.2 137.3 L 273.7 126.3" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 185.0 148.0 Q 141.5 148.0 100.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 100.0 148.0 L 78.8 126.8 L 57.6 105.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 185.0 148.0 L 205.2 106.7 L 244.6 113.6" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="80.4" cy="143.8" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="80.4" y1="133.8" x2="80.4" y2="126.8" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -2,16 +2,15 @@
<title>Lat Pull Down</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 126.0 130.0 L 162.0 130.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 130.0 L 124.0 56.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 56.0 L 198.0 12.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="112" width="40" height="7" rx="3" fill="#c5cad4"/>
<path d="M 198.0 8.0 L 200.0 25.0" stroke="#c5cad4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 173.5 16.5 L 202.0 26.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 144.0 132.0 L 144.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="272.0" cy="19.0" r="4" fill="#6b7180"/>
<path d="M 272.0 19.0 L 196.0 2.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 181.7 28.2 L 198.0 3.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 156.0 124.0 L 200.2 111.1 L 197.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 150.0 122.0 Q 146.6 78.6 147.7 37.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 169.1 16.0 L 198.0 24.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 174.8 24.0 L 194.0 1.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 150.0 122.0 L 194.4 110.0 L 193.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 172.0 25.0 L 228.0 25.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 172.0 2.0 L 220.0 2.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="149.5" cy="17.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="155.2" y1="8.9" x2="159.2" y2="3.2" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -2,16 +2,15 @@
<title>Lat Pull Down</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 126.0 130.0 L 162.0 130.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 130.0 L 124.0 56.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 56.0 L 198.0 12.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="112" width="40" height="7" rx="3" fill="#c5cad4"/>
<path d="M 198.0 8.0 L 167.0 67.0" stroke="#c5cad4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 139.1 65.3 L 169.0 68.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 144.0 132.0 L 144.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="272.0" cy="19.0" r="4" fill="#6b7180"/>
<path d="M 272.0 19.0 L 196.0 36.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 176.8 58.2 L 198.0 37.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 156.0 124.0 L 200.2 111.1 L 197.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 150.0 122.0 Q 146.6 78.6 147.7 37.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 135.1 64.2 L 165.0 66.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 171.7 55.1 L 194.0 35.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 150.0 122.0 L 194.4 110.0 L 193.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 139.0 67.0 L 195.0 67.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 172.0 36.0 L 220.0 36.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="149.5" cy="17.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="158.2" y1="12.1" x2="164.2" y2="8.6" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+8 -9
View File
@@ -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]}
}
]
Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 157 KiB

+6 -7
View File
@@ -2,16 +2,15 @@
<title>Lat Pull Down</title>
<line x1="16" y1="156" x2="304" y2="156" stroke="#b9bec9" stroke-width="3" stroke-linecap="round"/>
<path d="M 126.0 130.0 L 162.0 130.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 130.0 L 124.0 56.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 56.0 L 198.0 12.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="170" y="112" width="40" height="7" rx="3" fill="#c5cad4"/>
<path d="M 198.0 8.0 L 167.0 67.0" stroke="#c5cad4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 139.1 65.3 L 169.0 68.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 144.0 132.0 L 144.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="272.0" cy="19.0" r="4" fill="#6b7180"/>
<path d="M 272.0 19.0 L 196.0 36.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 153.7 39.1 L 176.8 58.2 L 198.0 37.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 156.0 124.0 L 200.2 111.1 L 197.0 151.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 150.0 122.0 Q 146.6 78.6 147.7 37.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 135.1 64.2 L 165.0 66.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 147.7 37.1 L 171.7 55.1 L 194.0 35.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 150.0 122.0 L 194.4 110.0 L 193.0 150.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 139.0 67.0 L 195.0 67.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 172.0 36.0 L 220.0 36.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="149.5" cy="17.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="158.2" y1="12.1" x2="164.2" y2="8.6" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+9 -2
View File
@@ -13,7 +13,10 @@ changing data, never artwork.
lengths: `headR`, `neck`, `spine1`/`spine2` (two chained segments so the
spine can curve), `upperArm`/`foreArm`, `thigh`/`shin`, plus `leftOffset`
(the small offset that separates left-limb attachments visually).
`neutral` is the default; add profiles to add figures.
`neutral` is the default; add profiles to add figures. `frontal` shortens
the legs for face-on seated machines (thighs point mostly at the viewer, so
they render foreshortened); a motion opts in with a top-level
`"figure": "frontal"`.
- **`<Exercise>/motion.json`** — the exercise script: key frames of
**absolute joint angles** (degrees, y-up: `0`=forward/right, `90`=up,
`180`=back/left, `-90`=down), a `root` pelvis position, and timing.
@@ -22,6 +25,7 @@ changing data, never artwork.
{
"name": "Bird Dog",
"primary": 2, // 1-based frame used for visual.svg
"figure": "frontal", // optional profile override (default: neutral)
"working": ["arm_r", "leg_l"], // parts drawn in the accent color
"hide": [], // limbs fully occluded in this view
"frames": [
@@ -88,7 +92,10 @@ scale drawings of the machine.
- **`cable`** — a thin line from a fixed anchor `from` to a moving joint `to`;
the machine's pulley line.
- **`bar` / `dumbbell` / `pad`** — a segment centered on the joint(s) in
`at` (a single extremity, or the midpoint of `["hand_r", "hand_l"]`).
`at` (a single joint, or the midpoint of a list). Joints are the extremities
(`hand_r`, `foot_l`, …) plus the mid joints (`elbow_r`, `knee_l`, …), so a
machine pad can ride a knee (`["knee_r", "knee_l"]`) or span a shin
(`["knee_r", "foot_r"]`).
`bar` lies at a fixed world `angle` (default 0 = horizontal — in side view a
two-handed bar is drawn horizontal by convention); `dumbbell` and `pad`
default to perpendicular to the lower bone (forearm/shin), or take an
@@ -5,10 +5,10 @@
<path d="M 159.0 46.0 L 157.0 96.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 176.0 150.0 L 206.0 150.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 244.0 120.0 L 202.0 63.0" stroke="#c5cad4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 155.6 39.6 L 185.6 40.3 L 204.0 64.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 155.6 39.6 L 174.0 63.3 L 204.0 64.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 146.0 124.0 L 189.5 109.1 L 192.0 149.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 140.0 122.0 Q 142.7 78.5 149.6 37.6" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 149.6 37.6 L 179.5 40.1 L 200.0 62.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 149.6 37.6 L 170.1 59.5 L 200.0 62.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 140.0 122.0 L 183.9 108.2 L 188.0 148.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 202.0 70.0 L 202.0 56.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="153.1" cy="17.9" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+1 -1
View File
@@ -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]}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 155 KiB

@@ -5,12 +5,12 @@
<path d="M 108.0 135.0 L 146.0 135.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 137.0 L 124.0 151.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 110.0 151.0 L 140.0 151.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 116.9 71.4 L 142.9 56.4" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 98.5 69.5 L 128.0 64.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 124.0 126.0 L 168.1 112.8 L 160.0 152.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 118.0 124.0 Q 109.7 81.3 104.7 40.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 110.9 69.4 L 136.9 54.4" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 94.7 68.3 L 124.0 62.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 118.0 124.0 L 162.3 111.5 L 156.0 151.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 139.9 61.4 L 139.9 49.4" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 126.0 69.0 L 126.0 57.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="106.1" cy="20.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="116.0" y1="19.1" x2="123.0" y2="18.3" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -5,12 +5,12 @@
<path d="M 108.0 135.0 L 146.0 135.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 137.0 L 124.0 151.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 110.0 151.0 L 140.0 151.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 116.9 71.4 L 118.0 101.4" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 113.1 72.0 L 128.0 98.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 124.0 126.0 L 168.1 112.8 L 160.0 152.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 118.0 124.0 Q 109.7 81.3 104.7 40.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 110.9 69.4 L 112.0 99.4" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 109.7 69.6 L 124.0 96.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 118.0 124.0 L 162.3 111.5 L 156.0 151.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 115.0 106.4 L 115.0 94.4" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 126.0 103.0 L 126.0 91.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="106.1" cy="20.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="116.0" y1="19.1" x2="123.0" y2="18.3" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+6 -4
View File
@@ -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]}
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 156 KiB

+3 -3
View File
@@ -5,12 +5,12 @@
<path d="M 108.0 135.0 L 146.0 135.0" stroke="#c5cad4" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 124.0 137.0 L 124.0 151.0" stroke="#c5cad4" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 110.0 151.0 L 140.0 151.0" stroke="#c5cad4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 116.9 71.4 L 118.0 101.4" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 110.7 42.1 L 113.1 72.0 L 128.0 98.0" stroke="#86cfc5" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_l" d="M 124.0 126.0 L 168.1 112.8 L 160.0 152.0" stroke="#a9afba" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 118.0 124.0 Q 109.7 81.3 104.7 40.1" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 110.9 69.4 L 112.0 99.4" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 104.7 40.1 L 109.7 69.6 L 124.0 96.0" stroke="#0d9488" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 118.0 124.0 L 162.3 111.5 L 156.0 151.0" stroke="#3a3f4b" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 115.0 106.4 L 115.0 94.4" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 126.0 103.0 L 126.0 91.0" stroke="#6b7180" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="106.1" cy="20.1" r="10" fill="white" stroke="#3a3f4b" stroke-width="6"/>
<line id="nose" x1="116.0" y1="19.1" x2="123.0" y2="18.3" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+11
View File
@@ -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,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

+20 -8
View File
@@ -57,7 +57,14 @@ LIMBS = { # limb -> (attach joint, [bone length keys], pin key)
ANGLE_KEYS = ["spine", "neck", "gaze", "arm_r", "arm_l", "leg_r", "leg_l"]
JOINT_LIMB = {"hand_r": "arm_r", "hand_l": "arm_l", "foot_r": "leg_r", "foot_l": "leg_l"}
# Prop joint refs -> (limb, chain index): extremities are index 2, mid joints
# (elbows/knees) index 1, so equipment can ride either joint.
JOINT_LIMB = {
"hand_r": ("arm_r", 2), "elbow_r": ("arm_r", 1),
"hand_l": ("arm_l", 2), "elbow_l": ("arm_l", 1),
"foot_r": ("leg_r", 2), "knee_r": ("leg_r", 1),
"foot_l": ("leg_l", 2), "knee_l": ("leg_l", 1),
}
def bodies():
@@ -244,17 +251,19 @@ def flip_props(props, width):
def joint_points(geo, ref):
"""Resolve a joint ref — `"hand_r"` or a `["hand_r", "hand_l"]` midpoint
to (point, lower-bone unit direction). None when the limb isn't drawn."""
"""Resolve a joint ref — `"hand_r"`, `"knee_l"`, or a midpoint list like
`["knee_r", "foot_r"]` — to (point, unit direction of the bone ending at
the first joint). None when the limb isn't drawn."""
names = ref if isinstance(ref, list) else [ref]
pts, direction = [], None
for name in names:
limb = geo.get(JOINT_LIMB[name])
limb_name, idx = JOINT_LIMB[name]
limb = geo.get(limb_name)
if not limb:
return None, None
pts.append(limb[-1])
pts.append(limb[idx])
if direction is None:
a, b = limb[-2], limb[-1]
a, b = limb[idx - 1], limb[idx]
d = math.hypot(b[0] - a[0], b[1] - a[1]) or 1.0
direction = ((b[0] - a[0]) / d, (b[1] - a[1]) / d)
return ((sum(p[0] for p in pts) / len(pts),
@@ -487,7 +496,9 @@ def export_app_resources(folders):
def render_exercise(folder, figure="neutral", flip=False):
motion = load_motion(folder)
body = bodies()[figure]
# A motion may pin its own profile (e.g. "frontal": foreshortened legs for
# face-on seated machines); it wins over the CLI default.
body = bodies()[motion.get("figure", figure)]
working = set(motion.get("working", []))
hide = set(motion.get("hide", []))
props = motion.get("props", [])
@@ -521,10 +532,11 @@ def contact_sheet(folders, figure="neutral", out=None):
from PIL import Image, ImageDraw
font = legend_font()
body = bodies()[figure]
profiles = bodies()
cells = []
for folder in folders:
motion = load_motion(folder)
body = profiles[motion.get("figure", figure)]
working, hide = set(motion.get("working", [])), set(motion.get("hide", []))
props = motion.get("props", [])
for i, kf in enumerate(motion["frames"], start=1):