create-aura3d 3.0.1 → 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 (396) 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 +3 -2
  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 +1 -1
  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 +4 -3
  71. package/templates/animation-studio/scripts/build-clip-library.ts +6 -5
  72. package/templates/animation-studio/scripts/resolve-asset.ts +7 -4
  73. package/templates/animation-studio/src/scene-player.ts +6 -6
  74. package/templates/animation-studio/src/set-templates.ts +13 -9
  75. package/templates/animation-studio/tests/look-floor.ts +270 -0
  76. package/templates/animation-studio/tests/route-health.spec.ts +2 -2
  77. package/templates/animation-studio/tests/screenshot.spec.ts +18 -10
  78. package/templates/animation-studio/vite.config.ts +2 -0
  79. package/templates/architecture-interior/.claude/CLAUDE.md +3 -0
  80. package/templates/architecture-interior/.github/workflows/aura3d-lookdev.yml +67 -0
  81. package/templates/architecture-interior/AGENTS.md +3 -0
  82. package/templates/architecture-interior/README.md +16 -0
  83. package/templates/architecture-interior/aura.assets.json +24 -0
  84. package/templates/architecture-interior/package.json +24 -0
  85. package/templates/architecture-interior/public/aura-assets/kenneyModularDungeonRoomSmall.a7e74a5f.glb +0 -0
  86. package/templates/architecture-interior/src/aura-assets.ts +16 -0
  87. package/templates/architecture-interior/src/main.ts +23 -0
  88. package/templates/architecture-interior/tests/look-floor.ts +270 -0
  89. package/templates/{three-compat-architecture-interior → architecture-interior}/tests/route-health.spec.ts +3 -3
  90. package/templates/architecture-interior/tests/screenshot.spec.ts +21 -0
  91. package/templates/architecture-interior/vite.config.ts +7 -0
  92. package/templates/arena-shooter/.claude/CLAUDE.md +3 -0
  93. package/templates/arena-shooter/.github/workflows/aura3d-lookdev.yml +67 -0
  94. package/templates/arena-shooter/AGENTS.md +3 -0
  95. package/templates/arena-shooter/README.md +45 -0
  96. package/templates/arena-shooter/aura.assets.json +62 -0
  97. package/templates/arena-shooter/index.html +32 -0
  98. package/templates/arena-shooter/package.json +23 -0
  99. package/templates/arena-shooter/playwright.config.ts +15 -0
  100. package/templates/arena-shooter/public/aura-assets/craft_miner.de323205.glb +0 -0
  101. package/templates/arena-shooter/public/aura-assets/craft_racer.bce8cb3d.glb +0 -0
  102. package/templates/arena-shooter/public/aura-assets/meteor_detailed.f30379ab.glb +0 -0
  103. package/templates/arena-shooter/src/aura-assets.ts +56 -0
  104. package/templates/arena-shooter/src/main.ts +616 -0
  105. package/templates/arena-shooter/tests/look-floor.ts +270 -0
  106. package/templates/arena-shooter/tests/playable.spec.ts +56 -0
  107. package/templates/arena-shooter/tests/route-health.spec.ts +87 -0
  108. package/templates/arena-shooter/tests/screenshot.spec.ts +22 -0
  109. package/templates/arena-shooter/tsconfig.json +15 -0
  110. package/templates/arena-shooter/vite.config.ts +7 -0
  111. package/templates/asset-inspector/.claude/CLAUDE.md +3 -0
  112. package/templates/asset-inspector/.github/workflows/aura3d-lookdev.yml +67 -0
  113. package/templates/asset-inspector/AGENTS.md +3 -0
  114. package/templates/asset-inspector/README.md +13 -0
  115. package/templates/asset-inspector/aura.assets.json +24 -0
  116. package/templates/{three-compat-custom-threejs-migration → asset-inspector}/package.json +5 -3
  117. package/templates/asset-inspector/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  118. package/templates/asset-inspector/src/aura-assets.ts +16 -0
  119. package/templates/asset-inspector/src/main.ts +23 -0
  120. package/templates/asset-inspector/tests/look-floor.ts +270 -0
  121. package/templates/{three-compat-character-viewer → asset-inspector}/tests/route-health.spec.ts +3 -3
  122. package/templates/asset-inspector/tests/screenshot.spec.ts +21 -0
  123. package/templates/asset-inspector/vite.config.ts +7 -0
  124. package/templates/character-controller/.claude/CLAUDE.md +3 -0
  125. package/templates/character-controller/.github/workflows/aura3d-lookdev.yml +67 -0
  126. package/templates/character-controller/AGENTS.md +3 -0
  127. package/templates/character-controller/README.md +7 -1
  128. package/templates/character-controller/aura.assets.json +29 -22
  129. package/templates/character-controller/index.html +4 -5
  130. package/templates/character-controller/package.json +5 -4
  131. package/templates/character-controller/public/aura-assets/auraclash-player-rig.glb +0 -0
  132. package/templates/character-controller/src/aura-assets.ts +25 -7
  133. package/templates/character-controller/src/main.ts +190 -47
  134. package/templates/character-controller/tests/certified-rig.spec.ts +2 -2
  135. package/templates/character-controller/tests/look-floor.ts +270 -0
  136. package/templates/character-controller/tests/route-health.spec.ts +31 -6
  137. package/templates/character-controller/tests/screenshot.spec.ts +17 -5
  138. package/templates/character-controller/vite.config.ts +7 -0
  139. package/templates/character-viewer/.claude/CLAUDE.md +3 -0
  140. package/templates/character-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  141. package/templates/character-viewer/AGENTS.md +3 -0
  142. package/templates/character-viewer/README.md +13 -0
  143. package/templates/character-viewer/aura.assets.json +24 -0
  144. package/templates/{three-compat-asset-inspector → character-viewer}/package.json +5 -3
  145. package/templates/character-viewer/public/aura-assets/kenneyMiniForestCharacterArcher.0fd0f92e.glb +0 -0
  146. package/templates/character-viewer/src/aura-assets.ts +16 -0
  147. package/templates/character-viewer/src/main.ts +21 -0
  148. package/templates/character-viewer/tests/look-floor.ts +270 -0
  149. package/templates/{three-compat-custom-threejs-migration → character-viewer}/tests/route-health.spec.ts +3 -3
  150. package/templates/character-viewer/tests/screenshot.spec.ts +21 -0
  151. package/templates/character-viewer/vite.config.ts +7 -0
  152. package/templates/cinematic-scene/.claude/CLAUDE.md +3 -0
  153. package/templates/cinematic-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  154. package/templates/cinematic-scene/AGENTS.md +3 -0
  155. package/templates/cinematic-scene/README.md +11 -2
  156. package/templates/cinematic-scene/package.json +3 -2
  157. package/templates/cinematic-scene/src/main.ts +30 -7
  158. package/templates/cinematic-scene/tests/look-floor.ts +270 -0
  159. package/templates/cinematic-scene/tests/route-health.spec.ts +31 -3
  160. package/templates/cinematic-scene/tests/screenshot.spec.ts +34 -45
  161. package/templates/cinematic-scene/vite.config.ts +7 -0
  162. package/templates/custom-scene/.claude/CLAUDE.md +3 -0
  163. package/templates/custom-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  164. package/templates/custom-scene/AGENTS.md +3 -0
  165. package/templates/custom-scene/README.md +13 -0
  166. package/templates/custom-scene/aura.assets.json +24 -0
  167. package/templates/{three-compat-character-viewer → custom-scene}/package.json +5 -3
  168. package/templates/custom-scene/public/aura-assets/kenneyPirateKitShipMedium.279ea019.glb +0 -0
  169. package/templates/custom-scene/src/aura-assets.ts +16 -0
  170. package/templates/custom-scene/src/main.ts +23 -0
  171. package/templates/custom-scene/tests/look-floor.ts +270 -0
  172. package/templates/{three-compat-asset-inspector → custom-scene}/tests/route-health.spec.ts +3 -3
  173. package/templates/custom-scene/tests/screenshot.spec.ts +21 -0
  174. package/templates/custom-scene/vite.config.ts +7 -0
  175. package/templates/episode-builder/.claude/CLAUDE.md +3 -0
  176. package/templates/episode-builder/.github/workflows/aura3d-lookdev.yml +67 -0
  177. package/templates/episode-builder/AGENTS.md +3 -0
  178. package/templates/episode-builder/package.json +3 -2
  179. package/templates/episode-builder/src/main.ts +5 -3
  180. package/templates/episode-builder/src/render-plan.ts +5 -3
  181. package/templates/episode-builder/tests/look-floor.ts +270 -0
  182. package/templates/episode-builder/tests/screenshot.spec.ts +10 -4
  183. package/templates/episode-builder/vite.config.ts +7 -0
  184. package/templates/falling-blocks-starter/.claude/CLAUDE.md +3 -0
  185. package/templates/falling-blocks-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  186. package/templates/falling-blocks-starter/AGENTS.md +3 -0
  187. package/templates/falling-blocks-starter/README.md +10 -1
  188. package/templates/falling-blocks-starter/aura.assets.json +40 -23
  189. package/templates/falling-blocks-starter/package.json +3 -2
  190. package/templates/falling-blocks-starter/public/aura-assets/quaternius-cube-crate.glb +0 -0
  191. package/templates/falling-blocks-starter/public/aura-assets/quaternius-wall-modular.glb +0 -0
  192. package/templates/falling-blocks-starter/src/aura-assets.ts +33 -10
  193. package/templates/falling-blocks-starter/src/main.ts +316 -117
  194. package/templates/falling-blocks-starter/tests/look-floor.ts +270 -0
  195. package/templates/falling-blocks-starter/tests/playable.spec.ts +51 -18
  196. package/templates/falling-blocks-starter/tests/route-health.spec.ts +17 -7
  197. package/templates/falling-blocks-starter/tests/screenshot.spec.ts +21 -0
  198. package/templates/falling-blocks-starter/vite.config.ts +7 -0
  199. package/templates/fighting-game/.claude/CLAUDE.md +3 -0
  200. package/templates/fighting-game/.github/workflows/aura3d-lookdev.yml +67 -0
  201. package/templates/fighting-game/AGENTS.md +3 -0
  202. package/templates/fighting-game/README.md +2 -0
  203. package/templates/fighting-game/aura.assets.json +56 -46
  204. package/templates/fighting-game/package.json +4 -2
  205. package/templates/fighting-game/public/aura-assets/auraclash-player-rig.glb +0 -0
  206. package/templates/fighting-game/public/aura-assets/auraclash-rival-rig.glb +0 -0
  207. package/templates/fighting-game/src/aura-assets.ts +54 -20
  208. package/templates/fighting-game/src/game/fighters.ts +57 -12
  209. package/templates/fighting-game/src/main.ts +135 -53
  210. package/templates/fighting-game/tests/certified-rig.spec.ts +1 -1
  211. package/templates/fighting-game/tests/gameplay-smoke.spec.ts +2 -8
  212. package/templates/fighting-game/tests/look-floor.ts +270 -0
  213. package/templates/fighting-game/tests/route-health.spec.ts +12 -4
  214. package/templates/fighting-game/tests/screenshot.spec.ts +10 -4
  215. package/templates/fighting-game/vite.config.ts +7 -0
  216. package/templates/large-scene/.claude/CLAUDE.md +3 -0
  217. package/templates/large-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  218. package/templates/large-scene/AGENTS.md +3 -0
  219. package/templates/large-scene/README.md +13 -0
  220. package/templates/large-scene/aura.assets.json +40 -0
  221. package/templates/{three-compat-architecture-interior → large-scene}/package.json +5 -3
  222. package/templates/large-scene/public/aura-assets/kenneyMiniForestRocksHigh.226728a0.glb +0 -0
  223. package/templates/large-scene/public/aura-assets/kenneyMiniForestTree.0075d505.glb +0 -0
  224. package/templates/large-scene/src/aura-assets.ts +28 -0
  225. package/templates/large-scene/src/main.ts +43 -0
  226. package/templates/large-scene/tests/look-floor.ts +270 -0
  227. package/templates/large-scene/tests/route-health.spec.ts +16 -0
  228. package/templates/large-scene/tests/screenshot.spec.ts +21 -0
  229. package/templates/large-scene/vite.config.ts +7 -0
  230. package/templates/material-authoring/.claude/CLAUDE.md +3 -0
  231. package/templates/material-authoring/.github/workflows/aura3d-lookdev.yml +67 -0
  232. package/templates/material-authoring/AGENTS.md +3 -0
  233. package/templates/material-authoring/README.md +15 -0
  234. package/templates/material-authoring/aura.assets.json +24 -0
  235. package/templates/material-authoring/package.json +24 -0
  236. package/templates/material-authoring/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  237. package/templates/material-authoring/src/aura-assets.ts +16 -0
  238. package/templates/material-authoring/src/main.ts +78 -0
  239. package/templates/material-authoring/tests/look-floor.ts +270 -0
  240. package/templates/material-authoring/tests/route-health.spec.ts +16 -0
  241. package/templates/material-authoring/tests/screenshot.spec.ts +21 -0
  242. package/templates/material-authoring/vite.config.ts +7 -0
  243. package/templates/mini-game/.claude/CLAUDE.md +3 -0
  244. package/templates/mini-game/.github/workflows/aura3d-lookdev.yml +67 -0
  245. package/templates/mini-game/AGENTS.md +3 -0
  246. package/templates/mini-game/README.md +9 -6
  247. package/templates/mini-game/aura.assets.json +177 -36
  248. package/templates/mini-game/package.json +3 -1
  249. package/templates/mini-game/public/aura-assets/kaykit-barbarian.glb +0 -0
  250. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitKey.2e930961.glb +0 -0
  251. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitStar.a102a1b9.glb +0 -0
  252. package/templates/mini-game/public/aura-assets/quaternius-crate.glb +0 -0
  253. package/templates/mini-game/public/aura-assets/quaternius-cube-crate.glb +0 -0
  254. package/templates/mini-game/src/aura-assets.ts +140 -32
  255. package/templates/mini-game/src/main.ts +204 -71
  256. package/templates/mini-game/tests/certified-rig.spec.ts +2 -2
  257. package/templates/mini-game/tests/look-floor.ts +270 -0
  258. package/templates/mini-game/tests/playable.spec.ts +23 -2
  259. package/templates/mini-game/tests/route-health.spec.ts +2 -2
  260. package/templates/mini-game/tests/screenshot.spec.ts +44 -53
  261. package/templates/mini-game/vite.config.ts +7 -0
  262. package/templates/postprocess-scene/.claude/CLAUDE.md +3 -0
  263. package/templates/postprocess-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  264. package/templates/postprocess-scene/AGENTS.md +3 -0
  265. package/templates/postprocess-scene/README.md +17 -0
  266. package/templates/postprocess-scene/aura.assets.json +38 -0
  267. package/templates/postprocess-scene/package.json +24 -0
  268. package/templates/postprocess-scene/public/aura-assets/showcaseLuma.ef389217.glb +0 -0
  269. package/templates/postprocess-scene/public/aura-assets/showcaseMiko.fcdc2b75.glb +0 -0
  270. package/templates/postprocess-scene/src/aura-assets.ts +28 -0
  271. package/templates/postprocess-scene/src/main.ts +29 -0
  272. package/templates/postprocess-scene/tests/look-floor.ts +270 -0
  273. package/templates/postprocess-scene/tests/route-health.spec.ts +16 -0
  274. package/templates/postprocess-scene/tests/screenshot.spec.ts +21 -0
  275. package/templates/postprocess-scene/vite.config.ts +7 -0
  276. package/templates/premium-product-viewer/.claude/CLAUDE.md +3 -0
  277. package/templates/premium-product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  278. package/templates/premium-product-viewer/AGENTS.md +3 -0
  279. package/templates/premium-product-viewer/README.md +18 -0
  280. package/templates/premium-product-viewer/aura.assets.json +24 -0
  281. package/templates/premium-product-viewer/package.json +24 -0
  282. package/templates/premium-product-viewer/public/aura-assets/khronosToyCar.01a60862.glb +0 -0
  283. package/templates/premium-product-viewer/src/aura-assets.ts +16 -0
  284. package/templates/premium-product-viewer/src/main.ts +33 -0
  285. package/templates/premium-product-viewer/tests/look-floor.ts +270 -0
  286. package/templates/premium-product-viewer/tests/route-health.spec.ts +16 -0
  287. package/templates/premium-product-viewer/tests/screenshot.spec.ts +21 -0
  288. package/templates/premium-product-viewer/vite.config.ts +7 -0
  289. package/templates/product-viewer/.claude/CLAUDE.md +3 -0
  290. package/templates/product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  291. package/templates/product-viewer/AGENTS.md +3 -0
  292. package/templates/product-viewer/README.md +10 -8
  293. package/templates/product-viewer/package.json +3 -1
  294. package/templates/product-viewer/src/aura-assets.ts +1 -1
  295. package/templates/product-viewer/src/main.ts +78 -19
  296. package/templates/product-viewer/tests/look-floor.ts +270 -0
  297. package/templates/product-viewer/tests/route-health.spec.ts +19 -1
  298. package/templates/product-viewer/tests/screenshot.spec.ts +35 -41
  299. package/templates/product-viewer/vite.config.ts +7 -0
  300. package/templates/prompt-animation-channel/.claude/CLAUDE.md +3 -0
  301. package/templates/prompt-animation-channel/.github/workflows/aura3d-lookdev.yml +67 -0
  302. package/templates/prompt-animation-channel/AGENTS.md +3 -0
  303. package/templates/prompt-animation-channel/package.json +3 -2
  304. package/templates/prompt-animation-channel/src/main.ts +5 -3
  305. package/templates/prompt-animation-channel/src/render-plan.ts +5 -3
  306. package/templates/prompt-animation-channel/tests/look-floor.ts +270 -0
  307. package/templates/prompt-animation-channel/tests/route-health.spec.ts +1 -1
  308. package/templates/prompt-animation-channel/tests/screenshot.spec.ts +10 -4
  309. package/templates/prompt-animation-channel/tests/storyboard-playback.spec.ts +1 -1
  310. package/templates/prompt-animation-channel/vite.config.ts +7 -0
  311. package/templates/racing-starter/.claude/CLAUDE.md +3 -0
  312. package/templates/racing-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  313. package/templates/racing-starter/AGENTS.md +3 -0
  314. package/templates/racing-starter/README.md +8 -6
  315. package/templates/racing-starter/package.json +3 -2
  316. package/templates/racing-starter/src/main.ts +168 -146
  317. package/templates/racing-starter/tests/geometry-certification.json +34 -0
  318. package/templates/racing-starter/tests/look-floor.ts +270 -0
  319. package/templates/racing-starter/tests/playable.spec.ts +63 -80
  320. package/templates/racing-starter/tests/route-health.spec.ts +14 -12
  321. package/templates/racing-starter/tests/screenshot.spec.ts +21 -0
  322. package/templates/racing-starter/vite.config.ts +7 -0
  323. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  324. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  325. package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.679d52fe.glb +0 -0
  326. package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.thumb.svg +0 -1
  327. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.252b3a16.glb +0 -0
  328. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.thumb.svg +0 -1
  329. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  330. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  331. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.3f821141.glb +0 -0
  332. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.thumb.svg +0 -1
  333. package/templates/three-compat-architecture-interior/aura.assets.json +0 -7
  334. package/templates/three-compat-architecture-interior/src/aura-assets.ts +0 -3
  335. package/templates/three-compat-architecture-interior/src/main.ts +0 -27
  336. package/templates/three-compat-architecture-interior/tests/screenshot.spec.ts +0 -15
  337. package/templates/three-compat-asset-inspector/aura.assets.json +0 -7
  338. package/templates/three-compat-asset-inspector/src/aura-assets.ts +0 -3
  339. package/templates/three-compat-asset-inspector/src/main.ts +0 -17
  340. package/templates/three-compat-asset-inspector/tests/screenshot.spec.ts +0 -15
  341. package/templates/three-compat-character-viewer/aura.assets.json +0 -7
  342. package/templates/three-compat-character-viewer/src/aura-assets.ts +0 -3
  343. package/templates/three-compat-character-viewer/src/main.ts +0 -17
  344. package/templates/three-compat-character-viewer/tests/screenshot.spec.ts +0 -15
  345. package/templates/three-compat-custom-threejs-migration/aura.assets.json +0 -7
  346. package/templates/three-compat-custom-threejs-migration/src/aura-assets.ts +0 -3
  347. package/templates/three-compat-custom-threejs-migration/src/main.ts +0 -16
  348. package/templates/three-compat-custom-threejs-migration/tests/screenshot.spec.ts +0 -15
  349. package/templates/three-compat-large-scene/aura.assets.json +0 -7
  350. package/templates/three-compat-large-scene/package.json +0 -22
  351. package/templates/three-compat-large-scene/src/aura-assets.ts +0 -3
  352. package/templates/three-compat-large-scene/src/main.ts +0 -31
  353. package/templates/three-compat-large-scene/tests/route-health.spec.ts +0 -16
  354. package/templates/three-compat-large-scene/tests/screenshot.spec.ts +0 -15
  355. package/templates/three-compat-material-authoring/aura.assets.json +0 -7
  356. package/templates/three-compat-material-authoring/package.json +0 -22
  357. package/templates/three-compat-material-authoring/src/aura-assets.ts +0 -3
  358. package/templates/three-compat-material-authoring/src/main.ts +0 -33
  359. package/templates/three-compat-material-authoring/tests/route-health.spec.ts +0 -16
  360. package/templates/three-compat-material-authoring/tests/screenshot.spec.ts +0 -15
  361. package/templates/three-compat-postprocess-scene/aura.assets.json +0 -7
  362. package/templates/three-compat-postprocess-scene/package.json +0 -22
  363. package/templates/three-compat-postprocess-scene/src/aura-assets.ts +0 -3
  364. package/templates/three-compat-postprocess-scene/src/main.ts +0 -17
  365. package/templates/three-compat-postprocess-scene/tests/route-health.spec.ts +0 -16
  366. package/templates/three-compat-postprocess-scene/tests/screenshot.spec.ts +0 -15
  367. package/templates/three-compat-premium-product-viewer/aura.assets.json +0 -7
  368. package/templates/three-compat-premium-product-viewer/package.json +0 -22
  369. package/templates/three-compat-premium-product-viewer/src/aura-assets.ts +0 -3
  370. package/templates/three-compat-premium-product-viewer/src/main.ts +0 -18
  371. package/templates/three-compat-premium-product-viewer/tests/route-health.spec.ts +0 -16
  372. package/templates/three-compat-premium-product-viewer/tests/screenshot.spec.ts +0 -15
  373. /package/templates/{three-compat-architecture-interior → architecture-interior}/index.html +0 -0
  374. /package/templates/{three-compat-architecture-interior → architecture-interior}/playwright.config.ts +0 -0
  375. /package/templates/{three-compat-architecture-interior → architecture-interior}/tsconfig.json +0 -0
  376. /package/templates/{three-compat-asset-inspector → asset-inspector}/index.html +0 -0
  377. /package/templates/{three-compat-asset-inspector → asset-inspector}/playwright.config.ts +0 -0
  378. /package/templates/{three-compat-asset-inspector → asset-inspector}/tsconfig.json +0 -0
  379. /package/templates/{three-compat-character-viewer → character-viewer}/index.html +0 -0
  380. /package/templates/{three-compat-character-viewer → character-viewer}/playwright.config.ts +0 -0
  381. /package/templates/{three-compat-character-viewer → character-viewer}/tsconfig.json +0 -0
  382. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/index.html +0 -0
  383. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/playwright.config.ts +0 -0
  384. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/tsconfig.json +0 -0
  385. /package/templates/{three-compat-large-scene → large-scene}/index.html +0 -0
  386. /package/templates/{three-compat-large-scene → large-scene}/playwright.config.ts +0 -0
  387. /package/templates/{three-compat-large-scene → large-scene}/tsconfig.json +0 -0
  388. /package/templates/{three-compat-material-authoring → material-authoring}/index.html +0 -0
  389. /package/templates/{three-compat-material-authoring → material-authoring}/playwright.config.ts +0 -0
  390. /package/templates/{three-compat-material-authoring → material-authoring}/tsconfig.json +0 -0
  391. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/index.html +0 -0
  392. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/playwright.config.ts +0 -0
  393. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/tsconfig.json +0 -0
  394. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/index.html +0 -0
  395. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/playwright.config.ts +0 -0
  396. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/tsconfig.json +0 -0
