@franzenzenhofer/asanakit 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -46
- package/dist/anatomy/muscles.d.ts +10 -7
- package/dist/anatomy/muscles.d.ts.map +1 -1
- package/dist/anatomy/muscles.js +21 -17
- package/dist/anatomy/muscles.js.map +1 -1
- package/dist/anatomy/validate.d.ts.map +1 -1
- package/dist/anatomy/validate.js +16 -10
- package/dist/anatomy/validate.js.map +1 -1
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +24 -2
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +3 -1
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/render.d.ts.map +1 -1
- package/dist/cli/commands/render.js +12 -3
- package/dist/cli/commands/render.js.map +1 -1
- package/dist/cli/commands/view.d.ts +3 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +40 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/index.js +7 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/resolve.d.ts +6 -0
- package/dist/cli/resolve.d.ts.map +1 -1
- package/dist/cli/resolve.js +40 -0
- package/dist/cli/resolve.js.map +1 -1
- package/dist/core/camera.d.ts +56 -0
- package/dist/core/camera.d.ts.map +1 -0
- package/dist/core/camera.js +20 -0
- package/dist/core/camera.js.map +1 -0
- package/dist/core/joints.d.ts +18 -0
- package/dist/core/joints.d.ts.map +1 -0
- package/dist/core/joints.js +27 -0
- package/dist/core/joints.js.map +1 -0
- package/dist/core/quat.d.ts +18 -0
- package/dist/core/quat.d.ts.map +1 -0
- package/dist/core/quat.js +25 -0
- package/dist/core/quat.js.map +1 -0
- package/dist/core/rig.d.ts +1 -6
- package/dist/core/rig.d.ts.map +1 -1
- package/dist/core/rig.js +45 -74
- package/dist/core/rig.js.map +1 -1
- package/dist/core/skeleton.d.ts +4 -13
- package/dist/core/skeleton.d.ts.map +1 -1
- package/dist/core/skeleton.js +39 -69
- package/dist/core/skeleton.js.map +1 -1
- package/dist/core/types.d.ts +62 -55
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/vec3.d.ts +13 -0
- package/dist/core/vec3.d.ts.map +1 -0
- package/dist/core/vec3.js +26 -0
- package/dist/core/vec3.js.map +1 -0
- package/dist/export3d/gltf.d.ts +11 -0
- package/dist/export3d/gltf.d.ts.map +1 -0
- package/dist/export3d/gltf.js +28 -0
- package/dist/export3d/gltf.js.map +1 -0
- package/dist/export3d/index.d.ts +3 -0
- package/dist/export3d/index.d.ts.map +1 -0
- package/dist/export3d/index.js +3 -0
- package/dist/export3d/index.js.map +1 -0
- package/dist/export3d/shims.d.ts +7 -0
- package/dist/export3d/shims.d.ts.map +1 -0
- package/dist/export3d/shims.js +27 -0
- package/dist/export3d/shims.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/library/index.js +4 -4
- package/dist/library/index.js.map +1 -1
- package/dist/model/pose.d.ts +11 -5
- package/dist/model/pose.d.ts.map +1 -1
- package/dist/model/pose.js +30 -16
- package/dist/model/pose.js.map +1 -1
- package/dist/model/schema.d.ts +69 -28
- package/dist/model/schema.d.ts.map +1 -1
- package/dist/model/schema.js +57 -17
- package/dist/model/schema.js.map +1 -1
- package/dist/physics/index.d.ts +3 -0
- package/dist/physics/index.d.ts.map +1 -0
- package/dist/physics/index.js +3 -0
- package/dist/physics/index.js.map +1 -0
- package/dist/physics/rapier-types.d.ts +60 -0
- package/dist/physics/rapier-types.d.ts.map +1 -0
- package/dist/physics/rapier-types.js +12 -0
- package/dist/physics/rapier-types.js.map +1 -0
- package/dist/physics/settle.d.ts +3 -0
- package/dist/physics/settle.d.ts.map +1 -0
- package/dist/physics/settle.js +108 -0
- package/dist/physics/settle.js.map +1 -0
- package/dist/physics/world.d.ts +4 -0
- package/dist/physics/world.d.ts.map +1 -0
- package/dist/physics/world.js +18 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/render/anatomy.js +1 -1
- package/dist/render/anatomy.js.map +1 -1
- package/dist/render/annotations.d.ts +3 -2
- package/dist/render/annotations.d.ts.map +1 -1
- package/dist/render/annotations.js.map +1 -1
- package/dist/render/camera.d.ts +43 -0
- package/dist/render/camera.d.ts.map +1 -0
- package/dist/render/camera.js +57 -0
- package/dist/render/camera.js.map +1 -0
- package/dist/render/context.d.ts +5 -3
- package/dist/render/context.d.ts.map +1 -1
- package/dist/render/figure.d.ts +4 -2
- package/dist/render/figure.d.ts.map +1 -1
- package/dist/render/figure.js +29 -43
- package/dist/render/figure.js.map +1 -1
- package/dist/render/index.d.ts +1 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/props.d.ts +4 -3
- package/dist/render/props.d.ts.map +1 -1
- package/dist/render/props.js.map +1 -1
- package/dist/render/scene.d.ts +7 -1
- package/dist/render/scene.d.ts.map +1 -1
- package/dist/render/scene.js +8 -1
- package/dist/render/scene.js.map +1 -1
- package/dist/render/sheet.d.ts +3 -0
- package/dist/render/sheet.d.ts.map +1 -1
- package/dist/render/sheet.js +2 -0
- package/dist/render/sheet.js.map +1 -1
- package/dist/solve.d.ts +14 -0
- package/dist/solve.d.ts.map +1 -0
- package/dist/solve.js +17 -0
- package/dist/solve.js.map +1 -0
- package/dist/standards/keypoints.d.ts +2 -10
- package/dist/standards/keypoints.d.ts.map +1 -1
- package/dist/standards/keypoints.js +33 -14
- package/dist/standards/keypoints.js.map +1 -1
- package/dist/three/index.d.ts +2 -0
- package/dist/three/index.d.ts.map +1 -0
- package/dist/three/index.js +2 -0
- package/dist/three/index.js.map +1 -0
- package/dist/three/scene.d.ts +22 -0
- package/dist/three/scene.d.ts.map +1 -0
- package/dist/three/scene.js +90 -0
- package/dist/three/scene.js.map +1 -0
- package/dist/viewer/html.d.ts +16 -0
- package/dist/viewer/html.d.ts.map +1 -0
- package/dist/viewer/html.js +59 -0
- package/dist/viewer/html.js.map +1 -0
- package/dist/viewer/index.d.ts +2 -0
- package/dist/viewer/index.d.ts.map +1 -0
- package/dist/viewer/index.js +2 -0
- package/dist/viewer/index.js.map +1 -0
- package/dist/viewer/viewer.bundle.js +4119 -0
- package/docs/AUTHORING.md +119 -58
- package/package.json +20 -5
- package/poses/surf/bottom-turn.pose.yaml +24 -24
- package/poses/surf/cutback.pose.yaml +24 -24
- package/poses/surf/duck-dive.pose.yaml +23 -23
- package/poses/surf/noseride.pose.yaml +23 -25
- package/poses/surf/paddling.pose.yaml +24 -24
- package/poses/surf/pop-up.pose.yaml +24 -24
- package/poses/surf/takeoff.pose.yaml +24 -24
- package/poses/surf/tube-stance.pose.yaml +24 -24
- package/poses/yoga/ashtanga/adho-mukha-svanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/ardha-uttanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/baddha-konasana.pose.yaml +21 -23
- package/poses/yoga/ashtanga/balasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/chaturanga-dandasana.pose.yaml +21 -21
- package/poses/yoga/ashtanga/dandasana.pose.yaml +21 -23
- package/poses/yoga/ashtanga/halasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/janu-sirsasana-a.pose.yaml +22 -22
- package/poses/yoga/ashtanga/karnapidasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/marichyasana-a.pose.yaml +22 -22
- package/poses/yoga/ashtanga/marichyasana-c.pose.yaml +21 -23
- package/poses/yoga/ashtanga/matsyasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/navasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/padahastasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/padangusthasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/padmasana.pose.yaml +22 -24
- package/poses/yoga/ashtanga/parsvottanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/paschimottanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/prasarita-padottanasana-a.pose.yaml +26 -26
- package/poses/yoga/ashtanga/prasarita-padottanasana-c.pose.yaml +26 -26
- package/poses/yoga/ashtanga/primary.seq.yaml +2 -4
- package/poses/yoga/ashtanga/purvottanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/salamba-sarvangasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/samasthiti.pose.yaml +10 -10
- package/poses/yoga/ashtanga/savasana.pose.yaml +21 -21
- package/poses/yoga/ashtanga/setu-bandhasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/sirsasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/supta-padangusthasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/upavistha-konasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/urdhva-dhanurasana.pose.yaml +23 -23
- package/poses/yoga/ashtanga/urdhva-hastasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/urdhva-mukha-svanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/utkatasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/uttanasana.pose.yaml +22 -22
- package/poses/yoga/ashtanga/utthita-parsvakonasana.pose.yaml +24 -24
- package/poses/yoga/ashtanga/utthita-trikonasana.pose.yaml +24 -24
- package/poses/yoga/ashtanga/virabhadrasana-a.pose.yaml +22 -22
- package/poses/yoga/ashtanga/virabhadrasana-b.pose.yaml +21 -23
package/README.md
CHANGED
|
@@ -1,44 +1,66 @@
|
|
|
1
1
|
# asanakit
|
|
2
2
|
|
|
3
|
-
**Programmatic stick-figure and
|
|
3
|
+
**Programmatic stick-figure and body-posture visualization for yoga and surf, in 2D and 3D.**
|
|
4
4
|
|
|
5
|
-
Describe a posture as data. Get a correct, deterministic, machine-readable illustration
|
|
5
|
+
Describe a posture as data. Get a correct, deterministic, machine-readable illustration -
|
|
6
|
+
from any camera angle - plus an interactive 3D viewer, a GLB model, and physics-correct
|
|
7
|
+
positioning when you ask for it.
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
npx @franzenzenhofer/asanakit render adho-mukha-svanasana -o downdog.svg --style anatomy --title
|
|
11
|
+
npx @franzenzenhofer/asanakit render virabhadrasana-b --camera three-quarter -o warrior.png
|
|
12
|
+
npx @franzenzenhofer/asanakit view utthita-trikonasana --open # orbit it in 3D, offline
|
|
13
|
+
npx @franzenzenhofer/asanakit gltf navasana -o boat.glb # a model any 3D viewer opens
|
|
9
14
|
npx @franzenzenhofer/asanakit sheet --sequence ashtanga-primary -o primary-series.png --columns 6 --numbered
|
|
10
15
|
```
|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
Every pose solves to a real **3D skeleton** (quaternion forward kinematics over a 20-bone
|
|
18
|
+
rig). The 2D pictures are camera projections of that solve - front, back, side, any azimuth
|
|
19
|
+
and elevation - rendered without a browser or a GPU, byte-identical on every machine. It
|
|
20
|
+
ships with the **full Ashtanga Primary Series** - 37 asanas, 60 steps - plus 8 surf postures.
|
|
15
21
|
|
|
16
22
|

|
|
17
23
|
|
|
24
|
+
## One pose, any viewpoint
|
|
25
|
+
|
|
26
|
+
The posture is the data; the viewpoint is just a parameter:
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
18
30
|
---
|
|
19
31
|
|
|
20
32
|
## Why it exists
|
|
21
33
|
|
|
22
34
|
Every other option is a dead end. Traced SVG artwork is unposeable. Pose-estimation
|
|
23
35
|
datasets give you keypoints scraped from photos, with no joint angles, no licence you can
|
|
24
|
-
use, and no way to say "now bend that knee ten degrees more". 3D mannequin
|
|
25
|
-
|
|
36
|
+
use, and no way to say "now bend that knee ten degrees more". 3D mannequin tools are GPL,
|
|
37
|
+
or need a GPU, or both.
|
|
26
38
|
|
|
27
|
-
asanakit takes the third path: a **20-bone kinematic rig** plus a **declarative pose
|
|
28
|
-
The posture is the data.
|
|
39
|
+
asanakit takes the third path: a **20-bone 3D kinematic rig** plus a **declarative pose
|
|
40
|
+
format**. The posture is the data. Every picture - flat or interactive - is a pure
|
|
41
|
+
function of it.
|
|
29
42
|
|
|
30
43
|
## What you get
|
|
31
44
|
|
|
32
|
-
- **A pose format** (`.pose.yaml`) with a published JSON Schema.
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
- **A pose format** (`.pose.yaml`) with a published JSON Schema. Anatomical joint rotations
|
|
46
|
+
(`flex` / `abduct` / `twist`), absolute bone directions (`azimuth` / `elevation`), a
|
|
47
|
+
default camera, props, annotations, muscle activation, teaching cues.
|
|
48
|
+
- **3D forward kinematics** over a 20-bone humanoid rig with anatomical proportions. The
|
|
49
|
+
rotation axes live in the rig as data, so left and right are exact mirrors by construction.
|
|
50
|
+
- **Any-angle 2D rendering.** Orthographic camera, depth-sorted painter's algorithm,
|
|
51
|
+
deterministic SVG/PNG with `data-bone` / `data-muscle` / `data-annotation` hooks. No GPU.
|
|
52
|
+
- **An interactive 3D viewer.** `asanakit view` writes ONE self-contained offline HTML file
|
|
53
|
+
(three.js inlined): drag to orbit, scroll to zoom, white background.
|
|
54
|
+
- **GLB / glTF export** via three.js - open the posture in any 3D viewer, rotatable and
|
|
55
|
+
zoomable, muscles colored.
|
|
56
|
+
- **Physics when necessary.** `--settle` (or `physics: settle` in the pose) drops the figure
|
|
57
|
+
onto the ground plane with [Rapier](https://rapier.rs) and lets it rest on its true
|
|
58
|
+
support. The authored pose is preserved exactly; only position and orientation change.
|
|
35
59
|
- **An anatomical validator.** Knees and elbows that bend backwards are rejected. A pose
|
|
36
60
|
declares which parts of the body touch the floor, and asanakit checks that they do.
|
|
37
61
|
- **Seven styles**, all pure token data: `stick`, `anatomy`, `silhouette`, `blueprint`,
|
|
38
62
|
`ink`, `poster`, `minimal`.
|
|
39
|
-
- **
|
|
40
|
-
`data-muscle`, `data-annotation` hooks so the output stays machine-readable.
|
|
41
|
-
- **Keypoint export** to MediaPipe-33 and COCO-17 for interop with pose-estimation tooling.
|
|
63
|
+
- **Keypoint export** to MediaPipe-33 and COCO-17 - now with real z.
|
|
42
64
|
- **Contact sheets and sequences** - render a whole practice in one command.
|
|
43
65
|
|
|
44
66
|
## The same posture, seven ways
|
|
@@ -48,8 +70,8 @@ The posture is the data. The picture is a pure function of it.
|
|
|
48
70
|
## Anatomy, not decoration
|
|
49
71
|
|
|
50
72
|
Muscles are displaced in two anatomical planes - lateral (left/right) and sagittal
|
|
51
|
-
(front/back) -
|
|
52
|
-
stretched muscles the other.
|
|
73
|
+
(front/back) - and fade between them continuously as the camera orbits, so the chest is
|
|
74
|
+
never drawn behind the back. Engaged muscles shade one way, stretched muscles the other.
|
|
53
75
|
|
|
54
76
|

|
|
55
77
|
|
|
@@ -70,33 +92,31 @@ The npm registry refuses the bare name `asanakit` (too close to the unrelated
|
|
|
70
92
|
## The format
|
|
71
93
|
|
|
72
94
|
```yaml
|
|
73
|
-
asanakit:
|
|
95
|
+
asanakit: 2
|
|
74
96
|
id: utthita-trikonasana
|
|
75
97
|
name: Extended Triangle
|
|
76
98
|
sanskrit: Utthita Trikoṇāsana
|
|
77
99
|
discipline: yoga
|
|
78
100
|
family: standing
|
|
79
|
-
breath:
|
|
101
|
+
breath: exhale
|
|
80
102
|
drishti: hastagrai
|
|
81
103
|
cues:
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
|
|
104
|
+
- Reach sideways out of the waist before you tilt down
|
|
105
|
+
contact: [toeL, toeR, handTipL]
|
|
106
|
+
camera: front # the pose's default viewpoint
|
|
85
107
|
figure:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
root:
|
|
109
|
+
roll: -65 # the torso cartwheels over the front leg
|
|
110
|
+
world: # absolute directions: azimuth on the body's
|
|
111
|
+
thighL: { azimuth: 90, elevation: -45 } # compass (0 = forward, 90 = the figure's left),
|
|
112
|
+
thighR: { azimuth: -90, elevation: -45 } # elevation from horizontal (90 = up)
|
|
113
|
+
spine: { azimuth: 90, elevation: 25 }
|
|
114
|
+
upperArmL: { azimuth: 90, elevation: -80 }
|
|
115
|
+
upperArmR: { azimuth: -90, elevation: 80 }
|
|
116
|
+
joints: # or anatomical rotations relative to the parent
|
|
117
|
+
footL: { abduct: 10 } # flex / abduct / twist, in degrees
|
|
93
118
|
props:
|
|
94
119
|
- type: mat
|
|
95
|
-
annotations:
|
|
96
|
-
- type: angle
|
|
97
|
-
at: kneeL
|
|
98
|
-
from: hipJointL
|
|
99
|
-
to: ankleL
|
|
100
120
|
muscles:
|
|
101
121
|
engaged: [obliques, quadriceps]
|
|
102
122
|
stretched: [hamstrings, adductors]
|
|
@@ -109,45 +129,57 @@ Full guide: **[docs/AUTHORING.md](docs/AUTHORING.md)**.
|
|
|
109
129
|
| Command | What it does |
|
|
110
130
|
|---|---|
|
|
111
131
|
| `asanakit render <pose> -o out.svg` | render one pose (`.svg` or `.png`) |
|
|
132
|
+
| `asanakit render <pose> --camera back` | ...from any preset or `"azimuth=30,elevation=15"` |
|
|
133
|
+
| `asanakit view <pose> --open` | interactive 3D viewer: one offline HTML file |
|
|
134
|
+
| `asanakit gltf <pose> -o pose.glb` | export a 3D model (`.glb` or `.gltf`) |
|
|
112
135
|
| `asanakit sheet --all -o sheet.png` | contact sheet of many poses |
|
|
113
136
|
| `asanakit sequence <id> -o dir/` | every pose of a sequence, in practice order |
|
|
114
137
|
| `asanakit lint [poses...]` | check poses against the limits of a real body |
|
|
115
138
|
| `asanakit list` | what is in the library |
|
|
116
|
-
| `asanakit vocab` | every joint, landmark, muscle and
|
|
139
|
+
| `asanakit vocab` | every joint, landmark, muscle, style and camera name |
|
|
117
140
|
| `asanakit schema` | the JSON Schema for the pose format |
|
|
118
|
-
| `asanakit keypoints <pose>` | export as MediaPipe-33 / COCO-17 keypoints |
|
|
119
|
-
| `asanakit landmarks <pose>` | the solved skeleton, as JSON |
|
|
141
|
+
| `asanakit keypoints <pose>` | export as MediaPipe-33 / COCO-17 keypoints (x, y, z) |
|
|
142
|
+
| `asanakit landmarks <pose>` | the solved 3D skeleton, as JSON |
|
|
120
143
|
|
|
121
|
-
Options: `--style`, `--width`, `--height`, `--title`, `--caption`,
|
|
122
|
-
`--background`, `--optimize`, `--scale`, `--lib <dir>`.
|
|
144
|
+
Options: `--camera`, `--settle`, `--style`, `--width`, `--height`, `--title`, `--caption`,
|
|
145
|
+
`--muscles`, `--background`, `--optimize`, `--scale`, `--lib <dir>`.
|
|
123
146
|
|
|
124
147
|
## Library API
|
|
125
148
|
|
|
126
149
|
```ts
|
|
127
|
-
import { parsePose, renderSvg, renderPng, validatePose,
|
|
150
|
+
import { parsePose, renderSvg, renderPng, validatePose, solvePose, exportGlb, buildViewerHtml } from '@franzenzenhofer/asanakit';
|
|
128
151
|
|
|
129
152
|
const pose = parsePose(yamlSource, 'triangle.pose.yaml');
|
|
130
153
|
|
|
131
|
-
const issues = validatePose(pose);
|
|
132
|
-
const svg = renderSvg(pose, { style: 'anatomy', title: true });
|
|
154
|
+
const issues = validatePose(pose); // [] means anatomically sound
|
|
155
|
+
const svg = renderSvg(pose, { style: 'anatomy', camera: 'three-quarter', title: true });
|
|
133
156
|
const png = renderPng(svg, { width: 1200 });
|
|
157
|
+
|
|
158
|
+
const skeleton = await solvePose(pose, { settle: true }); // physics lives behind this await
|
|
159
|
+
const glb = await exportGlb(skeleton);
|
|
160
|
+
const html = await buildViewerHtml(skeleton, { title: pose.name, camera: { azimuth: 30, elevation: 15, roll: 0 } });
|
|
134
161
|
```
|
|
135
162
|
|
|
163
|
+
Physics is lazy: importing the package never loads the Rapier WASM; only `solvePose`
|
|
164
|
+
with settling (or `import '@franzenzenhofer/asanakit/physics'`) does.
|
|
165
|
+
|
|
136
166
|
## Built for machines as well as people
|
|
137
167
|
|
|
138
168
|
- Errors name the field and the file, and report every problem at once.
|
|
139
169
|
- `asanakit schema` and `asanakit vocab` are the full contract - a model can discover the
|
|
140
170
|
entire vocabulary without reading the source.
|
|
141
171
|
- `asanakit lint` turns "does this look right" into a check that either passes or fails.
|
|
142
|
-
- Rendering is deterministic, so output diffs are meaningful in review.
|
|
172
|
+
- Rendering is deterministic, so output diffs are meaningful in review. (Physics-settled
|
|
173
|
+
output is deterministic per machine: fixed timestep, two runs are identical.)
|
|
143
174
|
|
|
144
175
|
## Licence
|
|
145
176
|
|
|
146
177
|
MIT.
|
|
147
178
|
|
|
148
|
-
Dependencies are all permissive: `
|
|
149
|
-
`
|
|
150
|
-
`@resvg/resvg-js` (MPL-2.0, used unmodified as a
|
|
179
|
+
Dependencies are all permissive: `three` (MIT), `@dimforge/rapier3d-compat` (Apache-2.0),
|
|
180
|
+
`gl-matrix` (MIT), `d3-shape`/`d3-path` (ISC), `xmlbuilder2` (MIT), `commander` (MIT),
|
|
181
|
+
`zod` (MIT), `yaml` (ISC), `svgo` (MIT), `@resvg/resvg-js` (MPL-2.0, used unmodified as a
|
|
182
|
+
dependency).
|
|
151
183
|
|
|
152
184
|
The MediaPipe-33 and COCO-17 keypoint layouts restate the public layouts published by the
|
|
153
185
|
Apache-2.0 licensed MediaPipe and tfjs-models projects.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BoneId
|
|
1
|
+
import type { BoneId } from '../core/types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Muscles are modelled as capsules laid over the bone they act on: a span
|
|
4
4
|
* `t0..t1` along the bone, pushed off it, and drawn `width` thick.
|
|
@@ -44,12 +44,15 @@ export interface MuscleInstance {
|
|
|
44
44
|
readonly offset: number;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* Resolve a muscle to the concrete bellies drawn for a
|
|
47
|
+
* Resolve a muscle to the concrete bellies drawn for a camera azimuth.
|
|
48
48
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
49
|
+
* The two displacement planes fade continuously with the viewpoint: the
|
|
50
|
+
* left/right split is fully visible face-on (azimuth 0) and collapses in
|
|
51
|
+
* profile; the front/back displacement does the opposite, signed by which
|
|
52
|
+
* profile the camera stands on. Face-on, a paired torso muscle is two bellies
|
|
53
|
+
* either side of the spine; in profile it is one belly, in front of or behind
|
|
54
|
+
* it. Limb muscles are always drawn on both limbs - in profile the two simply
|
|
55
|
+
* overlap, which is exactly what you see.
|
|
53
56
|
*/
|
|
54
|
-
export declare const muscleInstances: (muscle: MuscleDef,
|
|
57
|
+
export declare const muscleInstances: (muscle: MuscleDef, azimuthDeg: number) => MuscleInstance[];
|
|
55
58
|
//# sourceMappingURL=muscles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muscles.d.ts","sourceRoot":"","sources":["../../src/anatomy/muscles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"muscles.d.ts","sourceRoot":"","sources":["../../src/anatomy/muscles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,OAAO,GACP,MAAM,GACN,MAAM,GACN,UAAU,GACV,UAAU,GACV,SAAS,GACT,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAOX,eAAO,MAAM,UAAU,wRAoBb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAsB/C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,QAA4B,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAOD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,EAAE,YAAY,MAAM,KAAG,cAAc,EAqBrF,CAAC"}
|
package/dist/anatomy/muscles.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { degToRad } from '../core/angles.js';
|
|
2
2
|
/** Torso bones run upwards, limb bones hang downwards, so their left-normals point opposite ways. */
|
|
3
3
|
const TORSO_BONES = ['pelvis', 'spine', 'neck', 'head', 'clavicle', 'hip'];
|
|
4
4
|
const anteriorSign = (bone) => (TORSO_BONES.includes(bone) ? -1 : 1);
|
|
@@ -46,31 +46,35 @@ export const MUSCLES = {
|
|
|
46
46
|
};
|
|
47
47
|
export const isMuscleId = (value) => value in MUSCLES;
|
|
48
48
|
const isTorsoMuscle = (muscle) => TORSO_BONES.includes(muscle.bone);
|
|
49
|
+
/** A pair of bellies this close together reads as one; draw it once. */
|
|
50
|
+
const PAIR_MERGE = 0.01;
|
|
49
51
|
/**
|
|
50
|
-
* Resolve a muscle to the concrete bellies drawn for a
|
|
52
|
+
* Resolve a muscle to the concrete bellies drawn for a camera azimuth.
|
|
51
53
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* The two displacement planes fade continuously with the viewpoint: the
|
|
55
|
+
* left/right split is fully visible face-on (azimuth 0) and collapses in
|
|
56
|
+
* profile; the front/back displacement does the opposite, signed by which
|
|
57
|
+
* profile the camera stands on. Face-on, a paired torso muscle is two bellies
|
|
58
|
+
* either side of the spine; in profile it is one belly, in front of or behind
|
|
59
|
+
* it. Limb muscles are always drawn on both limbs - in profile the two simply
|
|
60
|
+
* overlap, which is exactly what you see.
|
|
56
61
|
*/
|
|
57
|
-
export const muscleInstances = (muscle,
|
|
58
|
-
const
|
|
59
|
-
const
|
|
62
|
+
export const muscleInstances = (muscle, azimuthDeg) => {
|
|
63
|
+
const az = degToRad(azimuthDeg);
|
|
64
|
+
const lateralVis = Math.cos(az);
|
|
65
|
+
const sagittalVis = -Math.sin(az);
|
|
66
|
+
const sagittal = muscle.sagittal * anteriorSign(muscle.bone) * sagittalVis;
|
|
60
67
|
if (isTorsoMuscle(muscle)) {
|
|
61
68
|
const bone = muscle.bone;
|
|
62
|
-
|
|
69
|
+
const split = muscle.lateral * lateralVis;
|
|
70
|
+
if (Math.abs(split) < PAIR_MERGE)
|
|
63
71
|
return [{ bone, offset: sagittal }];
|
|
64
|
-
if (muscle.lateral === 0)
|
|
65
|
-
return [{ bone, offset: 0 }];
|
|
66
72
|
return [
|
|
67
|
-
{ bone, offset:
|
|
68
|
-
{ bone, offset: -
|
|
73
|
+
{ bone, offset: sagittal + split },
|
|
74
|
+
{ bone, offset: sagittal - split },
|
|
69
75
|
];
|
|
70
76
|
}
|
|
71
|
-
|
|
72
|
-
// visible, and face-on that displacement points at the viewer and collapses.
|
|
73
|
-
const offset = profile ? sagittal : muscle.lateral;
|
|
77
|
+
const offset = muscle.lateral * lateralVis + sagittal;
|
|
74
78
|
return [
|
|
75
79
|
{ bone: `${muscle.bone}L`, offset },
|
|
76
80
|
{ bone: `${muscle.bone}R`, offset },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muscles.js","sourceRoot":"","sources":["../../src/anatomy/muscles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"muscles.js","sourceRoot":"","sources":["../../src/anatomy/muscles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/anatomy/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/anatomy/validate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,GAAG,EAAY,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,mBAAmB,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC;AAmHD,yFAAyF;AACzF,eAAO,MAAM,YAAY,GAAI,MAAM,QAAQ,EAAE,MAAK,GAAiB,KAAG,KAAK,EAG1E,CAAC"}
|
package/dist/anatomy/validate.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { radToDeg } from '../core/angles.js';
|
|
2
2
|
import { DEFAULT_RIG } from '../core/rig.js';
|
|
3
|
-
import {
|
|
3
|
+
import { rotateVec3 } from '../core/quat.js';
|
|
4
|
+
import { solveSkeleton } from '../core/skeleton.js';
|
|
5
|
+
import { cross3, dot3, normalize3, sub3 } from '../core/vec3.js';
|
|
4
6
|
import { resolveFigure } from '../model/index.js';
|
|
5
7
|
const KNEE = { maxFlexion: 160, hyper: 'knee-hyperextension', over: 'knee-overflexion' };
|
|
6
8
|
const ELBOW = { maxFlexion: 155, hyper: 'elbow-hyperextension', over: 'elbow-overflexion' };
|
|
@@ -15,9 +17,10 @@ const HYPEREXTENSION_SLACK = 8;
|
|
|
15
17
|
const GROUND_TOLERANCE = 0.02;
|
|
16
18
|
const CONTACT_TOLERANCE = 0.035;
|
|
17
19
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* Signed flexion of a bone away from its parent: the angle between the two
|
|
21
|
+
* bone directions, signed by the child's own flexion axis (carried into world
|
|
22
|
+
* space by the parent's orientation). Positive is the way the joint actually
|
|
23
|
+
* bends - the axis in the rig says which way that is.
|
|
21
24
|
*/
|
|
22
25
|
const flexion = (skeleton, hinge, rig) => {
|
|
23
26
|
const child = skeleton.bones[hinge.child];
|
|
@@ -25,9 +28,12 @@ const flexion = (skeleton, hinge, rig) => {
|
|
|
25
28
|
const def = rig.bones.find((b) => b.id === hinge.child);
|
|
26
29
|
if (def === undefined)
|
|
27
30
|
throw new Error(`Rig "${rig.name}" has no bone "${hinge.child}"`);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
const parentDir = normalize3(sub3(parent.end, parent.start));
|
|
32
|
+
const childDir = normalize3(sub3(child.end, child.start));
|
|
33
|
+
const cos = Math.min(1, Math.max(-1, dot3(parentDir, childDir)));
|
|
34
|
+
const angle = radToDeg(Math.acos(cos));
|
|
35
|
+
const axis = rotateVec3(parent.orientation, def.flexAxis);
|
|
36
|
+
return dot3(cross3(parentDir, childDir), axis) >= 0 ? angle : -angle;
|
|
31
37
|
};
|
|
32
38
|
const jointIssues = (skeleton, rig) => {
|
|
33
39
|
const issues = [];
|
|
@@ -57,14 +63,14 @@ const groundIssues = (skeleton) => {
|
|
|
57
63
|
issues.push({
|
|
58
64
|
code: 'below-ground',
|
|
59
65
|
severity: 'error',
|
|
60
|
-
message: `The figure sinks ${Math.abs(lowest).toFixed(2)} below the ground
|
|
66
|
+
message: `The figure sinks ${Math.abs(lowest).toFixed(2)} below the ground plane. Raise it, or set "grounded: true".`,
|
|
61
67
|
});
|
|
62
68
|
}
|
|
63
69
|
else if (lowest > GROUND_TOLERANCE) {
|
|
64
70
|
issues.push({
|
|
65
71
|
code: 'no-ground-contact',
|
|
66
72
|
severity: 'error',
|
|
67
|
-
message: `The figure floats ${lowest.toFixed(2)} above the ground
|
|
73
|
+
message: `The figure floats ${lowest.toFixed(2)} above the ground plane and touches nothing.`,
|
|
68
74
|
});
|
|
69
75
|
}
|
|
70
76
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/anatomy/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/anatomy/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,KAAG,IAmEzD,CAAC"}
|
|
@@ -1,10 +1,33 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, extname } from 'node:path';
|
|
1
3
|
import { DEFAULT_RIG } from '../../core/rig.js';
|
|
2
4
|
import { solveSkeleton } from '../../core/skeleton.js';
|
|
5
|
+
import { exportGlb, exportGltf } from '../../export3d/index.js';
|
|
3
6
|
import { resolveFigure } from '../../model/index.js';
|
|
7
|
+
import { solvePose } from '../../solve.js';
|
|
4
8
|
import { toKeypoints } from '../../standards/keypoints.js';
|
|
5
9
|
import { resolvePose } from '../resolve.js';
|
|
6
10
|
const FORMATS = ['mediapipe33', 'coco17'];
|
|
7
11
|
export const registerExportCommands = (program) => {
|
|
12
|
+
program
|
|
13
|
+
.command('gltf <pose>')
|
|
14
|
+
.description('Export a pose as a 3D model any glTF viewer can orbit and zoom (.glb or .gltf)')
|
|
15
|
+
.requiredOption('-o, --out <file>', 'output path; the extension picks binary .glb or JSON .gltf')
|
|
16
|
+
.option('--settle', 'drop the figure onto the ground with the physics engine first')
|
|
17
|
+
.option('--lib <dir>', 'load poses from this directory')
|
|
18
|
+
.action(async (ref, options) => {
|
|
19
|
+
const pose = await resolvePose(ref, options.lib);
|
|
20
|
+
const skeleton = await solvePose(pose, options.settle === undefined ? {} : { settle: options.settle });
|
|
21
|
+
const sceneOptions = { engaged: pose.muscles.engaged, stretched: pose.muscles.stretched };
|
|
22
|
+
await mkdir(dirname(options.out), { recursive: true });
|
|
23
|
+
if (extname(options.out).toLowerCase() === '.gltf') {
|
|
24
|
+
await writeFile(options.out, await exportGltf(skeleton, sceneOptions));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
await writeFile(options.out, await exportGlb(skeleton, sceneOptions));
|
|
28
|
+
}
|
|
29
|
+
process.stdout.write(`${options.out}\n`);
|
|
30
|
+
});
|
|
8
31
|
program
|
|
9
32
|
.command('keypoints <pose>')
|
|
10
33
|
.description('Export a pose as pose-estimation keypoints (MediaPipe 33 or COCO 17)')
|
|
@@ -31,13 +54,12 @@ export const registerExportCommands = (program) => {
|
|
|
31
54
|
const skeleton = solveSkeleton(resolveFigure(pose.figure), DEFAULT_RIG);
|
|
32
55
|
process.stdout.write(`${JSON.stringify({
|
|
33
56
|
pose: pose.id,
|
|
34
|
-
view: skeleton.view,
|
|
35
57
|
height: skeleton.height,
|
|
36
58
|
bounds: skeleton.bounds,
|
|
37
59
|
landmarks: skeleton.landmarks,
|
|
38
60
|
bones: Object.fromEntries(Object.entries(skeleton.bones).map(([id, b]) => [
|
|
39
61
|
id,
|
|
40
|
-
{ start: b.start, end: b.end,
|
|
62
|
+
{ start: b.start, end: b.end, orientation: b.orientation, length: b.length },
|
|
41
63
|
])),
|
|
42
64
|
}, null, 2)}\n`);
|
|
43
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAiGvD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { MUSCLES, MUSCLE_IDS } from '../../anatomy/muscles.js';
|
|
3
3
|
import { validatePose } from '../../anatomy/validate.js';
|
|
4
|
+
import { CAMERA_PRESET_IDS } from '../../core/camera.js';
|
|
4
5
|
import { BONE_IDS, LANDMARK_IDS } from '../../core/types.js';
|
|
5
6
|
import { parsePose, poseJsonSchema, sequenceJsonSchema } from '../../model/index.js';
|
|
6
7
|
import { STYLES, STYLE_IDS } from '../../render/index.js';
|
|
@@ -91,10 +92,11 @@ export const registerInfoCommands = (program) => {
|
|
|
91
92
|
.action(() => {
|
|
92
93
|
json({
|
|
93
94
|
joints: BONE_IDS,
|
|
95
|
+
jointAxes: ['flex', 'abduct', 'twist'],
|
|
94
96
|
landmarks: LANDMARK_IDS,
|
|
95
97
|
muscles: MUSCLE_IDS.map((id) => ({ id, label: MUSCLES[id].label, region: MUSCLES[id].region })),
|
|
96
98
|
styles: STYLE_IDS.map((id) => ({ id, label: STYLES[id].label })),
|
|
97
|
-
|
|
99
|
+
cameras: CAMERA_PRESET_IDS,
|
|
98
100
|
});
|
|
99
101
|
});
|
|
100
102
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DzC,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,KAAG,IA4FzD,CAAC"}
|