@aura3d/cli 3.0.1 → 4.0.2

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 (379) hide show
  1. package/README.md +16 -15
  2. package/dist/admission/artDirection.d.ts +28 -0
  3. package/dist/admission/artDirection.d.ts.map +1 -0
  4. package/dist/admission/artDirection.js +47 -0
  5. package/dist/admission/artDirection.js.map +1 -0
  6. package/dist/admission/audio.d.ts +19 -0
  7. package/dist/admission/audio.d.ts.map +1 -0
  8. package/dist/admission/audio.js +31 -0
  9. package/dist/admission/audio.js.map +1 -0
  10. package/dist/admission/builder-patterns.d.ts +25 -0
  11. package/dist/admission/builder-patterns.d.ts.map +1 -0
  12. package/dist/admission/builder-patterns.js +40 -0
  13. package/dist/admission/builder-patterns.js.map +1 -0
  14. package/dist/admission/gates.d.ts +136 -0
  15. package/dist/admission/gates.d.ts.map +1 -0
  16. package/dist/admission/gates.js +335 -0
  17. package/dist/admission/gates.js.map +1 -0
  18. package/dist/admission/glb.d.ts +64 -0
  19. package/dist/admission/glb.d.ts.map +1 -0
  20. package/dist/admission/glb.js +128 -0
  21. package/dist/admission/glb.js.map +1 -0
  22. package/dist/admission/index.d.ts +8 -0
  23. package/dist/admission/index.d.ts.map +1 -0
  24. package/dist/admission/index.js +8 -0
  25. package/dist/admission/index.js.map +1 -0
  26. package/dist/admission/profiles.d.ts +52 -0
  27. package/dist/admission/profiles.d.ts.map +1 -0
  28. package/dist/admission/profiles.js +91 -0
  29. package/dist/admission/profiles.js.map +1 -0
  30. package/dist/admission/qrFlags.d.ts +12 -0
  31. package/dist/admission/qrFlags.d.ts.map +1 -0
  32. package/dist/admission/qrFlags.js +48 -0
  33. package/dist/admission/qrFlags.js.map +1 -0
  34. package/dist/admission/routeGates.d.ts +36 -0
  35. package/dist/admission/routeGates.d.ts.map +1 -0
  36. package/dist/admission/routeGates.js +144 -0
  37. package/dist/admission/routeGates.js.map +1 -0
  38. package/dist/admission/texel.d.ts +50 -0
  39. package/dist/admission/texel.d.ts.map +1 -0
  40. package/dist/admission/texel.js +177 -0
  41. package/dist/admission/texel.js.map +1 -0
  42. package/dist/admission/textureStats.d.ts +45 -0
  43. package/dist/admission/textureStats.d.ts.map +1 -0
  44. package/dist/admission/textureStats.js +201 -0
  45. package/dist/admission/textureStats.js.map +1 -0
  46. package/dist/animation-asset-validator.d.ts +44 -0
  47. package/dist/animation-asset-validator.d.ts.map +1 -1
  48. package/dist/animation-asset-validator.js +80 -1
  49. package/dist/animation-asset-validator.js.map +1 -1
  50. package/dist/asset-core-types.d.ts +100 -4
  51. package/dist/asset-core-types.d.ts.map +1 -1
  52. package/dist/asset-inspection-types.d.ts +9 -0
  53. package/dist/asset-inspection-types.d.ts.map +1 -1
  54. package/dist/asset-manifest.d.ts +1 -0
  55. package/dist/asset-manifest.d.ts.map +1 -1
  56. package/dist/asset-manifest.js +17 -5
  57. package/dist/asset-manifest.js.map +1 -1
  58. package/dist/asset-route-typegen.d.ts +37 -0
  59. package/dist/asset-route-typegen.d.ts.map +1 -0
  60. package/dist/asset-route-typegen.js +179 -0
  61. package/dist/asset-route-typegen.js.map +1 -0
  62. package/dist/cli-help.d.ts +1 -1
  63. package/dist/cli-help.d.ts.map +1 -1
  64. package/dist/cli-help.js +9 -4
  65. package/dist/cli-help.js.map +1 -1
  66. package/dist/cli-options.d.ts +7 -0
  67. package/dist/cli-options.d.ts.map +1 -1
  68. package/dist/cli-options.js +33 -2
  69. package/dist/cli-options.js.map +1 -1
  70. package/dist/cli.d.ts +1 -1
  71. package/dist/cli.d.ts.map +1 -1
  72. package/dist/cli.js +126 -11
  73. package/dist/cli.js.map +1 -1
  74. package/dist/codemods/engine-entry-imports.d.ts +22 -0
  75. package/dist/codemods/engine-entry-imports.d.ts.map +1 -0
  76. package/dist/codemods/engine-entry-imports.js +159 -0
  77. package/dist/codemods/engine-entry-imports.js.map +1 -0
  78. package/dist/codemods/lean-imports.d.ts +40 -0
  79. package/dist/codemods/lean-imports.d.ts.map +1 -0
  80. package/dist/codemods/lean-imports.js +175 -0
  81. package/dist/codemods/lean-imports.js.map +1 -0
  82. package/dist/codemods/renderer-imports.d.ts +36 -0
  83. package/dist/codemods/renderer-imports.d.ts.map +1 -0
  84. package/dist/codemods/renderer-imports.js +364 -0
  85. package/dist/codemods/renderer-imports.js.map +1 -0
  86. package/dist/codemods/renderer-mode.d.ts +38 -0
  87. package/dist/codemods/renderer-mode.d.ts.map +1 -0
  88. package/dist/codemods/renderer-mode.js +130 -0
  89. package/dist/codemods/renderer-mode.js.map +1 -0
  90. package/dist/commands/prd01/index.d.ts +8 -0
  91. package/dist/commands/prd01/index.d.ts.map +1 -0
  92. package/dist/commands/prd01/index.js +39 -0
  93. package/dist/commands/prd01/index.js.map +1 -0
  94. package/dist/commands/prd02/environmentsBake.d.ts +6 -0
  95. package/dist/commands/prd02/environmentsBake.d.ts.map +1 -0
  96. package/dist/commands/prd02/environmentsBake.js +174 -0
  97. package/dist/commands/prd02/environmentsBake.js.map +1 -0
  98. package/dist/commands/prd02/index.d.ts +2 -0
  99. package/dist/commands/prd02/index.d.ts.map +1 -0
  100. package/dist/commands/prd02/index.js +26 -0
  101. package/dist/commands/prd02/index.js.map +1 -0
  102. package/dist/commands/prd02/migrateLighting.d.ts +17 -0
  103. package/dist/commands/prd02/migrateLighting.d.ts.map +1 -0
  104. package/dist/commands/prd02/migrateLighting.js +86 -0
  105. package/dist/commands/prd02/migrateLighting.js.map +1 -0
  106. package/dist/commands/prd02/migrateLightingSweep.d.ts +20 -0
  107. package/dist/commands/prd02/migrateLightingSweep.d.ts.map +1 -0
  108. package/dist/commands/prd02/migrateLightingSweep.js +105 -0
  109. package/dist/commands/prd02/migrateLightingSweep.js.map +1 -0
  110. package/dist/commands/prd03/index.d.ts +7 -0
  111. package/dist/commands/prd03/index.d.ts.map +1 -0
  112. package/dist/commands/prd03/index.js +9 -0
  113. package/dist/commands/prd03/index.js.map +1 -0
  114. package/dist/commands/prd04/index.d.ts +10 -0
  115. package/dist/commands/prd04/index.d.ts.map +1 -0
  116. package/dist/commands/prd04/index.js +10 -0
  117. package/dist/commands/prd04/index.js.map +1 -0
  118. package/dist/commands/prd04/modelTintReport.d.ts +16 -0
  119. package/dist/commands/prd04/modelTintReport.d.ts.map +1 -0
  120. package/dist/commands/prd04/modelTintReport.js +114 -0
  121. package/dist/commands/prd04/modelTintReport.js.map +1 -0
  122. package/dist/commands/prd04/pinEmissiveDefaults.d.ts +3 -0
  123. package/dist/commands/prd04/pinEmissiveDefaults.d.ts.map +1 -0
  124. package/dist/commands/prd04/pinEmissiveDefaults.js +36 -0
  125. package/dist/commands/prd04/pinEmissiveDefaults.js.map +1 -0
  126. package/dist/commands/prd05/admit.d.ts +54 -0
  127. package/dist/commands/prd05/admit.d.ts.map +1 -0
  128. package/dist/commands/prd05/admit.js +153 -0
  129. package/dist/commands/prd05/admit.js.map +1 -0
  130. package/dist/commands/prd05/codemods/assetsRouteModules.d.ts +3 -0
  131. package/dist/commands/prd05/codemods/assetsRouteModules.d.ts.map +1 -0
  132. package/dist/commands/prd05/codemods/assetsRouteModules.js +92 -0
  133. package/dist/commands/prd05/codemods/assetsRouteModules.js.map +1 -0
  134. package/dist/commands/prd05/index.d.ts +9 -0
  135. package/dist/commands/prd05/index.d.ts.map +1 -0
  136. package/dist/commands/prd05/index.js +171 -0
  137. package/dist/commands/prd05/index.js.map +1 -0
  138. package/dist/commands/prd05/library.d.ts +23 -0
  139. package/dist/commands/prd05/library.d.ts.map +1 -0
  140. package/dist/commands/prd05/library.js +245 -0
  141. package/dist/commands/prd05/library.js.map +1 -0
  142. package/dist/commands/prd05/lookdev.d.ts +14 -0
  143. package/dist/commands/prd05/lookdev.d.ts.map +1 -0
  144. package/dist/commands/prd05/lookdev.js +68 -0
  145. package/dist/commands/prd05/lookdev.js.map +1 -0
  146. package/dist/commands/prd05/optimize.d.ts +16 -0
  147. package/dist/commands/prd05/optimize.d.ts.map +1 -0
  148. package/dist/commands/prd05/optimize.js +55 -0
  149. package/dist/commands/prd05/optimize.js.map +1 -0
  150. package/dist/commands/prd05/prune.d.ts +26 -0
  151. package/dist/commands/prd05/prune.d.ts.map +1 -0
  152. package/dist/commands/prd05/prune.js +104 -0
  153. package/dist/commands/prd05/prune.js.map +1 -0
  154. package/dist/commands/prd05/review.d.ts +24 -0
  155. package/dist/commands/prd05/review.d.ts.map +1 -0
  156. package/dist/commands/prd05/review.js +40 -0
  157. package/dist/commands/prd05/review.js.map +1 -0
  158. package/dist/commands/prd06/index.d.ts +6 -0
  159. package/dist/commands/prd06/index.d.ts.map +1 -0
  160. package/dist/commands/prd06/index.js +86 -0
  161. package/dist/commands/prd06/index.js.map +1 -0
  162. package/dist/commands/prd06/inspectAnimationClips.d.ts +86 -0
  163. package/dist/commands/prd06/inspectAnimationClips.d.ts.map +1 -0
  164. package/dist/commands/prd06/inspectAnimationClips.js +168 -0
  165. package/dist/commands/prd06/inspectAnimationClips.js.map +1 -0
  166. package/dist/commands/prd06/validateHero.d.ts +18 -0
  167. package/dist/commands/prd06/validateHero.d.ts.map +1 -0
  168. package/dist/commands/prd06/validateHero.js +91 -0
  169. package/dist/commands/prd06/validateHero.js.map +1 -0
  170. package/dist/commands/prd07/codemods.d.ts +28 -0
  171. package/dist/commands/prd07/codemods.d.ts.map +1 -0
  172. package/dist/commands/prd07/codemods.js +155 -0
  173. package/dist/commands/prd07/codemods.js.map +1 -0
  174. package/dist/commands/prd07/index.d.ts +2 -0
  175. package/dist/commands/prd07/index.d.ts.map +1 -0
  176. package/dist/commands/prd07/index.js +151 -0
  177. package/dist/commands/prd07/index.js.map +1 -0
  178. package/dist/commands/prd08/feelLint.d.ts +13 -0
  179. package/dist/commands/prd08/feelLint.d.ts.map +1 -0
  180. package/dist/commands/prd08/feelLint.js +32 -0
  181. package/dist/commands/prd08/feelLint.js.map +1 -0
  182. package/dist/commands/prd08/index.d.ts +2 -0
  183. package/dist/commands/prd08/index.d.ts.map +1 -0
  184. package/dist/commands/prd08/index.js +16 -0
  185. package/dist/commands/prd08/index.js.map +1 -0
  186. package/dist/commands/prd08/motionReport.d.ts +94 -0
  187. package/dist/commands/prd08/motionReport.d.ts.map +1 -0
  188. package/dist/commands/prd08/motionReport.js +197 -0
  189. package/dist/commands/prd08/motionReport.js.map +1 -0
  190. package/dist/commands/prd09/codemods/audio-wrapper.d.ts +9 -0
  191. package/dist/commands/prd09/codemods/audio-wrapper.d.ts.map +1 -0
  192. package/dist/commands/prd09/codemods/audio-wrapper.js +30 -0
  193. package/dist/commands/prd09/codemods/audio-wrapper.js.map +1 -0
  194. package/dist/commands/prd09/codemods/capture-branches.d.ts +10 -0
  195. package/dist/commands/prd09/codemods/capture-branches.d.ts.map +1 -0
  196. package/dist/commands/prd09/codemods/capture-branches.js +54 -0
  197. package/dist/commands/prd09/codemods/capture-branches.js.map +1 -0
  198. package/dist/commands/prd09/codemods/evidence-globals.d.ts +8 -0
  199. package/dist/commands/prd09/codemods/evidence-globals.d.ts.map +1 -0
  200. package/dist/commands/prd09/codemods/evidence-globals.js +19 -0
  201. package/dist/commands/prd09/codemods/evidence-globals.js.map +1 -0
  202. package/dist/commands/prd09/codemods/perf-script.d.ts +8 -0
  203. package/dist/commands/prd09/codemods/perf-script.d.ts.map +1 -0
  204. package/dist/commands/prd09/codemods/perf-script.js +24 -0
  205. package/dist/commands/prd09/codemods/perf-script.js.map +1 -0
  206. package/dist/commands/prd09/index.d.ts +8 -0
  207. package/dist/commands/prd09/index.d.ts.map +1 -0
  208. package/dist/commands/prd09/index.js +19 -0
  209. package/dist/commands/prd09/index.js.map +1 -0
  210. package/dist/commands/prd09/perf-report.d.ts +56 -0
  211. package/dist/commands/prd09/perf-report.d.ts.map +1 -0
  212. package/dist/commands/prd09/perf-report.js +118 -0
  213. package/dist/commands/prd09/perf-report.js.map +1 -0
  214. package/dist/commands/prd09/sfx-admit.d.ts +18 -0
  215. package/dist/commands/prd09/sfx-admit.d.ts.map +1 -0
  216. package/dist/commands/prd09/sfx-admit.js +120 -0
  217. package/dist/commands/prd09/sfx-admit.js.map +1 -0
  218. package/dist/commands/prd10/index.d.ts +2 -0
  219. package/dist/commands/prd10/index.d.ts.map +1 -0
  220. package/dist/commands/prd10/index.js +109 -0
  221. package/dist/commands/prd10/index.js.map +1 -0
  222. package/dist/commands/prd11/batchOptout.d.ts +35 -0
  223. package/dist/commands/prd11/batchOptout.d.ts.map +1 -0
  224. package/dist/commands/prd11/batchOptout.js +155 -0
  225. package/dist/commands/prd11/batchOptout.js.map +1 -0
  226. package/dist/commands/prd11/index.d.ts +2 -0
  227. package/dist/commands/prd11/index.d.ts.map +1 -0
  228. package/dist/commands/prd11/index.js +13 -0
  229. package/dist/commands/prd11/index.js.map +1 -0
  230. package/dist/commands/prd11/perfGate.d.ts +15 -0
  231. package/dist/commands/prd11/perfGate.d.ts.map +1 -0
  232. package/dist/commands/prd11/perfGate.js +98 -0
  233. package/dist/commands/prd11/perfGate.js.map +1 -0
  234. package/dist/commands/prd13/index.d.ts +15 -0
  235. package/dist/commands/prd13/index.d.ts.map +1 -0
  236. package/dist/commands/prd13/index.js +26 -0
  237. package/dist/commands/prd13/index.js.map +1 -0
  238. package/dist/commands/prd13/run.d.ts +10 -0
  239. package/dist/commands/prd13/run.d.ts.map +1 -0
  240. package/dist/commands/prd13/run.js +29 -0
  241. package/dist/commands/prd13/run.js.map +1 -0
  242. package/dist/commands/prd14/index.d.ts +6 -0
  243. package/dist/commands/prd14/index.d.ts.map +1 -0
  244. package/dist/commands/prd14/index.js +6 -0
  245. package/dist/commands/prd14/index.js.map +1 -0
  246. package/dist/commands/prd15/index.d.ts +8 -0
  247. package/dist/commands/prd15/index.d.ts.map +1 -0
  248. package/dist/commands/prd15/index.js +152 -0
  249. package/dist/commands/prd15/index.js.map +1 -0
  250. package/dist/commands/registry.d.ts +19 -0
  251. package/dist/commands/registry.d.ts.map +1 -0
  252. package/dist/commands/registry.js +19 -0
  253. package/dist/commands/registry.js.map +1 -0
  254. package/dist/contracts/assetManifest.d.ts +80 -0
  255. package/dist/contracts/assetManifest.d.ts.map +1 -0
  256. package/dist/contracts/assetManifest.js +9 -0
  257. package/dist/contracts/assetManifest.js.map +1 -0
  258. package/dist/contracts/commands.d.ts +53 -0
  259. package/dist/contracts/commands.d.ts.map +1 -0
  260. package/dist/contracts/commands.js +37 -0
  261. package/dist/contracts/commands.js.map +1 -0
  262. package/dist/index.d.ts +17 -1
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.js +297 -73
  265. package/dist/index.js.map +1 -1
  266. package/dist/library-manifest.d.ts +86 -0
  267. package/dist/library-manifest.d.ts.map +1 -0
  268. package/dist/library-manifest.js +95 -0
  269. package/dist/library-manifest.js.map +1 -0
  270. package/dist/look/capture.d.ts +51 -0
  271. package/dist/look/capture.d.ts.map +1 -0
  272. package/dist/look/capture.js +229 -0
  273. package/dist/look/capture.js.map +1 -0
  274. package/dist/look/judge.d.ts +24 -0
  275. package/dist/look/judge.d.ts.map +1 -0
  276. package/dist/look/judge.js +151 -0
  277. package/dist/look/judge.js.map +1 -0
  278. package/dist/look/lint-static.d.ts +45 -0
  279. package/dist/look/lint-static.d.ts.map +1 -0
  280. package/dist/look/lint-static.js +241 -0
  281. package/dist/look/lint-static.js.map +1 -0
  282. package/dist/look/rubric.d.ts +70 -0
  283. package/dist/look/rubric.d.ts.map +1 -0
  284. package/dist/look/rubric.js +169 -0
  285. package/dist/look/rubric.js.map +1 -0
  286. package/dist/meshy/admission.d.ts.map +1 -1
  287. package/dist/meshy/admission.js +32 -7
  288. package/dist/meshy/admission.js.map +1 -1
  289. package/dist/meshy/import.d.ts +7 -1
  290. package/dist/meshy/import.d.ts.map +1 -1
  291. package/dist/meshy/import.js +84 -6
  292. package/dist/meshy/import.js.map +1 -1
  293. package/dist/migrate-three/CompatibilityWarnings.d.ts +6 -0
  294. package/dist/migrate-three/CompatibilityWarnings.d.ts.map +1 -0
  295. package/dist/migrate-three/CompatibilityWarnings.js +24 -0
  296. package/dist/migrate-three/CompatibilityWarnings.js.map +1 -0
  297. package/dist/migrate-three/ImportMap.d.ts +19 -0
  298. package/dist/migrate-three/ImportMap.d.ts.map +1 -0
  299. package/dist/migrate-three/ImportMap.js +35 -0
  300. package/dist/migrate-three/ImportMap.js.map +1 -0
  301. package/dist/migrate-three/R3fMigration.d.ts +32 -0
  302. package/dist/migrate-three/R3fMigration.d.ts.map +1 -0
  303. package/dist/migrate-three/R3fMigration.js +70 -0
  304. package/dist/migrate-three/R3fMigration.js.map +1 -0
  305. package/dist/migrate-three/ThreeToA3DAdapter.d.ts +8 -0
  306. package/dist/migrate-three/ThreeToA3DAdapter.d.ts.map +1 -0
  307. package/dist/migrate-three/ThreeToA3DAdapter.js +20 -0
  308. package/dist/migrate-three/ThreeToA3DAdapter.js.map +1 -0
  309. package/dist/migrate-three/emit.d.ts +21 -0
  310. package/dist/migrate-three/emit.d.ts.map +1 -0
  311. package/dist/migrate-three/emit.js +117 -0
  312. package/dist/migrate-three/emit.js.map +1 -0
  313. package/dist/migrate-three/mappings.d.ts +21 -0
  314. package/dist/migrate-three/mappings.d.ts.map +1 -0
  315. package/dist/migrate-three/mappings.js +42 -0
  316. package/dist/migrate-three/mappings.js.map +1 -0
  317. package/dist/migrate-three/parse.d.ts +20 -0
  318. package/dist/migrate-three/parse.d.ts.map +1 -0
  319. package/dist/migrate-three/parse.js +56 -0
  320. package/dist/migrate-three/parse.js.map +1 -0
  321. package/dist/migrate-three/report.d.ts +18 -0
  322. package/dist/migrate-three/report.d.ts.map +1 -0
  323. package/dist/migrate-three/report.js +16 -0
  324. package/dist/migrate-three/report.js.map +1 -0
  325. package/dist/pull-bridge/adapters.d.ts +1 -1
  326. package/dist/pull-bridge/adapters.d.ts.map +1 -1
  327. package/dist/pull-bridge/adapters.js +17 -4
  328. package/dist/pull-bridge/adapters.js.map +1 -1
  329. package/dist/pull-bridge/provenance.d.ts.map +1 -1
  330. package/dist/pull-bridge/provenance.js +3 -2
  331. package/dist/pull-bridge/provenance.js.map +1 -1
  332. package/dist/pull-bridge/pullable.d.ts.map +1 -1
  333. package/dist/pull-bridge/pullable.js +14 -3
  334. package/dist/pull-bridge/pullable.js.map +1 -1
  335. package/dist/pull-bridge/scoring.d.ts +36 -8
  336. package/dist/pull-bridge/scoring.d.ts.map +1 -1
  337. package/dist/pull-bridge/scoring.js +143 -47
  338. package/dist/pull-bridge/scoring.js.map +1 -1
  339. package/dist/pull-bridge/search.d.ts +2 -0
  340. package/dist/pull-bridge/search.d.ts.map +1 -1
  341. package/dist/pull-bridge/search.js +17 -10
  342. package/dist/pull-bridge/search.js.map +1 -1
  343. package/dist/pull-bridge.d.ts +2 -2
  344. package/dist/pull-bridge.d.ts.map +1 -1
  345. package/dist/pull-bridge.js +24 -8
  346. package/dist/pull-bridge.js.map +1 -1
  347. package/package.json +6 -3
  348. package/skills/agent-files/AGENTS.md +3 -0
  349. package/skills/aura3d-animation-studio/SKILL.md +153 -0
  350. package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
  351. package/skills/aura3d-art-direction/SKILL.md +84 -0
  352. package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
  353. package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
  354. package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
  355. package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
  356. package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
  357. package/skills/aura3d-assets/SKILL.md +151 -0
  358. package/skills/aura3d-assets/references/preview-under-look.md +26 -0
  359. package/skills/aura3d-browser-game/SKILL.md +149 -0
  360. package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
  361. package/skills/aura3d-character-animation/SKILL.md +129 -0
  362. package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
  363. package/skills/aura3d-core/SKILL.md +143 -0
  364. package/skills/aura3d-core/references/boundaries.md +91 -0
  365. package/skills/aura3d-evidence-review/SKILL.md +106 -0
  366. package/skills/aura3d-game-art/SKILL.md +118 -0
  367. package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
  368. package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
  369. package/skills/aura3d-materials-environments/SKILL.md +139 -0
  370. package/skills/aura3d-performance/SKILL.md +97 -0
  371. package/skills/aura3d-retexture/SKILL.md +115 -0
  372. package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
  373. package/skills/aura3d-scene-authoring/SKILL.md +132 -0
  374. package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
  375. package/skills/aura3d-threejs-migration/SKILL.md +125 -0
  376. package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
  377. package/skills/llms.txt +147 -0
  378. package/skills/manifest.json +163 -0
  379. package/skills/meshy-cli/SKILL.md +148 -0
