create-aura3d 1.1.2 → 1.3.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.
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 +5 -3
  4. package/dist/index.js.map +1 -1
  5. package/package.json +11 -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,938 @@
1
+ {
2
+ "generatedAt": "2026-06-08T09:57:30.057Z",
3
+ "note": "FK PRE-FILTER ONLY — NOT A RENDER. A PASS means the rig survived a canonical forward-kinematics sanity pass (no collapsed legs / sagging arms / exploded or NaN bones). It does NOT skin the real mesh and cannot see texture/weight/bind-pose problems. Final acceptance requires a real GPU render + visual review.",
4
+ "poorCoverageThreshold": 0.6,
5
+ "fkClips": [
6
+ "talk",
7
+ "walk"
8
+ ],
9
+ "sampleTimes": [
10
+ 0,
11
+ 0.3,
12
+ 0.6,
13
+ 0.9,
14
+ 1.2,
15
+ 1.6
16
+ ],
17
+ "count": 13,
18
+ "passCount": 8,
19
+ "failCount": 5,
20
+ "verdicts": [
21
+ {
22
+ "file": "public/hifi-cast/BrainStem.glb",
23
+ "bytes": 3194848,
24
+ "parsed": true,
25
+ "jointCount": 0,
26
+ "clips": [],
27
+ "rigGrade": "D",
28
+ "mappedBoneCount": 0,
29
+ "capabilities": {
30
+ "hasLegs": false,
31
+ "hasKnees": false,
32
+ "hasAnkles": false,
33
+ "hasFeet": false
34
+ },
35
+ "gradeReasons": [
36
+ "0 of 22 canonical humanoid bones mapped",
37
+ "not enough body structure to drive body acting (D)",
38
+ "missing spine/head axis",
39
+ "missing a pair of upper arms",
40
+ "missing a usable pair of legs"
41
+ ],
42
+ "retargetCoverage": 0,
43
+ "retargetRequiredCoverage": 0,
44
+ "retargetingPoor": true,
45
+ "fkPass": true,
46
+ "fkClips": [
47
+ {
48
+ "clip": "talk",
49
+ "pass": true,
50
+ "failures": []
51
+ },
52
+ {
53
+ "clip": "walk",
54
+ "pass": true,
55
+ "failures": []
56
+ }
57
+ ],
58
+ "fkSignatures": [],
59
+ "verdict": "FAIL",
60
+ "notes": [
61
+ "rig graded D — not suitable for body acting (refuse).",
62
+ "retargeting will be poor — body acting won't transfer (coverage 0% < 60%).",
63
+ "no feet mapped — locomotion / standing pose can't be validated by FK."
64
+ ]
65
+ },
66
+ {
67
+ "file": "public/hifi-cast/CesiumMan.glb",
68
+ "bytes": 438044,
69
+ "parsed": true,
70
+ "jointCount": 19,
71
+ "clips": [],
72
+ "rigGrade": "C",
73
+ "mappedBoneCount": 6,
74
+ "capabilities": {
75
+ "hasLegs": true,
76
+ "hasKnees": true,
77
+ "hasAnkles": false,
78
+ "hasFeet": false
79
+ },
80
+ "gradeReasons": [
81
+ "6 of 22 canonical humanoid bones mapped",
82
+ "mascot/sparse rig: head + torso acting only, no real limb chains (C)",
83
+ "no usable forearm chain on both arms"
84
+ ],
85
+ "retargetCoverage": 0.273,
86
+ "retargetRequiredCoverage": 0.333,
87
+ "retargetingPoor": true,
88
+ "fkPass": true,
89
+ "fkClips": [
90
+ {
91
+ "clip": "talk",
92
+ "pass": true,
93
+ "failures": []
94
+ },
95
+ {
96
+ "clip": "walk",
97
+ "pass": true,
98
+ "failures": []
99
+ }
100
+ ],
101
+ "fkSignatures": [],
102
+ "verdict": "FAIL",
103
+ "notes": [
104
+ "retargeting will be poor — body acting won't transfer (coverage 27% < 60%).",
105
+ "no feet mapped — locomotion / standing pose can't be validated by FK."
106
+ ]
107
+ },
108
+ {
109
+ "file": "public/hifi-cast/RiggedFigure.glb",
110
+ "bytes": 50116,
111
+ "parsed": true,
112
+ "jointCount": 19,
113
+ "clips": [],
114
+ "rigGrade": "C",
115
+ "mappedBoneCount": 6,
116
+ "capabilities": {
117
+ "hasLegs": true,
118
+ "hasKnees": true,
119
+ "hasAnkles": false,
120
+ "hasFeet": false
121
+ },
122
+ "gradeReasons": [
123
+ "6 of 22 canonical humanoid bones mapped",
124
+ "mascot/sparse rig: head + torso acting only, no real limb chains (C)",
125
+ "no usable forearm chain on both arms"
126
+ ],
127
+ "retargetCoverage": 0.273,
128
+ "retargetRequiredCoverage": 0.333,
129
+ "retargetingPoor": true,
130
+ "fkPass": true,
131
+ "fkClips": [
132
+ {
133
+ "clip": "talk",
134
+ "pass": true,
135
+ "failures": []
136
+ },
137
+ {
138
+ "clip": "walk",
139
+ "pass": true,
140
+ "failures": []
141
+ }
142
+ ],
143
+ "fkSignatures": [],
144
+ "verdict": "FAIL",
145
+ "notes": [
146
+ "retargeting will be poor — body acting won't transfer (coverage 27% < 60%).",
147
+ "no feet mapped — locomotion / standing pose can't be validated by FK."
148
+ ]
149
+ },
150
+ {
151
+ "file": "public/hifi-cast/kaykit/Barbarian.glb",
152
+ "bytes": 3613268,
153
+ "parsed": true,
154
+ "jointCount": 41,
155
+ "clips": [
156
+ "1H_Melee_Attack_Chop",
157
+ "1H_Melee_Attack_Slice_Diagonal",
158
+ "1H_Melee_Attack_Slice_Horizontal",
159
+ "1H_Melee_Attack_Stab",
160
+ "1H_Ranged_Aiming",
161
+ "1H_Ranged_Reload",
162
+ "1H_Ranged_Shoot",
163
+ "1H_Ranged_Shooting",
164
+ "2H_Melee_Attack_Chop",
165
+ "2H_Melee_Attack_Slice",
166
+ "2H_Melee_Attack_Spin",
167
+ "2H_Melee_Attack_Spinning",
168
+ "2H_Melee_Attack_Stab",
169
+ "2H_Melee_Idle",
170
+ "2H_Ranged_Aiming",
171
+ "2H_Ranged_Reload",
172
+ "2H_Ranged_Shoot",
173
+ "2H_Ranged_Shooting",
174
+ "Block",
175
+ "Block_Attack",
176
+ "Block_Hit",
177
+ "Blocking",
178
+ "Cheer",
179
+ "Death_A",
180
+ "Death_A_Pose",
181
+ "Death_B",
182
+ "Death_B_Pose",
183
+ "Dodge_Backward",
184
+ "Dodge_Forward",
185
+ "Dodge_Left",
186
+ "Dodge_Right",
187
+ "Dualwield_Melee_Attack_Chop",
188
+ "Dualwield_Melee_Attack_Slice",
189
+ "Dualwield_Melee_Attack_Stab",
190
+ "Hit_A",
191
+ "Hit_B",
192
+ "Idle",
193
+ "Interact",
194
+ "Jump_Full_Long",
195
+ "Jump_Full_Short",
196
+ "Jump_Idle",
197
+ "Jump_Land",
198
+ "Jump_Start",
199
+ "Lie_Down",
200
+ "Lie_Idle",
201
+ "Lie_Pose",
202
+ "Lie_StandUp",
203
+ "PickUp",
204
+ "Running_A",
205
+ "Running_B",
206
+ "Running_Strafe_Left",
207
+ "Running_Strafe_Right",
208
+ "Sit_Chair_Down",
209
+ "Sit_Chair_Idle",
210
+ "Sit_Chair_Pose",
211
+ "Sit_Chair_StandUp",
212
+ "Sit_Floor_Down",
213
+ "Sit_Floor_Idle",
214
+ "Sit_Floor_Pose",
215
+ "Sit_Floor_StandUp",
216
+ "Spellcast_Long",
217
+ "Spellcast_Raise",
218
+ "Spellcast_Shoot",
219
+ "Spellcasting",
220
+ "T-Pose",
221
+ "Throw",
222
+ "Unarmed_Idle",
223
+ "Unarmed_Melee_Attack_Kick",
224
+ "Unarmed_Melee_Attack_Punch_A",
225
+ "Unarmed_Melee_Attack_Punch_B",
226
+ "Unarmed_Pose",
227
+ "Use_Item",
228
+ "Walking_A",
229
+ "Walking_B",
230
+ "Walking_Backwards",
231
+ "Walking_C"
232
+ ],
233
+ "rigGrade": "B",
234
+ "mappedBoneCount": 18,
235
+ "capabilities": {
236
+ "hasLegs": true,
237
+ "hasKnees": true,
238
+ "hasAnkles": true,
239
+ "hasFeet": true
240
+ },
241
+ "gradeReasons": [
242
+ "18 of 22 canonical humanoid bones mapped",
243
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
244
+ "incomplete upper body (forearms/hands/neck)"
245
+ ],
246
+ "retargetCoverage": 0.818,
247
+ "retargetRequiredCoverage": 1,
248
+ "retargetingPoor": false,
249
+ "fkPass": true,
250
+ "fkClips": [
251
+ {
252
+ "clip": "talk",
253
+ "pass": true,
254
+ "failures": []
255
+ },
256
+ {
257
+ "clip": "walk",
258
+ "pass": true,
259
+ "failures": []
260
+ }
261
+ ],
262
+ "fkSignatures": [],
263
+ "verdict": "PASS",
264
+ "notes": []
265
+ },
266
+ {
267
+ "file": "public/hifi-cast/kaykit/Knight.glb",
268
+ "bytes": 3659532,
269
+ "parsed": true,
270
+ "jointCount": 41,
271
+ "clips": [
272
+ "1H_Melee_Attack_Chop",
273
+ "1H_Melee_Attack_Slice_Diagonal",
274
+ "1H_Melee_Attack_Slice_Horizontal",
275
+ "1H_Melee_Attack_Stab",
276
+ "1H_Ranged_Aiming",
277
+ "1H_Ranged_Reload",
278
+ "1H_Ranged_Shoot",
279
+ "1H_Ranged_Shooting",
280
+ "2H_Melee_Attack_Chop",
281
+ "2H_Melee_Attack_Slice",
282
+ "2H_Melee_Attack_Spin",
283
+ "2H_Melee_Attack_Spinning",
284
+ "2H_Melee_Attack_Stab",
285
+ "2H_Melee_Idle",
286
+ "2H_Ranged_Aiming",
287
+ "2H_Ranged_Reload",
288
+ "2H_Ranged_Shoot",
289
+ "2H_Ranged_Shooting",
290
+ "Block",
291
+ "Block_Attack",
292
+ "Block_Hit",
293
+ "Blocking",
294
+ "Cheer",
295
+ "Death_A",
296
+ "Death_A_Pose",
297
+ "Death_B",
298
+ "Death_B_Pose",
299
+ "Dodge_Backward",
300
+ "Dodge_Forward",
301
+ "Dodge_Left",
302
+ "Dodge_Right",
303
+ "Dualwield_Melee_Attack_Chop",
304
+ "Dualwield_Melee_Attack_Slice",
305
+ "Dualwield_Melee_Attack_Stab",
306
+ "Hit_A",
307
+ "Hit_B",
308
+ "Idle",
309
+ "Interact",
310
+ "Jump_Full_Long",
311
+ "Jump_Full_Short",
312
+ "Jump_Idle",
313
+ "Jump_Land",
314
+ "Jump_Start",
315
+ "Lie_Down",
316
+ "Lie_Idle",
317
+ "Lie_Pose",
318
+ "Lie_StandUp",
319
+ "PickUp",
320
+ "Running_A",
321
+ "Running_B",
322
+ "Running_Strafe_Left",
323
+ "Running_Strafe_Right",
324
+ "Sit_Chair_Down",
325
+ "Sit_Chair_Idle",
326
+ "Sit_Chair_Pose",
327
+ "Sit_Chair_StandUp",
328
+ "Sit_Floor_Down",
329
+ "Sit_Floor_Idle",
330
+ "Sit_Floor_Pose",
331
+ "Sit_Floor_StandUp",
332
+ "Spellcast_Long",
333
+ "Spellcast_Raise",
334
+ "Spellcast_Shoot",
335
+ "Spellcasting",
336
+ "T-Pose",
337
+ "Throw",
338
+ "Unarmed_Idle",
339
+ "Unarmed_Melee_Attack_Kick",
340
+ "Unarmed_Melee_Attack_Punch_A",
341
+ "Unarmed_Melee_Attack_Punch_B",
342
+ "Unarmed_Pose",
343
+ "Use_Item",
344
+ "Walking_A",
345
+ "Walking_B",
346
+ "Walking_Backwards",
347
+ "Walking_C"
348
+ ],
349
+ "rigGrade": "B",
350
+ "mappedBoneCount": 18,
351
+ "capabilities": {
352
+ "hasLegs": true,
353
+ "hasKnees": true,
354
+ "hasAnkles": true,
355
+ "hasFeet": true
356
+ },
357
+ "gradeReasons": [
358
+ "18 of 22 canonical humanoid bones mapped",
359
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
360
+ "incomplete upper body (forearms/hands/neck)"
361
+ ],
362
+ "retargetCoverage": 0.818,
363
+ "retargetRequiredCoverage": 1,
364
+ "retargetingPoor": false,
365
+ "fkPass": true,
366
+ "fkClips": [
367
+ {
368
+ "clip": "talk",
369
+ "pass": true,
370
+ "failures": []
371
+ },
372
+ {
373
+ "clip": "walk",
374
+ "pass": true,
375
+ "failures": []
376
+ }
377
+ ],
378
+ "fkSignatures": [],
379
+ "verdict": "PASS",
380
+ "notes": []
381
+ },
382
+ {
383
+ "file": "public/hifi-cast/kaykit/Mage.glb",
384
+ "bytes": 3589240,
385
+ "parsed": true,
386
+ "jointCount": 41,
387
+ "clips": [
388
+ "1H_Melee_Attack_Chop",
389
+ "1H_Melee_Attack_Slice_Diagonal",
390
+ "1H_Melee_Attack_Slice_Horizontal",
391
+ "1H_Melee_Attack_Stab",
392
+ "1H_Ranged_Aiming",
393
+ "1H_Ranged_Reload",
394
+ "1H_Ranged_Shoot",
395
+ "1H_Ranged_Shooting",
396
+ "2H_Melee_Attack_Chop",
397
+ "2H_Melee_Attack_Slice",
398
+ "2H_Melee_Attack_Spin",
399
+ "2H_Melee_Attack_Spinning",
400
+ "2H_Melee_Attack_Stab",
401
+ "2H_Melee_Idle",
402
+ "2H_Ranged_Aiming",
403
+ "2H_Ranged_Reload",
404
+ "2H_Ranged_Shoot",
405
+ "2H_Ranged_Shooting",
406
+ "Block",
407
+ "Block_Attack",
408
+ "Block_Hit",
409
+ "Blocking",
410
+ "Cheer",
411
+ "Death_A",
412
+ "Death_A_Pose",
413
+ "Death_B",
414
+ "Death_B_Pose",
415
+ "Dodge_Backward",
416
+ "Dodge_Forward",
417
+ "Dodge_Left",
418
+ "Dodge_Right",
419
+ "Dualwield_Melee_Attack_Chop",
420
+ "Dualwield_Melee_Attack_Slice",
421
+ "Dualwield_Melee_Attack_Stab",
422
+ "Hit_A",
423
+ "Hit_B",
424
+ "Idle",
425
+ "Interact",
426
+ "Jump_Full_Long",
427
+ "Jump_Full_Short",
428
+ "Jump_Idle",
429
+ "Jump_Land",
430
+ "Jump_Start",
431
+ "Lie_Down",
432
+ "Lie_Idle",
433
+ "Lie_Pose",
434
+ "Lie_StandUp",
435
+ "PickUp",
436
+ "Running_A",
437
+ "Running_B",
438
+ "Running_Strafe_Left",
439
+ "Running_Strafe_Right",
440
+ "Sit_Chair_Down",
441
+ "Sit_Chair_Idle",
442
+ "Sit_Chair_Pose",
443
+ "Sit_Chair_StandUp",
444
+ "Sit_Floor_Down",
445
+ "Sit_Floor_Idle",
446
+ "Sit_Floor_Pose",
447
+ "Sit_Floor_StandUp",
448
+ "Spellcast_Long",
449
+ "Spellcast_Raise",
450
+ "Spellcast_Shoot",
451
+ "Spellcasting",
452
+ "T-Pose",
453
+ "Throw",
454
+ "Unarmed_Idle",
455
+ "Unarmed_Melee_Attack_Kick",
456
+ "Unarmed_Melee_Attack_Punch_A",
457
+ "Unarmed_Melee_Attack_Punch_B",
458
+ "Unarmed_Pose",
459
+ "Use_Item",
460
+ "Walking_A",
461
+ "Walking_B",
462
+ "Walking_Backwards",
463
+ "Walking_C"
464
+ ],
465
+ "rigGrade": "B",
466
+ "mappedBoneCount": 18,
467
+ "capabilities": {
468
+ "hasLegs": true,
469
+ "hasKnees": true,
470
+ "hasAnkles": true,
471
+ "hasFeet": true
472
+ },
473
+ "gradeReasons": [
474
+ "18 of 22 canonical humanoid bones mapped",
475
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
476
+ "incomplete upper body (forearms/hands/neck)"
477
+ ],
478
+ "retargetCoverage": 0.818,
479
+ "retargetRequiredCoverage": 1,
480
+ "retargetingPoor": false,
481
+ "fkPass": true,
482
+ "fkClips": [
483
+ {
484
+ "clip": "talk",
485
+ "pass": true,
486
+ "failures": []
487
+ },
488
+ {
489
+ "clip": "walk",
490
+ "pass": true,
491
+ "failures": []
492
+ }
493
+ ],
494
+ "fkSignatures": [],
495
+ "verdict": "PASS",
496
+ "notes": []
497
+ },
498
+ {
499
+ "file": "public/hifi-cast/kaykit/Rogue.glb",
500
+ "bytes": 3616284,
501
+ "parsed": true,
502
+ "jointCount": 41,
503
+ "clips": [
504
+ "1H_Melee_Attack_Chop",
505
+ "1H_Melee_Attack_Slice_Diagonal",
506
+ "1H_Melee_Attack_Slice_Horizontal",
507
+ "1H_Melee_Attack_Stab",
508
+ "1H_Ranged_Aiming",
509
+ "1H_Ranged_Reload",
510
+ "1H_Ranged_Shoot",
511
+ "1H_Ranged_Shooting",
512
+ "2H_Melee_Attack_Chop",
513
+ "2H_Melee_Attack_Slice",
514
+ "2H_Melee_Attack_Spin",
515
+ "2H_Melee_Attack_Spinning",
516
+ "2H_Melee_Attack_Stab",
517
+ "2H_Melee_Idle",
518
+ "2H_Ranged_Aiming",
519
+ "2H_Ranged_Reload",
520
+ "2H_Ranged_Shoot",
521
+ "2H_Ranged_Shooting",
522
+ "Block",
523
+ "Block_Attack",
524
+ "Block_Hit",
525
+ "Blocking",
526
+ "Cheer",
527
+ "Death_A",
528
+ "Death_A_Pose",
529
+ "Death_B",
530
+ "Death_B_Pose",
531
+ "Dodge_Backward",
532
+ "Dodge_Forward",
533
+ "Dodge_Left",
534
+ "Dodge_Right",
535
+ "Dualwield_Melee_Attack_Chop",
536
+ "Dualwield_Melee_Attack_Slice",
537
+ "Dualwield_Melee_Attack_Stab",
538
+ "Hit_A",
539
+ "Hit_B",
540
+ "Idle",
541
+ "Interact",
542
+ "Jump_Full_Long",
543
+ "Jump_Full_Short",
544
+ "Jump_Idle",
545
+ "Jump_Land",
546
+ "Jump_Start",
547
+ "Lie_Down",
548
+ "Lie_Idle",
549
+ "Lie_Pose",
550
+ "Lie_StandUp",
551
+ "PickUp",
552
+ "Running_A",
553
+ "Running_B",
554
+ "Running_Strafe_Left",
555
+ "Running_Strafe_Right",
556
+ "Sit_Chair_Down",
557
+ "Sit_Chair_Idle",
558
+ "Sit_Chair_Pose",
559
+ "Sit_Chair_StandUp",
560
+ "Sit_Floor_Down",
561
+ "Sit_Floor_Idle",
562
+ "Sit_Floor_Pose",
563
+ "Sit_Floor_StandUp",
564
+ "Spellcast_Long",
565
+ "Spellcast_Raise",
566
+ "Spellcast_Shoot",
567
+ "Spellcasting",
568
+ "T-Pose",
569
+ "Throw",
570
+ "Unarmed_Idle",
571
+ "Unarmed_Melee_Attack_Kick",
572
+ "Unarmed_Melee_Attack_Punch_A",
573
+ "Unarmed_Melee_Attack_Punch_B",
574
+ "Unarmed_Pose",
575
+ "Use_Item",
576
+ "Walking_A",
577
+ "Walking_B",
578
+ "Walking_Backwards",
579
+ "Walking_C"
580
+ ],
581
+ "rigGrade": "B",
582
+ "mappedBoneCount": 18,
583
+ "capabilities": {
584
+ "hasLegs": true,
585
+ "hasKnees": true,
586
+ "hasAnkles": true,
587
+ "hasFeet": true
588
+ },
589
+ "gradeReasons": [
590
+ "18 of 22 canonical humanoid bones mapped",
591
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
592
+ "incomplete upper body (forearms/hands/neck)"
593
+ ],
594
+ "retargetCoverage": 0.818,
595
+ "retargetRequiredCoverage": 1,
596
+ "retargetingPoor": false,
597
+ "fkPass": true,
598
+ "fkClips": [
599
+ {
600
+ "clip": "talk",
601
+ "pass": true,
602
+ "failures": []
603
+ },
604
+ {
605
+ "clip": "walk",
606
+ "pass": true,
607
+ "failures": []
608
+ }
609
+ ],
610
+ "fkSignatures": [],
611
+ "verdict": "PASS",
612
+ "notes": []
613
+ },
614
+ {
615
+ "file": "public/hifi-cast/kaykit/Rogue_Hooded.glb",
616
+ "bytes": 3597652,
617
+ "parsed": true,
618
+ "jointCount": 41,
619
+ "clips": [
620
+ "1H_Melee_Attack_Chop",
621
+ "1H_Melee_Attack_Slice_Diagonal",
622
+ "1H_Melee_Attack_Slice_Horizontal",
623
+ "1H_Melee_Attack_Stab",
624
+ "1H_Ranged_Aiming",
625
+ "1H_Ranged_Reload",
626
+ "1H_Ranged_Shoot",
627
+ "1H_Ranged_Shooting",
628
+ "2H_Melee_Attack_Chop",
629
+ "2H_Melee_Attack_Slice",
630
+ "2H_Melee_Attack_Spin",
631
+ "2H_Melee_Attack_Spinning",
632
+ "2H_Melee_Attack_Stab",
633
+ "2H_Melee_Idle",
634
+ "2H_Ranged_Aiming",
635
+ "2H_Ranged_Reload",
636
+ "2H_Ranged_Shoot",
637
+ "2H_Ranged_Shooting",
638
+ "Block",
639
+ "Block_Attack",
640
+ "Block_Hit",
641
+ "Blocking",
642
+ "Cheer",
643
+ "Death_A",
644
+ "Death_A_Pose",
645
+ "Death_B",
646
+ "Death_B_Pose",
647
+ "Dodge_Backward",
648
+ "Dodge_Forward",
649
+ "Dodge_Left",
650
+ "Dodge_Right",
651
+ "Dualwield_Melee_Attack_Chop",
652
+ "Dualwield_Melee_Attack_Slice",
653
+ "Dualwield_Melee_Attack_Stab",
654
+ "Hit_A",
655
+ "Hit_B",
656
+ "Idle",
657
+ "Interact",
658
+ "Jump_Full_Long",
659
+ "Jump_Full_Short",
660
+ "Jump_Idle",
661
+ "Jump_Land",
662
+ "Jump_Start",
663
+ "Lie_Down",
664
+ "Lie_Idle",
665
+ "Lie_Pose",
666
+ "Lie_StandUp",
667
+ "PickUp",
668
+ "Running_A",
669
+ "Running_B",
670
+ "Running_Strafe_Left",
671
+ "Running_Strafe_Right",
672
+ "Sit_Chair_Down",
673
+ "Sit_Chair_Idle",
674
+ "Sit_Chair_Pose",
675
+ "Sit_Chair_StandUp",
676
+ "Sit_Floor_Down",
677
+ "Sit_Floor_Idle",
678
+ "Sit_Floor_Pose",
679
+ "Sit_Floor_StandUp",
680
+ "Spellcast_Long",
681
+ "Spellcast_Raise",
682
+ "Spellcast_Shoot",
683
+ "Spellcasting",
684
+ "T-Pose",
685
+ "Throw",
686
+ "Unarmed_Idle",
687
+ "Unarmed_Melee_Attack_Kick",
688
+ "Unarmed_Melee_Attack_Punch_A",
689
+ "Unarmed_Melee_Attack_Punch_B",
690
+ "Unarmed_Pose",
691
+ "Use_Item",
692
+ "Walking_A",
693
+ "Walking_B",
694
+ "Walking_Backwards",
695
+ "Walking_C"
696
+ ],
697
+ "rigGrade": "B",
698
+ "mappedBoneCount": 18,
699
+ "capabilities": {
700
+ "hasLegs": true,
701
+ "hasKnees": true,
702
+ "hasAnkles": true,
703
+ "hasFeet": true
704
+ },
705
+ "gradeReasons": [
706
+ "18 of 22 canonical humanoid bones mapped",
707
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
708
+ "incomplete upper body (forearms/hands/neck)"
709
+ ],
710
+ "retargetCoverage": 0.818,
711
+ "retargetRequiredCoverage": 1,
712
+ "retargetingPoor": false,
713
+ "fkPass": true,
714
+ "fkClips": [
715
+ {
716
+ "clip": "talk",
717
+ "pass": true,
718
+ "failures": []
719
+ },
720
+ {
721
+ "clip": "walk",
722
+ "pass": true,
723
+ "failures": []
724
+ }
725
+ ],
726
+ "fkSignatures": [],
727
+ "verdict": "PASS",
728
+ "notes": []
729
+ },
730
+ {
731
+ "file": "public/hifi-cast/rpm/cesiumman.glb",
732
+ "bytes": 438044,
733
+ "parsed": true,
734
+ "jointCount": 19,
735
+ "clips": [],
736
+ "rigGrade": "C",
737
+ "mappedBoneCount": 6,
738
+ "capabilities": {
739
+ "hasLegs": true,
740
+ "hasKnees": true,
741
+ "hasAnkles": false,
742
+ "hasFeet": false
743
+ },
744
+ "gradeReasons": [
745
+ "6 of 22 canonical humanoid bones mapped",
746
+ "mascot/sparse rig: head + torso acting only, no real limb chains (C)",
747
+ "no usable forearm chain on both arms"
748
+ ],
749
+ "retargetCoverage": 0.273,
750
+ "retargetRequiredCoverage": 0.333,
751
+ "retargetingPoor": true,
752
+ "fkPass": true,
753
+ "fkClips": [
754
+ {
755
+ "clip": "talk",
756
+ "pass": true,
757
+ "failures": []
758
+ },
759
+ {
760
+ "clip": "walk",
761
+ "pass": true,
762
+ "failures": []
763
+ }
764
+ ],
765
+ "fkSignatures": [],
766
+ "verdict": "FAIL",
767
+ "notes": [
768
+ "retargeting will be poor — body acting won't transfer (coverage 27% < 60%).",
769
+ "no feet mapped — locomotion / standing pose can't be validated by FK."
770
+ ]
771
+ },
772
+ {
773
+ "file": "public/hifi-cast/rpm/fox.glb",
774
+ "bytes": 162852,
775
+ "parsed": true,
776
+ "jointCount": 24,
777
+ "clips": [
778
+ "Survey",
779
+ "Walk",
780
+ "Run"
781
+ ],
782
+ "rigGrade": "B",
783
+ "mappedBoneCount": 15,
784
+ "capabilities": {
785
+ "hasLegs": true,
786
+ "hasKnees": true,
787
+ "hasAnkles": true,
788
+ "hasFeet": true
789
+ },
790
+ "gradeReasons": [
791
+ "15 of 22 canonical humanoid bones mapped",
792
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)"
793
+ ],
794
+ "retargetCoverage": 0.682,
795
+ "retargetRequiredCoverage": 0.867,
796
+ "retargetingPoor": false,
797
+ "fkPass": true,
798
+ "fkClips": [
799
+ {
800
+ "clip": "talk",
801
+ "pass": true,
802
+ "failures": []
803
+ },
804
+ {
805
+ "clip": "walk",
806
+ "pass": true,
807
+ "failures": []
808
+ }
809
+ ],
810
+ "fkSignatures": [],
811
+ "verdict": "PASS",
812
+ "notes": []
813
+ },
814
+ {
815
+ "file": "public/hifi-cast/rpm/riggedfigure.glb",
816
+ "bytes": 50116,
817
+ "parsed": true,
818
+ "jointCount": 19,
819
+ "clips": [],
820
+ "rigGrade": "C",
821
+ "mappedBoneCount": 6,
822
+ "capabilities": {
823
+ "hasLegs": true,
824
+ "hasKnees": true,
825
+ "hasAnkles": false,
826
+ "hasFeet": false
827
+ },
828
+ "gradeReasons": [
829
+ "6 of 22 canonical humanoid bones mapped",
830
+ "mascot/sparse rig: head + torso acting only, no real limb chains (C)",
831
+ "no usable forearm chain on both arms"
832
+ ],
833
+ "retargetCoverage": 0.273,
834
+ "retargetRequiredCoverage": 0.333,
835
+ "retargetingPoor": true,
836
+ "fkPass": true,
837
+ "fkClips": [
838
+ {
839
+ "clip": "talk",
840
+ "pass": true,
841
+ "failures": []
842
+ },
843
+ {
844
+ "clip": "walk",
845
+ "pass": true,
846
+ "failures": []
847
+ }
848
+ ],
849
+ "fkSignatures": [],
850
+ "verdict": "FAIL",
851
+ "notes": [
852
+ "retargeting will be poor — body acting won't transfer (coverage 27% < 60%).",
853
+ "no feet mapped — locomotion / standing pose can't be validated by FK."
854
+ ]
855
+ },
856
+ {
857
+ "file": "public/aura-assets/rusty.catalog.glb",
858
+ "bytes": 681820,
859
+ "parsed": true,
860
+ "jointCount": 28,
861
+ "clips": [
862
+ "Take 001"
863
+ ],
864
+ "rigGrade": "B",
865
+ "mappedBoneCount": 17,
866
+ "capabilities": {
867
+ "hasLegs": true,
868
+ "hasKnees": true,
869
+ "hasAnkles": true,
870
+ "hasFeet": true
871
+ },
872
+ "gradeReasons": [
873
+ "17 of 22 canonical humanoid bones mapped",
874
+ "partial humanoid: body acting possible but a limb chain or extremities are missing (B)",
875
+ "incomplete upper body (forearms/hands/neck)"
876
+ ],
877
+ "retargetCoverage": 0.773,
878
+ "retargetRequiredCoverage": 0.733,
879
+ "retargetingPoor": false,
880
+ "fkPass": true,
881
+ "fkClips": [
882
+ {
883
+ "clip": "talk",
884
+ "pass": true,
885
+ "failures": []
886
+ },
887
+ {
888
+ "clip": "walk",
889
+ "pass": true,
890
+ "failures": []
891
+ }
892
+ ],
893
+ "fkSignatures": [],
894
+ "verdict": "PASS",
895
+ "notes": []
896
+ },
897
+ {
898
+ "file": "public/aura-assets/luma.catalog.glb",
899
+ "bytes": 2856452,
900
+ "parsed": true,
901
+ "jointCount": 63,
902
+ "clips": [
903
+ "Idle"
904
+ ],
905
+ "rigGrade": "A",
906
+ "mappedBoneCount": 22,
907
+ "capabilities": {
908
+ "hasLegs": true,
909
+ "hasKnees": true,
910
+ "hasAnkles": true,
911
+ "hasFeet": true
912
+ },
913
+ "gradeReasons": [
914
+ "22 of 22 canonical humanoid bones mapped",
915
+ "full humanoid: spine/neck/head + both arms (forearms+hands) + both legs (lower legs+feet) (A)"
916
+ ],
917
+ "retargetCoverage": 1,
918
+ "retargetRequiredCoverage": 1,
919
+ "retargetingPoor": false,
920
+ "fkPass": true,
921
+ "fkClips": [
922
+ {
923
+ "clip": "talk",
924
+ "pass": true,
925
+ "failures": []
926
+ },
927
+ {
928
+ "clip": "walk",
929
+ "pass": true,
930
+ "failures": []
931
+ }
932
+ ],
933
+ "fkSignatures": [],
934
+ "verdict": "PASS",
935
+ "notes": []
936
+ }
937
+ ]
938
+ }