create-aura3d 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-skills.d.ts +38 -0
  3. package/dist/agent-skills.d.ts.map +1 -0
  4. package/dist/agent-skills.js +103 -0
  5. package/dist/agent-skills.js.map +1 -0
  6. package/dist/cli.js +32 -5
  7. package/dist/cli.js.map +1 -1
  8. package/dist/index.d.ts +32 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +52 -10
  11. package/dist/index.js.map +1 -1
  12. package/dist/showcase-spec-artifacts.d.ts +1 -1
  13. package/dist/showcase-spec-game-geometry-extractor.js +8 -11
  14. package/dist/showcase-spec-game-geometry-extractor.js.map +1 -1
  15. package/dist/template-hdri.d.ts +12 -0
  16. package/dist/template-hdri.d.ts.map +1 -0
  17. package/dist/template-hdri.js +49 -0
  18. package/dist/template-hdri.js.map +1 -0
  19. package/hdri/ATTRIBUTION.md +8 -0
  20. package/hdri/autumn_field_puresky_1k.hdr +0 -0
  21. package/hdri/kloppenheim_06_puresky_1k.hdr +0 -0
  22. package/hdri/night-2k.hdr +0 -0
  23. package/hdri/studio_small_08_1k.hdr +0 -0
  24. package/package.json +14 -10
  25. package/skills/agent-files/AGENTS.md +3 -0
  26. package/skills/aura3d-animation-studio/SKILL.md +153 -0
  27. package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
  28. package/skills/aura3d-art-direction/SKILL.md +84 -0
  29. package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
  30. package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
  31. package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
  32. package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
  33. package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
  34. package/skills/aura3d-assets/SKILL.md +132 -0
  35. package/skills/aura3d-assets/references/preview-under-look.md +26 -0
  36. package/skills/aura3d-browser-game/SKILL.md +127 -0
  37. package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
  38. package/skills/aura3d-character-animation/SKILL.md +129 -0
  39. package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
  40. package/skills/aura3d-core/SKILL.md +121 -0
  41. package/skills/aura3d-core/references/boundaries.md +91 -0
  42. package/skills/aura3d-evidence-review/SKILL.md +106 -0
  43. package/skills/aura3d-game-art/SKILL.md +118 -0
  44. package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
  45. package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
  46. package/skills/aura3d-materials-environments/SKILL.md +139 -0
  47. package/skills/aura3d-performance/SKILL.md +97 -0
  48. package/skills/aura3d-retexture/SKILL.md +115 -0
  49. package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
  50. package/skills/aura3d-scene-authoring/SKILL.md +132 -0
  51. package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
  52. package/skills/aura3d-threejs-migration/SKILL.md +125 -0
  53. package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
  54. package/skills/llms.txt +117 -0
  55. package/skills/manifest.json +163 -0
  56. package/skills/meshy-cli/SKILL.md +133 -0
  57. package/templates/animation-channel/.claude/CLAUDE.md +3 -0
  58. package/templates/animation-channel/.github/workflows/aura3d-lookdev.yml +67 -0
  59. package/templates/animation-channel/AGENTS.md +3 -0
  60. package/templates/animation-channel/package.json +4 -3
  61. package/templates/animation-channel/src/main.ts +5 -6
  62. package/templates/animation-channel/src/render-plan.ts +5 -3
  63. package/templates/animation-channel/tests/look-floor.ts +270 -0
  64. package/templates/animation-channel/tests/route-health.spec.ts +13 -0
  65. package/templates/animation-channel/tests/screenshot.spec.ts +10 -5
  66. package/templates/animation-channel/vite.config.ts +7 -0
  67. package/templates/animation-studio/.claude/CLAUDE.md +3 -0
  68. package/templates/animation-studio/.github/workflows/aura3d-lookdev.yml +67 -0
  69. package/templates/animation-studio/AGENTS.md +2 -70
  70. package/templates/animation-studio/package.json +5 -4
  71. package/templates/animation-studio/public/aura-assets/luma.thumb.svg +1 -1
  72. package/templates/animation-studio/public/aura-assets/miko.thumb.svg +1 -1
  73. package/templates/{falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.thumb.svg → animation-studio/public/aura-assets/moonGarden.thumb.svg} +1 -1
  74. package/templates/animation-studio/scripts/build-clip-library.ts +6 -5
  75. package/templates/animation-studio/scripts/resolve-asset.ts +7 -4
  76. package/templates/animation-studio/src/asset-contract.ts +19 -0
  77. package/templates/animation-studio/src/aura-assets.ts +651 -54
  78. package/templates/animation-studio/src/scene-player.ts +6 -6
  79. package/templates/animation-studio/src/set-templates.ts +13 -9
  80. package/templates/animation-studio/tests/look-floor.ts +270 -0
  81. package/templates/animation-studio/tests/route-health.spec.ts +2 -2
  82. package/templates/animation-studio/tests/screenshot.spec.ts +18 -10
  83. package/templates/animation-studio/vite.config.ts +2 -0
  84. package/templates/architecture-interior/.claude/CLAUDE.md +3 -0
  85. package/templates/architecture-interior/.github/workflows/aura3d-lookdev.yml +67 -0
  86. package/templates/architecture-interior/AGENTS.md +3 -0
  87. package/templates/architecture-interior/README.md +16 -0
  88. package/templates/architecture-interior/aura.assets.json +24 -0
  89. package/templates/architecture-interior/package.json +24 -0
  90. package/templates/architecture-interior/public/aura-assets/kenneyModularDungeonRoomSmall.a7e74a5f.glb +0 -0
  91. package/templates/architecture-interior/src/aura-assets.ts +16 -0
  92. package/templates/architecture-interior/src/main.ts +23 -0
  93. package/templates/architecture-interior/tests/look-floor.ts +270 -0
  94. package/templates/{three-compat-architecture-interior → architecture-interior}/tests/route-health.spec.ts +3 -3
  95. package/templates/architecture-interior/tests/screenshot.spec.ts +21 -0
  96. package/templates/architecture-interior/vite.config.ts +7 -0
  97. package/templates/arena-shooter/.claude/CLAUDE.md +3 -0
  98. package/templates/arena-shooter/.github/workflows/aura3d-lookdev.yml +67 -0
  99. package/templates/arena-shooter/AGENTS.md +3 -0
  100. package/templates/arena-shooter/README.md +45 -0
  101. package/templates/arena-shooter/aura.assets.json +62 -0
  102. package/templates/arena-shooter/index.html +32 -0
  103. package/templates/arena-shooter/package.json +23 -0
  104. package/templates/arena-shooter/playwright.config.ts +15 -0
  105. package/templates/arena-shooter/public/aura-assets/craft_miner.de323205.glb +0 -0
  106. package/templates/arena-shooter/public/aura-assets/craft_racer.bce8cb3d.glb +0 -0
  107. package/templates/arena-shooter/public/aura-assets/meteor_detailed.f30379ab.glb +0 -0
  108. package/templates/arena-shooter/src/aura-assets.ts +56 -0
  109. package/templates/arena-shooter/src/main.ts +616 -0
  110. package/templates/arena-shooter/tests/look-floor.ts +270 -0
  111. package/templates/arena-shooter/tests/playable.spec.ts +56 -0
  112. package/templates/arena-shooter/tests/route-health.spec.ts +87 -0
  113. package/templates/arena-shooter/tests/screenshot.spec.ts +22 -0
  114. package/templates/arena-shooter/tsconfig.json +15 -0
  115. package/templates/arena-shooter/vite.config.ts +7 -0
  116. package/templates/asset-inspector/.claude/CLAUDE.md +3 -0
  117. package/templates/asset-inspector/.github/workflows/aura3d-lookdev.yml +67 -0
  118. package/templates/asset-inspector/AGENTS.md +3 -0
  119. package/templates/asset-inspector/README.md +13 -0
  120. package/templates/asset-inspector/aura.assets.json +24 -0
  121. package/templates/{three-compat-custom-threejs-migration → asset-inspector}/package.json +6 -4
  122. package/templates/asset-inspector/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  123. package/templates/asset-inspector/src/aura-assets.ts +16 -0
  124. package/templates/asset-inspector/src/main.ts +23 -0
  125. package/templates/asset-inspector/tests/look-floor.ts +270 -0
  126. package/templates/{three-compat-character-viewer → asset-inspector}/tests/route-health.spec.ts +3 -3
  127. package/templates/asset-inspector/tests/screenshot.spec.ts +21 -0
  128. package/templates/asset-inspector/vite.config.ts +7 -0
  129. package/templates/character-controller/.claude/CLAUDE.md +3 -0
  130. package/templates/character-controller/.github/workflows/aura3d-lookdev.yml +67 -0
  131. package/templates/character-controller/AGENTS.md +3 -0
  132. package/templates/character-controller/README.md +7 -1
  133. package/templates/character-controller/aura.assets.json +29 -22
  134. package/templates/character-controller/index.html +4 -5
  135. package/templates/character-controller/package.json +6 -5
  136. package/templates/character-controller/playwright.config.ts +1 -0
  137. package/templates/character-controller/public/aura-assets/auraclash-player-rig.glb +0 -0
  138. package/templates/character-controller/src/aura-assets.ts +25 -7
  139. package/templates/character-controller/src/main.ts +190 -47
  140. package/templates/character-controller/tests/certified-rig.spec.ts +2 -2
  141. package/templates/character-controller/tests/look-floor.ts +270 -0
  142. package/templates/character-controller/tests/route-health.spec.ts +49 -4
  143. package/templates/character-controller/tests/screenshot.spec.ts +17 -5
  144. package/templates/character-controller/vite.config.ts +7 -0
  145. package/templates/character-viewer/.claude/CLAUDE.md +3 -0
  146. package/templates/character-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  147. package/templates/character-viewer/AGENTS.md +3 -0
  148. package/templates/character-viewer/README.md +13 -0
  149. package/templates/character-viewer/aura.assets.json +24 -0
  150. package/templates/{three-compat-asset-inspector → character-viewer}/package.json +6 -4
  151. package/templates/character-viewer/public/aura-assets/kenneyMiniForestCharacterArcher.0fd0f92e.glb +0 -0
  152. package/templates/character-viewer/src/aura-assets.ts +16 -0
  153. package/templates/character-viewer/src/main.ts +21 -0
  154. package/templates/character-viewer/tests/look-floor.ts +270 -0
  155. package/templates/{three-compat-custom-threejs-migration → character-viewer}/tests/route-health.spec.ts +3 -3
  156. package/templates/character-viewer/tests/screenshot.spec.ts +21 -0
  157. package/templates/character-viewer/vite.config.ts +7 -0
  158. package/templates/cinematic-scene/.claude/CLAUDE.md +3 -0
  159. package/templates/cinematic-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  160. package/templates/cinematic-scene/AGENTS.md +3 -0
  161. package/templates/cinematic-scene/README.md +11 -2
  162. package/templates/cinematic-scene/package.json +4 -3
  163. package/templates/cinematic-scene/src/main.ts +46 -11
  164. package/templates/cinematic-scene/tests/look-floor.ts +270 -0
  165. package/templates/cinematic-scene/tests/route-health.spec.ts +31 -3
  166. package/templates/cinematic-scene/tests/screenshot.spec.ts +34 -45
  167. package/templates/cinematic-scene/vite.config.ts +7 -0
  168. package/templates/custom-scene/.claude/CLAUDE.md +3 -0
  169. package/templates/custom-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  170. package/templates/custom-scene/AGENTS.md +3 -0
  171. package/templates/custom-scene/README.md +13 -0
  172. package/templates/custom-scene/aura.assets.json +24 -0
  173. package/templates/{three-compat-character-viewer → custom-scene}/package.json +6 -4
  174. package/templates/custom-scene/public/aura-assets/kenneyPirateKitShipMedium.279ea019.glb +0 -0
  175. package/templates/custom-scene/src/aura-assets.ts +16 -0
  176. package/templates/custom-scene/src/main.ts +23 -0
  177. package/templates/custom-scene/tests/look-floor.ts +270 -0
  178. package/templates/{three-compat-asset-inspector → custom-scene}/tests/route-health.spec.ts +3 -3
  179. package/templates/custom-scene/tests/screenshot.spec.ts +21 -0
  180. package/templates/custom-scene/vite.config.ts +7 -0
  181. package/templates/episode-builder/.claude/CLAUDE.md +3 -0
  182. package/templates/episode-builder/.github/workflows/aura3d-lookdev.yml +67 -0
  183. package/templates/episode-builder/AGENTS.md +3 -0
  184. package/templates/episode-builder/package.json +4 -3
  185. package/templates/episode-builder/src/main.ts +5 -3
  186. package/templates/episode-builder/src/render-plan.ts +5 -3
  187. package/templates/episode-builder/tests/look-floor.ts +270 -0
  188. package/templates/episode-builder/tests/route-health.spec.ts +11 -0
  189. package/templates/episode-builder/tests/screenshot.spec.ts +10 -4
  190. package/templates/episode-builder/vite.config.ts +7 -0
  191. package/templates/falling-blocks-starter/.claude/CLAUDE.md +3 -0
  192. package/templates/falling-blocks-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  193. package/templates/falling-blocks-starter/AGENTS.md +3 -0
  194. package/templates/falling-blocks-starter/README.md +10 -1
  195. package/templates/falling-blocks-starter/aura.assets.json +40 -23
  196. package/templates/falling-blocks-starter/package.json +4 -3
  197. package/templates/falling-blocks-starter/public/aura-assets/quaternius-cube-crate.glb +0 -0
  198. package/templates/falling-blocks-starter/public/aura-assets/quaternius-wall-modular.glb +0 -0
  199. package/templates/falling-blocks-starter/src/aura-assets.ts +33 -10
  200. package/templates/falling-blocks-starter/src/main.ts +317 -96
  201. package/templates/falling-blocks-starter/tests/look-floor.ts +270 -0
  202. package/templates/falling-blocks-starter/tests/playable.spec.ts +51 -18
  203. package/templates/falling-blocks-starter/tests/route-health.spec.ts +17 -7
  204. package/templates/falling-blocks-starter/tests/screenshot.spec.ts +21 -0
  205. package/templates/falling-blocks-starter/vite.config.ts +7 -0
  206. package/templates/fighting-game/.claude/CLAUDE.md +3 -0
  207. package/templates/fighting-game/.github/workflows/aura3d-lookdev.yml +67 -0
  208. package/templates/fighting-game/AGENTS.md +3 -0
  209. package/templates/fighting-game/README.md +2 -0
  210. package/templates/fighting-game/aura.assets.json +56 -46
  211. package/templates/fighting-game/package.json +5 -3
  212. package/templates/fighting-game/public/aura-assets/auraclash-player-rig.glb +0 -0
  213. package/templates/fighting-game/public/aura-assets/auraclash-rival-rig.glb +0 -0
  214. package/templates/fighting-game/src/aura-assets.ts +54 -20
  215. package/templates/fighting-game/src/game/fighters.ts +57 -12
  216. package/templates/fighting-game/src/main.ts +135 -53
  217. package/templates/fighting-game/tests/certified-rig.spec.ts +1 -1
  218. package/templates/fighting-game/tests/gameplay-smoke.spec.ts +25 -33
  219. package/templates/fighting-game/tests/look-floor.ts +270 -0
  220. package/templates/fighting-game/tests/route-health.spec.ts +23 -4
  221. package/templates/fighting-game/tests/screenshot.spec.ts +10 -4
  222. package/templates/fighting-game/vite.config.ts +7 -0
  223. package/templates/large-scene/.claude/CLAUDE.md +3 -0
  224. package/templates/large-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  225. package/templates/large-scene/AGENTS.md +3 -0
  226. package/templates/large-scene/README.md +13 -0
  227. package/templates/large-scene/aura.assets.json +40 -0
  228. package/templates/{three-compat-architecture-interior → large-scene}/package.json +6 -4
  229. package/templates/large-scene/public/aura-assets/kenneyMiniForestRocksHigh.226728a0.glb +0 -0
  230. package/templates/large-scene/public/aura-assets/kenneyMiniForestTree.0075d505.glb +0 -0
  231. package/templates/large-scene/src/aura-assets.ts +28 -0
  232. package/templates/large-scene/src/main.ts +43 -0
  233. package/templates/large-scene/tests/look-floor.ts +270 -0
  234. package/templates/large-scene/tests/route-health.spec.ts +16 -0
  235. package/templates/large-scene/tests/screenshot.spec.ts +21 -0
  236. package/templates/large-scene/vite.config.ts +7 -0
  237. package/templates/material-authoring/.claude/CLAUDE.md +3 -0
  238. package/templates/material-authoring/.github/workflows/aura3d-lookdev.yml +67 -0
  239. package/templates/material-authoring/AGENTS.md +3 -0
  240. package/templates/material-authoring/README.md +15 -0
  241. package/templates/material-authoring/aura.assets.json +24 -0
  242. package/templates/material-authoring/package.json +24 -0
  243. package/templates/material-authoring/public/aura-assets/kenneyCarKitSedanSports.2889c428.glb +0 -0
  244. package/templates/material-authoring/src/aura-assets.ts +16 -0
  245. package/templates/material-authoring/src/main.ts +78 -0
  246. package/templates/material-authoring/tests/look-floor.ts +270 -0
  247. package/templates/material-authoring/tests/route-health.spec.ts +16 -0
  248. package/templates/material-authoring/tests/screenshot.spec.ts +21 -0
  249. package/templates/material-authoring/vite.config.ts +7 -0
  250. package/templates/mini-game/.claude/CLAUDE.md +3 -0
  251. package/templates/mini-game/.github/workflows/aura3d-lookdev.yml +67 -0
  252. package/templates/mini-game/AGENTS.md +3 -0
  253. package/templates/mini-game/README.md +9 -6
  254. package/templates/mini-game/aura.assets.json +177 -36
  255. package/templates/mini-game/package.json +4 -2
  256. package/templates/mini-game/public/aura-assets/kaykit-barbarian.glb +0 -0
  257. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitKey.2e930961.glb +0 -0
  258. package/templates/mini-game/public/aura-assets/kenneyPlatformerKitStar.a102a1b9.glb +0 -0
  259. package/templates/mini-game/public/aura-assets/quaternius-crate.glb +0 -0
  260. package/templates/mini-game/public/aura-assets/quaternius-cube-crate.glb +0 -0
  261. package/templates/mini-game/src/aura-assets.ts +140 -32
  262. package/templates/mini-game/src/main.ts +204 -71
  263. package/templates/mini-game/tests/certified-rig.spec.ts +2 -2
  264. package/templates/mini-game/tests/look-floor.ts +270 -0
  265. package/templates/mini-game/tests/playable.spec.ts +23 -2
  266. package/templates/mini-game/tests/route-health.spec.ts +2 -2
  267. package/templates/mini-game/tests/screenshot.spec.ts +44 -53
  268. package/templates/mini-game/vite.config.ts +7 -0
  269. package/templates/postprocess-scene/.claude/CLAUDE.md +3 -0
  270. package/templates/postprocess-scene/.github/workflows/aura3d-lookdev.yml +67 -0
  271. package/templates/postprocess-scene/AGENTS.md +3 -0
  272. package/templates/postprocess-scene/README.md +17 -0
  273. package/templates/postprocess-scene/aura.assets.json +38 -0
  274. package/templates/postprocess-scene/package.json +24 -0
  275. package/templates/postprocess-scene/public/aura-assets/showcaseLuma.ef389217.glb +0 -0
  276. package/templates/postprocess-scene/public/aura-assets/showcaseMiko.fcdc2b75.glb +0 -0
  277. package/templates/postprocess-scene/src/aura-assets.ts +28 -0
  278. package/templates/postprocess-scene/src/main.ts +29 -0
  279. package/templates/postprocess-scene/tests/look-floor.ts +270 -0
  280. package/templates/postprocess-scene/tests/route-health.spec.ts +16 -0
  281. package/templates/postprocess-scene/tests/screenshot.spec.ts +21 -0
  282. package/templates/postprocess-scene/vite.config.ts +7 -0
  283. package/templates/premium-product-viewer/.claude/CLAUDE.md +3 -0
  284. package/templates/premium-product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  285. package/templates/premium-product-viewer/AGENTS.md +3 -0
  286. package/templates/premium-product-viewer/README.md +18 -0
  287. package/templates/premium-product-viewer/aura.assets.json +24 -0
  288. package/templates/premium-product-viewer/package.json +24 -0
  289. package/templates/premium-product-viewer/public/aura-assets/khronosToyCar.01a60862.glb +0 -0
  290. package/templates/premium-product-viewer/src/aura-assets.ts +16 -0
  291. package/templates/premium-product-viewer/src/main.ts +33 -0
  292. package/templates/premium-product-viewer/tests/look-floor.ts +270 -0
  293. package/templates/premium-product-viewer/tests/route-health.spec.ts +16 -0
  294. package/templates/premium-product-viewer/tests/screenshot.spec.ts +21 -0
  295. package/templates/premium-product-viewer/vite.config.ts +7 -0
  296. package/templates/product-viewer/.claude/CLAUDE.md +3 -0
  297. package/templates/product-viewer/.github/workflows/aura3d-lookdev.yml +67 -0
  298. package/templates/product-viewer/AGENTS.md +3 -0
  299. package/templates/product-viewer/README.md +10 -8
  300. package/templates/product-viewer/package.json +4 -2
  301. package/templates/product-viewer/src/aura-assets.ts +1 -1
  302. package/templates/product-viewer/src/main.ts +78 -19
  303. package/templates/product-viewer/tests/look-floor.ts +270 -0
  304. package/templates/product-viewer/tests/route-health.spec.ts +19 -1
  305. package/templates/product-viewer/tests/screenshot.spec.ts +35 -41
  306. package/templates/product-viewer/vite.config.ts +7 -0
  307. package/templates/prompt-animation-channel/.claude/CLAUDE.md +3 -0
  308. package/templates/prompt-animation-channel/.github/workflows/aura3d-lookdev.yml +67 -0
  309. package/templates/prompt-animation-channel/AGENTS.md +3 -0
  310. package/templates/prompt-animation-channel/package.json +4 -3
  311. package/templates/prompt-animation-channel/src/main.ts +5 -3
  312. package/templates/prompt-animation-channel/src/render-plan.ts +5 -3
  313. package/templates/prompt-animation-channel/tests/look-floor.ts +270 -0
  314. package/templates/prompt-animation-channel/tests/route-health.spec.ts +12 -1
  315. package/templates/prompt-animation-channel/tests/screenshot.spec.ts +10 -4
  316. package/templates/prompt-animation-channel/tests/storyboard-playback.spec.ts +1 -1
  317. package/templates/prompt-animation-channel/vite.config.ts +7 -0
  318. package/templates/racing-starter/.claude/CLAUDE.md +3 -0
  319. package/templates/racing-starter/.github/workflows/aura3d-lookdev.yml +67 -0
  320. package/templates/racing-starter/AGENTS.md +3 -0
  321. package/templates/racing-starter/README.md +8 -6
  322. package/templates/racing-starter/package.json +4 -3
  323. package/templates/racing-starter/src/main.ts +169 -123
  324. package/templates/racing-starter/tests/geometry-certification.json +34 -0
  325. package/templates/racing-starter/tests/look-floor.ts +270 -0
  326. package/templates/racing-starter/tests/playable.spec.ts +63 -80
  327. package/templates/racing-starter/tests/route-health.spec.ts +14 -12
  328. package/templates/racing-starter/tests/screenshot.spec.ts +21 -0
  329. package/templates/racing-starter/vite.config.ts +7 -0
  330. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  331. package/templates/character-controller/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  332. package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.679d52fe.glb +0 -0
  333. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.252b3a16.glb +0 -0
  334. package/templates/fighting-game/public/aura-assets/showcaseRunnerRobot.thumb.svg +0 -1
  335. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.93872fc2.glb +0 -0
  336. package/templates/fighting-game/public/aura-assets/showcaseWalkAnimatedGirl.thumb.svg +0 -1
  337. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.3f821141.glb +0 -0
  338. package/templates/mini-game/public/aura-assets/showcaseKenneyOobiPlatformerHero.thumb.svg +0 -1
  339. package/templates/three-compat-architecture-interior/aura.assets.json +0 -7
  340. package/templates/three-compat-architecture-interior/src/aura-assets.ts +0 -3
  341. package/templates/three-compat-architecture-interior/src/main.ts +0 -27
  342. package/templates/three-compat-architecture-interior/tests/screenshot.spec.ts +0 -15
  343. package/templates/three-compat-asset-inspector/aura.assets.json +0 -7
  344. package/templates/three-compat-asset-inspector/src/aura-assets.ts +0 -3
  345. package/templates/three-compat-asset-inspector/src/main.ts +0 -17
  346. package/templates/three-compat-asset-inspector/tests/screenshot.spec.ts +0 -15
  347. package/templates/three-compat-character-viewer/aura.assets.json +0 -7
  348. package/templates/three-compat-character-viewer/src/aura-assets.ts +0 -3
  349. package/templates/three-compat-character-viewer/src/main.ts +0 -17
  350. package/templates/three-compat-character-viewer/tests/screenshot.spec.ts +0 -15
  351. package/templates/three-compat-custom-threejs-migration/aura.assets.json +0 -7
  352. package/templates/three-compat-custom-threejs-migration/src/aura-assets.ts +0 -3
  353. package/templates/three-compat-custom-threejs-migration/src/main.ts +0 -16
  354. package/templates/three-compat-custom-threejs-migration/tests/screenshot.spec.ts +0 -15
  355. package/templates/three-compat-large-scene/aura.assets.json +0 -7
  356. package/templates/three-compat-large-scene/package.json +0 -22
  357. package/templates/three-compat-large-scene/src/aura-assets.ts +0 -3
  358. package/templates/three-compat-large-scene/src/main.ts +0 -31
  359. package/templates/three-compat-large-scene/tests/route-health.spec.ts +0 -16
  360. package/templates/three-compat-large-scene/tests/screenshot.spec.ts +0 -15
  361. package/templates/three-compat-material-authoring/aura.assets.json +0 -7
  362. package/templates/three-compat-material-authoring/package.json +0 -22
  363. package/templates/three-compat-material-authoring/src/aura-assets.ts +0 -3
  364. package/templates/three-compat-material-authoring/src/main.ts +0 -33
  365. package/templates/three-compat-material-authoring/tests/route-health.spec.ts +0 -16
  366. package/templates/three-compat-material-authoring/tests/screenshot.spec.ts +0 -15
  367. package/templates/three-compat-postprocess-scene/aura.assets.json +0 -7
  368. package/templates/three-compat-postprocess-scene/package.json +0 -22
  369. package/templates/three-compat-postprocess-scene/src/aura-assets.ts +0 -3
  370. package/templates/three-compat-postprocess-scene/src/main.ts +0 -17
  371. package/templates/three-compat-postprocess-scene/tests/route-health.spec.ts +0 -16
  372. package/templates/three-compat-postprocess-scene/tests/screenshot.spec.ts +0 -15
  373. package/templates/three-compat-premium-product-viewer/aura.assets.json +0 -7
  374. package/templates/three-compat-premium-product-viewer/package.json +0 -22
  375. package/templates/three-compat-premium-product-viewer/src/aura-assets.ts +0 -3
  376. package/templates/three-compat-premium-product-viewer/src/main.ts +0 -18
  377. package/templates/three-compat-premium-product-viewer/tests/route-health.spec.ts +0 -16
  378. package/templates/three-compat-premium-product-viewer/tests/screenshot.spec.ts +0 -15
  379. /package/templates/{three-compat-architecture-interior → architecture-interior}/index.html +0 -0
  380. /package/templates/{three-compat-architecture-interior → architecture-interior}/playwright.config.ts +0 -0
  381. /package/templates/{three-compat-architecture-interior → architecture-interior}/tsconfig.json +0 -0
  382. /package/templates/{three-compat-asset-inspector → asset-inspector}/index.html +0 -0
  383. /package/templates/{three-compat-asset-inspector → asset-inspector}/playwright.config.ts +0 -0
  384. /package/templates/{three-compat-asset-inspector → asset-inspector}/tsconfig.json +0 -0
  385. /package/templates/{three-compat-character-viewer → character-viewer}/index.html +0 -0
  386. /package/templates/{three-compat-character-viewer → character-viewer}/playwright.config.ts +0 -0
  387. /package/templates/{three-compat-character-viewer → character-viewer}/tsconfig.json +0 -0
  388. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/index.html +0 -0
  389. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/playwright.config.ts +0 -0
  390. /package/templates/{three-compat-custom-threejs-migration → custom-scene}/tsconfig.json +0 -0
  391. /package/templates/{three-compat-large-scene → large-scene}/index.html +0 -0
  392. /package/templates/{three-compat-large-scene → large-scene}/playwright.config.ts +0 -0
  393. /package/templates/{three-compat-large-scene → large-scene}/tsconfig.json +0 -0
  394. /package/templates/{three-compat-material-authoring → material-authoring}/index.html +0 -0
  395. /package/templates/{three-compat-material-authoring → material-authoring}/playwright.config.ts +0 -0
  396. /package/templates/{three-compat-material-authoring → material-authoring}/tsconfig.json +0 -0
  397. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/index.html +0 -0
  398. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/playwright.config.ts +0 -0
  399. /package/templates/{three-compat-postprocess-scene → postprocess-scene}/tsconfig.json +0 -0
  400. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/index.html +0 -0
  401. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/playwright.config.ts +0 -0
  402. /package/templates/{three-compat-premium-product-viewer → premium-product-viewer}/tsconfig.json +0 -0
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: aura3d-animation-studio
3
+ description: Directs an Animation Studio episode end to end: previs, prompt-to-EpisodeDocument, cast and set binding, blocking, camera, timed dialogue, validation, and a silent render handed to AuraVoice. Use when working in the `animation-studio` template, running `aura3d animation scene <verb>` or `pnpm scene`, editing `dist/scene/working.document.json`, or producing, rendering, or publishing an animated episode.
4
+ ---
5
+
6
+ # Aura3D Animation Studio (director loop)
7
+
8
+ You are the director. There is no separate model or API key: every Scene-Tool
9
+ verb edits one `EpisodeDocument` at `dist/scene/working.document.json` through
10
+ validated scene tools and is rejected if it would break the scene. Shared rules
11
+ (claim labels, forbidden patterns, typed assets, benchmark mode) are in
12
+ [../aura3d-core/references/boundaries.md](../aura3d-core/references/boundaries.md).
13
+
14
+ ## Look target
15
+
16
+ An episode holds one look across shots: pick the look preset (usually
17
+ `golden-hour` or `night-city` for drama) before storyboard, keep the grade and
18
+ fog consistent between cuts, and light each shot's key to the same direction
19
+ so intercut frames share a single palette and mood.
20
+
21
+ ## Establish the contract
22
+
23
+ 1. Run `npx @aura3d/cli@latest --help` and confirm the `animation scene` line.
24
+ `aura3d animation scene <verb> ...` forwards to the template's `scene` npm
25
+ script (run from the `animation-studio` directory; `pnpm scene` is equivalent).
26
+ 2. Run `npx @aura3d/cli@latest animation scene show --dry-run` first: it prints
27
+ the delegated script, runner, and cwd before anything edits.
28
+ 3. Read `src/aura-assets.ts` and `aura.assets.json`. Cast and prop GLBs you
29
+ bring yourself must be typed assets first (load `aura3d-assets`).
30
+ 4. Know where rendering works. The live renderer needs the Aura3D monorepo root
31
+ (it resolves the source build and runs headless Chromium plus ffmpeg).
32
+ Authoring and `validate` work in any scaffold; `render` does not.
33
+ 5. Benchmark mode: `npm install && npm run build`, then stop. No `render`, no
34
+ gate suite, no screenshots.
35
+
36
+ ## Procedure
37
+
38
+ Previs (before any blocking):
39
+
40
+ 1. Write four one-line directions (A/B/C/D) that differ in tone, set, or
41
+ staging. Pick one and record why.
42
+ 2. Write a one-line beat sheet: one beat per planned shot, each with who acts
43
+ and what changes on screen.
44
+ 3. Lock the cast: a stable id per character (for example `worker-1`) that
45
+
46
+ Author the document:
47
+
48
+ 4. Start from the prompt. `aura3d animation scene new --prompt "..." --full`
49
+ produces a complete draft (cast, dialogue, camera, per-beat actions). Omit
50
+ `--full` for an empty-cast skeleton you populate. `new` with no prompt is an
51
+ error; there is no default scene. Clone with `new --from <doc.json>`.
52
+ 5. Bind the cast. `--full` binds the curated A-grade humanoid cast, never the
53
+ Moon Garden characters. Override a slot from the catalog or a local rig,
54
+ and adjust size:
55
+
56
+ ```sh
57
+ aura3d animation scene cast add --id worker-1 --query "office worker in a shirt"
58
+ aura3d animation scene cast add --id worker-2 --file ./assets/hero.glb
59
+ aura3d animation scene scale --character worker-2 --to 1.1
60
+ ```
61
+ 6. Pick the set. The prompt routes through `pickSetForPrompt`; override with
62
+ `set <studio|garage|office|kitchen|moon-garden|space-station|meadow>` or
63
+ `set --query "..."`. Moon Garden is never the fallback; the neutral
64
+ `studio` is. Dress it with `dress --prop <id> --at x,z`, swap a prop for a
65
+ real GLB with `prop add --id <id> --query "..."`, and use `clear-props`.
66
+ 7. Stage each beat, then add or change shots. Every character needs its own
67
+ motion per beat; a lone lip flap is not a performance.
68
+
69
+ ```sh
70
+ aura3d animation scene block --character worker-1 --shot shot-1 --to -1,0 --yaw 0.4 --clip talk
71
+ aura3d animation scene gesture --character worker-2 --shot shot-2 --clip point
72
+ aura3d animation scene camera --shot shot-3 --preset close-up
73
+ aura3d animation scene shot add --id shot-4 --preset two-shot --duration 6
74
+ ```
75
+
76
+ Camera presets are `establishing`, `two-shot`, and `close-up`.
77
+ 8. Write dialogue yourself, one line per command:
78
+ `aura3d animation scene dialogue --line l0 --speaker worker-1 --text "We ship Friday." --start 0.4`.
79
+ `--end` is optional and computed from speech duration. Remove a line with
80
+ `dialogue --remove --line <id>`. Run `retime` to re-sequence all lines
81
+ back to back. This single track is the subtitles and the AuraVoice
82
+ lip-sync contract.
83
+ 9. `show` to read the summary, `undo` to step back (50 documents of history),
84
+ then `validate`. It must print `coherence: PASS` before you render.
85
+
86
+ Render and hand off:
87
+
88
+ 10. From the monorepo template directory, preview a window, then render final
89
+ (`AURA_RENDER_STYLE=pbr` for realistic shading):
90
+
91
+ ```sh
92
+ aura3d animation scene render --range 0-12
93
+ AURA_QUALITY=final AURA_RENDER_STYLE=toon aura3d animation scene render
94
+ ```
95
+
96
+ Run final renders on a remote worker or CI where possible; they launch
97
+ Chromium and encode VP9.
98
+ 11. Outputs land in `dist/episodes/scene/`: `episode-3d.webm`, the stills
99
+ `frames/first.png`, `dialogue.png`, `action.png`, `final.png`, the
100
+ `mouth-open.png` / `mouth-closed.png` pair, skeleton-overlay strips, and
101
+ `render-live-summary.json`.
102
+ 12. The video is silent by design. Aura3D never runs TTS or muxes audio.
103
+ Confirm the summary records `audioOwnedBy: "auravoice"`, `engineTts: false`,
104
+ and non-zero dialogue line and caption cue counts. AuraVoice generates the
105
+ voice from the same dialogue track afterward.
106
+ 13. Captions: author them only as dialogue lines. Never add caption text as
107
+ scene geometry, labels, or DOM. The renderer derives burned-in captions
108
+ for the exported video from the dialogue track; the fidelity stills and
109
+ mouth pair are captured without captions.
110
+ 14. Run the gate suite against this render from the monorepo root:
111
+
112
+ ```sh
113
+ pnpm exec tsx --tsconfig tsconfig.base.json tools/animation-studio-gate-suite/index.ts \
114
+ --summary packages/create-aura3d/templates/animation-studio/dist/episodes/scene/render-live-summary.json \
115
+ --out tests/reports/animation-studio/gate-suite.json
116
+ ```
117
+
118
+ It is the AND of body-motion, lip-sync timing, subtitle timing, prompt
119
+ specificity, motion and visual quality, performance budget, readiness,
120
+ and no-fake-proof gates. Also run `pnpm scene:determinism`.
121
+ 15. Publish checklist, every item with an artifact: real route playback,
122
+ independently moving characters, visible mouth motion during dialogue,
123
+ exported captions from the dialogue track, a passing gate suite, and
124
+ review artifacts. Hand the claim label decision to
125
+ `aura3d-evidence-review`.
126
+
127
+ ## Stop and report
128
+
129
+ - `validate` fails and a scene-tool edit cannot fix it: stop and report the
130
+ errors verbatim. Do not hand-edit `working.document.json` to force a pass.
131
+ - No A-grade or catalog rig binds for a cast slot: stop and name the slot
132
+ rejected candidates. Do not substitute the Moon Garden cast, a still image,
133
+ or a primitive stand-in.
134
+ - You are outside the monorepo, or no remote worker is available, so `render`
135
+ cannot run: stop after `validate`, label the episode `prototype`, and list
136
+ the render and gate commands still owed.
137
+ - Any gate in the suite fails, or evidence is missing (the suite fails
138
+ closed): label the episode `prototype` and name the failing gate.
139
+ - Someone needs a caption-free video master: there is no render flag for it
140
+ today. Report it as a gap.
141
+ - Never present a still with CSS pan, zoom, or subtitles, a `sourceOnly: true`
142
+ plan, or an `image-puppet` route as animation. Never claim voice, TTS, or
143
+ audio from Aura3D.
144
+
145
+ ## References
146
+
147
+ - [Animation Studio guide (commands, schema, rendering)](https://github.com/auraoneai/aura3d/blob/main/docs/animation-studio/guide.md)
148
+ - [Episode production workflow](https://github.com/auraoneai/aura3d/blob/main/docs/workflows/animation-episode-production.md)
149
+ - [Quality gates and limitations](https://github.com/auraoneai/aura3d/blob/main/docs/animation-studio/quality-and-limitations.md)
150
+ - [AuraVoice bridge contract](https://github.com/auraoneai/aura3d/blob/main/docs/api/auravoice-bridge.md)
151
+ - [Scene-Tool CLI source](https://github.com/auraoneai/aura3d/blob/main/packages/create-aura3d/templates/animation-studio/scripts/animation-scene.ts)
152
+ - Rig inspection, clip maps, visemes: load `aura3d-character-animation`.
153
+ - [Episode look continuity](references/shot-looks.md)
@@ -0,0 +1,26 @@
1
+ # Episode look continuity
2
+
3
+ One look across every shot — the episode reads as a single world. Shot
4
+ differences come from framing, key placement and palette accents, never from a
5
+ different grade.
6
+
7
+ ## Shot look board
8
+
9
+ | Shot kind | Look stays | What moves | Anchor detail |
10
+ | --- | --- | --- | --- |
11
+ | establishing | same preset | wide frame, horizon + fog band visible | palette accent introduced |
12
+ | dialogue | same preset | `interior-warm`-style pools, catchlights | face lit by key, rim separates hair |
13
+ | action | same preset | `chase`/`tracking` framing | motion-blur-free but rim keeps silhouette |
14
+ | night / stealth | `night-city` only if scripted as a second look | key drops to practical sources | emissive signs carry the palette |
15
+ | climax | same preset | contrast maxes — deepest shadow, hardest key | accent hue saturates |
16
+
17
+ ## Rules that keep continuity
18
+
19
+ - `looks.preset(<id>)` once, in the shared scene assembly — never per shot
20
+ (`look/multiple-looks`).
21
+ - Fog density and grade stay constant; density jumps between cuts read as a
22
+ different world.
23
+ - Reuse the key direction across shots; flipping key side mid-dialogue is the
24
+ classic continuity break.
25
+ - The grade (`output.preset`) is fixed for the whole episode — a different
26
+ grade is a different timeline, not a different shot.
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: aura3d-art-direction
3
+ description: Sets the visual target and runs the look-dev loop for any Aura3D scene or game: genre look recipe, reference frames, look preset, capture, rubric judgement and iteration. Use when starting or finishing any scene, game, product viewer or template, or when a screenshot looks flat, dark, empty, floaty or placeholder-like.
4
+ ---
5
+
6
+ ## Look target
7
+
8
+ 1. Find the genre row in `references/look-recipes.md` (platformer, racing, fighting, arena shooter, sports/table, product, character, outdoor, interior, night city, space, underwater, cinematic).
9
+ 2. Pick 1-3 reference frames from `references/reference-frames.md`.
10
+ 3. Write a 3-line look brief: time of day, palette, mood. Keep it next to the route file.
11
+
12
+ ## Establish the contract
13
+
14
+ - Every scene gets a look. The look is the environment, key/rim light, fog, background and grade as one preset.
15
+ - Typed catalog assets for hero subjects (`model(assets.x)`), never a primitive hero.
16
+ - `looks.appOptions(id)` spreads renderer options: `quality: "auto"` and the production profile. No renderer overrides.
17
+ - Run `npx @aura3d/cli@latest --help` / `<cmd> --help` before invoking commands; read `src/aura-assets.ts` for typed asset names.
18
+
19
+ ## Procedure
20
+
21
+ 1. `scene().add(looks.preset("<id from the recipe row>"))` first, then typed assets, then gameplay/props.
22
+ 2. `createAuraApp(el, { scene, ...looks.appOptions("<id>") })`.
23
+ 3. Camera from the recipe row (rig + fov + subject frame %). The camera state is applied to the camera, not to evidence objects.
24
+ 4. Ground contact: full-strength key shadow (`shadow: true`) plus a contact detail at the subject's feet.
25
+ 5. HUD lives in DOM/CSS, never in the 3D scene. No debug overlay in shipped frames.
26
+
27
+ ## The 15 looks
28
+
29
+ | Look | Mood | Palette key |
30
+ | --- | --- | --- |
31
+ | `outdoor-day` | clean midday, saturated | greens, sky blue, warm wood |
32
+ | `golden-hour` | warm dusk drama | amber key, teal shadow |
33
+ | `overcast` | soft even exposure | muted greys, gentle fill |
34
+ | `polar-night` | cold moonlit stillness | ice blue, long shadows |
35
+ | `alpine-snow` | high-altitude glare | white field, hard rim |
36
+ | `product-studio` | neutral softbox stage | grey stage, brand accent |
37
+ | `interior-neutral` | plain interior light | warm walls, clean fill |
38
+ | `interior-warm` | cozy pools of light | wood, amber pools |
39
+ | `interior-industrial` | warehouse cool | concrete, metal, skylight shafts |
40
+ | `night-city` | neon streets | sodium pools, neon, wet reflections |
41
+ | `neon-arcade` | saturated game glow | cyan/magenta emissive |
42
+ | `arena-fight` | spotlit ring | dark crowd, hard key |
43
+ | `space` | void + single sun | graphite, hard key, rim |
44
+ | `underwater` | teal volume | caustics, biolume |
45
+ | `character-showcase` | portrait studio | 3/4 key, rim, soft stage |
46
+
47
+ ## Look-dev loop
48
+
49
+ Run until every rubric category scores >= 7, or 6 rounds, or 2 rounds with no gain:
50
+
51
+ 1. Capture: `aura3d look capture --route / --shots opening,mid,action --viewports desktop,mobile` (`--runner gh-actions` is the default where the template ships `.github/workflows/aura3d-lookdev.yml`; `--runner local` is the downstream user's choice).
52
+ 2. Judge: open each PNG and fill `look-judgement.json` against `references/quality-bar.md`; validate with `aura3d look judge --validate look-judgement.json`. Read `aura3d look lint` plus `app.diagnostics().look`.
53
+ 3. Change the single highest-leverage thing: lint codes first, then the lowest category. One change per round.
54
+ 4. Repeat. Record remaining gaps with their lint code or engine limitation — never paint over a gap with fake geometry.
55
+
56
+ Hard checklist (all must hold before claiming done):
57
+
58
+ - IBL on (environment HDRI or biome present)
59
+ - Key shadow at full strength, contact darkening at feet
60
+ - DPR >= min(devicePixelRatio, tier cap)
61
+ - Background is sky/environment, not a void (or a declared exception)
62
+ - Fog or atmosphere for depth where the genre row lists one
63
+ - Grade through the look's post preset
64
+ - Subject fills its genre frame % (see `references/look-recipes.md`)
65
+ - No pure-primary primitives as the subject
66
+ - Characters animated through the animation controller
67
+ - HUD in DOM, not in-world
68
+ - No debug overlay
69
+ - `aura3d look lint` clean of error-severity codes
70
+
71
+ ## Stop and report
72
+
73
+ - Stop after the loop exits (>= 7 everywhere, 6 rounds, or 2 flat rounds) and report the final `look-judgement.json` summary with remaining lint codes.
74
+ - Label `prototype` when the loop could not run (no capture runner available): say which step failed.
75
+ - A self-judgement is not a pass of the quality bar; only a panel round passes it. Report medians and the weakest category.
76
+
77
+ ## References
78
+
79
+ - `references/look-recipes.md` — the 13 genre rows (look, camera, key, palette, atmosphere, post, VFX, assets, reference frames)
80
+ - `references/quality-bar.md` — the 12-category rubric with observable anchors and the hard lint checks
81
+ - `references/reference-frames.md` — named three.js r185 examples plus what you should see in each
82
+ - `references/failure-gallery.md` — the failure patterns and the fix that removes each
83
+ - `../aura3d-core/references/boundaries.md` — the boundary list (read once, do not restate)
84
+ - [Framing and shots](references/framing-and-shots.md)
@@ -0,0 +1,64 @@
1
+ # Failure gallery
2
+
3
+ The recurring failure patterns (research/21) and the fix that removes each.
4
+ Match the symptom on your PNG, apply the fix, re-capture. `visualQA` name-based
5
+ heuristics may be referenced here for diagnosis only — they are deprecated and
6
+ never acceptance evidence; use `structuralQA` names when a structural check is
7
+ needed.
8
+
9
+ ## Void background
10
+
11
+ Symptom: the world ends in a flat colour; horizonless, airless.
12
+ Fix: add the look's environment (HDRI/biome) or `background`/`fog` from the
13
+ recipe row. Lint: `look/solid-void` (unless the look declares the exception).
14
+
15
+ ## Flat shading
16
+
17
+ Symptom: every surface the same brightness; no key direction.
18
+ Fix: the look's environment supplies IBL; keep key intensity at the preset
19
+ value. Lint: `look/no-ibl`, `look/no-lights`.
20
+
21
+ ## Ambient soup
22
+
23
+ Symptom: shadows grey and directionless; scene reads washed-out.
24
+ Fix: remove `lights.ambient` fill; the look's key + hemisphere/IBL supplies
25
+ fill. Lint: `look/ambient-kills-ibl`, `look/ambient-flattens`.
26
+
27
+ ## Floating objects
28
+
29
+ Symptom: props hover; no contact darkening at feet/wheels.
30
+ Fix: key `shadow: true` at full strength plus a contact detail (ground, AO).
31
+ Lint: `look/weak-shadow`.
32
+
33
+ ## Primitive soup
34
+
35
+ Symptom: hero subject is boxes/spheres/cylinders.
36
+ Fix: `model(assets.x)` from the typed catalog; `assets resolve "<genre> kit"`
37
+ when unsure. Lint: `look/primitive-subject`.
38
+
39
+ ## Fake effect primitives
40
+
41
+ Symptom: emissive planes/cards named like "wet reflection", "puddle streak",
42
+ "rain splash" faking an effect the engine should produce.
43
+ Fix: use the look's effects/post preset; model the practical (lamp, sign)
44
+ instead. Lint: `look/fake-effect-names`.
45
+
46
+ ## Debug HUD in-world
47
+
48
+ Symptom: health pips, timers or counters built from in-scene primitives, or a
49
+ debug overlay in the shipped frame.
50
+ Fix: move the HUD to DOM/CSS; strip the overlay. Lint: `look/debug-overlay`,
51
+ `hud-is-dom` rejection in the v2 prompt report.
52
+
53
+ ## Renderer overrides
54
+
55
+ Symptom: `pixelRatio`, `qualityProfile`, `safe-basic` or FXAA overrides in app
56
+ code — usually added to "fix" a soft or banded frame.
57
+ Fix: `looks.appOptions(id)` and the post preset; fix the look, not the
58
+ renderer. Lint: `look/low-dpr`, `look/double-aa`.
59
+
60
+ ## Capture-only lighting
61
+
62
+ Symptom: a `?capture=` branch that adds lights/effects only for screenshots.
63
+ Fix: the shipped path must look right under default flags; iterate the look,
64
+ not the branch. Lint: `look/capture-branch`.
@@ -0,0 +1,45 @@
1
+ # Framing and shots
2
+
3
+ How to compose the frame so the look can be judged. A great look in a bad
4
+ shot still reads as a bad scene.
5
+
6
+ ## Frame coverage
7
+
8
+ | Shot | Subject % of height | Camera | Reads |
9
+ | --- | --- | --- | --- |
10
+ | hero/product | 50–70 | `orbit` or `perspective` fov 35–45 | silhouette + material, no crop |
11
+ | environment establish | 10–20 subject | `establishing`/`dolly` fov 50 | fog band, horizon, palette sweep |
12
+ | gameplay | 15–30 | genre rig | playfield + next obstacle in view |
13
+ | character | 60–70 full body / 40 head | `follow` side-on or `orbit` | gait, rim, contact shadow |
14
+ | night scene | 20–35 | `follow` street level | sign glow, wet reflections, pools |
15
+
16
+ ## Composition rules that change the read
17
+
18
+ - Place the subject on a third line, not dead center, except for product
19
+ symmetry shots.
20
+ - Keep the horizon near the lower third in outdoors — centering it flattens
21
+ depth and starves the fog band.
22
+ - Give moving subjects look-ahead room (leading room) toward their direction.
23
+ - One accent hue per frame: the eye finds it; two accents fight.
24
+ - Fog and atmosphere only pay off at depth — an empty mid-ground shows
25
+ nothing, so stage a second layer (trees, walls, props) between subject and
26
+ horizon.
27
+ - Vignette/post grade darkens corners; keep key information out of the outer
28
+ 10% of frame.
29
+
30
+ ## Shot checklist before capture
31
+
32
+ - [ ] subject visible at opening frame, not mid-spawn or mid-fade
33
+ - [ ] `mid` shot shows the busiest expected state (particles, opponents)
34
+ - [ ] `action` shot catches motion with the rim/key still readable
35
+ - [ ] background layer is at least one atmosphere depth behind subject
36
+ - [ ] HUD (DOM) frames the composition, not overlaps the subject
37
+
38
+ ## Shot vocabulary
39
+
40
+ - `establishing`: wide, horizon in frame — palette and atmosphere carry it.
41
+ - `push-in`: slow dolly toward subject; shadow density deepens as you close.
42
+ - `tracking`: lateral follow; parallax shows depth layers + fog banding.
43
+ - `crane`: vertical reveal; fog gradient reads strongest here.
44
+ - `close-up`: material contrast + rim do all the work; fog irrelevant.
45
+ - `silhouette`: subject against the brightest part of frame — grade defines it.
@@ -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.