@@ -0,0 +1,32 @@
1
+ # Look recipes — 13 genre rows
2
+
3
+ One row per genre. Use the row's look id verbatim, take its camera/framing/palette
4
+ as the starting point, then iterate in the look-dev loop. Palettes: 3 base tones +
5
+ 1 accent, no pure primaries. Key = sun position `elevation°`/`azimuth°`. Subject %
6
+ is the subject's share of frame height.
7
+
8
+ | Genre | Look | Camera rig + fov | Subject % | Key | Palette | Atmosphere | Post | VFX | Reference frames |
9
+ |---|---|---|---|---|---|---|---|---|---|
10
+ | platformer | `outdoor-day` | `follow` (side-on), fov 50 | 18–25 | 48° / 35° (3/4 front) | saturated greens, sky blue, warm wood + coin gold | fog 0.0025 | `daylight-outdoor` | coin sparkle, land dust | `webgl_animation_skinning_blending` |
11
+ | racing | `golden-hour` | `chase`, fov 60 | 15–25 | 12° / 35° (low sun) | warm asphalt, burnt orange, charcoal + headlight amber | fog 30–180 m | `cinematic-film` | brake glow, speed dust | `webgl_materials_car` |
12
+ | fighting | `arena-fight` | `follow` (side-on), fov 45 | 20–30 (pair) | top spot 60° / 0° | arena dark, rope colour, crowd shadow + spotlight rim | haze cone | `arena-fight` | hit sparks, knockback flash | `webgl_animation_skinning_morph` |
13
+ | arena shooter | `space` | `orthographic` (top-down) 60°, fov 55 | 10–15 (field) | rim 70° / 210° | deep space blue, graphite, teal + laser magenta | none (space background exception) | `space` | model muzzle flash, shield segments | `webgl_shaders_sky` |
14
+ | sports/table | `interior-industrial` | broadcast `orthographic` (top-down) 70°, fov 40 | 25–40 (table) | flood 55° / 45° | turf green, line white, crowd dark + ball accent | indoor haze | `arena-fight` | scoreboard pulse | `webgl_materials_lightmap` |
15
+ | product | `product-studio` | `orbit` autoframe, fov 35 | 45–70 | softbox 45° / 30° | neutral grey, white, metal + one brand accent | none | `product-studio` | sweep highlight on turn | `webgl_materials_video` |
16
+ | character | `character-showcase` | `orbit`, fov 40 | 50–70 | 3-point 50° / 35° | costume-driven neutrals + rim pick | light room haze | `product-studio` | cloth/hair motion settle | `webgl_animation_skinning_blending` |
17
+ | outdoor environment | `overcast` | `establishing` wide, fov 55 | vista | 50° / 40° | muted green, slate, fog blue + wildflower accent | fog 0.004 | `daylight-outdoor` | wind grass, drifting cloud | `webgl_lights_physical` |
18
+ | interior | `interior-warm` | medium `orbit`, fov 45 | 30–50 (anchor) | window 35° / 60° | warm wood, cream wall, book spines + plant green | dust shafts | `cinematic-film` | window bounce | `webgl_lights_spotlight` |
19
+ | night city | `night-city` | low tele, fov 35 | 20–35 (street) | neon rim 25° / 120° | sodium orange, neon sign, dark asphalt + cyan accent | fog 15–90 m, wet street | `neon-night` | sign flicker, drizzle sheen | `webgl_lights_spotlights` |
20
+ | space | `space` | `orbit` wide, fov 60 | 30–50 (planet) | star key 30° / 180° | void blue, planet limb, star field + aurora accent | none (background exception) | `space` | engine trail, planet rotation | `webgl_shaders_sky` |
21
+ | underwater | `underwater` | `follow`, fov 50 | 20–40 (creature) | godray 70° / 10° | deep blue, teal, kelp green + coral accent | scatter 0.03, caustics | `underwater` | bubble stream, silt drift | `webgl_water` |
22
+ | cinematic | `polar-night` | `establishing` dolly, fov 35 | 25–40 | moon 20° / 300° | aurora green, snow blue, night + lantern amber | snow mist 0.006 | `cinematic-film` | aurora drift, breath fog | `webgl_animation_cloth` |
23
+
24
+ Notes:
25
+
26
+ - `orbit`/`follow`/`follow` (side-on)/`follow` (side-on)/`shoulder`/`orthographic` (top-down)/`chase`/`establishing`
27
+ are camera-rig names used by the template gate; wire them through the camera
28
+ rig spec API of the current engine version, never through evidence fields.
29
+ - "background exception" rows skip the sky-fill hard check; the look's own
30
+ background supplies the void.
31
+ - VFX rows name models/practicals; no CSS/DOM overlays and no primitive sprite
32
+ cards faking rain, reflections or splashes.
@@ -0,0 +1,103 @@
1
+ # Quality bar — the 12-category look rubric
2
+
3
+ Score every captured PNG per category 0-10 in 0.5 steps. Anchors are written as
4
+ what you observe, not what the code does. A score < 7 needs an `observations`
5
+ entry naming the concrete thing seen on screen.
6
+
7
+ ## lighting
8
+
9
+ - 2: one flat light everywhere; faces and props read equally bright
10
+ - 5: a key direction exists but the fill flattens it; mood is generic daylight
11
+ - 7: clear key + fill + rim separation; the mood matches the look brief
12
+ - 9: light feels motivated by the world (sun, sign, lamp); bounce and colour temperature vary by area
13
+
14
+ ## shadows
15
+
16
+ - 2: no visible shadow; objects float
17
+ - 5: a shadow exists but is grey/soft with no contact darkening
18
+ - 7: dark contact shadows ground every object, soft falloff
19
+ - 9: cascaded and stable; contact + ambient occlusion match the reference
20
+
21
+ ## ibl_reflections
22
+
23
+ - 2: surfaces uniform, no environment response
24
+ - 5: metals look like plastic; reflections faint or absent
25
+ - 7: environment visible in glossy surfaces; roughness varies by material
26
+ - 9: reflections pick up the actual sky/studio setup and track correctly
27
+
28
+ ## environment_world
29
+
30
+ - 2: solid void background
31
+ - 5: a sky/ground exist but read as a backdrop, not a place
32
+ - 7: horizon, ground and props compose a believable space
33
+ - 9: parallax layers (far, mid, near) plus weather or time-of-day cues
34
+
35
+ ## atmospheric_effects
36
+
37
+ - 2: air is empty; no depth between near and far
38
+ - 5: a fog exists but mismatches the light (wrong colour or distance)
39
+ - 7: fog/haze ties to the horizon colour and lifts the far field
40
+ - 9: volumetric cues (shafts, mist, drizzle) read at a glance
41
+
42
+ ## material_quality
43
+
44
+ - 2: one flat colour per object, everything the same
45
+ - 5: some materials differ but most read as untextured plastic
46
+ - 7: wood/metal/fabric/skin read distinctly; normal/roughness respond to light
47
+ - 9: materials carry wear, edge highlights and texture at read distance
48
+
49
+ ## modeling_assets
50
+
51
+ - 2: hero subject is a box/sphere primitive
52
+ - 5: typed models but scale mismatches or obvious gaps
53
+ - 7: real models at real scale, fitted to the world
54
+ - 9: asset variety, dressing and silhouette richness like the reference
55
+
56
+ ## composition
57
+
58
+ - 2: subject centred and tiny, or clipping the frame edge
59
+ - 5: subject visible but dead-centre symmetry with wasted space
60
+ - 7: clear focal hierarchy; rule-of-thirds or genre framing used
61
+ - 9: leading lines and depth layers direct the eye through the shot
62
+
63
+ ## camera
64
+
65
+ - 2: default angle; horizon level but arbitrary
66
+ - 5: a deliberate angle exists but fov/height flattens the subject
67
+ - 7: rig matches the genre row; subject inside its framing band
68
+ - 9: camera reads as a choice (dolly, chase, orbit) and moves with intent
69
+
70
+ ## postprocessing
71
+
72
+ - 2: raw output; clipped brights or crushed blacks
73
+ - 5: a grade exists but fights the palette (muddy or oversaturated)
74
+ - 7: tone/grade holds the palette; AO grounds the mid-tones
75
+ - 9: grade + bloom + AO are tuned as one image pipeline
76
+
77
+ ## animation_quality
78
+
79
+ - 2: hero subject static or sliding
80
+ - 5: animation exists but feet slide or loops stutter
81
+ - 7: locomotion matches travel direction; idle vs action states read
82
+ - 9: secondary motion and timing give the subject weight
83
+
84
+ ## ui_hud
85
+
86
+ - 2: debug overlay or dev counters in the shipped frame
87
+ - 5: HUD exists but overlaps the subject or sits off-layout
88
+ - 7: HUD in DOM, readable, out of the subject's way
89
+ - 9: HUD styled to the game's palette and responsive at mobile width
90
+
91
+ ## Hard checks (lint codes that must be clean)
92
+
93
+ `aura3d look lint` plus `app.diagnostics().look.lint` must report no
94
+ `error`-severity finding for:
95
+
96
+ - `look/no-lights`, `look/no-ibl` — the scene lights and reflects nothing
97
+ - `look/ambient-kills-ibl`, `look/ambient-flattens` — ambient used as the only fill
98
+ - `look/solid-void` — void background without a declared exception
99
+ - `look/low-dpr`, `look/double-aa` — renderer overrides or doubled AA
100
+ - `look/fake-effect-names`, `look/capture-branch` — fake effect primitives or
101
+ capture-only branches (except where the flagged lane allows capture branches)
102
+ - `look/primitive-subject`, `look/debug-overlay` — primitive hero or shipped debug HUD
103
+ - `look/multiple-looks`, `look/expansion-mismatch` — look conflicts
@@ -0,0 +1,82 @@
1
+ # Reference frames
2
+
3
+ Named three.js r185 examples (https://threejs.org/examples/) — the day-0 frame
4
+ set. When the C-30 v2 reference scenes and the licensed stills in
5
+ `benchmarks/quality-rebuild/refs/` land on main, they replace rows here. Every
6
+ frame carries "what you should see" so the file is complete without images.
7
+
8
+ ## webgl_animation_skinning_blending
9
+
10
+ https://threejs.org/examples/#webgl_animation_skinning_blending
11
+
12
+ What you should see: a rigged character blending between locomotion clips under
13
+ a real key light with shadows that track the feet. Use for: platformer,
14
+ character — how a typed GLB hero should sit in a lit world.
15
+
16
+ ## webgl_animation_skinning_morph
17
+
18
+ https://threejs.org/examples/#webgl_animation_skinning_morph
19
+
20
+ What you should see: a creature head deforming through morph targets with skin
21
+ and eye materials responding to environment light. Use for: fighting — facial
22
+ and secondary motion quality on real materials.
23
+
24
+ ## webgl_animation_cloth
25
+
26
+ https://threejs.org/examples/#webgl_animation_cloth
27
+
28
+ What you should see: draped cloth catching directional light with soft,
29
+ contact-darkened shadows on the floor. Use for: cinematic — fabric motion plus
30
+ moody lighting discipline.
31
+
32
+ ## webgl_materials_car
33
+
34
+ https://threejs.org/examples/#webgl_materials_car
35
+
36
+ What you should see: a car body with clearcoat reflections pulling the
37
+ environment into the paint, grounded by contact shadow. Use for: racing — how
38
+ glossy materials and IBL should look on a vehicle.
39
+
40
+ ## webgl_materials_video
41
+
42
+ https://threejs.org/examples/#webgl_materials_video
43
+
44
+ What you should see: a product-like object under studio lighting with clean
45
+ softboxes and a controlled backdrop. Use for: product — framing and soft studio
46
+ key.
47
+
48
+ ## webgl_materials_lightmap
49
+
50
+ https://threejs.org/examples/#webgl_materials_lightmap
51
+
52
+ What you should see: baked light/detail on an architectural interior with warm
53
+ bounce in corners. Use for: sports/table and interior — indoor light richness
54
+ without dynamic lights.
55
+
56
+ ## webgl_lights_physical
57
+
58
+ https://threejs.org/examples/#webgl_lights_physical
59
+
60
+ What you should see: physically-motivated lamps in a simple room, falloff that
61
+ reads as real. Use for: outdoor environment, interior — key/fill discipline.
62
+
63
+ ## webgl_lights_spotlights
64
+
65
+ https://threejs.org/examples/#webgl_lights_spotlights
66
+
67
+ What you should see: spot cones with visible falloff on a dark floor, haze
68
+ inside the beam. Use for: night city — motivated practical lighting after dark.
69
+
70
+ ## webgl_shaders_sky
71
+
72
+ https://threejs.org/examples/#webgl_shaders_sky
73
+
74
+ What you should see: a full-bleed sky dome with sun, horizon gradient and haze —
75
+ never a void. Use for: space, arena shooter, outdoor — background treatment.
76
+
77
+ ## webgl_water
78
+
79
+ https://threejs.org/examples/#webgl_water
80
+
81
+ What you should see: an animated water surface with normals, reflections and
82
+ shore interaction. Use for: underwater — surface/caustic atmosphere cues.
@@ -0,0 +1,151 @@
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. Ensure every
82
+ admitted entry in `aura.assets.json` and `src/aura-assets.ts` carries a valid
83
+ 64-character `sha256-...` `hash` and `public/aura-assets/...` path for clean
84
+ look and silhouette so `createAssetProvenance(node.asset).source === "typed-aura-assets-manifest"`
85
+ preserves PBR lighting, palette, contrast, and reflection in the production
86
+ glTF bridge. Never omit `hash` in custom `defineAuraAssets(...)` /
87
+ `defineAssets` declarations (keeps look and shadow intact) and never place
88
+ unhashed duplicate GLBs in route-local `apps/<route>/public/aura-assets/`
89
+ that collide with root `public/aura-assets/` (keeps composition readable).
90
+ 7. Use the key as generated. Every character, athlete, enemy, vehicle, weapon,
91
+ tree, and landmark must mount a real 3D GLB via `model(assets.<name>,
92
+ { targetMaxDimension, role })` for a readable silhouette — use `targetHeight`
93
+ only for upright humanoids and `targetMaxDimension` for vehicles, rackets,
94
+ paddles, weapons, and wide props so aspect ratios never stretch vertically;
95
+ drive rigged characters (`skins > 0`) with `handle.setAnimation({ clip,
96
+ loop: true, speed })` so limbs articulate under the key light and shadow; and
97
+ never build stick-figure humans or box cars from primitives.
98
+
99
+ ```ts
100
+ import { createAuraApp, groundedRenderedAssetPlacement, looks, model, scene } from "@aura3d/engine";
101
+ import { assets } from "./aura-assets";
102
+
103
+ const place = groundedRenderedAssetPlacement(assets.helmet, { targetMaxDimension: 1.2, floorY: 0 });
104
+ createAuraApp("#app", {
105
+ scene: scene()
106
+ .add(looks.preset("product-studio"))
107
+ .add(model(assets.helmet).position(...place.position).scale(place.scale)),
108
+ ...looks.appOptions("product-studio")
109
+ });
110
+ ```
111
+
112
+ 8. Hand off: fighters and games to `aura3d-browser-game`
113
+ (`assets validate-game`), rigs and clips to `aura3d-character-animation`
114
+ (`assets validate-animation`), release checks to `aura3d-evidence-review`.
115
+
116
+ ## Reject a candidate when
117
+
118
+ - license, source page, author, or acquisition time is missing or temp-only;
119
+ - no material or texture evidence exists where the role expects texture;
120
+ - a character route claims animation but inspection shows `skins === 0` or no
121
+ usable clips for skeletal look and silhouette motion;
122
+ - bounds are extreme, pivot is bad, or orientation is unknown and public APIs
123
+ cannot correct it;
124
+ - the hash duplicates another asset without an explanation;
125
+ - a generated Meshy GLB has not been decimated and compressed before admission
126
+ (`> 20,000` vertices, `> 2 MB`, 32-bit indices instead of 16-bit `Uint16Array`
127
+ with `byteStride === 0`, or `> 1024x1024` textures that stall glTF parsing and
128
+ exhaust GPU memory across the scene's look, lighting, and atmosphere);
129
+ - it is placeholder-like, or only a generated thumbnail proves it is readable.
130
+
131
+ ## Stop and report
132
+
133
+ - Search returns no auto-pullable candidate, or every candidate fails the
134
+ reject list: stop, list the query, profile, and rejection reasons, and offer
135
+ two options: a user-supplied licensed file, or Meshy generation (load
136
+ `meshy-cli`, dry run first). Do not model the subject from primitives.
137
+ - Search prints a catalog fetch warning (for example an HTTP 404 from the
138
+ index): report it verbatim, label asset-dependent work `blocked`, and do not
139
+ treat fallback deep-links as auto-pullable.
140
+ - `assets validate --release` fails on provenance: keep the route `prototype`
141
+ until durable evidence is added; never weaken the check.
142
+ - A needed key is absent from `src/aura-assets.ts` after typegen: stop and fix
143
+ the admission.
144
+
145
+ ## References
146
+
147
+ - [Boundaries](../aura3d-core/references/boundaries.md)
148
+ - [Asset workflow](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-workflow.md)
149
+ - [Asset selection](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-selection.md)
150
+ - [Assets docs](https://aura3d.auraone.ai/docs/assets.html)
151
+ - [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,149 @@
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 sky light, key shadow, fog, and grade — never stack extra
71
+ `lights.studio()` / `lights.directional()` on top, pass `{ fogDensityScale: 0,
72
+ exposureEv: -0.1 }` to `looks.preset(...)` and
73
+ `qualityRebuild: { flags: ["game", "-compiler", "-post", "-vfxFog"] }` on fast
74
+ arcade routes so contrast and frame pacing stay crisp, and never set
75
+ `emissive: "#ffffff"` on instanced pool materials (`instanceColors` multiply
76
+ `u_baseColor`, not `u_emissiveColor`).
77
+ 3. Mount typed 3D GLBs for every character, athlete, enemy, vehicle, weapon,
78
+ tree, and landmark (`model(assets.<name>, { targetMaxDimension, role })`,
79
+ emissive 3–5 on pickups, and explicit `material: material.pbr({ color })` on
80
+ untextured preview GLBs); use `targetHeight` only for upright humanoids and
81
+ `targetMaxDimension` for vehicles, rackets, paddles, weapons, and wide props
82
+ so silhouettes never stretch vertically. Drive rigged characters (`skins > 0`)
83
+ with `handle.setAnimation({ clip, loop: true, speed })` synced to locomotion
84
+ (`idle`, `walk`, `run`, `attack`) for real pixel motion under the key shadow
85
+ instead of sliding rigid statues. Never build stick-figure humans or box cars
86
+ from primitives; ground `model()` actors (`minY = 0`) at `y + sy / 2` of
87
+ centered platforms; wind custom `primitives.mesh` triangles CCW from `+Y`; and
88
+ decimate/compress Meshy GLBs (`<= 20,000` vertices, `<= 2 MB`, 16-bit indices,
89
+ `<= 1024x1024` textures, valid 64-char `sha256-...` `hash` for clean look).
90
+ 4. Camera state drives `app.camera` every frame — size `html, body, #app, canvas`
91
+ to `100vw × 100vh` (`position: fixed; inset: 0`), extend the 3D ground apron
92
+ deep in `+Z`/`-Z` so the bottom frame is never a black void, disable
93
+ `collision: true` on `camera.rigs.shoulder` when the hero has child nodes, and
94
+ enforce `>= 1.4m` fighter pushbox separation (`|x| >= 1.8m` at spawn).
95
+ 5. Gate Frame 1 on `await app.ready()` before fading `#boot-gate` (`opacity: 0;
96
+ pointer-events: none` then remove) and starting simulation so lighting,
97
+ shadow, and GLB silhouettes never pop in. Default `autopilot` to `false`
98
+ (immediate manual control on Frame 1) unless `?autoplay=1` or `?demo=1` is in
99
+ the URL or the user clicks the HUD `Auto` toggle button (`button.blur()` so
100
+ `Space`/`Enter` never re-trigger focused HUD controls), and wire HUD/events
101
+ through `game.eventLog` and `game.hud.*` in a compact top bar.
102
+ 6. Reset without tearing down the scene: mutate runtime node handles
103
+ (`app.nodes.require(...)`) instead of calling `app.setScene()` on same-stage
104
+ (`stageId` / `worldId`) restarts so shadow and postprocess grade never drop.
105
+ 7. Genre gates (plan for 60 seconds of meaningful play):
106
+
107
+ | Genre | Must have |
108
+ | --- | --- |
109
+ | racing | throttle, brake, steer, ordered checkpoints, lap or finish, penalty or timeout |
110
+ | platformer | move, jump, fall, collision matching visible ledges, collectibles, hazards, camera keeps player visible |
111
+ | falling blocks | move, rotate, soft + hard drop, lock, line clear, scoring, levels, game over |
112
+ | fighting | strikes/blocks, hit reactions, round + KO state, both fighters readable |
113
+ | character controller | walk/run/jump clips playing, camera shoulder follow, locomotion direction matches travel |
114
+
115
+ 8. `npx @aura3d/cli@latest assets validate --no-placeholders --require-license`
116
+ and `assets validate-game`; racing/platformer also
117
+ `assets certify-game-geometry --asset track --category racing`.
118
+ 9. Runtime evidence: pause, step one frame, then `game.evidence` over input,
119
+ bodies, events, HUD, and look state — see `aura3d-evidence-review` (one link).
120
+
121
+ ## Look-dev loop
122
+
123
+ Run the `aura3d look capture` → judge → iterate loop from
124
+ `aura3d-art-direction`: lint first (`aura3d look lint`), then the weakest
125
+ rubric category; one change per round until every category reads 7+, 6
126
+ rounds, or 2 flat rounds.
127
+
128
+ ## Stop and report
129
+
130
+ - `assets certify-game-geometry` returns `"ok": false` or a blocker such as
131
+ `racing-road-mesh-not-found`: label `prototype`; never hide the gap with
132
+ primitive ledges or road strips.
133
+ - Manual input cannot complete the route while a proof replay can: `prototype`.
134
+ - The primary player, vehicle, or world is a primitive stand-in: `prototype`.
135
+ - `assets validate-game` crashes or fails: report the exact message, label
136
+ `blocked` for public claims.
137
+ - A kit is missing a needed rule (fail state, collision semantics, path
138
+ alignment): write it route-local, say so, file a library gap.
139
+ - Benchmark mode without `look capture`: build, stop, label `prototype`.
140
+
141
+ ## References
142
+
143
+ - [Shared boundaries](../aura3d-core/references/boundaries.md)
144
+ - [Look recipes](../aura3d-art-direction/references/look-recipes.md)
145
+ - [Quality bar](../aura3d-art-direction/references/quality-bar.md)
146
+ - [Build a browser game](https://github.com/auraoneai/aura3d/blob/main/docs/guides/build-a-browser-game.md)
147
+ - [Game example standards](https://github.com/auraoneai/aura3d/blob/main/docs/agents/game-example-standards.md)
148
+ - [Game runtime API](https://github.com/auraoneai/aura3d/blob/main/docs/api/game-runtime.md)
149
+ - [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.