create-aura3d 1.1.2 → 1.3.1
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/package.json +10 -9
- package/templates/{cartoon-channel → animation-channel}/README.md +11 -11
- package/templates/{cartoon-studio → animation-channel}/index.html +1 -1
- package/templates/{cartoon-channel → animation-channel}/package.json +2 -2
- package/templates/{cartoon-channel → animation-channel}/src/episode.ts +22 -22
- package/templates/{cartoon-channel → animation-channel}/src/experimental/README.md +5 -5
- package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.css +3 -3
- package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.ts +7 -7
- package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.css +4 -4
- package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.ts +6 -6
- package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.css +3 -3
- package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.ts +7 -7
- package/templates/{cartoon-channel → animation-channel}/src/main.ts +32 -32
- package/templates/{cartoon-channel → animation-channel}/src/render-plan.ts +13 -13
- package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.css +34 -34
- package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.ts +20 -20
- package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d-animation.spec.ts +3 -3
- package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d.spec.ts +6 -6
- package/templates/{cartoon-channel → animation-channel}/tests/image-puppet-animation.spec.ts +3 -3
- package/templates/{cartoon-channel → animation-channel}/tests/image-puppet.spec.ts +5 -5
- package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d-animation.spec.ts +3 -3
- package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d.spec.ts +4 -4
- package/templates/{prompt-cartoon-channel → animation-channel}/tests/route-health.spec.ts +1 -1
- package/templates/{cartoon-channel → animation-channel}/tests/sample-episode-visual.spec.ts +5 -5
- package/templates/{cartoon-channel → animation-channel}/tests/storyboard-playback.spec.ts +7 -7
- package/templates/animation-studio/AGENTS.md +71 -0
- package/templates/{cartoon-studio → animation-studio}/ASSET-LICENSES.md +7 -7
- package/templates/{cartoon-studio → animation-studio}/README.md +6 -6
- package/templates/animation-studio/aura.assets.json +669 -0
- package/templates/animation-studio/dist/episodes/scene/episode-3d.webm +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/action.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/dialogue.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/final.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/first.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/mouth-closed.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/mouth-open.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/render-live-summary.json +10284 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-1.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-2.png +0 -0
- package/templates/animation-studio/dist/generated/second-scene.document.json +1210 -0
- package/templates/animation-studio/dist/generated/studio-edited.document.json +1196 -0
- package/templates/animation-studio/dist/scene/inshader-accept.document.json +1 -0
- package/templates/animation-studio/dist/scene/inshader-test.document.json +1 -0
- package/templates/animation-studio/dist/scene/integ.document.json +1 -0
- package/templates/animation-studio/dist/scene/working.document.json +723 -0
- package/templates/animation-studio/dist/scene/working.history.json +1 -0
- package/templates/{cartoon-studio → animation-studio}/live-route.html +1 -1
- package/templates/{cartoon-studio → animation-studio}/package-lock.json +2 -2
- package/templates/animation-studio/package.json +32 -0
- package/templates/animation-studio/public/aura-assets/cast-a.catalog.glb +0 -0
- package/templates/animation-studio/public/aura-assets/cast-b.catalog.glb +0 -0
- package/templates/animation-studio/public/aura-assets/luma.catalog.glb +0 -0
- package/templates/animation-studio/public/aura-assets/luma2.catalog.glb +0 -0
- package/templates/animation-studio/public/aura-assets/miko.catalog.glb +0 -0
- package/templates/{cartoon-studio → animation-studio}/public/aura-assets/moonGarden.gltf +1 -1
- package/templates/animation-studio/public/aura-assets/mushroom.catalog.glb +0 -0
- package/templates/animation-studio/public/aura-assets/rusty.catalog.glb +0 -0
- package/templates/animation-studio/public/cast-library/cast-library.json +71 -0
- package/templates/animation-studio/public/clip-library/gesture.json +173903 -0
- package/templates/animation-studio/public/clip-library/idle.json +23035 -0
- package/templates/animation-studio/public/clip-library/manifest.json +154 -0
- package/templates/animation-studio/public/clip-library/nod.json +173903 -0
- package/templates/animation-studio/public/clip-library/point.json +69879 -0
- package/templates/animation-studio/public/clip-library/react.json +66084 -0
- package/templates/animation-studio/public/clip-library/run.json +9648 -0
- package/templates/animation-studio/public/clip-library/talk.json +69879 -0
- package/templates/animation-studio/public/clip-library/walk.json +8283 -0
- package/templates/animation-studio/public/hifi-cast/BrainStem.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/CesiumMan.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/RiggedFigure.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/kaykit/Barbarian.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/kaykit/Knight.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/kaykit/Mage.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/kaykit/Rogue.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/kaykit/Rogue_Hooded.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/khronos-report.json +295 -0
- package/templates/animation-studio/public/hifi-cast/quaternius-report.json +449 -0
- package/templates/animation-studio/public/hifi-cast/rpm/cesiumman.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/rpm/fox.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/rpm/riggedfigure.glb +0 -0
- package/templates/animation-studio/public/hifi-cast/rpm-report.json +301 -0
- package/templates/animation-studio/scripts/anim.ts +103 -0
- package/templates/animation-studio/scripts/animation-scene.ts +457 -0
- package/templates/animation-studio/scripts/asset-motion-probe.ts +450 -0
- package/templates/animation-studio/scripts/asset-render-probe.ts +152 -0
- package/templates/animation-studio/scripts/author-office-scene.ts +65 -0
- package/templates/animation-studio/scripts/build-cast-library.ts +97 -0
- package/templates/animation-studio/scripts/build-characters.ts +1543 -0
- package/templates/animation-studio/scripts/build-clip-library.ts +972 -0
- package/templates/animation-studio/scripts/clip-decision-cli.ts +51 -0
- package/templates/animation-studio/scripts/determinism-check.ts +48 -0
- package/templates/animation-studio/scripts/generate-scene.ts +95 -0
- package/templates/animation-studio/scripts/hifi-cast-validate.ts +572 -0
- package/templates/animation-studio/scripts/motion-evidence-cli.ts +150 -0
- package/templates/animation-studio/scripts/motion-evidence.ts +362 -0
- package/templates/animation-studio/scripts/preview-server.ts +52 -0
- package/templates/animation-studio/scripts/regen-manifest.ts +156 -0
- package/templates/animation-studio/scripts/render-core.ts +360 -0
- package/templates/animation-studio/scripts/render-live.ts +813 -0
- package/templates/animation-studio/scripts/render-parallel.ts +70 -0
- package/templates/animation-studio/scripts/render-server.ts +119 -0
- package/templates/animation-studio/scripts/resolve-asset.ts +669 -0
- package/templates/animation-studio/scripts/skeleton-overlay-cli.ts +82 -0
- package/templates/animation-studio/scripts/skeleton-overlay.ts +293 -0
- package/templates/animation-studio/scripts/studio-tools-demo.ts +45 -0
- package/templates/animation-studio/scripts/texture-bake.ts +297 -0
- package/templates/{cartoon-studio → animation-studio}/scripts/validate-characters.ts +0 -0
- package/templates/animation-studio/scripts/verify-extracted-overlay-cli.ts +264 -0
- package/templates/animation-studio/src/animation-episode-validator.ts +97 -0
- package/templates/animation-studio/src/animation-performance.ts +556 -0
- package/templates/animation-studio/src/aura-assets.ts +71 -0
- package/templates/animation-studio/src/character.ts +40 -0
- package/templates/animation-studio/src/director/compile-episode-document.ts +45 -0
- package/templates/animation-studio/src/director/director-heuristics.ts +697 -0
- package/templates/animation-studio/src/director/prompt-to-scene.ts +369 -0
- package/templates/animation-studio/src/empty-document.ts +77 -0
- package/templates/animation-studio/src/episode-document.ts +442 -0
- package/templates/animation-studio/src/examples/moon-garden.example.ts +183 -0
- package/templates/animation-studio/src/fidelity.ts +129 -0
- package/templates/animation-studio/src/graph.ts +14 -0
- package/templates/animation-studio/src/procedural-hdri.ts +243 -0
- package/templates/animation-studio/src/profile.ts +97 -0
- package/templates/animation-studio/src/render-live-route.ts +42 -0
- package/templates/animation-studio/src/render-modes.ts +137 -0
- package/templates/animation-studio/src/scene-player.ts +867 -0
- package/templates/animation-studio/src/set-templates.ts +361 -0
- package/templates/animation-studio/src/studio/episode-document-store.ts +72 -0
- package/templates/animation-studio/src/studio/scene-tool-registry.ts +86 -0
- package/templates/animation-studio/src/studio/scene-tools.ts +169 -0
- package/templates/animation-studio/tests/reports/animation-studio/hifi-cast-validation.json +938 -0
- package/templates/animation-studio/tsconfig.json +26 -0
- package/templates/{cartoon-studio → animation-studio}/vite.config.ts +6 -1
- package/templates/character-controller/README.md +33 -0
- package/templates/character-controller/index.html +19 -0
- package/templates/character-controller/package.json +23 -0
- package/templates/character-controller/playwright.config.ts +14 -0
- package/templates/character-controller/src/controller.ts +44 -0
- package/templates/character-controller/src/main.ts +62 -0
- package/templates/character-controller/tests/route-health.spec.ts +26 -0
- package/templates/character-controller/tests/screenshot.spec.ts +9 -0
- package/templates/character-controller/tsconfig.json +15 -0
- package/templates/cinematic-scene/package.json +1 -1
- package/templates/episode-builder/README.md +4 -4
- package/templates/episode-builder/package.json +1 -1
- package/templates/episode-builder/src/aura-assets.ts +1 -1
- package/templates/episode-builder/src/builder.ts +4 -4
- package/templates/episode-builder/src/episode.ts +21 -21
- package/templates/episode-builder/src/main.ts +20 -20
- package/templates/episode-builder/src/render-plan.ts +13 -13
- package/templates/episode-builder/tests/storyboard-playback.spec.ts +7 -7
- package/templates/fighting-game/package.json +1 -1
- package/templates/mini-game/package.json +1 -1
- package/templates/product-viewer/package.json +1 -1
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/README.md +5 -5
- package/templates/{cartoon-channel → prompt-animation-channel}/index.html +1 -1
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/package.json +2 -2
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/aura-assets.ts +1 -1
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/episode.ts +22 -22
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/main.ts +28 -28
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/render-plan.ts +13 -13
- package/templates/{cartoon-channel → prompt-animation-channel}/tests/route-health.spec.ts +1 -1
- package/templates/{prompt-cartoon-channel → prompt-animation-channel}/tests/storyboard-playback.spec.ts +8 -8
- package/templates/cartoon-studio/aura.assets.json +0 -400
- package/templates/cartoon-studio/package.json +0 -33
- package/templates/cartoon-studio/public/aura-assets/luma.authored.glb +0 -0
- package/templates/cartoon-studio/public/aura-assets/miko.authored.glb +0 -0
- package/templates/cartoon-studio/scripts/build-characters.ts +0 -738
- package/templates/cartoon-studio/scripts/build-dialogue-audio.ts +0 -262
- package/templates/cartoon-studio/scripts/episode.ts +0 -323
- package/templates/cartoon-studio/scripts/render-live.ts +0 -873
- package/templates/cartoon-studio/src/aura-assets.ts +0 -64
- package/templates/cartoon-studio/src/characters.ts +0 -65
- package/templates/cartoon-studio/src/episode-renderer.ts +0 -605
- package/templates/cartoon-studio/src/episode.ts +0 -306
- package/templates/cartoon-studio/src/main.ts +0 -400
- package/templates/cartoon-studio/src/render-live-route.ts +0 -913
- package/templates/cartoon-studio/src/render-plan.ts +0 -567
- package/templates/cartoon-studio/src/review.ts +0 -99
- package/templates/cartoon-studio/src/studio.ts +0 -101
- package/templates/cartoon-studio/test-results/.last-run.json +0 -4
- package/templates/cartoon-studio/tests/episode-render.spec.ts +0 -44
- package/templates/cartoon-studio/tests/motion-quality.spec.ts +0 -45
- package/templates/cartoon-studio/tests/route-health.spec.ts +0 -7
- package/templates/cartoon-studio/tests/storyboard-playback.spec.ts +0 -99
- package/templates/cartoon-studio/tests/visual-review.spec.ts +0 -21
- package/templates/cartoon-studio/tsconfig.json +0 -14
- package/templates/prompt-cartoon-channel/index.html +0 -13
- package/templates/prompt-cartoon-channel/src/sets.ts +0 -14
- /package/templates/{cartoon-channel → animation-channel}/aura.assets.json +0 -0
- /package/templates/{cartoon-channel → animation-channel}/playwright.config.ts +0 -0
- /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.047f5e5f.glb +0 -0
- /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.thumb.svg +0 -0
- /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.047f5e5f.glb +0 -0
- /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.thumb.svg +0 -0
- /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/moon-garden-feature-frame.png +0 -0
- /package/templates/{cartoon-channel → animation-channel}/src/aura-assets.ts +0 -0
- /package/templates/{cartoon-channel → animation-channel}/src/characters.ts +0 -0
- /package/templates/{cartoon-channel → animation-channel}/src/contract.ts +0 -0
- /package/templates/{cartoon-channel → animation-channel}/src/sets.ts +0 -0
- /package/templates/{cartoon-channel → animation-channel}/test-results/.last-run.json +0 -0
- /package/templates/{cartoon-channel → animation-channel}/tests/reports/prompt-animation/cartoon-sample-episode.png +0 -0
- /package/templates/{cartoon-channel → animation-channel}/tsconfig.json +0 -0
- /package/templates/{cartoon-studio → animation-studio}/playwright.config.ts +0 -0
- /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/luma.thumb.svg +0 -0
- /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/miko.thumb.svg +0 -0
- /package/templates/{cartoon-studio → animation-studio}/src/contract.ts +0 -0
- /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/playwright.config.ts +0 -0
- /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/characters.ts +0 -0
- /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/contract.ts +0 -0
- /package/templates/{cartoon-studio → prompt-animation-channel}/src/sets.ts +0 -0
- /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/tsconfig.json +0 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generatedAt": "2026-06-08T09:52:48.389Z",
|
|
3
|
+
"task": "Download real rigged, textured humanoid GLBs and grade their rigs via inferHumanoidRig + gradeRig.",
|
|
4
|
+
"readyPlayerMe": {
|
|
5
|
+
"requested": true,
|
|
6
|
+
"reachable": false,
|
|
7
|
+
"status": "UNREACHABLE from this environment",
|
|
8
|
+
"detail": "DNS lookup for models.readyplayer.me and api.readyplayer.me returns NXDOMAIN (host could not be resolved); curl exits with code 6 / HTTP 000. General internet works (example.com resolves; raw.githubusercontent.com downloads succeed), so this is RPM-host-specific egress blocking, not a total outage. No RPM avatar GLB was downloaded.",
|
|
9
|
+
"triedUrls": [
|
|
10
|
+
"https://models.readyplayer.me/64bfa15f0e72c63d7c3934a6.glb (and ?quality=high)",
|
|
11
|
+
"https://models.readyplayer.me/638df693d72bffc6fa17943c.glb (and ?meshLod=0&textureAtlas=1024)"
|
|
12
|
+
],
|
|
13
|
+
"note": "Because RPM never resolved, the avatar IDs were never reached — cannot confirm whether they are valid or 404. No RPM viseme/blendshape data could be inspected.",
|
|
14
|
+
"license": "Ready Player Me avatars are governed by the RPM Terms of Use / Developer Terms. They are NOT public-domain: usage is tied to an app/subdomain, attribution/branding rules apply, and redistribution of avatar GLBs outside the RPM platform is restricted. Any RPM avatar used in the product would need a compliant RPM integration + license review. Flagged."
|
|
15
|
+
},
|
|
16
|
+
"fallbacksDownloaded": [
|
|
17
|
+
{
|
|
18
|
+
"file": "public/hifi-cast/rpm/cesiumman.glb",
|
|
19
|
+
"absPath": "/Users/gurbakshchahal/aura3d/packages/create-aura3d/templates/animation-studio/public/hifi-cast/rpm/cesiumman.glb",
|
|
20
|
+
"bytes": 438044,
|
|
21
|
+
"glbVersion": 2,
|
|
22
|
+
"rigged": true,
|
|
23
|
+
"textured": true,
|
|
24
|
+
"triangles": 4672,
|
|
25
|
+
"vertices": 3273,
|
|
26
|
+
"skins": 1,
|
|
27
|
+
"jointCount": 19,
|
|
28
|
+
"images": 1,
|
|
29
|
+
"textures": 1,
|
|
30
|
+
"materials": [
|
|
31
|
+
"Cesium_Man-effect"
|
|
32
|
+
],
|
|
33
|
+
"morphTargetCount": 0,
|
|
34
|
+
"morphTargets": [],
|
|
35
|
+
"visemeOrMouthMorphs": [],
|
|
36
|
+
"animations": [
|
|
37
|
+
{
|
|
38
|
+
"name": "(anim 0)",
|
|
39
|
+
"channels": 57,
|
|
40
|
+
"samplers": 57
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"jointNames": [
|
|
44
|
+
"Skeleton_torso_joint_1",
|
|
45
|
+
"Skeleton_torso_joint_2",
|
|
46
|
+
"torso_joint_3",
|
|
47
|
+
"Skeleton_neck_joint_1",
|
|
48
|
+
"Skeleton_neck_joint_2",
|
|
49
|
+
"Skeleton_arm_joint_L__4_",
|
|
50
|
+
"Skeleton_arm_joint_R",
|
|
51
|
+
"Skeleton_arm_joint_L__3_",
|
|
52
|
+
"Skeleton_arm_joint_R__2_",
|
|
53
|
+
"Skeleton_arm_joint_L__2_",
|
|
54
|
+
"Skeleton_arm_joint_R__3_",
|
|
55
|
+
"leg_joint_L_1",
|
|
56
|
+
"leg_joint_R_1",
|
|
57
|
+
"leg_joint_L_2",
|
|
58
|
+
"leg_joint_R_2",
|
|
59
|
+
"leg_joint_L_3",
|
|
60
|
+
"leg_joint_R_3",
|
|
61
|
+
"leg_joint_L_5",
|
|
62
|
+
"leg_joint_R_5"
|
|
63
|
+
],
|
|
64
|
+
"rigGrade": "C",
|
|
65
|
+
"mappedBoneCount": 6,
|
|
66
|
+
"capabilities": {
|
|
67
|
+
"hasLegs": true,
|
|
68
|
+
"hasKnees": true,
|
|
69
|
+
"hasAnkles": false,
|
|
70
|
+
"hasFeet": false
|
|
71
|
+
},
|
|
72
|
+
"gradeReasons": [
|
|
73
|
+
"6 of 22 canonical humanoid bones mapped",
|
|
74
|
+
"mascot/sparse rig: head + torso acting only, no real limb chains (C)",
|
|
75
|
+
"no usable forearm chain on both arms"
|
|
76
|
+
],
|
|
77
|
+
"mappedBones": {
|
|
78
|
+
"neck": "Skeleton_neck_joint_1",
|
|
79
|
+
"leftUpperArm": "Skeleton_arm_joint_L__4_",
|
|
80
|
+
"rightUpperArm": "Skeleton_arm_joint_R",
|
|
81
|
+
"leftLowerLeg": "leg_joint_L_1",
|
|
82
|
+
"rightLowerLeg": "leg_joint_R_1",
|
|
83
|
+
"spine": "torso_joint_3"
|
|
84
|
+
},
|
|
85
|
+
"missingRequiredBones": [
|
|
86
|
+
"hips",
|
|
87
|
+
"head",
|
|
88
|
+
"leftLowerArm",
|
|
89
|
+
"leftHand",
|
|
90
|
+
"rightLowerArm",
|
|
91
|
+
"rightHand",
|
|
92
|
+
"leftUpperLeg",
|
|
93
|
+
"leftFoot",
|
|
94
|
+
"rightUpperLeg",
|
|
95
|
+
"rightFoot"
|
|
96
|
+
],
|
|
97
|
+
"bonesMapToStandardRig": true
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"file": "public/hifi-cast/rpm/fox.glb",
|
|
101
|
+
"absPath": "/Users/gurbakshchahal/aura3d/packages/create-aura3d/templates/animation-studio/public/hifi-cast/rpm/fox.glb",
|
|
102
|
+
"bytes": 162852,
|
|
103
|
+
"glbVersion": 2,
|
|
104
|
+
"rigged": true,
|
|
105
|
+
"textured": true,
|
|
106
|
+
"triangles": 576,
|
|
107
|
+
"vertices": 1728,
|
|
108
|
+
"skins": 1,
|
|
109
|
+
"jointCount": 24,
|
|
110
|
+
"images": 1,
|
|
111
|
+
"textures": 1,
|
|
112
|
+
"materials": [
|
|
113
|
+
"fox_material"
|
|
114
|
+
],
|
|
115
|
+
"morphTargetCount": 0,
|
|
116
|
+
"morphTargets": [],
|
|
117
|
+
"visemeOrMouthMorphs": [],
|
|
118
|
+
"animations": [
|
|
119
|
+
{
|
|
120
|
+
"name": "Survey",
|
|
121
|
+
"channels": 21,
|
|
122
|
+
"samplers": 21
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"name": "Walk",
|
|
126
|
+
"channels": 21,
|
|
127
|
+
"samplers": 21
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "Run",
|
|
131
|
+
"channels": 21,
|
|
132
|
+
"samplers": 21
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"jointNames": [
|
|
136
|
+
"_rootJoint",
|
|
137
|
+
"b_Root_00",
|
|
138
|
+
"b_Hip_01",
|
|
139
|
+
"b_Spine01_02",
|
|
140
|
+
"b_Spine02_03",
|
|
141
|
+
"b_Neck_04",
|
|
142
|
+
"b_Head_05",
|
|
143
|
+
"b_RightUpperArm_06",
|
|
144
|
+
"b_RightForeArm_07",
|
|
145
|
+
"b_RightHand_08",
|
|
146
|
+
"b_LeftUpperArm_09",
|
|
147
|
+
"b_LeftForeArm_010",
|
|
148
|
+
"b_LeftHand_011",
|
|
149
|
+
"b_Tail01_012",
|
|
150
|
+
"b_Tail02_013",
|
|
151
|
+
"b_Tail03_014",
|
|
152
|
+
"b_LeftLeg01_015",
|
|
153
|
+
"b_LeftLeg02_016",
|
|
154
|
+
"b_LeftFoot01_017",
|
|
155
|
+
"b_LeftFoot02_018",
|
|
156
|
+
"b_RightLeg01_019",
|
|
157
|
+
"b_RightLeg02_020",
|
|
158
|
+
"b_RightFoot01_021",
|
|
159
|
+
"b_RightFoot02_022"
|
|
160
|
+
],
|
|
161
|
+
"rigGrade": "B",
|
|
162
|
+
"mappedBoneCount": 15,
|
|
163
|
+
"capabilities": {
|
|
164
|
+
"hasLegs": true,
|
|
165
|
+
"hasKnees": true,
|
|
166
|
+
"hasAnkles": true,
|
|
167
|
+
"hasFeet": true
|
|
168
|
+
},
|
|
169
|
+
"gradeReasons": [
|
|
170
|
+
"15 of 22 canonical humanoid bones mapped",
|
|
171
|
+
"partial humanoid: body acting possible but a limb chain or extremities are missing (B)"
|
|
172
|
+
],
|
|
173
|
+
"mappedBones": {
|
|
174
|
+
"hips": "_rootJoint",
|
|
175
|
+
"head": "b_Head_05",
|
|
176
|
+
"chest": "b_Spine02_03",
|
|
177
|
+
"neck": "b_Neck_04",
|
|
178
|
+
"leftHand": "b_LeftHand_011",
|
|
179
|
+
"rightHand": "b_RightHand_08",
|
|
180
|
+
"leftFoot": "b_LeftFoot01_017",
|
|
181
|
+
"rightFoot": "b_RightFoot01_021",
|
|
182
|
+
"leftLowerArm": "b_LeftForeArm_010",
|
|
183
|
+
"rightLowerArm": "b_RightForeArm_07",
|
|
184
|
+
"leftUpperArm": "b_LeftUpperArm_09",
|
|
185
|
+
"rightUpperArm": "b_RightUpperArm_06",
|
|
186
|
+
"leftLowerLeg": "b_LeftLeg01_015",
|
|
187
|
+
"rightLowerLeg": "b_RightLeg01_019",
|
|
188
|
+
"spine": "b_Spine01_02"
|
|
189
|
+
},
|
|
190
|
+
"missingRequiredBones": [
|
|
191
|
+
"leftUpperLeg",
|
|
192
|
+
"rightUpperLeg"
|
|
193
|
+
],
|
|
194
|
+
"bonesMapToStandardRig": true
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"file": "public/hifi-cast/rpm/riggedfigure.glb",
|
|
198
|
+
"absPath": "/Users/gurbakshchahal/aura3d/packages/create-aura3d/templates/animation-studio/public/hifi-cast/rpm/riggedfigure.glb",
|
|
199
|
+
"bytes": 50116,
|
|
200
|
+
"glbVersion": 2,
|
|
201
|
+
"rigged": true,
|
|
202
|
+
"textured": false,
|
|
203
|
+
"triangles": 256,
|
|
204
|
+
"vertices": 370,
|
|
205
|
+
"skins": 1,
|
|
206
|
+
"jointCount": 19,
|
|
207
|
+
"images": 0,
|
|
208
|
+
"textures": 0,
|
|
209
|
+
"materials": [
|
|
210
|
+
"Default-effect"
|
|
211
|
+
],
|
|
212
|
+
"morphTargetCount": 0,
|
|
213
|
+
"morphTargets": [],
|
|
214
|
+
"visemeOrMouthMorphs": [],
|
|
215
|
+
"animations": [
|
|
216
|
+
{
|
|
217
|
+
"name": "(anim 0)",
|
|
218
|
+
"channels": 57,
|
|
219
|
+
"samplers": 57
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"jointNames": [
|
|
223
|
+
"torso_joint_1",
|
|
224
|
+
"torso_joint_2",
|
|
225
|
+
"torso_joint_3",
|
|
226
|
+
"neck_joint_1",
|
|
227
|
+
"neck_joint_2",
|
|
228
|
+
"arm_joint_L_1",
|
|
229
|
+
"arm_joint_R_1",
|
|
230
|
+
"arm_joint_L_2",
|
|
231
|
+
"arm_joint_R_2",
|
|
232
|
+
"arm_joint_L_3",
|
|
233
|
+
"arm_joint_R_3",
|
|
234
|
+
"leg_joint_L_1",
|
|
235
|
+
"leg_joint_R_1",
|
|
236
|
+
"leg_joint_L_2",
|
|
237
|
+
"leg_joint_R_2",
|
|
238
|
+
"leg_joint_L_3",
|
|
239
|
+
"leg_joint_R_3",
|
|
240
|
+
"leg_joint_L_5",
|
|
241
|
+
"leg_joint_R_5"
|
|
242
|
+
],
|
|
243
|
+
"rigGrade": "C",
|
|
244
|
+
"mappedBoneCount": 6,
|
|
245
|
+
"capabilities": {
|
|
246
|
+
"hasLegs": true,
|
|
247
|
+
"hasKnees": true,
|
|
248
|
+
"hasAnkles": false,
|
|
249
|
+
"hasFeet": false
|
|
250
|
+
},
|
|
251
|
+
"gradeReasons": [
|
|
252
|
+
"6 of 22 canonical humanoid bones mapped",
|
|
253
|
+
"mascot/sparse rig: head + torso acting only, no real limb chains (C)",
|
|
254
|
+
"no usable forearm chain on both arms"
|
|
255
|
+
],
|
|
256
|
+
"mappedBones": {
|
|
257
|
+
"neck": "neck_joint_1",
|
|
258
|
+
"leftUpperArm": "arm_joint_L_1",
|
|
259
|
+
"rightUpperArm": "arm_joint_R_1",
|
|
260
|
+
"leftLowerLeg": "leg_joint_L_1",
|
|
261
|
+
"rightLowerLeg": "leg_joint_R_1",
|
|
262
|
+
"spine": "torso_joint_1"
|
|
263
|
+
},
|
|
264
|
+
"missingRequiredBones": [
|
|
265
|
+
"hips",
|
|
266
|
+
"head",
|
|
267
|
+
"leftLowerArm",
|
|
268
|
+
"leftHand",
|
|
269
|
+
"rightLowerArm",
|
|
270
|
+
"rightHand",
|
|
271
|
+
"leftUpperLeg",
|
|
272
|
+
"leftFoot",
|
|
273
|
+
"rightUpperLeg",
|
|
274
|
+
"rightFoot"
|
|
275
|
+
],
|
|
276
|
+
"bonesMapToStandardRig": true
|
|
277
|
+
}
|
|
278
|
+
],
|
|
279
|
+
"sources": {
|
|
280
|
+
"fox.glb": {
|
|
281
|
+
"url": "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/Fox/glTF-Binary/Fox.glb",
|
|
282
|
+
"origin": "Khronos glTF-Sample-Assets",
|
|
283
|
+
"license": "CC-BY 4.0 (Khronos Group / PixelMannen + tomkranis). Attribution required. Rigged + textured quadruped (non-human fallback character)."
|
|
284
|
+
},
|
|
285
|
+
"cesiumman.glb": {
|
|
286
|
+
"url": "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/CesiumMan/glTF-Binary/CesiumMan.glb",
|
|
287
|
+
"origin": "Khronos glTF-Sample-Assets",
|
|
288
|
+
"license": "Public-domain-style sample (Cesium / Khronos). Rigged + textured full-body humanoid with one walk animation."
|
|
289
|
+
},
|
|
290
|
+
"riggedfigure.glb": {
|
|
291
|
+
"url": "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/RiggedFigure/glTF-Binary/RiggedFigure.glb",
|
|
292
|
+
"origin": "Khronos glTF-Sample-Assets",
|
|
293
|
+
"license": "Khronos sample asset. Rigged humanoid, untextured (no images/material maps)."
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
"rigMappingHonesty": {
|
|
297
|
+
"summary": "None of the downloaded humanoid samples use Mixamo/RPM-style bone names (Hips, Spine, LeftArm, LeftUpLeg). CesiumMan and RiggedFigure use generic Collada-export joint names (torso_joint_*, arm_joint_L_*, leg_joint_L_*), which inferHumanoidRig only partially maps (6/22 -> grade C). The Fox uses descriptive names (b_Hip_01, b_Spine01_02, b_LeftUpperArm_09, b_LeftForeArm_010) which map well (15/22 -> grade B), but it is a quadruped, not a human, so its legs are really arms/hindlegs.",
|
|
298
|
+
"rpmExpectation": "Had RPM been reachable, its avatars use Mixamo-ish names (Hips, Spine, Spine1/2, LeftArm, LeftForeArm, LeftHand, LeftUpLeg, LeftLeg, LeftFoot) which inferHumanoidRig is explicitly designed to map (Mixamo convention is in its alias table) and would be expected to grade A. That could NOT be verified here because RPM did not download.",
|
|
299
|
+
"criticalForRetargeting": true
|
|
300
|
+
}
|
|
301
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Animation Studio command pipeline. Pure Node (no engine/browser) so plan/profile/package/verify
|
|
2
|
+
// run deterministically. `preview` is the browser route (npm run dev).
|
|
3
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { heroCharacter } from "../src/character.js";
|
|
7
|
+
import { createAnimationProfile, validateAnimationStudioCharacter } from "../src/profile.js";
|
|
8
|
+
|
|
9
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const templateRoot = join(here, "..");
|
|
11
|
+
const character = heroCharacter;
|
|
12
|
+
const outDir = join(templateRoot, "dist", "animation", character.id);
|
|
13
|
+
|
|
14
|
+
function write(file: string, data: unknown): string {
|
|
15
|
+
const abs = join(outDir, file);
|
|
16
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
17
|
+
writeFileSync(abs, typeof data === "string" ? data : `${JSON.stringify(data, null, 2)}\n`);
|
|
18
|
+
return abs;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function plan(): void {
|
|
22
|
+
const readiness = validateAnimationStudioCharacter(character);
|
|
23
|
+
const profile = createAnimationProfile(character);
|
|
24
|
+
console.log(`Animation Studio plan for "${character.name}" (${character.id})`);
|
|
25
|
+
console.log(` required actions: ${readiness.requiredActions.join(", ")}`);
|
|
26
|
+
console.log(` clip map: ${Object.entries(character.clipMap).map(([a, c]) => `${a}=${c}`).join(", ")}`);
|
|
27
|
+
console.log(` state graph: ${profile.stateGraph.states.join(" -> ")} (params ${profile.stateGraph.parameters.join(", ")})`);
|
|
28
|
+
console.log(` blend tree (speed): ${profile.blendTree.children.map((c) => `${c.clip}@${c.threshold}`).join(", ")}`);
|
|
29
|
+
console.log(` ik chains: ${character.ikChains.map((c) => c.id).join(", ")}`);
|
|
30
|
+
console.log(` readiness: ${readiness.ok ? "OK" : `FAILED -> ${readiness.errors.join("; ")}`}`);
|
|
31
|
+
if (!readiness.ok) process.exitCode = 1;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function profileCmd(): void {
|
|
35
|
+
const readiness = validateAnimationStudioCharacter(character);
|
|
36
|
+
const profile = createAnimationProfile(character);
|
|
37
|
+
write("animation-profile.json", profile);
|
|
38
|
+
write("rig-readiness.json", readiness);
|
|
39
|
+
console.log(`Wrote animation-profile.json + rig-readiness.json to ${outDir}`);
|
|
40
|
+
if (!readiness.ok) process.exitCode = 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function packageCmd(): void {
|
|
44
|
+
const readiness = validateAnimationStudioCharacter(character);
|
|
45
|
+
const profile = createAnimationProfile(character);
|
|
46
|
+
write("animation-profile.json", profile);
|
|
47
|
+
write("rig-readiness.json", readiness);
|
|
48
|
+
const manifest = {
|
|
49
|
+
schema: "aura-animation-studio-package/v1",
|
|
50
|
+
characterId: character.id,
|
|
51
|
+
deterministicArtifacts: ["animation-profile.json", "rig-readiness.json", "review-package.md"],
|
|
52
|
+
previewArtifacts: ["preview-frames/{idle,walk,run,blend,ik}.png", "skinning-evidence.json", "motion-quality.json", "route-proof.json"],
|
|
53
|
+
previewNote: "preview artifacts are produced by `npm run dev` + the browser preview route; this pure package step writes the deterministic profile/readiness/review only."
|
|
54
|
+
};
|
|
55
|
+
write("package-manifest.json", manifest);
|
|
56
|
+
const review = [
|
|
57
|
+
`# Animation Studio Review — ${character.name}`,
|
|
58
|
+
"",
|
|
59
|
+
`- Character: ${character.name} (${character.id}), asset key \`${character.assetKey}\``,
|
|
60
|
+
`- Readiness: ${readiness.ok ? "OK" : "FAILED"}`,
|
|
61
|
+
`- Locomotion states: ${profile.stateGraph.states.join(", ")}`,
|
|
62
|
+
`- Blend thresholds: ${profile.blendTree.children.map((c) => `${c.clip}@${c.threshold}`).join(", ")}`,
|
|
63
|
+
`- IK chains: ${character.ikChains.map((c) => c.id).join(", ")}`,
|
|
64
|
+
"",
|
|
65
|
+
"Run `npm run dev` and open the preview route to capture preview-frames, skinning-evidence, motion-quality, and route-proof.",
|
|
66
|
+
""
|
|
67
|
+
].join("\n");
|
|
68
|
+
write("review-package.md", review);
|
|
69
|
+
console.log(`Wrote Animation Studio package to ${outDir}`);
|
|
70
|
+
if (!readiness.ok) process.exitCode = 1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function verify(): void {
|
|
74
|
+
const readiness = validateAnimationStudioCharacter(character);
|
|
75
|
+
if (!readiness.ok) {
|
|
76
|
+
console.error(`anim:verify FAILED -> ${readiness.errors.join("; ")}`);
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log("anim:verify OK — character readiness passes; profile is exportable.");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const cmd = process.argv[2] ?? "plan";
|
|
84
|
+
switch (cmd) {
|
|
85
|
+
case "plan":
|
|
86
|
+
plan();
|
|
87
|
+
break;
|
|
88
|
+
case "preview":
|
|
89
|
+
console.log("Run `npm run dev` and open the Animation Studio preview route in a browser.");
|
|
90
|
+
break;
|
|
91
|
+
case "profile":
|
|
92
|
+
profileCmd();
|
|
93
|
+
break;
|
|
94
|
+
case "package":
|
|
95
|
+
packageCmd();
|
|
96
|
+
break;
|
|
97
|
+
case "verify":
|
|
98
|
+
verify();
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
console.error(`Unknown command "${cmd}". Use plan|preview|profile|package|verify.`);
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
}
|