@@ -0,0 +1,91 @@
1
+ # Aura3D shared boundaries
2
+
3
+ Every Aura3D skill links here instead of restating these rules. The full
4
+ policy is in [claims and boundaries](https://github.com/auraoneai/aura3d/blob/main/docs/agents/claims-and-boundaries.md)
5
+ and the [agent guide](https://github.com/auraoneai/aura3d/blob/main/llms.txt).
6
+
7
+ ## Claim labels
8
+
9
+ Label every capability with exactly one of these:
10
+
11
+ | Label | Meaning | Minimum evidence |
12
+ | --- | --- | --- |
13
+ | `createAuraApp` root safe API | A browser route imports only `@aura3d/engine` and mounts through `createAuraApp(...)`. | Build, route-health or equivalent diagnostics, typed asset manifest, browser screenshot, claim-specific pixel or runtime assertion. |
14
+ | `production-runtime` | Exists in production-runtime packages or adapters, not necessarily root APIs. | Package or browser tests for that package, worded without implying root support. |
15
+ | `rendering` package | Exists in the lower-level `@aura3d/rendering` package. | Package exports plus renderer unit or browser evidence, worded at package level. |
16
+ | CLI asset pipeline | Asset search, add, resolve, validation, provenance, typegen, thumbnails, deploy checks. | CLI output, `aura.assets.json`, `src/aura-assets.ts`, license metadata, validation reports. |
17
+ | Template-only scaffold | A template starts a project; it does not prove production capability. | Template generation smoke test and honest scaffold wording. |
18
+ | `prototype` | Illustrates direction without release-quality evidence. | Prototype label and no flagship or production wording. |
19
+ | `roadmap` | Planned, not implemented or not public. | Future tense and a linked issue or PRD item. |
20
+
21
+ When evidence is missing, use `prototype` or `roadmap`. A route that loads,
22
+ compiles, or produces a large screenshot is not proof.
23
+
24
+ ## Forbidden patterns
25
+
26
+ - no raw string asset IDs, raw GLB/glTF URLs, `unsafeModelUrl(...)`, `three` imports, or `GLTFLoader` in public examples;
27
+ - no primary character, vehicle, product, weapon, creature, world, or hero environment made only from primitives unless the route is explicitly abstract visualization;
28
+ - no CSS/DOM particle implementation for examples claiming Aura3D particle rendering;
29
+ - no WebGPU, PBR, postprocess, skinned animation, morph, or game-runtime claim without matching browser evidence;
30
+ - no public showcase or README claim that exceeds detected capability, route-health evidence, or screenshots.
31
+
32
+ Related prohibitions from the same sources: no hand-wired renderer, scene, or
33
+ camera loop; no memorized or guessed model URLs (they are hallucinated
34
+ provenance); no `createAuraApp()` call per frame; no CSS, DOM, or canvas
35
+ overlay standing in for 3D effects, labels on models, or renderer output.
36
+
37
+ ## Catalog-first rule
38
+
39
+ A prompt that names a real object resolves through the asset catalog before
40
+ any model code: `npx @aura3d/cli@latest assets search "<descriptive phrase>"`,
41
+ then `assets resolve "<phrase>" --name <key>` for an auto-pullable candidate.
42
+ Auto-pullable means verified, redistributable (CC0 or CC-BY), and
43
+ direct-download. Marketplace and deep-link results are user-handled: the user
44
+ downloads and licenses them, then admits the file with `assets add`.
45
+ Primitives are set dressing around a resolved asset, never the named subject.
46
+
47
+ ## Typed-asset rule
48
+
49
+ 1. Admit every file through the CLI (`assets add`, `assets resolve`, or
50
+ `assets import-meshy`) so it is hashed, inspected, and recorded in
51
+ `aura.assets.json`.
52
+ 2. Read the generated `src/aura-assets.ts` and import `assets` from
53
+ `./aura-assets`.
54
+ 3. Render with `model(assets.<key>)` or a kit such as
55
+ `sceneKits.productViewer(assets.<key>)`, using the exact generated key.
56
+ 4. Place with render-normalized helpers such as
57
+ `groundedRenderedAssetPlacement(...)`, not raw bounds math.
58
+
59
+ If the key you need is missing, fix the import. Never fall back to a string
60
+ id, a URL, a copied GLB, or a draft artifact path.
61
+
62
+ ## Paid generation controls (Meshy)
63
+
64
+ - Catalog first. Generation is a fallback after a reported catalog rejection.
65
+ - Run `meshy make ... --dry-run` and show the plan before any paid call.
66
+ - Get explicit user approval for the displayed maximum, then pass
67
+ `--max-credits <approved>` on the paid command. Prices are never assumed.
68
+ - Resume recorded task IDs. Do not repeat paid work that already succeeded.
69
+ - Download immediately with `-o artifacts/meshy/<asset>/`. Provider retention
70
+ is short and signed URLs expire.
71
+ - Keep credentials out of arguments, prompts, logs, commits, and output.
72
+ - Admit through `assets import-meshy` with rights evidence. Import defaults to
73
+ `candidate` quality and never certifies release quality.
74
+
75
+ ## Benchmark mode versus normal mode
76
+
77
+ | | Benchmark mode | Normal mode |
78
+ | --- | --- | --- |
79
+ | Starting point | `sceneKits.<name>()` first, `prefabs.*` if needed, primitives only for small additions | Template, kit, prefab, primitives last |
80
+ | Commands | `npm install && npm run build`, then stop | `npm run build`, `npm run test`, asset validation, `check-deploy` |
81
+ | Forbidden in the agent process | `npm run dev`, `npm run preview`, Playwright, screenshot capture, manual visual review | Nothing extra; heavy browser suites still run in CI or a remote runner |
82
+ | Report | Build output and the runner-owned capture command | Evidence bundle and a claim label |
83
+
84
+ A nonblank screenshot is not enough in either mode. The image must visibly
85
+ match the prompt.
86
+
87
+ ## Evidence language
88
+
89
+ Say `reported` for another agent's claim, `recorded` for a manifest or board
90
+ entry, `verified` only for something you opened or ran (and state the scope),
91
+ and `unknown` when you cannot establish current state.
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: aura3d-evidence-review
3
+ description: Reviews Aura3D work before it is called done, public, or shippable by collecting route-health, screenshots, visual QA, asset release checks, and `check-deploy` output, then choosing a claim label through a capped critique loop. Use when finishing a route or template, writing README or showcase claims, comparing catalog versus Meshy candidates, capturing thumbnails or posters with `assets thumbnail`, or running `assets validate --release` and `check-deploy`.
4
+ ---
5
+
6
+ # Aura3D evidence review
7
+
8
+ A compiling route is not proof. This skill turns a finished change into an
9
+ evidence bundle and one claim label — claim labels live here only; other
10
+ skills link to them, never restate or reinterpret them. Label meanings and the
11
+ benchmark exception are in [boundaries](../aura3d-core/references/boundaries.md).
12
+
13
+ ## Establish the contract
14
+
15
+ 1. Run `npx @aura3d/cli@latest --help` and confirm `assets validate`,
16
+ `assets thumbnail`, and `check-deploy` are listed.
17
+ 2. Read `package.json` scripts. Templates gate on `npm run build` and
18
+ `npm run test` (route-health and screenshot specs under `tests/`).
19
+ 3. Read `aura.assets.json` and `src/aura-assets.ts` so you know which typed
20
+ assets the route claims.
21
+ 4. Decide the mode. Benchmark mode: run `npm install && npm run build`, report
22
+ the output and the runner-owned capture command, then stop. Skip every
23
+ step below.
24
+
25
+ ## Procedure
26
+
27
+ 1. Pre-register the rubric before looking at output. Write 3 to 6 checks
28
+ taken from the prompt and the claim you intend to make, for example
29
+ "product centered and seated", "studio lighting visible", "metal and rubber
30
+ read differently". Add the role evidence from `aura3d-assets`.
31
+ 2. Run the local finite gates.
32
+
33
+ ```bash
34
+ npm run build
35
+ npx @aura3d/cli@latest assets validate --source --no-placeholders --require-license
36
+ npx @aura3d/cli@latest assets validate --release
37
+ npx @aura3d/cli@latest check-deploy --dist dist --release
38
+ ```
39
+
40
+ Read `failures` in the JSON, not only the exit code. Keep the reports.
41
+ 3. Run the browser gate (`npm run test`) in CI or a remote runner, not in the
42
+ local agent process. It writes route-health output and
43
+ `tests/reports/screenshot.png` plus pixel metrics. Capture desktop and
44
+ mobile viewports and retain the PNGs with hashes.
45
+ 4. For kit-based or prompt-plan scenes, collect structured evidence:
46
+ `collectAuraSceneEvidence(scene)` for bodies, cameras, clips, and asset
47
+ provenance; `app.diagnostics().look` (resolved look, expansion, lint
48
+ findings); and `compilePromptPlan(plan).report.repairHints`. Structural
49
+ name heuristics exist under `structuralQA.*` — they are diagnostics, never
50
+ acceptance evidence.
51
+ 5. Open the screenshots yourself and grade each rubric item `pass`, `warn`,
52
+ or `fail` in one batch. Every verdict cites a file: a PNG, a report field,
53
+ or a validation failure line.
54
+ 6. Critique loop, at most 6 rounds for visual findings (the look-dev loop).
55
+ For each `fail`, apply the highest-leverage fix — lint codes first, then
56
+ the lowest rubric category (a repair hint, the matching scene kit, a better
57
+ typed asset), rerun only the affected gates, and regrade. Do not change
58
+ labels, rubric items, or thresholds to make a round pass.
59
+ 7. Grade cinematic scenes on the ladder: L0 text only, L1 primitive sketch,
60
+ L2 asset-backed draft, L3 realtime cinematic scene, L4 production handoff.
61
+ Only L3 or better is public product proof.
62
+ 8. Bake-offs: when comparing a catalog candidate against a Meshy candidate,
63
+ use one brief, one rubric, one camera and lighting setup, and the same
64
+ gates for both. Report both verdict sets and pick on evidence, not source.
65
+ 9. Thumbnails and posters: run `npx @aura3d/cli@latest assets thumbnail` for
66
+ manifest thumbnails, and use the screenshot spec output as the poster.
67
+ Marketing previews use a static approved poster unless the live embed
68
+ passes the same gates as the route.
69
+ 10. Choose the label and write the claim at exactly that strength. Record
70
+ the prompt, typed asset keys, screenshot paths, route-health report,
71
+ verdicts, label, and next action.
72
+
73
+ ## What does not count
74
+
75
+ - blank, cropped, tiny, or unreadable screenshots, or PNG size alone;
76
+ - renderer-internal imports offered as root API proof;
77
+ - CSS, DOM, or canvas stand-ins for particles, bloom, lighting, or labels;
78
+ - stale route-health that names assets the source no longer uses;
79
+ - `structuralQA`/`visualQA` name-heuristic output as acceptance evidence — it
80
+ diagnoses, it does not prove pixels;
81
+ - an in-repo scorer as release proof (use a neutral human or opposite-vendor
82
+ model reviewer);
83
+ - a report generated with missing evidence inputs, even when it exits 0.
84
+
85
+ ## Stop and report
86
+
87
+ - A gate command is missing from the installed CLI or scripts: label the
88
+ work `blocked`, name the missing gate, and do not substitute a weaker check.
89
+ - `assets validate --release` lists provenance failures: label `prototype`
90
+ until durable evidence exists.
91
+ - After 6 critique rounds any rubric item still fails: stop, report the
92
+ failing items with their evidence, and label `prototype`.
93
+ - Browser evidence could not be captured (no capture runner available): the
94
+ claim stays `prototype` AND the report names which look-dev loop step
95
+ failed (capture, judge, or lint); do not describe visual results you did
96
+ not see.
97
+ - The claim needs WebGPU, PBR, postprocess, skinned animation, morph, or game
98
+ runtime proof and the pixels do not show it: remove the claim.
99
+
100
+ ## References
101
+
102
+ - [Boundaries](../aura3d-core/references/boundaries.md)
103
+ - [Verification](https://github.com/auraoneai/aura3d/blob/main/docs/agents/verification.md)
104
+ - [Rendering proof required](https://github.com/auraoneai/aura3d/blob/main/docs/agents/rendering-proof-required.md)
105
+ - [Cinematic scene quality](https://github.com/auraoneai/aura3d/blob/main/docs/agents/cinematic-scene-quality.md)
106
+ - [Deployment](https://aura3d.auraone.ai/docs/deployment.html)
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: aura3d-game-art
3
+ description: Produces 2D game art that a real Aura3D consumer uses: flipbook VFX sprite sheets for `effects.flipbook` (the `flipbook-sprite` effect with `spriteColumns` / `spriteRows`) and HUD icons or UI sprites for DOM overlays, each admitted as a typed texture asset. Use when a game template (`mini-game`, `racing-starter`, `falling-blocks-starter`, `fighting-game`) needs explosion, muzzle-flash, or hit VFX sheets, HUD icons, score or health sprites, or a style-consistent batch of UI art.
4
+ ---
5
+
6
+ # Aura3D game art (flipbook VFX and HUD sprites)
7
+
8
+ Only two consumers exist, so only two kinds of art are produced: flipbook
9
+ sheets for the `flipbook-sprite` effect and icons for the DOM HUD. Tilesets
10
+ are out of scope: no 2D tile runtime consumes them, so 3D levels come from
11
+ `aura3d-browser-game` and `aura3d-assets`. Shared rules (claim labels, typed
12
+ assets, CSS/DOM is UI only, benchmark mode) are in
13
+ [../aura3d-core/references/boundaries.md](../aura3d-core/references/boundaries.md).
14
+
15
+ ## Look target
16
+
17
+ Sprites live or die by the route's look: a flipbook explosion pops against a
18
+ night-city grade and washes out under `product-studio` key light. Design the
19
+ sheet against the genre recipe palette (see
20
+ `aura3d-art-direction/references/look-recipes.md`) — emissive colors 3–5×
21
+ background luminance read as glow through bloom; flat fills read as UI, not
22
+ VFX. Keep alpha edges clean: the frame's fog and grade will expose halos the
23
+ texture viewer hides.
24
+
25
+ ## Establish the contract
26
+
27
+ 1. Run `npx @aura3d/cli@latest --help` and read the `assets add` line.
28
+ 2. Read `src/aura-assets.ts` and `aura.assets.json`, and find the consumer
29
+ first: the `effects.flipbook(...)` call, or the HUD element in `src/main.ts`
30
+ (the `mini-game` HUD is a DOM `aside`). No consumer means no art.
31
+ 3. Know the flipbook state. `effects.flipbook` records validated sheet
32
+ geometry (`spriteColumns`, `spriteRows`, `frameRate`) but the root renderer
33
+ has no sprite-sheet sampler yet and submits no flipbook pass.
34
+ `renderer.diagnostics(scene)` reports the warning "flipbook-sprite is
35
+ recorded but withheld". Any route relying on it is `prototype` for that
36
+ effect.
37
+ 4. Benchmark mode: `npm install && npm run build`, then stop.
38
+
39
+ ## Procedure
40
+
41
+ Flipbook VFX sheets:
42
+
43
+ 1. Fix the grid before producing art: columns, rows, frame count, and cell
44
+ size (for example 8 x 4 at 64 px per cell makes a 512 x 256 sheet with up
45
+ to 32 frames). Frames run left to right, top row first; that is the order
46
+ `resolveFlipbookUv(frame, columns, rows)` in `@aura3d/rendering` maps to
47
+ UVs.
48
+ 2. Author every frame in its own cell with the effect centered, a
49
+ transparent background, and no bleed across cell edges. Keep a frame
50
+ inventory (index to description) next to the file.
51
+ 3. Pre-flight the file with the bundled checker:
52
+
53
+ ```sh
54
+ node .agents/skills/aura3d-game-art/references/sheet-check.mjs ./art/explosion.png --columns 8 --rows 4 --frames 30
55
+ ```
56
+
57
+ (Adjust the path to wherever your agent client installed this skill.) It
58
+ fails when the width or height does not divide by the grid, when the frame
59
+ count exceeds the grid, or when the PNG has no alpha channel. It does not
60
+ inspect pixels, so review the transparent background and edges visually.
61
+ 4. Admit it as a typed texture with provenance:
62
+
63
+ ```sh
64
+ npx @aura3d/cli@latest assets add ./art/explosion.png --name explosionSheet --type texture --license CC0-1.0 --author "<author>" --quality candidate
65
+ npx @aura3d/cli@latest assets typegen
66
+ ```
67
+
68
+ 5. Declare the effect with the same grid:
69
+ `effects.flipbook({ spriteColumns: 8, spriteRows: 4, frameRate: 24 })`.
70
+ Mismatched or non-integer values throw a `RangeError` (fail loud); never
71
+ catch and ignore it. The effect has no texture slot today, so the sheet is
72
+ ready for the sampler but not yet drawn.
73
+
74
+ HUD icons and UI sprites:
75
+
76
+ 6. Produce PNG or WebP icons (SVG is not an accepted asset format) at 1x and
77
+ 2x, on a transparent background, sized to the HUD slot.
78
+ 7. Admit each with `assets add ... --type texture`, then reference the
79
+ typed URL in DOM markup, for example an `<img>` whose `src` is
80
+ `assets.hudHeart.url`, mounted with `ui.html(...)` or the template's HUD
81
+ element. Give every icon a text alternative (`alt`, or `aria-label` on the
82
+ control).
83
+ 8. DOM and CSS are allowed for UI only. Never use them for particles,
84
+ explosions, hit sparks, or anything claimed as rendered 3D VFX.
85
+
86
+ Style-consistent batches:
87
+
88
+ 9. Write one style sheet before the batch: palette (hex values), outline
89
+ weight, light direction, and cell or icon size. Produce every item against
90
+ it, then review the batch side by side and redo outliers instead of
91
+ shipping a mixed set.
92
+ 10. Generated images (from an image skill outside Aura3D) are candidates:
93
+ keep them under `artifacts/`, admit them with `--quality candidate`, and
94
+ run the same checks.
95
+ 11. Normal mode: capture the HUD on desktop and mobile through `npm run test`
96
+ on CI or a remote worker, then hand claim wording to
97
+ `aura3d-evidence-review`.
98
+
99
+ ## Stop and report
100
+
101
+ - The sheet fails `sheet-check.mjs`, or frames bleed across cells: fix the
102
+ sheet; do not change the grid in code to paper over it.
103
+ - The route's VFX depends on flipbook pixels: label that effect `prototype`
104
+ and quote the withheld warning. Do not fake it with CSS, a DOM overlay, or
105
+ an animated `<img>` on top of the canvas.
106
+ - Someone asks for a tileset: decline it and route level work to
107
+ `aura3d-browser-game`.
108
+ - A file has no license or author: do not admit it.
109
+
110
+ ## References
111
+
112
+ - [Flipbook UV math (`@aura3d/rendering`)](https://github.com/auraoneai/aura3d/blob/main/packages/rendering/src/SpriteFlipbook.ts)
113
+ - [Flipbook and beam root builder test](https://github.com/auraoneai/aura3d/blob/main/tests/unit/engine/phase2-root-bridge.test.ts)
114
+ - [Flipbook browser harness](https://github.com/auraoneai/aura3d/blob/main/tests/browser/d4-flipbook-beam-harness.ts)
115
+ - [Mini-game template HUD](https://github.com/auraoneai/aura3d/blob/main/packages/create-aura3d/templates/mini-game/src/main.ts)
116
+ - [Build a browser game guide](https://github.com/auraoneai/aura3d/blob/main/docs/guides/build-a-browser-game.md)
117
+ - [Sheet checker](references/sheet-check.mjs)
118
+ - [Sprite and flipbook palettes](references/sprite-palettes.md)
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ // Flipbook sprite-sheet pre-flight for Aura3D `effects.flipbook`.
3
+ // Reads a PNG header (no dependencies) and checks that the sheet divides evenly
4
+ // into columns x rows, that the declared frame count fits the grid, and that the
5
+ // PNG carries an alpha channel. It does not look at pixels; a transparent
6
+ // background and clean frame edges still need a visual check.
7
+ //
8
+ // Usage: node sheet-check.mjs sheet.png --columns 8 --rows 4 [--frames 30]
9
+ import { readFileSync } from "node:fs";
10
+
11
+ const args = process.argv.slice(2);
12
+ const file = args[0];
13
+ const opt = (name) => {
14
+ const i = args.indexOf(`--${name}`);
15
+ return i >= 0 ? Number(args[i + 1]) : undefined;
16
+ };
17
+ const columns = opt("columns");
18
+ const rows = opt("rows");
19
+ if (!file || !columns || !rows) {
20
+ console.error("usage: node sheet-check.mjs sheet.png --columns N --rows N [--frames N]");
21
+ process.exit(2);
22
+ }
23
+ const frames = opt("frames") ?? columns * rows;
24
+
25
+ const buf = readFileSync(file);
26
+ const PNG_SIGNATURE = "89504e470d0a1a0a";
27
+ const failures = [];
28
+ if (buf.subarray(0, 8).toString("hex") !== PNG_SIGNATURE || buf.toString("ascii", 12, 16) !== "IHDR") {
29
+ console.log(JSON.stringify({ ok: false, file, failures: ["not a PNG (flipbook sheets must be PNG with alpha)"] }, null, 2));
30
+ process.exit(1);
31
+ }
32
+ const width = buf.readUInt32BE(16);
33
+ const height = buf.readUInt32BE(20);
34
+ const colorType = buf[25];
35
+ // PNG color types 4 (gray+alpha) and 6 (RGBA) carry alpha; a tRNS chunk adds it to palette images.
36
+ const hasAlpha = colorType === 4 || colorType === 6 || buf.includes(Buffer.from("tRNS"));
37
+
38
+ for (const [name, value] of [["columns", columns], ["rows", rows], ["frames", frames]]) {
39
+ if (!Number.isInteger(value) || value <= 0) failures.push(`${name} must be a positive integer`);
40
+ }
41
+ if (width % columns !== 0) failures.push(`width ${width} is not divisible by ${columns} columns`);
42
+ if (height % rows !== 0) failures.push(`height ${height} is not divisible by ${rows} rows`);
43
+ if (frames > columns * rows) failures.push(`frames ${frames} exceed sheet capacity ${columns * rows}`);
44
+ if (!hasAlpha) failures.push("PNG has no alpha channel; the background cannot be transparent");
45
+
46
+ const cell = [width / columns, height / rows];
47
+ console.log(JSON.stringify({
48
+ ok: failures.length === 0,
49
+ file,
50
+ size: [width, height],
51
+ grid: [columns, rows],
52
+ cell,
53
+ frames,
54
+ emptyCells: columns * rows - frames,
55
+ hasAlpha,
56
+ failures
57
+ }, null, 2));
58
+ process.exitCode = failures.length === 0 ? 0 : 1;
@@ -0,0 +1,25 @@
1
+ # Sprite and flipbook palettes per genre
2
+
3
+ Hue and luminance targets so hand-drawn or generated sprites land inside the
4
+ route's look instead of reading as pasted stickers.
5
+
6
+ | Genre look | Sprite family | Hues (sRGB) | Emissive target |
7
+ | --- | --- | --- | --- |
8
+ | `outdoor-day` | pickups, coins, springs | gold #FFC53D, leaf green #5DBB63, sky blue #56B4F0 | 3× ground luminance |
9
+ | `golden-hour` | brake glow, exhaust, UI accents | amber #FF9E3D, burnt orange #D96C2C, charcoal #2B2623 | 4× asphalt |
10
+ | `arena-fight` | hit sparks, meter fills, KO flash | impact orange #FF7A2B, meter cyan #46E8FF, KO white #FFFFFF | 5× arena floor |
11
+ | `neon-arcade` | pieces, line-clear flash, grid glow | cyan #2EE6FF, magenta #FF3DE8, lime #B8FF2E, violet #8A5BFF | 4× board |
12
+ | `night-city` | signs, window glow, puddle decals | sodium #FFB84D, neon red #FF2E6E, cool cyan #4DD8FF | 3× wet street |
13
+ | `space` | lasers, shields, engine trails | laser magenta #FF4DFF, shield teal #3DFFE8, trail white | 6× starfield |
14
+ | `underwater` | bubbles, biolume, fauna glints | deep teal #1FA8A0, biolume #7DFFD4, coral #FF8A6B | 3× water |
15
+ | `product-studio` | callouts, tag glyphs, swatches | brand accent + neutral greys | none — flat read |
16
+
17
+ ## Drawing rules
18
+
19
+ - Desaturate sprite fills slightly vs. the accent — the grade re-saturates and
20
+ pure-primary fills clip to flat color.
21
+ - Keep alpha edges dark-tolerant: a white halo invisible in the texture viewer
22
+ blooms against `night-city` fog.
23
+ - Flipbook frames must carry their own lighting direction matching the look's
24
+ key (a spark sheet lit from below fights a `golden-hour` key).
25
+ - UI glyphs in DOM HUD use the look's foreground color, not the world palette.
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: aura3d-materials-environments
3
+ description: Chooses and verifies surface looks and lighting environments: built-in `material.*`, `environments.*`, `sky.dayNight`, `weather`, and `water` first, then licensed local textures or HDRIs admitted with `assets add --type texture`, with seam, PBR-channel, and visual-QA checks. Use when a route needs a material, texture set, PBR maps, HDRI or IBL, skybox, night or daytime sky, rain, snow, water, KTX2 textures, or `@aura3d/materials` / `@aura3d/environments` validation.
4
+ ---
5
+
6
+ # Aura3D materials and environments
7
+
8
+ Order is fixed: looks/biomes/env presets first, then built-ins, then a
9
+ licensed local file, then a generated plate as a candidate. There is no
10
+ catalog search for textures or HDRIs today (the asset index has no texture or
11
+ HDRI adapter), so `assets search` will not find them. Shared rules (claim
12
+ labels, typed assets, catalog-first for models, benchmark mode) are in
13
+ [../aura3d-core/references/boundaries.md](../aura3d-core/references/boundaries.md).
14
+
15
+ ## Look target
16
+
17
+ Most scenes need no per-file HDRI at all: `looks.preset(<genre>)` already
18
+ supplies environment light, sky/background, fog and grade — pick it from the
19
+ recipe row in `../aura3d-art-direction/references/look-recipes.md` and only
20
+ descend into manual environments when the look cannot express the mood.
21
+
22
+ ## Establish the contract
23
+
24
+ 1. Run `npx @aura3d/cli@latest --help` and read the `assets add` line and its
25
+ `--type texture|environment` option.
26
+ 2. Read `src/aura-assets.ts` and `aura.assets.json`. Map slots take typed
27
+ `assets.<key>` refs only, never a URL string.
28
+ 3. Check the installed `@aura3d/engine`, `@aura3d/materials`, and
29
+ `@aura3d/environments` versions. The validators below come from the
30
+ `/node` subpaths (`@aura3d/materials/node`, `@aura3d/environments/node`)
31
+ and run in Node scripts, not in browser routes.
32
+ 4. Benchmark mode: `npm install && npm run build`, then stop.
33
+
34
+ ## Procedure
35
+
36
+ Step 1, presets (always try first):
37
+
38
+ 0. Looks and biomes: `looks.preset("outdoor-day" | "night-city" | "product-studio" ...)`
39
+ and `world.biome(<id>)` supply IBL + background + fog + key as one unit;
40
+ `environments.<named>`/`environments.hdri` cover the remaining cases before
41
+ any file admission.
42
+ 1. Materials: `material.pbr(...)`, `material.physical(...)`, `material.metal`,
43
+ `material.glass`, `material.rubber`, `material.fabric`,
44
+ `material.brushedMetal`, `material.ceramic`, `material.matteClay`,
45
+ `material.clearcoatPaint`, and `material.emissive`, plus
46
+ `material.proceduralTextures` (fabric, rubber, brushedMetal, plastic) for
47
+ maps without files. `material.presets()` lists the named specs.
48
+ 2. Environments: `environments.studio`, `environments.materialLab`,
49
+ `environments.productHero`, `environments.nightCinematic`,
50
+ `environments.metalStudio`, `environments.glassStudio`, or
51
+ `environments.forMaterial("metal" | "glass" | "product" | "studio")`.
52
+ 3. Outdoor: `sky.dayNight({ hour })` returns `nodes`, `background`, and
53
+ `dayFactor`; `weather.precipitation({ type: "rain" | "snow" })` and
54
+ `weather.wetGround(...)`; `water.surface({ preset: "calm" | "moderate" |
55
+ "rough" | "storm" })`. Add their `nodes` with `scene().addMany(...)` and use
56
+ the returned `background`.
57
+ 4. Library references for choosing values: `GAME_READY_MATERIAL_PRESETS` (car
58
+ paint, thin glass, brushed metal, skin approximation, and more),
59
+ `listThreeCompatPbrMaterials()`, and `THREE_COMPAT_TEXTURE_SETS`. Check a
60
+ preset in Node with `validateGameReadyMaterialPreset(preset)` or the whole
61
+ library with `validateGameReadyMaterialLibrary()`.
62
+
63
+ Step 2, a licensed local file (Poly Haven or another CC0 / CC-BY source you
64
+ downloaded yourself):
65
+
66
+ 5. Admit each map and each HDRI as a texture:
67
+
68
+ ```sh
69
+ npx @aura3d/cli@latest assets add ./textures/oak_diff_2k.jpg --name oakBase --type texture --license CC0-1.0 --source-page <page> --author "<author>"
70
+ npx @aura3d/cli@latest assets add ./hdri/night_1k.hdr --name nightSky --type texture --license CC0-1.0 --source-page <page> --author "<author>"
71
+ npx @aura3d/cli@latest assets typegen
72
+ ```
73
+
74
+ Use `--type texture` for HDRIs too: `environments.hdri({ texture })` only
75
+ accepts a texture-typed ref, and an `--type environment` ref fails to
76
+ type-check there. Use Radiance `.hdr`, not `.exr`, for IBL.
77
+ 6. Wire maps into one material: `texture` (base color), `normal`,
78
+ `roughnessMap`, `metalnessMap`, `occlusionMap`, `emissiveMap`, with
79
+ `texTransforms` for tiling. Wire the sky with
80
+ `environments.hdri({ texture: assets.nightSky, intensity, rotation })` and an
81
+ optional sharper `reflectionTexture`.
82
+ 7. Reject a PBR set that is missing roughness or metalness data where the
83
+ role expects PBR (metal, painted, or product surfaces). Do not invent the
84
+ missing map with a flat color and call it PBR.
85
+
86
+ Step 3, a generated plate (optional, from an image skill outside Aura3D): keep
87
+ it under `artifacts/`, admit it with `--quality candidate`, and label the
88
+ route `prototype` until the checks below pass.
89
+
90
+ Checks (all steps):
91
+
92
+ 8. HDRI file: in Node, `inspectProductionHDR(path, [width, height])` must
93
+ report a Radiance header and a 2:1 `declaredResolution`. For a manifest
94
+ preset, `verifyThreeCompatHdriFile(preset)` checks the file hash and
95
+ `createThreeCompatEnvironmentDiagnostics(preset)` reports memory and PMREM
96
+ warnings.
97
+ 9. Equirect seam: capture the sky at a yaw that puts the left and right edge
98
+ in frame and confirm no visible seam. `environments.hdri` renders a
99
+ procedural studio fallback first and swaps in the HDRI after load, so
100
+ judge only frames where diagnostics report `iblPixelBacked` true.
101
+ 10. Tiling: capture a surface at a texture scale that repeats the map at least
102
+ 3 times and confirm no visible seam or mirrored repeat.
103
+ 11. On material showcase scenes, `structuralQA.material(nodes)` reports
104
+ `ok` plus per-class structural-name checks (nodes named like
105
+ chrome/glass/rubber actually present). These are diagnostics only —
106
+ acceptance comes from the captured frames.
107
+ 12. KTX2: `.ktx2` files are accepted by `assets add --type texture`, and
108
+ renderer coverage exists only for selected tested cases. Keep a
109
+ PNG/JPG fallback, and make no compression or memory claim without a
110
+ route-level capture.
111
+ 13. Screenshots (normal mode only) run through `npm run test` on CI or a remote
112
+ worker. Hand the claim label to `aura3d-evidence-review`.
113
+
114
+ ## Look-dev loop
115
+
116
+ `aura3d look capture` → judge against the quality-bar rubric → `aura3d look
117
+ lint`. Judge only frames where the HDRI actually loaded (`iblPixelBacked`
118
+ true); a seam visible in one capture re-checks at a different yaw. One change
119
+ per round.
120
+
121
+ ## Stop and report
122
+
123
+ - No built-in matches and no licensed file is available: stop, label the look
124
+ `prototype`, and say a texture or HDRI source is needed. Do not fetch a URL
125
+ you have not verified, and do not claim a catalog texture exists.
126
+ - License or source page is unknown: do not admit the file.
127
+ - The HDRI is not 2:1, has a seam, or never reaches `iblPixelBacked`: report
128
+ it and keep the built-in environment.
129
+ - A PBR role is missing roughness or metalness: reject the set.
130
+ - Any check above was not run: the route is `prototype`, not release.
131
+
132
+ ## References
133
+
134
+ - [Environment lighting](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/environment-lighting.md)
135
+ - [HDR, IBL, tone mapping, and color](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/lighting-environment-color.md)
136
+ - [Texture compression (KTX2/Basis)](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/texture-compression.md)
137
+ - [Material validation source](https://github.com/auraoneai/aura3d/blob/main/packages/engine/src/devtools/materials/MaterialValidation.ts)
138
+ - [HDRI environment source](https://github.com/auraoneai/aura3d/blob/main/packages/engine/src/devtools/environments/HDRIEnvironment.ts)
139
+ - [Sky, weather, and water browser harness](https://github.com/auraoneai/aura3d/blob/main/tests/browser/d3-atmosphere-water-harness.ts)
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: aura3d-performance
3
+ description: Measures and reduces Aura3D frame cost, draw calls, and bundle size with diagnostics, scene-kit budgets, instancing, distance LOD, frustum culling, and KTX2 textures, without turning counters into visual claims. Use when a route is slow, draw calls or bundle size exceed budget, or the task mentions `diagnostics: { overlay: true }`, `sceneKitPerformanceBudget`, `instances.*`, `distanceLod`, `text3D`, KTX2 texture compression, BUNDLE_SIZES, `doctor`, or `check-deploy`.
4
+ ---
5
+
6
+ # Aura3D performance
7
+
8
+ Measure first, change one thing, measure again. Diagnostics counters are
9
+ evidence for performance claims only; they never prove a scene looks right.
10
+ Shared rules (claim labels, forbidden patterns, typed assets, benchmark mode)
11
+ are in [boundaries](../aura3d-core/references/boundaries.md).
12
+
13
+ ## Look target
14
+
15
+ Measure with the final look active: the look sets the DPR cap, the post grade
16
+ (bloom, AO, vignette) and shadow map size — most of the frame cost you are
17
+ optimizing. `looks.appOptions(<id>)` already applies `quality: "auto"`; a
18
+ manual quality override invalidates every measurement that follows.
19
+
20
+ ## Establish the contract
21
+
22
+ 1. Run `npx @aura3d/cli@latest --help` and `npx @aura3d/cli@latest doctor`.
23
+ Fix doctor failures before profiling; warnings are listed separately.
24
+ 2. Read `src/aura-assets.ts` and `aura.assets.json`. Note each asset's
25
+ `sizeBytes`, texture list, and bounds; heavy GLBs and uncompressed textures
26
+ are usually the first cost.
27
+ 3. Check which entry the app imports. New product and game apps should use
28
+ `@aura3d/lean`, `@aura3d/lean/product`, or `@aura3d/lean/game`. The
29
+ `@aura3d/engine` root is a compatibility entry and is far over the new-app
30
+ gzip budget.
31
+ 4. Decide the mode. Benchmark mode: `npm install && npm run build`, then stop.
32
+ No profiling, dev server, or browser capture from the agent.
33
+
34
+ ## Procedure
35
+
36
+ 1. Turn diagnostics on while measuring and off for release screenshots:
37
+
38
+ ```ts
39
+ createAuraApp("#app", { scene, diagnostics: { overlay: true, performancePanel: true } });
40
+ ```
41
+
42
+ The app's diagnostics report `backend`, `fps`, `drawCalls`, `renderSize`,
43
+ asset load states, `warnings`, and `errors`. Record them with the viewport,
44
+ device, and route so the finding reproduces.
45
+ 2. Compare against the budget for the kit you started from:
46
+
47
+ ```ts
48
+ import { sceneKitPerformanceBudget, sceneKits } from "@aura3d/engine";
49
+
50
+ console.log(sceneKitPerformanceBudget("miniGolf"));
51
+ console.log(sceneKits.miniGolf().diagnostics);
52
+ ```
53
+
54
+ Budgets carry `maxDrawCalls`, `estimatedDrawCalls`, `maxGzipBytes`, and
55
+ `targetP50Fps`. FPS targets require calibration on the measuring machine.
56
+ 3. Many repeated objects: replace per-node primitives with one `instances.box`
57
+ (or `instances.sphere`, `instances.plane`, `instances.cylinder`,
58
+ `instances.capsule`, `instances.torus`) node with a transform list. Advanced
59
+ PBR extensions can fall back to expanded draws, so confirm native instanced
60
+ submissions in diagnostics before claiming one draw.
61
+ 4. Distant detail: use `distanceLod` with increasing `maxDistance` levels and a
62
+ `hysteresis` band so the camera cannot flap between levels.
63
+ 5. Large scenes: rely on CPU frustum culling plus the static-bounds BVH. Give
64
+ custom geometry explicit bounds via `geometry.custom`. There is no GPU
65
+ occlusion culling; do not claim it.
66
+ 6. Text: `text3D` is extruded mesh text (A-Z, 0-9, space, dash, period);
67
+ `labels.billboard` is DOM UI. Pick by need, not to save draws.
68
+ 7. Particles: check `particles.diagnostics` for total particles and
69
+ estimated update cost before raising counts.
70
+ 8. Textures: prefer KTX2/Basis-compressed textures supplied through typed
71
+ assets. Compression support is bounded to the tested decoder paths; verify
72
+ in the browser before claiming a memory or load-time win.
73
+ 9. Bundle: keep new imports on the lean entry and avoid pulling devtools or
74
+ cinematic helpers into the critical path. In the Aura3D monorepo,
75
+ `pnpm check:bundle-size` regenerates BUNDLE_SIZES; never raise a budget to
76
+ manufacture a pass.
77
+ 10. Ship check: `npm run build`, then
78
+ `npx @aura3d/cli@latest check-deploy --dist dist`. Browser frame-time and
79
+ screenshot runs (`npm run test`, Playwright) go to CI or a remote runner.
80
+
81
+ ## Stop and report
82
+
83
+ - `doctor` or `check-deploy` fails: stop and fix that first; label `blocked`.
84
+ - A win is measured on one machine only: call it directional, name the
85
+ machine and workload, and do not generalize it to a frame-time guarantee.
86
+ - A performance change alters the rendered scene: rerun screenshot review
87
+ through `aura3d-evidence-review` before shipping.
88
+ - GPU timing is unavailable or noisy on the device: say so; do not fill in.
89
+
90
+ ## References
91
+
92
+ - [Shared boundaries](../aura3d-core/references/boundaries.md)
93
+ - [Profiling and diagnostics](https://github.com/auraoneai/aura3d/blob/main/docs/debug/profiling-and-diagnostics.md)
94
+ - [Bundle sizes](https://github.com/auraoneai/aura3d/blob/main/BUNDLE_SIZES.md)
95
+ - [Texture compression](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/texture-compression.md)
96
+ - [Geometry, instancing, LOD, text](https://github.com/auraoneai/aura3d/blob/main/docs/rendering/geometry-instancing-lod-text.md)
97
+ - [Deployment](https://aura3d.auraone.ai/docs/deployment.html)