create-aura3d 3.0.0 → 4.0.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 (402) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-skills.d.ts +38 -0
  3. package/dist/agent-skills.d.ts.map +1 -0
  4. package/dist/agent-skills.js +103 -0
  5. package/dist/agent-skills.js.map +1 -0
  6. package/dist/cli.js +32 -5
  7. package/dist/cli.js.map +1 -1
  8. package/dist/index.d.ts +32 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +52 -10
  11. package/dist/index.js.map +1 -1
  12. package/dist/showcase-spec-artifacts.d.ts +1 -1
  13. package/dist/showcase-spec-game-geometry-extractor.js +8 -11
  14. package/dist/showcase-spec-game-geometry-extractor.js.map +1 -1
  15. package/dist/template-hdri.d.ts +12 -0
  16. package/dist/template-hdri.d.ts.map +1 -0
  17. package/dist/template-hdri.js +49 -0
  18. package/dist/template-hdri.js.map +1 -0
  19. package/hdri/ATTRIBUTION.md +8 -0
  20. package/hdri/autumn_field_puresky_1k.hdr +0 -0
  21. package/hdri/kloppenheim_06_puresky_1k.hdr +0 -0
  22. package/hdri/night-2k.hdr +0 -0
  23. package/hdri/studio_small_08_1k.hdr +0 -0
  24. package/package.json +14 -10
  25. package/skills/agent-files/AGENTS.md +3 -0
  26. package/skills/aura3d-animation-studio/SKILL.md +153 -0
  27. package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
  28. package/skills/aura3d-art-direction/SKILL.md +84 -0
  29. package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
  30. package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
  31. package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
  32. package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
  33. package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
  34. package/skills/aura3d-assets/SKILL.md +132 -0
  35. package/skills/aura3d-assets/references/preview-under-look.md +26 -0
  36. package/skills/aura3d-browser-game/SKILL.md +127 -0
  37. package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
  38. package/skills/aura3d-character-animation/SKILL.md +129 -0
  39. package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
  40. package/skills/aura3d-core/SKILL.md +121 -0
  41. package/skills/aura3d-core/references/boundaries.md +91 -0
  42. package/skills/aura3d-evidence-review/SKILL.md +106 -0
  43. package/skills/aura3d-game-art/SKILL.md +118 -0
  44. package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
  45. package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
  46. package/skills/aura3d-materials-environments/SKILL.md +139 -0
  47. package/skills/aura3d-performance/SKILL.md +97 -0
  48. package/skills/aura3d-retexture/SKILL.md +115 -0
  49. package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
  50. package/skills/aura3d-scene-authoring/SKILL.md +132 -0
  51. package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
  52. package/skills/aura3d-threejs-migration/SKILL.md +125 -0
  53. package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
  54. package/skills/llms.txt +117 -0
  55. package/skills/manifest.json +163 -0
  56. package/skills/meshy-cli/SKILL.md +133 -0
  57. package/templates/animation-channel/.claude/CLAUDE.md +3 -0
  58. package/templates/animation-channel/.github/workflows/aura3d-lookdev.yml +67 -0
  59. package/templates/animation-channel/AGENTS.md +3 -0
  60. package/templates/animation-channel/package.json +4 -3
  61. package/templates/animation-channel/src/main.ts +5 -6
  62. package/templates/animation-channel/src/render-plan.ts +5 -3
  63. package/templates/animation-channel/tests/look-floor.ts +270 -0
  64. package/templates/animation-channel/tests/route-health.spec.ts +13 -0
  65. package/templates/animation-channel/tests/screenshot.spec.ts +10 -5
  66. package/templates/animation-channel/vite.config.ts +7 -0
  67. package/templates/animation-studio/.claude/CLAUDE.md +3 -0
  68. package/templates/animation-studio/.github/workflows/aura3d-lookdev.yml +67 -0
  69. package/templates/animation-studio/AGENTS.md +2 -70
  70. package/templates/animation-studio/package.json +5 -4
  71. package/templates/animation-studio/public/aura-assets/luma.thumb.svg +1 -1
  72. package/templates/animation-studio/public/aura-assets/miko.thumb.svg +1 -1
  73. package/templates/{falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.thumb.svg → animation-studio/public/aura-assets/moonGarden.thumb.svg} +1 -1
  74. package/templates/animation-studio/scripts/build-clip-library.ts +6 -5
  75. package/templates/animation-studio/scripts/resolve-asset.ts +7 -4
  76. package/templates/animation-studio/src/asset-contract.ts +19 -0
  77. package/templates/animation-studio/src/aura-assets.ts +651 -54
  78. package/templates/animation-studio/src/scene-player.ts +6 -6
  79. package/templates/animation-studio/src/set-templates.ts +13 -9
  80. package/templates/animation-studio/tests/look-floor.ts +270 -0
  81. package/templates/animation-studio/tests/route-health.spec.ts +2 -2
  82. package/templates/animation-studio/tests/screenshot.spec.ts +18 -10
  83. package/templates/animation-studio/vite.config.ts +2 -0
  84. package/templates/architecture-interior/.claude/CLAUDE.md +3 -0
  85. package/templates/architecture-interior/.github/workflows/aura3d-lookdev.yml +67 -0
  86. package/templates/architecture-interior/AGENTS.md +3 -0
  87. package/templates/architecture-interior/README.md +16 -0
  88. package/templates/architecture-interior/aura.assets.json +24 -0
  89. package/templates/architecture-interior/package.json +24 -0
  90. package/templates/architecture-interior/public/aura-assets/kenneyModularDungeonRoomSmall.a7e74a5f.glb +0 -0
  91. package/templates/architecture-interior/src/aura-assets.ts +16 -0
  92. package/templates/architecture-interior/src/main.ts +23 -0
  93. package/templates/architecture-interior/tests/look-floor.ts +270 -0
  94. package/templates/{three-compat-architecture-interior → architecture-interior}/tests/route-health.spec.ts +3 -3
  95. package/templates/architecture-interior/tests/screenshot.spec.ts +21 -0
  96. package/templates/architecture-interior/vite.config.ts +7 -0
  97. package/templates/arena-shooter/.claude/CLAUDE.md +3 -0
  98. package/templates/arena-shooter/.github/workflows/aura3d-lookdev.yml +67 -0
  99. package/templates/arena-shooter/AGENTS.md +3 -0
  100. package/templates/arena-shooter/README.md +45 -0
  101. package/templates/arena-shooter/aura.assets.json +62 -0
  102. package/templates/arena-shooter/index.html +32 -0
  103. package/templates/arena-shooter/package.json +23 -0
  104. package/templates/arena-shooter/playwright.config.ts +15 -0
  105. package/templates/arena-shooter/public/aura-assets/craft_miner.de323205.glb +0 -0
  106. package/templates/arena-shooter/public/aura-assets/craft_racer.bce8cb3d.glb +0 -0
  107. package/templates/arena-shooter/public/aura-assets/meteor_detailed.f30379ab.glb +0 -0
  108. package/templates/arena-shooter/src/aura-assets.ts +56 -0
  109. package/templates/arena-shooter/src/main.ts +616 -0
  110. package/templates/arena-shooter/tests/look-floor.ts +270 -0
  111. package/templates/arena-shooter/tests/playable.spec.ts +56 -0
  112. package/templates/arena-shooter/tests/route-health.spec.ts +87 -0
  113. package/templates/arena-shooter/tests/screenshot.spec.ts +22 -0
  114. package/templates/arena-shooter/tsconfig.json +15 -0
  115. package/templates/arena-shooter/vite.config.ts +7 -0
  116. package/templates/asset-inspector/.claude/CLAUDE.md +3 -0
  117. package/templates/asset-inspector/.github/workflows/aura3d-lookdev.yml +67 -0
  118. package/templates/asset-inspector/AGENTS.md +3 -0
  119. package/templates/asset-inspector/README.md +13 -0
  120. package/templates/asset-inspector/aura.assets.json +24 -0
  121. package/templates/{three-compat-custom-threejs-migration → asset-inspector}/package.json +6 -4
  122. package/templates/asset-inspector/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  123. package/templates/asset-inspector/src/aura-assets.ts +16 -0
  124. package/templates/asset-inspector/src/main.ts +23 -0
  125. package/templates/asset-inspector/tests/look-floor.ts +270 -0
  126. package/templates/{three-compat-character-viewer → asset-inspector}/tests/route-health.spec.ts +3 -3
  127. package/templates/asset-inspector/tests/screenshot.spec.ts +21 -0
  128. package/templates/asset-inspector/vite.config.ts +7 -0
  129. package/templates/character-controller/.claude/CLAUDE.md +3 -0
  130. package/templates/character-controller/.github/workflows/aura3d-lookdev.yml +67 -0
  131. package/templates/character-controller/AGENTS.md +3 -0
  132. package/templates/character-controller/README.md +7 -1
  133. package/templates/character-controller/aura.assets.json +29 -22
  134. package/templates/character-controller/index.html +4 -5
  135. package/templates/character-controller/package.json +6 -5
  136. package/templates/character-controller/playwright.config.ts +1 -0
  137. package/templates/character-controller/public/aura-assets/auraclash-player-rig.glb +0 -0
  138. package/templates/character-controller/src/aura-assets.ts +25 -7
  139. package/templates/character-controller/src/main.ts +190 -47
  140. package/templates/character-controller/tests/certified-rig.spec.ts +2 -2
  141. package/templates/character-controller/tests/look-floor.ts +270 -0
  142. package/templates/character-controller/tests/route-health.spec.ts +49 -4
  143. package/templates/character-controller/tests/screenshot.spec.ts +17 -5
  144. package/templates/character-controller/vite.config.ts +7 -0
  145. package/templates/character-viewer/.claude/CLAUDE.md +3 -0
  146. package/templates/character-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  147. package/templates/character-viewer/AGENTS.md +3 -0
  148. package/templates/character-viewer/README.md +13 -0
  149. package/templates/character-viewer/aura.assets.json +24 -0
  150. package/templates/{three-compat-asset-inspector → character-viewer}/package.json +6 -4
  151. package/templates/character-viewer/public/aura-assets/kenneyMiniForestCharacterArcher.0fd0f92e.glb +0 -0
  152. package/templates/character-viewer/src/aura-assets.ts +16 -0
  153. package/templates/character-viewer/src/main.ts +21 -0
  154. package/templates/character-viewer/tests/look-floor.ts +270 -0
  155. package/templates/{three-compat-custom-threejs-migration → character-viewer}/tests/route-health.spec.ts +3 -3
  156. package/templates/character-viewer/tests/screenshot.spec.ts +21 -0
  157. package/templates/character-viewer/vite.config.ts +7 -0
  158. package/templates/cinematic-scene/.claude/CLAUDE.md +3 -0
  159. package/templates/cinematic-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  160. package/templates/cinematic-scene/AGENTS.md +3 -0
  161. package/templates/cinematic-scene/README.md +11 -2
  162. package/templates/cinematic-scene/package.json +4 -3
  163. package/templates/cinematic-scene/src/main.ts +46 -11
  164. package/templates/cinematic-scene/tests/look-floor.ts +270 -0
  165. package/templates/cinematic-scene/tests/route-health.spec.ts +31 -3
  166. package/templates/cinematic-scene/tests/screenshot.spec.ts +34 -45
  167. package/templates/cinematic-scene/vite.config.ts +7 -0
  168. package/templates/custom-scene/.claude/CLAUDE.md +3 -0
  169. package/templates/custom-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  170. package/templates/custom-scene/AGENTS.md +3 -0
  171. package/templates/custom-scene/README.md +13 -0
  172. package/templates/custom-scene/aura.assets.json +24 -0
  173. package/templates/{three-compat-character-viewer → custom-scene}/package.json +6 -4
  174. package/templates/custom-scene/public/aura-assets/kenneyPirateKitShipMedium.279ea019.glb +0 -0
  175. package/templates/custom-scene/src/aura-assets.ts +16 -0
  176. package/templates/custom-scene/src/main.ts +23 -0
  177. package/templates/custom-scene/tests/look-floor.ts +270 -0
  178. package/templates/{three-compat-asset-inspector → custom-scene}/tests/route-health.spec.ts +3 -3
  179. package/templates/custom-scene/tests/screenshot.spec.ts +21 -0
  180. package/templates/custom-scene/vite.config.ts +7 -0
  181. package/templates/episode-builder/.claude/CLAUDE.md +3 -0
  182. package/templates/episode-builder/.github/workflows/aura3d-lookdev.yml +67 -0
  183. package/templates/episode-builder/AGENTS.md +3 -0
  184. package/templates/episode-builder/package.json +4 -3
  185. package/templates/episode-builder/src/main.ts +5 -3
  186. package/templates/episode-builder/src/render-plan.ts +5 -3
  187. package/templates/episode-builder/tests/look-floor.ts +270 -0
  188. package/templates/episode-builder/tests/route-health.spec.ts +11 -0
  189. package/templates/episode-builder/tests/screenshot.spec.ts +10 -4
  190. package/templates/episode-builder/vite.config.ts +7 -0
  191. package/templates/falling-blocks-starter/.claude/CLAUDE.md +3 -0
  192. package/templates/falling-blocks-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  193. package/templates/falling-blocks-starter/AGENTS.md +3 -0
  194. package/templates/falling-blocks-starter/README.md +10 -1
  195. package/templates/falling-blocks-starter/aura.assets.json +40 -23
  196. package/templates/falling-blocks-starter/package.json +4 -3
  197. package/templates/falling-blocks-starter/public/aura-assets/quaternius-cube-crate.glb +0 -0
  198. package/templates/falling-blocks-starter/public/aura-assets/quaternius-wall-modular.glb +0 -0
  199. package/templates/falling-blocks-starter/src/aura-assets.ts +33 -10
  200. package/templates/falling-blocks-starter/src/main.ts +317 -96
  201. package/templates/falling-blocks-starter/tests/look-floor.ts +270 -0
  202. package/templates/falling-blocks-starter/tests/playable.spec.ts +51 -18
  203. package/templates/falling-blocks-starter/tests/route-health.spec.ts +17 -7
  204. package/templates/falling-blocks-starter/tests/screenshot.spec.ts +21 -0
  205. package/templates/falling-blocks-starter/vite.config.ts +7 -0
  206. package/templates/fighting-game/.claude/CLAUDE.md +3 -0
  207. package/templates/fighting-game/.github/workflows/aura3d-lookdev.yml +67 -0
  208. package/templates/fighting-game/AGENTS.md +3 -0
  209. package/templates/fighting-game/README.md +2 -0
  210. package/templates/fighting-game/aura.assets.json +56 -46
  211. package/templates/fighting-game/package.json +5 -3
  212. package/templates/fighting-game/public/aura-assets/auraclash-player-rig.glb +0 -0
  213. package/templates/fighting-game/public/aura-assets/auraclash-rival-rig.glb +0 -0
  214. package/templates/fighting-game/src/aura-assets.ts +54 -20
  215. package/templates/fighting-game/src/game/fighters.ts +57 -12
  216. package/templates/fighting-game/src/main.ts +135 -53
  217. package/templates/fighting-game/tests/certified-rig.spec.ts +1 -1
  218. package/templates/fighting-game/tests/gameplay-smoke.spec.ts +25 -33
  219. package/templates/fighting-game/tests/look-floor.ts +270 -0
  220. package/templates/fighting-game/tests/route-health.spec.ts +23 -4
  221. package/templates/fighting-game/tests/screenshot.spec.ts +10 -4
  222. package/templates/fighting-game/vite.config.ts +7 -0
  223. package/templates/large-scene/.claude/CLAUDE.md +3 -0
  224. package/templates/large-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  225. package/templates/large-scene/AGENTS.md +3 -0
  226. package/templates/large-scene/README.md +13 -0
  227. package/templates/large-scene/aura.assets.json +40 -0
  228. package/templates/{three-compat-architecture-interior → large-scene}/package.json +6 -4
  229. package/templates/large-scene/public/aura-assets/kenneyMiniForestRocksHigh.226728a0.glb +0 -0
  230. package/templates/large-scene/public/aura-assets/kenneyMiniForestTree.0075d505.glb +0 -0
  231. package/templates/large-scene/src/aura-assets.ts +28 -0
  232. package/templates/large-scene/src/main.ts +43 -0
  233. package/templates/large-scene/tests/look-floor.ts +270 -0
  234. package/templates/large-scene/tests/route-health.spec.ts +16 -0
  235. package/templates/large-scene/tests/screenshot.spec.ts +21 -0
  236. package/templates/large-scene/vite.config.ts +7 -0
  237. package/templates/material-authoring/.claude/CLAUDE.md +3 -0
  238. package/templates/material-authoring/.github/workflows/aura3d-lookdev.yml +67 -0
  239. package/templates/material-authoring/AGENTS.md +3 -0
  240. package/templates/material-authoring/README.md +15 -0
  241. package/templates/material-authoring/aura.assets.json +24 -0
  242. package/templates/material-authoring/package.json +24 -0
  243. package/templates/material-authoring/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  244. package/templates/material-authoring/src/aura-assets.ts +16 -0
  245. package/templates/material-authoring/src/main.ts +78 -0
  246. package/templates/material-authoring/tests/look-floor.ts +270 -0
  247. package/templates/material-authoring/tests/route-health.spec.ts +16 -0
  248. package/templates/material-authoring/tests/screenshot.spec.ts +21 -0
  249. package/templates/material-authoring/vite.config.ts +7 -0
  250. package/templates/mini-game/.claude/CLAUDE.md +3 -0
  251. package/templates/mini-game/.github/workflows/aura3d-lookdev.yml +67 -0
  252. package/templates/mini-game/AGENTS.md +3 -0
  253. package/templates/mini-game/README.md +9 -6
  254. package/templates/mini-game/aura.assets.json +177 -36
  255. package/templates/mini-game/package.json +4 -2
  256. package/templates/mini-game/public/aura-assets/kaykit-barbarian.glb +0 -0
  257. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitKey.2e930961.glb +0 -0
  258. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitStar.a102a1b9.glb +0 -0
  259. package/templates/mini-game/public/aura-assets/quaternius-crate.glb +0 -0
  260. package/templates/mini-game/public/aura-assets/quaternius-cube-crate.glb +0 -0
  261. package/templates/mini-game/src/aura-assets.ts +140 -32
  262. package/templates/mini-game/src/main.ts +204 -71
  263. package/templates/mini-game/tests/certified-rig.spec.ts +2 -2
  264. package/templates/mini-game/tests/look-floor.ts +270 -0
  265. package/templates/mini-game/tests/playable.spec.ts +23 -2
  266. package/templates/mini-game/tests/route-health.spec.ts +2 -2
  267. package/templates/mini-game/tests/screenshot.spec.ts +44 -53
  268. package/templates/mini-game/vite.config.ts +7 -0
  269. package/templates/postprocess-scene/.claude/CLAUDE.md +3 -0
  270. package/templates/postprocess-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  271. package/templates/postprocess-scene/AGENTS.md +3 -0
  272. package/templates/postprocess-scene/README.md +17 -0
  273. package/templates/postprocess-scene/aura.assets.json +38 -0
  274. package/templates/postprocess-scene/package.json +24 -0
  275. package/templates/postprocess-scene/public/aura-assets/showcaseLuma.ef389217.glb +0 -0
  276. package/templates/postprocess-scene/public/aura-assets/showcaseMiko.fcdc2b75.glb +0 -0
  277. package/templates/postprocess-scene/src/aura-assets.ts +28 -0
  278. package/templates/postprocess-scene/src/main.ts +29 -0
  279. package/templates/postprocess-scene/tests/look-floor.ts +270 -0
  280. package/templates/postprocess-scene/tests/route-health.spec.ts +16 -0
  281. package/templates/postprocess-scene/tests/screenshot.spec.ts +21 -0
  282. package/templates/postprocess-scene/vite.config.ts +7 -0
  283. package/templates/premium-product-viewer/.claude/CLAUDE.md +3 -0
  284. package/templates/premium-product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  285. package/templates/premium-product-viewer/AGENTS.md +3 -0
  286. package/templates/premium-product-viewer/README.md +18 -0
  287. package/templates/premium-product-viewer/aura.assets.json +24 -0
  288. package/templates/premium-product-viewer/package.json +24 -0
  289. package/templates/premium-product-viewer/public/aura-assets/khronosToyCar.01a60862.glb +0 -0
  290. package/templates/premium-product-viewer/src/aura-assets.ts +16 -0
  291. package/templates/premium-product-viewer/src/main.ts +33 -0
  292. package/templates/premium-product-viewer/tests/look-floor.ts +270 -0
  293. package/templates/premium-product-viewer/tests/route-health.spec.ts +16 -0
  294. package/templates/premium-product-viewer/tests/screenshot.spec.ts +21 -0
  295. package/templates/premium-product-viewer/vite.config.ts +7 -0
  296. package/templates/product-viewer/.claude/CLAUDE.md +3 -0
  297. package/templates/product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  298. package/templates/product-viewer/AGENTS.md +3 -0
  299. package/templates/product-viewer/README.md +10 -8
  300. package/templates/product-viewer/package.json +4 -2
  301. package/templates/product-viewer/src/aura-assets.ts +1 -1
  302. package/templates/product-viewer/src/main.ts +78 -19
  303. package/templates/product-viewer/tests/look-floor.ts +270 -0
  304. package/templates/product-viewer/tests/route-health.spec.ts +19 -1
  305. package/templates/product-viewer/tests/screenshot.spec.ts +35 -41
  306. package/templates/product-viewer/vite.config.ts +7 -0
  307. package/templates/prompt-animation-channel/.claude/CLAUDE.md +3 -0
  308. package/templates/prompt-animation-channel/.github/workflows/aura3d-lookdev.yml +67 -0
  309. package/templates/prompt-animation-channel/AGENTS.md +3 -0
  310. package/templates/prompt-animation-channel/package.json +4 -3
  311. package/templates/prompt-animation-channel/src/main.ts +5 -3
  312. package/templates/prompt-animation-channel/src/render-plan.ts +5 -3
  313. package/templates/prompt-animation-channel/tests/look-floor.ts +270 -0
  314. package/templates/prompt-animation-channel/tests/route-health.spec.ts +12 -1
  315. package/templates/prompt-animation-channel/tests/screenshot.spec.ts +10 -4
  316. package/templates/prompt-animation-channel/tests/storyboard-playback.spec.ts +1 -1
  317. package/templates/prompt-animation-channel/vite.config.ts +7 -0
  318. package/templates/racing-starter/.claude/CLAUDE.md +3 -0
  319. package/templates/racing-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  320. package/templates/racing-starter/AGENTS.md +3 -0
  321. package/templates/racing-starter/README.md +8 -6
  322. package/templates/racing-starter/package.json +4 -3
  323. package/templates/racing-starter/src/main.ts +169 -123
  324. package/templates/racing-starter/tests/geometry-certification.json +34 -0
  325. package/templates/racing-starter/tests/look-floor.ts +270 -0
  326. package/templates/racing-starter/tests/playable.spec.ts +63 -80
  327. package/templates/racing-starter/tests/route-health.spec.ts +14 -12
  328. package/templates/racing-starter/tests/screenshot.spec.ts +21 -0
  329. package/templates/racing-starter/vite.config.ts +7 -0
  330. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  331. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  332. package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.679d52fe.glb +0 -0
  333. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.252b3a16.glb +0 -0
  334. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.thumb.svg +0 -1
  335. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  336. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  337. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.3f821141.glb +0 -0
  338. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.thumb.svg +0 -1
  339. package/templates/three-compat-architecture-interior/aura.assets.json +0 -7
  340. package/templates/three-compat-architecture-interior/src/aura-assets.ts +0 -3
  341. package/templates/three-compat-architecture-interior/src/main.ts +0 -27
  342. package/templates/three-compat-architecture-interior/tests/screenshot.spec.ts +0 -15
  343. package/templates/three-compat-asset-inspector/aura.assets.json +0 -7
  344. package/templates/three-compat-asset-inspector/src/aura-assets.ts +0 -3
  345. package/templates/three-compat-asset-inspector/src/main.ts +0 -17
  346. package/templates/three-compat-asset-inspector/tests/screenshot.spec.ts +0 -15
  347. package/templates/three-compat-character-viewer/aura.assets.json +0 -7
  348. package/templates/three-compat-character-viewer/src/aura-assets.ts +0 -3
  349. package/templates/three-compat-character-viewer/src/main.ts +0 -17
  350. package/templates/three-compat-character-viewer/tests/screenshot.spec.ts +0 -15
  351. package/templates/three-compat-custom-threejs-migration/aura.assets.json +0 -7
  352. package/templates/three-compat-custom-threejs-migration/src/aura-assets.ts +0 -3
  353. package/templates/three-compat-custom-threejs-migration/src/main.ts +0 -16
  354. package/templates/three-compat-custom-threejs-migration/tests/screenshot.spec.ts +0 -15
  355. package/templates/three-compat-large-scene/aura.assets.json +0 -7
  356. package/templates/three-compat-large-scene/package.json +0 -22
  357. package/templates/three-compat-large-scene/src/aura-assets.ts +0 -3
  358. package/templates/three-compat-large-scene/src/main.ts +0 -31
  359. package/templates/three-compat-large-scene/tests/route-health.spec.ts +0 -16
  360. package/templates/three-compat-large-scene/tests/screenshot.spec.ts +0 -15
  361. package/templates/three-compat-material-authoring/aura.assets.json +0 -7
  362. package/templates/three-compat-material-authoring/package.json +0 -22
  363. package/templates/three-compat-material-authoring/src/aura-assets.ts +0 -3
  364. package/templates/three-compat-material-authoring/src/main.ts +0 -33
  365. package/templates/three-compat-material-authoring/tests/route-health.spec.ts +0 -16
  366. package/templates/three-compat-material-authoring/tests/screenshot.spec.ts +0 -15
  367. package/templates/three-compat-postprocess-scene/aura.assets.json +0 -7
  368. package/templates/three-compat-postprocess-scene/package.json +0 -22
  369. package/templates/three-compat-postprocess-scene/src/aura-assets.ts +0 -3
  370. package/templates/three-compat-postprocess-scene/src/main.ts +0 -17
  371. package/templates/three-compat-postprocess-scene/tests/route-health.spec.ts +0 -16
  372. package/templates/three-compat-postprocess-scene/tests/screenshot.spec.ts +0 -15
  373. package/templates/three-compat-premium-product-viewer/aura.assets.json +0 -7
  374. package/templates/three-compat-premium-product-viewer/package.json +0 -22
  375. package/templates/three-compat-premium-product-viewer/src/aura-assets.ts +0 -3
  376. package/templates/three-compat-premium-product-viewer/src/main.ts +0 -18
  377. package/templates/three-compat-premium-product-viewer/tests/route-health.spec.ts +0 -16
  378. package/templates/three-compat-premium-product-viewer/tests/screenshot.spec.ts +0 -15
  379. /package/templates/{three-compat-architecture-interior → architecture-interior}/index.html +0 -0
  380. /package/templates/{three-compat-architecture-interior → architecture-interior}/playwright.config.ts +0 -0
  381. /package/templates/{three-compat-architecture-interior → architecture-interior}/tsconfig.json +0 -0
  382. /package/templates/{three-compat-asset-inspector → asset-inspector}/index.html +0 -0
  383. /package/templates/{three-compat-asset-inspector → asset-inspector}/playwright.config.ts +0 -0
  384. /package/templates/{three-compat-asset-inspector → asset-inspector}/tsconfig.json +0 -0
  385. /package/templates/{three-compat-character-viewer → character-viewer}/index.html +0 -0
  386. /package/templates/{three-compat-character-viewer → character-viewer}/playwright.config.ts +0 -0
  387. /package/templates/{three-compat-character-viewer → character-viewer}/tsconfig.json +0 -0
  388. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/index.html +0 -0
  389. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/playwright.config.ts +0 -0
  390. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/tsconfig.json +0 -0
  391. /package/templates/{three-compat-large-scene → large-scene}/index.html +0 -0
  392. /package/templates/{three-compat-large-scene → large-scene}/playwright.config.ts +0 -0
  393. /package/templates/{three-compat-large-scene → large-scene}/tsconfig.json +0 -0
  394. /package/templates/{three-compat-material-authoring → material-authoring}/index.html +0 -0
  395. /package/templates/{three-compat-material-authoring → material-authoring}/playwright.config.ts +0 -0
  396. /package/templates/{three-compat-material-authoring → material-authoring}/tsconfig.json +0 -0
  397. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/index.html +0 -0
  398. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/playwright.config.ts +0 -0
  399. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/tsconfig.json +0 -0
  400. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/index.html +0 -0
  401. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/playwright.config.ts +0 -0
  402. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/tsconfig.json +0 -0
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: aura3d-assets
3
+ description: Finds, admits, inspects, validates, and types GLB/glTF, texture, environment, and audio assets through the Aura3D CLI so scenes use `model(assets.x)`. Use when a prompt names a real object, the user brings a GLB, or the task touches `assets search`, `assets resolve`, `assets add`, `assets inspect`, `assets validate`, `assets typegen`, `aura.assets.json`, or `src/aura-assets.ts`.
4
+ ---
5
+
6
+ # Aura3D assets
7
+
8
+ The CLI is the only path from a file or catalog hit to a typed `assets.<key>`.
9
+ Shared rules (catalog-first, typed assets, paid generation) are in
10
+ [boundaries](../aura3d-core/references/boundaries.md).
11
+
12
+ ## Look target
13
+
14
+ Preview candidates under the target look, not a neutral stage: a GLB that
15
+ reads clean under `product-studio` softboxes can disappear into `night-city`
16
+ shadow pools or bloom out under `neon-arcade`. The route's recipe row sets the
17
+ lighting you evaluate materials and silhouettes against.
18
+
19
+ ## Establish the contract
20
+
21
+ 1. Run `npx @aura3d/cli@latest --help` and `npx @aura3d/cli@latest assets add
22
+ --help`. Use only the flags they print; `--profile` values for search and
23
+ resolve come from the usage line, not memory.
24
+ 2. Read `aura.assets.json` and `src/aura-assets.ts`. Reuse an existing key
25
+ before adding a duplicate.
26
+ 3. Note each asset's role: `character`, `vehicle`, `world`, `environment`,
27
+ `track`, `product`, `weapon`, `prop`, `set-dressing`, `debug`, `abstract`,
28
+ or `unknown`. Role decides the evidence you need later.
29
+
30
+ ## Procedure
31
+
32
+ 1. User supplied a file: skip search and admit it with provenance.
33
+
34
+ ```bash
35
+ npx @aura3d/cli@latest assets add ./assets/robot.glb --name robot \
36
+ --type model --role character --quality candidate \
37
+ --license CC0-1.0 --license-url <url> --source-page <url> \
38
+ --author "<name>" --retrieved-at <ISO-8601>
39
+ ```
40
+
41
+ Use `--type texture|environment|audio|navigation` for non-model files, and
42
+ `--public-path /cdn/aura-assets/` when assets are served from a CDN.
43
+ 2. Prompt names a real object: search with a descriptive phrase.
44
+
45
+ ```bash
46
+ npx @aura3d/cli@latest assets search "battle-worn knight helmet" --json
47
+ npx @aura3d/cli@latest assets search "animated humanoid fighting character" \
48
+ --profile fighting-character --json
49
+ ```
50
+
51
+ Narrow with `--license cc0|cc-by`, `--max-tris N`, or `--animated`.
52
+ 3. Read the result. Only auto-pullable candidates may be pulled. Marketplace
53
+ deep-links and `manual license check required` rows are user-handled: hand
54
+ the link to the user and admit their download with `assets add`.
55
+ 4. Pull the chosen candidate into a typed key.
56
+
57
+ ```bash
58
+ npx @aura3d/cli@latest assets resolve "battle-worn knight helmet" --name helmet
59
+ ```
60
+
61
+ Pick a non-top candidate with `--index N` or `--candidate-id ID`, and repeat
62
+ the same `--profile` you searched with.
63
+ 5. Inspect before naming clips, joints, morphs, or materials in code.
64
+
65
+ ```bash
66
+ npx @aura3d/cli@latest assets inspect public/aura-assets/<file>.glb \
67
+ --animation --humanoid --skeleton --morphs --license
68
+ ```
69
+
70
+ Treat `"ok": false` warnings (for example missing orientation metadata) as
71
+ facts to record, not noise.
72
+ 6. Regenerate types and validate the shipping set.
73
+
74
+ ```bash
75
+ npx @aura3d/cli@latest assets typegen
76
+ npx @aura3d/cli@latest assets validate --asset helmet --source
77
+ ```
78
+
79
+ `--source` scans `src` for raw ids, URLs, and loader code, and lists
80
+ `typedAssetUsages`. Add `--no-placeholders --require-license` for anything
81
+ public. Refresh stale manifest bounds by re-adding the file.
82
+ 7. Use the key exactly as generated.
83
+
84
+ ```ts
85
+ import { createAuraApp, groundedRenderedAssetPlacement, looks, model, scene } from "@aura3d/engine";
86
+ import { assets } from "./aura-assets";
87
+
88
+ const place = groundedRenderedAssetPlacement(assets.helmet, { targetMaxDimension: 1.2, floorY: 0 });
89
+ createAuraApp("#app", {
90
+ scene: scene()
91
+ .add(looks.preset("product-studio"))
92
+ .add(model(assets.helmet).position(...place.position).scale(place.scale)),
93
+ ...looks.appOptions("product-studio")
94
+ });
95
+ ```
96
+
97
+ 8. Hand off: fighters and games to `aura3d-browser-game`
98
+ (`assets validate-game`), rigs and clips to `aura3d-character-animation`
99
+ (`assets validate-animation`), release checks to `aura3d-evidence-review`.
100
+
101
+ ## Reject a candidate when
102
+
103
+ - license, source page, author, or acquisition time is missing or temp-only
104
+ (for example a `/var/folders/.../aura3d-resolve-*` source);
105
+ - no material or texture evidence exists where the role expects texture;
106
+ - a character route claims animation but inspection shows no usable clips;
107
+ - bounds are extreme, pivot is bad, or orientation is unknown and public APIs
108
+ cannot correct it;
109
+ - the hash duplicates another asset without an explanation;
110
+ - it is placeholder-like, or only a generated thumbnail proves it is readable.
111
+
112
+ ## Stop and report
113
+
114
+ - Search returns no auto-pullable candidate, or every candidate fails the
115
+ reject list: stop, list the query, profile, and rejection reasons, and offer
116
+ two options: a user-supplied licensed file, or Meshy generation (load
117
+ `meshy-cli`, dry run first). Do not model the subject from primitives.
118
+ - Search prints a catalog fetch warning (for example an HTTP 404 from the
119
+ index): report it verbatim, label asset-dependent work `blocked`, and do not
120
+ treat fallback deep-links as auto-pullable.
121
+ - `assets validate --release` fails on provenance: keep the route `prototype`
122
+ until durable evidence is added; never weaken the check.
123
+ - A needed key is absent from `src/aura-assets.ts` after typegen: stop and fix
124
+ the admission.
125
+
126
+ ## References
127
+
128
+ - [Boundaries](../aura3d-core/references/boundaries.md)
129
+ - [Asset workflow](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-workflow.md)
130
+ - [Asset selection](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-selection.md)
131
+ - [Assets docs](https://aura3d.auraone.ai/docs/assets.html)
132
+ - [Previewing assets under a look](references/preview-under-look.md)
@@ -0,0 +1,26 @@
1
+ # Previewing assets under a look
2
+
3
+ A GLB that survives a neutral viewer can still fail the real scene's lighting.
4
+ Evaluate candidates under the route's look preset.
5
+
6
+ | Look | What it exposes | Reject signal |
7
+ | --- | --- | --- |
8
+ | `product-studio` | material honesty, silhouette edge quality | faceted normals, muddy PBR, bad pivot on plinth |
9
+ | `golden-hour` | warm key + teal shadow separation | specular wash, albedo too dark to read at dusk |
10
+ | `night-city` | neon rim, wet reflections, dark pools | silhouette disappears into shadow, emissive bloom-out |
11
+ | `outdoor-day` | full daylight exposure, horizon fog | washed-out albedo, no AO at contact points |
12
+ | `interior-warm` | warm pools, wood/fabric pairing | cold grey materials fight the grade |
13
+ | `space` | single hard key, black void | anything mid-grey vanishes; no fill light forgiving |
14
+ | `underwater` | teal volume, caustic shimmer | high-contrast speculars shimmer to noise |
15
+ | `arena-fight` | top spot + rim, dark crowd | midtones crush to black outside the pool |
16
+
17
+ ## Checks at preview time
18
+
19
+ 1. Spin the model `orbit` once under the look — a silhouette that dies at
20
+ three-quarter back is a bad candidate.
21
+ 2. Contact: feet/wheels/anchor inside the look's ground shadow, not beside it.
22
+ 3. Emissive parts bloom only where the grade expects glow (pickups, signage);
23
+ an unbounded emissive channel reads as a bug.
24
+ 4. Palette: the asset's dominant hue must sit inside the genre palette or be
25
+ the declared accent — clashing saturation reads as wrong-asset even when
26
+ the mesh is fine.
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: aura3d-browser-game
3
+ description: Builds a playable Aura3D browser game route on the public genre kits with typed assets, deterministic input, reset, an objective, and a genre look recipe driven through the look-dev loop. Use when working in the `mini-game`, `racing-starter`, `falling-blocks-starter`, `fighting-game`, or `character-controller` templates, calling `game.platformer`, `game.racing`, `game.fallingBlocks`, `game.fighting`, or `game.evidence`, or running `assets validate-game` or `assets certify-game-geometry`.
4
+ ---
5
+
6
+ # Aura3D browser game
7
+
8
+ A route with a scene and a key listener is not a game — and a playable scene
9
+ with flat lighting is not a finished game. A public game proves input, reset,
10
+ an objective and a progression loop in the browser AND looks like its genre.
11
+ Shared rules (claim labels, forbidden patterns, typed assets, benchmark mode)
12
+ are in [boundaries](../aura3d-core/references/boundaries.md).
13
+
14
+ ## Look target
15
+
16
+ Genre → recipe row (full table: `../aura3d-art-direction/references/look-recipes.md`):
17
+
18
+ | Template | Look | Camera | Frame mood |
19
+ | --- | --- | --- | --- |
20
+ | `mini-game` | `outdoor-day` | `follow` (side-on) fov 50 | saturated greens, sky blue, warm wood + coin gold; fog 0.0025; `daylight-outdoor` post; coin sparkle + land dust |
21
+ | `racing-starter` | `golden-hour` | `chase` fov 60 | warm asphalt, burnt orange, charcoal + headlight amber; low sun haze; `cinematic-film` post; brake glow |
22
+ | `falling-blocks-starter` | `neon-arcade` | `orthographic` (top-down) fov 45 | neon palette per piece colour, dark glossy board + accent rim; `neon-night` post; line-clear flash |
23
+ | `fighting-game` | `arena-fight` | `follow` (side-on) fov 45 | arena dark, rope colour, crowd shadow + spotlight rim; haze cone; `arena-fight` post; hit sparks |
24
+ | `character-controller` | `outdoor-day` | `shoulder` fov 55 | open world greens + cloth accent; fog to horizon; `daylight-outdoor` post |
25
+
26
+ ## Establish the contract
27
+
28
+ 1. Run `npx @aura3d/cli@latest --help`. Use only the commands and flags it
29
+ prints; `--category` accepts only `racing` or `platformer`.
30
+ 2. Read `src/aura-assets.ts` and `aura.assets.json`. Player, vehicle, track,
31
+ and world must be typed keys with a role (`character`, `vehicle`, `track`,
32
+ `world`). Missing keys: load `aura3d-assets` first.
33
+ 3. Read the template `package.json` so you know what `npm run test` runs.
34
+ 4. Decide the mode. Benchmark mode: if `aura3d look capture` is available, run
35
+ the look-dev loop; otherwise build and stop, label `prototype`.
36
+
37
+ ## Procedure
38
+
39
+ 1. Scaffold the matching template, then add the genre look before any props:
40
+
41
+ ```ts
42
+ import { createAuraApp, game, looks, model, scene } from "@aura3d/engine";
43
+ import { assets } from "./aura-assets";
44
+
45
+ const app = createAuraApp("#app", {
46
+ scene: scene()
47
+ .add(looks.preset("outdoor-day"))
48
+ .add(model(assets.hero).runtime(game.runtimeNode("player", { tags: ["player"] }))),
49
+ ...looks.appOptions("outdoor-day")
50
+ });
51
+ const player = app.nodes.require("player");
52
+ const input = app.input({
53
+ actions: { left: ["KeyA", "ArrowLeft"], right: ["KeyD", "ArrowRight"], jump: ["Space"], restart: ["KeyR"] },
54
+ axes: { moveX: { negative: "left", positive: "right" } },
55
+ bufferMs: 120
56
+ });
57
+ const level = game.platformer({
58
+ start: { x: 0, y: 0.35 },
59
+ finish: { x: 12, y: 0.35 },
60
+ platforms: [{ id: "ground", x: -1, y: 0, width: 14, height: 0.35 }]
61
+ });
62
+
63
+ app.onFrame(({ dt }) => {
64
+ input.update(dt);
65
+ const state = level.step(dt, { moveX: input.axis("moveX"), jumpPressed: input.buffered("jump") });
66
+ player.setPosition(state.player.x, state.player.y, 0);
67
+ });
68
+ ```
69
+
70
+ 2. The look supplies the sky light, key shadow, fog and grade — do not add
71
+ `lights.studio()` or `lights.ambient()` on top.
72
+ 3. Typed models at real scale for hero/collectibles (emissive 3–5 on pickups
73
+ reads as sparkle under the post grade); platforms/track from the best
74
+ typed catalog kit.
75
+ 4. Camera state drives `app.camera` every frame (rig from the genre row) —
76
+ never write camera position into evidence fields.
77
+ 5. Wire HUD and events through `game.eventLog` and `game.hud.*` — DOM HUD only,
78
+ no in-world counters, no debug overlay in shipped frames.
79
+ 6. Make reset real: restart after normal play and after win or fail returns
80
+ score, timer, bodies, input, and animation to baseline.
81
+ 7. Genre gates (mechanics, from the game example standards):
82
+
83
+ | Genre | Must have |
84
+ | --- | --- |
85
+ | racing | throttle, brake, steer, ordered checkpoints, lap or finish, penalty or timeout |
86
+ | platformer | move, jump, fall, collision matching visible ledges, collectibles, hazards, camera keeps player visible |
87
+ | falling blocks | move, rotate, soft + hard drop, lock, line clear, scoring, levels, game over |
88
+ | fighting | strikes/blocks, hit reactions, round + KO state, both fighters readable |
89
+ | character controller | walk/run/jump clips playing, camera shoulder follow, locomotion direction matches travel |
90
+
91
+ Plan for 60 seconds of meaningful play.
92
+
93
+ 8. `npx @aura3d/cli@latest assets validate --no-placeholders --require-license`
94
+ and `assets validate-game`; racing/platformer also
95
+ `assets certify-game-geometry --asset track --category racing`.
96
+ 9. Runtime evidence: pause, step one frame, then `game.evidence` over input,
97
+ bodies, events, HUD, app state — see `aura3d-evidence-review` (one link).
98
+
99
+ ## Look-dev loop
100
+
101
+ Run the `aura3d look capture` → judge → iterate loop from
102
+ `aura3d-art-direction`: lint first (`aura3d look lint`), then the weakest
103
+ rubric category; one change per round until every category reads 7+, 6
104
+ rounds, or 2 flat rounds.
105
+
106
+ ## Stop and report
107
+
108
+ - `assets certify-game-geometry` returns `"ok": false` or a blocker such as
109
+ `racing-road-mesh-not-found`: label `prototype`; never hide the gap with
110
+ primitive ledges or road strips.
111
+ - Manual input cannot complete the route while a proof replay can: `prototype`.
112
+ - The primary player, vehicle, or world is a primitive stand-in: `prototype`.
113
+ - `assets validate-game` crashes or fails: report the exact message, label
114
+ `blocked` for public claims.
115
+ - A kit is missing a needed rule (fail state, collision semantics, path
116
+ alignment): write it route-local, say so, file a library gap.
117
+ - Benchmark mode without `look capture`: build, stop, label `prototype`.
118
+
119
+ ## References
120
+
121
+ - [Shared boundaries](../aura3d-core/references/boundaries.md)
122
+ - [Look recipes](../aura3d-art-direction/references/look-recipes.md)
123
+ - [Quality bar](../aura3d-art-direction/references/quality-bar.md)
124
+ - [Build a browser game](https://github.com/auraoneai/aura3d/blob/main/docs/guides/build-a-browser-game.md)
125
+ - [Game example standards](https://github.com/auraoneai/aura3d/blob/main/docs/agents/game-example-standards.md)
126
+ - [Game runtime API](https://github.com/auraoneai/aura3d/blob/main/docs/api/game-runtime.md)
127
+ - [Genre looks in the frame](references/genre-looks.md)
@@ -0,0 +1,52 @@
1
+ # Genre looks in the frame
2
+
3
+ What each genre's look must visibly deliver, at capture time.
4
+
5
+ | Genre | The frame must show | Kills the look |
6
+ | --- | --- | --- |
7
+ | platformer | blue sky with depth fog, long grass-edge shadows, warm key on the hero, gold pickups glowing | void background, ambient-only light, floating platforms |
8
+ | racing | low warm sun, orange rim on the car silhouette, asphalt reflection, fog band at the horizon | noon-flat light, grey void, no specular on bodywork |
9
+ | falling blocks | saturated piece hues against a dark glossy board, bloom on line-clear, rim on the stack edge | washed-out palette, flat board, no glow on clears |
10
+ | fighting | top spotlight cones, rim on both fighters, crowd silhouettes in shadow | both fighters evenly lit, empty void arena |
11
+ | character showcase | 3/4-front key, rim separating hair/shoulder from backdrop, ground contact shadow | flat fill, floating feet, void |
12
+ | night city | neon signage, wet-street reflections, sodium pools, window glow | pure black background, one uniform dark |
13
+
14
+ ## Per-genre VFX palette
15
+
16
+ | Genre | Accents (emissive 3–5× bg) | Motion cue |
17
+ | --- | --- | --- |
18
+ | platformer | coin gold, spring green, hazard red | land dust puff, jump trail |
19
+ | racing | brake amber, exhaust white, dial cyan | speed lines, tire smoke |
20
+ | falling blocks | per-piece neon hue, clear flash white | line-clear flash, lock click glow |
21
+ | fighting | impact spark orange, meter cyan | hit sparks, knockback flash |
22
+ | character | cloth accent, eye catchlight | footstep dust, hair/cloth sway |
23
+ | night city | sign neon, puddle rim | steam wisps, window flicker |
24
+ | sports/table | felt green, chalk white, spot warm | ball trail, score flash |
25
+ | interior | warm pool amber, accent object hue | dust motes, lamp flicker |
26
+ | underwater | caustic teal, biolume cyan | bubbles, particle drift |
27
+ | space | laser magenta, engine white | debris drift, shield ripple |
28
+
29
+ ## HUD style
30
+
31
+ DOM HUD only. Type color follows the look: warm cream on golden-hour, neon
32
+ cyan on night-city, high-contrast white on product-studio. Pause/menu layers
33
+ inherit the grade (a blur + dark grade band reads as one scene, a raw solid
34
+ overlay reads as a bug).
35
+
36
+ ## Lighting story per template
37
+
38
+ | Template | Key story | Shadow story | Depth cue |
39
+ | --- | --- | --- | --- |
40
+ | `mini-game` | warm afternoon key 40° | grass-edge shadows toward camera | fog band at far platforms |
41
+ | `racing-starter` | low sun behind the car | long streaks across asphalt | haze silhouettes the horizon |
42
+ | `falling-blocks-starter` | soft top key | piece self-shadow on stack | board gloss reflection |
43
+ | `fighting-game` | overhead spot cones | rim shadows under both fighters | crowd fades to black |
44
+ | `character-controller` | daylight key 3/4 front | contact shadow under feet | fog to horizon on the run |
45
+
46
+ ## Mood one-liners
47
+
48
+ - platformer: cheerful daylight, saturated palette, motion reads as play.
49
+ - racing: speed sells through low sun, glare, and horizon haze.
50
+ - fighting: drama lives in the dark crowd and the spot's hard edge.
51
+ - blocks: rhythm is the palette — every piece hue distinct at a glance.
52
+ - character: the silhouette is the gameplay; rim keeps it readable.
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: aura3d-character-animation
3
+ description: Drives rigged Aura3D characters from inspected clip, skeleton, and morph metadata with an animation controller, clip events, runtime pose and morph state, and voice-bridge visemes, then proves motion in character-region pixels. Use when animating a humanoid or creature, using `AnimationController`, `createAnimationController`, or `animation.sampleAuraVoiceBridgeAtTime`, setting morph targets or visemes, or running `assets inspect --animation`, `assets validate-animation`, or `assets assemble-character`.
4
+ ---
5
+
6
+ # Aura3D character animation
7
+
8
+ Clip, bone, and morph names come from the asset, never from memory. Controller
9
+ state is source evidence; a visible animation claim needs pixel deltas on the
10
+ character. Shared rules (claim labels, forbidden patterns, typed assets,
11
+ benchmark mode) are in [boundaries](../aura3d-core/references/boundaries.md).
12
+
13
+ ## Look target
14
+
15
+ A character reads through its silhouette and rim: `character-showcase` (or the
16
+ genre recipe's look) supplies the 3/4-front key plus rim that makes locomotion,
17
+ poses and morphs visible. Judge animation under that look — a clip that reads
18
+ in flat light can vanish inside night-city shadow pools or golden-hour haze.
19
+
20
+ ## Establish the contract
21
+
22
+ 1. Run `npx @aura3d/cli@latest --help` and use only the `assets inspect`,
23
+ `assets validate-animation`, and `assets assemble-character` flags it prints.
24
+ 2. Read `src/aura-assets.ts` and `aura.assets.json`. The character must be a
25
+ typed key with role `character`. No key: load `aura3d-assets` first.
26
+ 3. Inspect the rig and record the real names:
27
+
28
+ ```bash
29
+ npx @aura3d/cli@latest assets inspect ./public/aura-assets/hero.glb --animation --skeleton --morphs
30
+ ```
31
+
32
+ Read the JSON fields "animations", "skeleton.skins[].joints", and
33
+ "morphTargets.targetNames".
34
+ `"No morph target metadata detected."` means no morph or viseme work on
35
+ this asset.
36
+ 4. Decide the mode. Benchmark mode: `npm install && npm run build`, then stop.
37
+
38
+ ## Procedure
39
+
40
+ 1. Map gameplay actions to real clip names and fail fast on gaps:
41
+
42
+ ```bash
43
+ npx @aura3d/cli@latest assets validate-animation --clips idle,walk,sprint,jump \
44
+ --map idle=idle,walk=walk,run=sprint --require idle,walk,run --require-rig
45
+ ```
46
+
47
+ Pass `--clips` from the inspection output. `"ok": false` with a
48
+ `missingActions` entry means the rig cannot play that action.
49
+ 2. Multi-part characters: build the assembly from typed keys first.
50
+
51
+ ```bash
52
+ npx @aura3d/cli@latest assets assemble-character --name hero --body heroBody --part hair=heroHair
53
+ ```
54
+
55
+ 3. Create one controller per character from typed clip metadata, bind it to a
56
+ runtime node, and update it once per frame:
57
+
58
+ ```ts
59
+ import { createAnimationController, createAuraApp, game, lights, model, scene } from "@aura3d/engine";
60
+ import { assets } from "./aura-assets";
61
+
62
+ const app = createAuraApp("#app", {
63
+ scene: scene()
64
+ .add(model(assets.hero).runtime(game.runtimeNode("hero", { tags: ["player"] })))
65
+ .add(lights.studio())
66
+ });
67
+ const hero = app.nodes.require("hero");
68
+ const controller = createAnimationController({
69
+ id: "hero-animation",
70
+ clipRegistry: assets.hero,
71
+ requiredClips: ["idle", "walk", "sprint"],
72
+ suppressRootMotion: true
73
+ });
74
+ controller.bindRuntimeNode(hero, { id: "hero-binding", defaultClipId: "idle" });
75
+
76
+ let moving = false; // set from your input or kinematic body each frame
77
+ app.onFrame(({ dt }) => {
78
+ controller.crossFade(moving ? "walk" : "idle", 0.12);
79
+ controller.update(dt);
80
+ });
81
+ ```
82
+
83
+ 4. Clip-local gameplay events (event names such as "hitbox.open", "sfx", "vfx",
84
+ "camera.impulse", "caption", "viseme") go through the controller's event subscription. Bridge
85
+ them into public systems such as `game.combatWorld`; never call private
86
+ hitbox or renderer internals.
87
+ 5. Pose and morph state go through the runtime node handle (its animation-pose
88
+ and morph-target setters). App code never reaches into renderer skinning.
89
+ 6. Voice sync: sample the bridge package at the frame time and apply the
90
+ viseme weights to the node's morph targets, using only morph names the
91
+ inspection reported.
92
+
93
+ ```ts
94
+ import { animation } from "@aura3d/engine";
95
+
96
+ app.onFrame(({ time }) => {
97
+ const sample = animation.sampleAuraVoiceBridgeAtTime(bridgePackage, time, "host");
98
+ app.nodes.require("host").setMorphTargets(sample.viseme?.blendshapeWeights ?? {});
99
+ });
100
+ ```
101
+
102
+ 7. Retargeting is explicit and selected-roster only. Use an explicit humanoid
103
+ map; do not claim arbitrary-rig retargeting or full-body IK.
104
+ 8. Normal mode: `npm run build` locally. Browser proof (deterministic capture
105
+ times inside the clip's keyframe range, stable camera, character-region
106
+ pixel delta, backend and fallback named) runs remotely via the template
107
+ `npm run test` or CI. Hand results to `aura3d-evidence-review`.
108
+
109
+ ## Stop and report
110
+
111
+ - A clip, bone, or morph you need is absent from the inspection output: stop
112
+ and report it. Do not rename clips in code or guess names.
113
+ - `assets validate-animation` returns `"ok": false`: the action map is
114
+ `blocked` until a rig with the clip is admitted.
115
+ - A clip is a static pose (zero channel motion): it cannot satisfy an
116
+ animation row; pick a clip with real motion or label `prototype`.
117
+ - The claim is "visible skinning, morphs, or visemes" and you only have
118
+ controller snapshots or clip lists: label it `prototype`.
119
+ - Only the certified roster in the skinning doc may be called certified.
120
+
121
+ ## References
122
+
123
+ - [Shared boundaries](../aura3d-core/references/boundaries.md)
124
+ - [Skinning and morphs](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/skinning-and-morphs.md)
125
+ - [Animation, retargeting, IK](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/animation.md)
126
+ - [Animation runtime events](https://github.com/auraoneai/aura3d/blob/main/docs/api/animation-runtime-events.md)
127
+ - [Animation runtime support](https://github.com/auraoneai/aura3d/blob/main/docs/animation/runtime-support.md)
128
+ - [Agent guide llms.txt](https://github.com/auraoneai/aura3d/blob/main/llms.txt)
129
+ - [Character staging and lighting](references/stage-and-lighting.md)
@@ -0,0 +1,31 @@
1
+ # Character staging and lighting
2
+
3
+ How to stage a rigged character so the animation itself is what a reviewer
4
+ sees.
5
+
6
+ ## Stage
7
+
8
+ | Setup | When | Look | Frame |
9
+ | --- | --- | --- | --- |
10
+ | Showcase plinth | clip demos, locomotion cycles | `character-showcase` | full body, 60–70% of frame height |
11
+ | Walk path | locomotion proof | `outdoor-day` | character 25–40%, path leads forward |
12
+ | Fight pair | combat clips | `arena-fight` | both fighters inside spotlight pools |
13
+ | Interior | dialogue, visemes | `interior-warm` | head-and-torso, catchlights visible |
14
+
15
+ ## Lighting reads for motion
16
+
17
+ - Rim light is what separates a moving silhouette from the backdrop — under
18
+ `night-city` or `arena-fight` the rim does more work than the key.
19
+ - Ground contact shadow sells weight: feet must plant inside the shadow blob,
20
+ not beside it (floating feet = `weak-shadow` / grounding lint).
21
+ - Golden-hour key gives long dramatic shadows for walk cycles; overcast gives
22
+ even exposure for cloth and morph inspection.
23
+ - Keep the palette quiet — one accent (cloth or trim) plus neutral stage
24
+ colors, so motion draws the eye instead of props.
25
+
26
+ ## Camera for animation proof
27
+
28
+ - `follow` rig for locomotion (side-on for gait, 3/4 for turn animations).
29
+ - `orbit` for pose/morph inspection on a plinth.
30
+ - Cut between a wide framing (whole body, 60–70%) and a close framing
31
+ (head/visemes, 40%) — never mid-body crops that amputate feet.
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: aura3d-core
3
+ description: Orients an agent in Aura3D, maps three.js habits to `@aura3d/engine` APIs, routes visual work to art direction first, and sets claim labels. Use when starting any Aura3D task, scaffolding with `create-aura3d`, writing `createAuraApp` code, or before writing public examples, README text, or release claims.
4
+ ---
5
+
6
+ # Aura3D core
7
+
8
+ Aura3D is a TypeScript engine API, an asset CLI, templates, diagnostics, and a
9
+ deploy checker. You are not writing three.js; `createAuraApp(...)` owns the
10
+ renderer, scene graph, camera, and frame loop. Every scene gets a look — a
11
+ preset that owns environment light, key shadow, fog, background and grade.
12
+ Shared rules (claim labels, forbidden patterns, catalog-first, typed assets,
13
+ paid generation, benchmark mode) live once in
14
+ [references/boundaries.md](references/boundaries.md).
15
+
16
+ ## Look target
17
+
18
+ Before any code, pick the look: read `aura3d-art-direction`'s recipe row for
19
+ the genre, note the look id, the post preset and the palette accent. A scene
20
+ without a look ships flat shading, void background and floating props.
21
+
22
+ ## Establish the contract
23
+
24
+ 1. Run `npx @aura3d/cli@latest --help` (or `pnpm exec aura3d --help` inside the
25
+ monorepo) and use only the commands and flags it prints.
26
+ 2. Check the installed engine version in `package.json`. Do not name an export
27
+ you have not seen in the installed package's type declarations.
28
+ 3. Read `src/aura-assets.ts` and `aura.assets.json` before writing scene code.
29
+ Asset keys come from that generated file, never from memory.
30
+ 4. Decide the mode. Benchmark mode means `npm install && npm run build`, then
31
+ stop (run the look-dev loop instead when `aura3d look capture` exists).
32
+
33
+ ## Procedure
34
+
35
+ 1. Pick the starting point in this order: a template (`npx create-aura3d@latest
36
+ <dir> --template <name>`), then `sceneKits.*`, then `prefabs.*`, and use
37
+ `primitives.*` last, for set dressing only.
38
+ 2. Add the look first — it supplies the sky/environment light, the key shadow,
39
+ fog, background and the post grade as one unit:
40
+
41
+ ```ts
42
+ import { createAuraApp, looks, model, scene } from "@aura3d/engine";
43
+ import { assets } from "./aura-assets";
44
+
45
+ createAuraApp("#app", {
46
+ scene: scene().add(looks.preset("product-studio")).add(model(assets.robot)),
47
+ ...looks.appOptions("product-studio")
48
+ });
49
+ ```
50
+
51
+ 3. Translate any three.js instinct with this table:
52
+
53
+ | three.js habit | Aura3D |
54
+ | --- | --- |
55
+ | `Mesh` plus a glTF loader | `model(assets.x)` (typed asset) |
56
+ | `new Scene()` | `scene()` |
57
+ | `PerspectiveCamera` | `camera.perspective(...)`, `camera.rigs.*` |
58
+ | `AmbientLight` | `lights.hemisphere(...)` or the look fill |
59
+ | `DirectionalLight`/`PointLight` | the look's key/rim slots, `lights.*` |
60
+ | `scene.environment` + PMREM | `environments.studio`/`hdri`, `world.biome` |
61
+ | `toneMapping`, exposure | `output.preset`, the look's grade |
62
+ | `setPixelRatio` | `quality: "auto"` via `looks.appOptions` |
63
+ | `castShadow` | `shadow: true` |
64
+ | `EffectComposer` passes | `output.preset` + `effects.*` |
65
+ | `AnimationMixer` | `AnimationController` |
66
+ | OrbitControls | `interactions.orbit(...)` |
67
+
68
+ 4. If the prompt names a real object, resolve it through the catalog before
69
+ writing model code (load `aura3d-assets`).
70
+ 5. Load the next skill from the routing table below. Load more than one when
71
+ the task spans them.
72
+
73
+ ## Routing table
74
+
75
+ | Task signal | Load |
76
+ | --- | --- |
77
+ | Any visual task, screenshot looks flat/dark/empty, starting or finishing a scene | `aura3d-art-direction` (first) |
78
+ | Prompt to scene or route, scene kits, `definePromptPlan` | `aura3d-scene-authoring` |
79
+ | Named real object, user GLB, `assets search/resolve/add` | `aura3d-assets` |
80
+ | Done, public, shippable, screenshots, claims, `check-deploy` | `aura3d-evidence-review` |
81
+ | `mini-game`, `racing-starter`, `falling-blocks-starter`, `fighting-game`, `character-controller` | `aura3d-browser-game` |
82
+ | Rigged humanoids, clips, locomotion, morphs, visemes | `aura3d-character-animation` |
83
+ | `animation-studio` template, `aura3d animation scene`, episodes | `aura3d-animation-studio` |
84
+ | Porting three.js code, migration templates (formerly `three-compat-*`) | `aura3d-threejs-migration` |
85
+ | Materials, textures, HDRI, skies, water, weather | `aura3d-materials-environments` |
86
+ | Flipbook VFX sheets, HUD icons, UI sprites | `aura3d-game-art` |
87
+ | Restyling a finished mesh without touching geometry | `aura3d-retexture` |
88
+ | Frame time, bundle size, KTX2, LOD, instancing | `aura3d-performance` |
89
+ | No clean catalog candidate, Meshy generation or import | `meshy-cli` |
90
+
91
+ A listed skill that is not installed in this project is a gap to report, not
92
+ permission to improvise its procedure.
93
+
94
+ ## Look-dev loop
95
+
96
+ Capture the route with `aura3d look capture`, judge each frame against the
97
+ quality-bar rubric, fix the single highest-leverage issue (lint codes first),
98
+ and repeat until every category reads 7+ or the loop exits flat. The full loop
99
+ spec lives in `aura3d-art-direction`.
100
+
101
+ ## Stop and report
102
+
103
+ - The CLI help does not list a command you need: stop, name the missing
104
+ command, and label the work `blocked`.
105
+ - A required asset key is missing from `src/aura-assets.ts`: stop and fix the
106
+ import. Do not substitute a string id, URL, or primitive.
107
+ - The claim you are about to write has no matching browser evidence: lower it
108
+ to `prototype` or `roadmap` per boundaries.md — claim labels are a one-line
109
+ link, not a restatement.
110
+ - The task needs paid generation and no approval exists: stop at the dry run.
111
+ - Benchmark mode: after `npm install && npm run build`, stop and report the
112
+ runner-owned launch and capture command.
113
+
114
+ ## References
115
+
116
+ - [Shared boundaries](references/boundaries.md)
117
+ - [Agent guide llms.txt](https://github.com/auraoneai/aura3d/blob/main/llms.txt)
118
+ - [Claims and boundaries](https://github.com/auraoneai/aura3d/blob/main/docs/agents/claims-and-boundaries.md)
119
+ - [No hackjob rules](https://github.com/auraoneai/aura3d/blob/main/docs/agents/no-hackjob-rules.md)
120
+ - [Anti-hallucination rules](https://github.com/auraoneai/aura3d/blob/main/docs/agents/anti-hallucination-rules.md)
121
+ - [Agent quickstart](https://aura3d.auraone.ai/docs/agent-quickstart.html)