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.
Files changed (215) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -4
  4. package/dist/index.js.map +1 -1
  5. package/package.json +10 -9
  6. package/templates/{cartoon-channel → animation-channel}/README.md +11 -11
  7. package/templates/{cartoon-studio → animation-channel}/index.html +1 -1
  8. package/templates/{cartoon-channel → animation-channel}/package.json +2 -2
  9. package/templates/{cartoon-channel → animation-channel}/src/episode.ts +22 -22
  10. package/templates/{cartoon-channel → animation-channel}/src/experimental/README.md +5 -5
  11. package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.css +3 -3
  12. package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.ts +7 -7
  13. package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.css +4 -4
  14. package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.ts +6 -6
  15. package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.css +3 -3
  16. package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.ts +7 -7
  17. package/templates/{cartoon-channel → animation-channel}/src/main.ts +32 -32
  18. package/templates/{cartoon-channel → animation-channel}/src/render-plan.ts +13 -13
  19. package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.css +34 -34
  20. package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.ts +20 -20
  21. package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d-animation.spec.ts +3 -3
  22. package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d.spec.ts +6 -6
  23. package/templates/{cartoon-channel → animation-channel}/tests/image-puppet-animation.spec.ts +3 -3
  24. package/templates/{cartoon-channel → animation-channel}/tests/image-puppet.spec.ts +5 -5
  25. package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d-animation.spec.ts +3 -3
  26. package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d.spec.ts +4 -4
  27. package/templates/{prompt-cartoon-channel → animation-channel}/tests/route-health.spec.ts +1 -1
  28. package/templates/{cartoon-channel → animation-channel}/tests/sample-episode-visual.spec.ts +5 -5
  29. package/templates/{cartoon-channel → animation-channel}/tests/storyboard-playback.spec.ts +7 -7
  30. package/templates/animation-studio/AGENTS.md +71 -0
  31. package/templates/{cartoon-studio → animation-studio}/ASSET-LICENSES.md +7 -7
  32. package/templates/{cartoon-studio → animation-studio}/README.md +6 -6
  33. package/templates/animation-studio/aura.assets.json +669 -0
  34. package/templates/animation-studio/dist/episodes/scene/episode-3d.webm +0 -0
  35. package/templates/animation-studio/dist/episodes/scene/frames/action.png +0 -0
  36. package/templates/animation-studio/dist/episodes/scene/frames/dialogue.png +0 -0
  37. package/templates/animation-studio/dist/episodes/scene/frames/final.png +0 -0
  38. package/templates/animation-studio/dist/episodes/scene/frames/first.png +0 -0
  39. package/templates/animation-studio/dist/episodes/scene/frames/mouth-closed.png +0 -0
  40. package/templates/animation-studio/dist/episodes/scene/frames/mouth-open.png +0 -0
  41. package/templates/animation-studio/dist/episodes/scene/render-live-summary.json +10284 -0
  42. package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-1.png +0 -0
  43. package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-2.png +0 -0
  44. package/templates/animation-studio/dist/generated/second-scene.document.json +1210 -0
  45. package/templates/animation-studio/dist/generated/studio-edited.document.json +1196 -0
  46. package/templates/animation-studio/dist/scene/inshader-accept.document.json +1 -0
  47. package/templates/animation-studio/dist/scene/inshader-test.document.json +1 -0
  48. package/templates/animation-studio/dist/scene/integ.document.json +1 -0
  49. package/templates/animation-studio/dist/scene/working.document.json +723 -0
  50. package/templates/animation-studio/dist/scene/working.history.json +1 -0
  51. package/templates/{cartoon-studio → animation-studio}/live-route.html +1 -1
  52. package/templates/{cartoon-studio → animation-studio}/package-lock.json +2 -2
  53. package/templates/animation-studio/package.json +32 -0
  54. package/templates/animation-studio/public/aura-assets/cast-a.catalog.glb +0 -0
  55. package/templates/animation-studio/public/aura-assets/cast-b.catalog.glb +0 -0
  56. package/templates/animation-studio/public/aura-assets/luma.catalog.glb +0 -0
  57. package/templates/animation-studio/public/aura-assets/luma2.catalog.glb +0 -0
  58. package/templates/animation-studio/public/aura-assets/miko.catalog.glb +0 -0
  59. package/templates/{cartoon-studio → animation-studio}/public/aura-assets/moonGarden.gltf +1 -1
  60. package/templates/animation-studio/public/aura-assets/mushroom.catalog.glb +0 -0
  61. package/templates/animation-studio/public/aura-assets/rusty.catalog.glb +0 -0
  62. package/templates/animation-studio/public/cast-library/cast-library.json +71 -0
  63. package/templates/animation-studio/public/clip-library/gesture.json +173903 -0
  64. package/templates/animation-studio/public/clip-library/idle.json +23035 -0
  65. package/templates/animation-studio/public/clip-library/manifest.json +154 -0
  66. package/templates/animation-studio/public/clip-library/nod.json +173903 -0
  67. package/templates/animation-studio/public/clip-library/point.json +69879 -0
  68. package/templates/animation-studio/public/clip-library/react.json +66084 -0
  69. package/templates/animation-studio/public/clip-library/run.json +9648 -0
  70. package/templates/animation-studio/public/clip-library/talk.json +69879 -0
  71. package/templates/animation-studio/public/clip-library/walk.json +8283 -0
  72. package/templates/animation-studio/public/hifi-cast/BrainStem.glb +0 -0
  73. package/templates/animation-studio/public/hifi-cast/CesiumMan.glb +0 -0
  74. package/templates/animation-studio/public/hifi-cast/RiggedFigure.glb +0 -0
  75. package/templates/animation-studio/public/hifi-cast/kaykit/Barbarian.glb +0 -0
  76. package/templates/animation-studio/public/hifi-cast/kaykit/Knight.glb +0 -0
  77. package/templates/animation-studio/public/hifi-cast/kaykit/Mage.glb +0 -0
  78. package/templates/animation-studio/public/hifi-cast/kaykit/Rogue.glb +0 -0
  79. package/templates/animation-studio/public/hifi-cast/kaykit/Rogue_Hooded.glb +0 -0
  80. package/templates/animation-studio/public/hifi-cast/khronos-report.json +295 -0
  81. package/templates/animation-studio/public/hifi-cast/quaternius-report.json +449 -0
  82. package/templates/animation-studio/public/hifi-cast/rpm/cesiumman.glb +0 -0
  83. package/templates/animation-studio/public/hifi-cast/rpm/fox.glb +0 -0
  84. package/templates/animation-studio/public/hifi-cast/rpm/riggedfigure.glb +0 -0
  85. package/templates/animation-studio/public/hifi-cast/rpm-report.json +301 -0
  86. package/templates/animation-studio/scripts/anim.ts +103 -0
  87. package/templates/animation-studio/scripts/animation-scene.ts +457 -0
  88. package/templates/animation-studio/scripts/asset-motion-probe.ts +450 -0
  89. package/templates/animation-studio/scripts/asset-render-probe.ts +152 -0
  90. package/templates/animation-studio/scripts/author-office-scene.ts +65 -0
  91. package/templates/animation-studio/scripts/build-cast-library.ts +97 -0
  92. package/templates/animation-studio/scripts/build-characters.ts +1543 -0
  93. package/templates/animation-studio/scripts/build-clip-library.ts +972 -0
  94. package/templates/animation-studio/scripts/clip-decision-cli.ts +51 -0
  95. package/templates/animation-studio/scripts/determinism-check.ts +48 -0
  96. package/templates/animation-studio/scripts/generate-scene.ts +95 -0
  97. package/templates/animation-studio/scripts/hifi-cast-validate.ts +572 -0
  98. package/templates/animation-studio/scripts/motion-evidence-cli.ts +150 -0
  99. package/templates/animation-studio/scripts/motion-evidence.ts +362 -0
  100. package/templates/animation-studio/scripts/preview-server.ts +52 -0
  101. package/templates/animation-studio/scripts/regen-manifest.ts +156 -0
  102. package/templates/animation-studio/scripts/render-core.ts +360 -0
  103. package/templates/animation-studio/scripts/render-live.ts +813 -0
  104. package/templates/animation-studio/scripts/render-parallel.ts +70 -0
  105. package/templates/animation-studio/scripts/render-server.ts +119 -0
  106. package/templates/animation-studio/scripts/resolve-asset.ts +669 -0
  107. package/templates/animation-studio/scripts/skeleton-overlay-cli.ts +82 -0
  108. package/templates/animation-studio/scripts/skeleton-overlay.ts +293 -0
  109. package/templates/animation-studio/scripts/studio-tools-demo.ts +45 -0
  110. package/templates/animation-studio/scripts/texture-bake.ts +297 -0
  111. package/templates/{cartoon-studio → animation-studio}/scripts/validate-characters.ts +0 -0
  112. package/templates/animation-studio/scripts/verify-extracted-overlay-cli.ts +264 -0
  113. package/templates/animation-studio/src/animation-episode-validator.ts +97 -0
  114. package/templates/animation-studio/src/animation-performance.ts +556 -0
  115. package/templates/animation-studio/src/aura-assets.ts +71 -0
  116. package/templates/animation-studio/src/character.ts +40 -0
  117. package/templates/animation-studio/src/director/compile-episode-document.ts +45 -0
  118. package/templates/animation-studio/src/director/director-heuristics.ts +697 -0
  119. package/templates/animation-studio/src/director/prompt-to-scene.ts +369 -0
  120. package/templates/animation-studio/src/empty-document.ts +77 -0
  121. package/templates/animation-studio/src/episode-document.ts +442 -0
  122. package/templates/animation-studio/src/examples/moon-garden.example.ts +183 -0
  123. package/templates/animation-studio/src/fidelity.ts +129 -0
  124. package/templates/animation-studio/src/graph.ts +14 -0
  125. package/templates/animation-studio/src/procedural-hdri.ts +243 -0
  126. package/templates/animation-studio/src/profile.ts +97 -0
  127. package/templates/animation-studio/src/render-live-route.ts +42 -0
  128. package/templates/animation-studio/src/render-modes.ts +137 -0
  129. package/templates/animation-studio/src/scene-player.ts +867 -0
  130. package/templates/animation-studio/src/set-templates.ts +361 -0
  131. package/templates/animation-studio/src/studio/episode-document-store.ts +72 -0
  132. package/templates/animation-studio/src/studio/scene-tool-registry.ts +86 -0
  133. package/templates/animation-studio/src/studio/scene-tools.ts +169 -0
  134. package/templates/animation-studio/tests/reports/animation-studio/hifi-cast-validation.json +938 -0
  135. package/templates/animation-studio/tsconfig.json +26 -0
  136. package/templates/{cartoon-studio → animation-studio}/vite.config.ts +6 -1
  137. package/templates/character-controller/README.md +33 -0
  138. package/templates/character-controller/index.html +19 -0
  139. package/templates/character-controller/package.json +23 -0
  140. package/templates/character-controller/playwright.config.ts +14 -0
  141. package/templates/character-controller/src/controller.ts +44 -0
  142. package/templates/character-controller/src/main.ts +62 -0
  143. package/templates/character-controller/tests/route-health.spec.ts +26 -0
  144. package/templates/character-controller/tests/screenshot.spec.ts +9 -0
  145. package/templates/character-controller/tsconfig.json +15 -0
  146. package/templates/cinematic-scene/package.json +1 -1
  147. package/templates/episode-builder/README.md +4 -4
  148. package/templates/episode-builder/package.json +1 -1
  149. package/templates/episode-builder/src/aura-assets.ts +1 -1
  150. package/templates/episode-builder/src/builder.ts +4 -4
  151. package/templates/episode-builder/src/episode.ts +21 -21
  152. package/templates/episode-builder/src/main.ts +20 -20
  153. package/templates/episode-builder/src/render-plan.ts +13 -13
  154. package/templates/episode-builder/tests/storyboard-playback.spec.ts +7 -7
  155. package/templates/fighting-game/package.json +1 -1
  156. package/templates/mini-game/package.json +1 -1
  157. package/templates/product-viewer/package.json +1 -1
  158. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/README.md +5 -5
  159. package/templates/{cartoon-channel → prompt-animation-channel}/index.html +1 -1
  160. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/package.json +2 -2
  161. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/aura-assets.ts +1 -1
  162. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/episode.ts +22 -22
  163. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/main.ts +28 -28
  164. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/render-plan.ts +13 -13
  165. package/templates/{cartoon-channel → prompt-animation-channel}/tests/route-health.spec.ts +1 -1
  166. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/tests/storyboard-playback.spec.ts +8 -8
  167. package/templates/cartoon-studio/aura.assets.json +0 -400
  168. package/templates/cartoon-studio/package.json +0 -33
  169. package/templates/cartoon-studio/public/aura-assets/luma.authored.glb +0 -0
  170. package/templates/cartoon-studio/public/aura-assets/miko.authored.glb +0 -0
  171. package/templates/cartoon-studio/scripts/build-characters.ts +0 -738
  172. package/templates/cartoon-studio/scripts/build-dialogue-audio.ts +0 -262
  173. package/templates/cartoon-studio/scripts/episode.ts +0 -323
  174. package/templates/cartoon-studio/scripts/render-live.ts +0 -873
  175. package/templates/cartoon-studio/src/aura-assets.ts +0 -64
  176. package/templates/cartoon-studio/src/characters.ts +0 -65
  177. package/templates/cartoon-studio/src/episode-renderer.ts +0 -605
  178. package/templates/cartoon-studio/src/episode.ts +0 -306
  179. package/templates/cartoon-studio/src/main.ts +0 -400
  180. package/templates/cartoon-studio/src/render-live-route.ts +0 -913
  181. package/templates/cartoon-studio/src/render-plan.ts +0 -567
  182. package/templates/cartoon-studio/src/review.ts +0 -99
  183. package/templates/cartoon-studio/src/studio.ts +0 -101
  184. package/templates/cartoon-studio/test-results/.last-run.json +0 -4
  185. package/templates/cartoon-studio/tests/episode-render.spec.ts +0 -44
  186. package/templates/cartoon-studio/tests/motion-quality.spec.ts +0 -45
  187. package/templates/cartoon-studio/tests/route-health.spec.ts +0 -7
  188. package/templates/cartoon-studio/tests/storyboard-playback.spec.ts +0 -99
  189. package/templates/cartoon-studio/tests/visual-review.spec.ts +0 -21
  190. package/templates/cartoon-studio/tsconfig.json +0 -14
  191. package/templates/prompt-cartoon-channel/index.html +0 -13
  192. package/templates/prompt-cartoon-channel/src/sets.ts +0 -14
  193. /package/templates/{cartoon-channel → animation-channel}/aura.assets.json +0 -0
  194. /package/templates/{cartoon-channel → animation-channel}/playwright.config.ts +0 -0
  195. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.047f5e5f.glb +0 -0
  196. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.thumb.svg +0 -0
  197. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.047f5e5f.glb +0 -0
  198. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.thumb.svg +0 -0
  199. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/moon-garden-feature-frame.png +0 -0
  200. /package/templates/{cartoon-channel → animation-channel}/src/aura-assets.ts +0 -0
  201. /package/templates/{cartoon-channel → animation-channel}/src/characters.ts +0 -0
  202. /package/templates/{cartoon-channel → animation-channel}/src/contract.ts +0 -0
  203. /package/templates/{cartoon-channel → animation-channel}/src/sets.ts +0 -0
  204. /package/templates/{cartoon-channel → animation-channel}/test-results/.last-run.json +0 -0
  205. /package/templates/{cartoon-channel → animation-channel}/tests/reports/prompt-animation/cartoon-sample-episode.png +0 -0
  206. /package/templates/{cartoon-channel → animation-channel}/tsconfig.json +0 -0
  207. /package/templates/{cartoon-studio → animation-studio}/playwright.config.ts +0 -0
  208. /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/luma.thumb.svg +0 -0
  209. /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/miko.thumb.svg +0 -0
  210. /package/templates/{cartoon-studio → animation-studio}/src/contract.ts +0 -0
  211. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/playwright.config.ts +0 -0
  212. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/characters.ts +0 -0
  213. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/contract.ts +0 -0
  214. /package/templates/{cartoon-studio → prompt-animation-channel}/src/sets.ts +0 -0
  215. /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
+ }