create-aura3d 1.1.2 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -4
  4. package/dist/index.js.map +1 -1
  5. package/package.json +10 -9
  6. package/templates/{cartoon-channel → animation-channel}/README.md +11 -11
  7. package/templates/{cartoon-studio → animation-channel}/index.html +1 -1
  8. package/templates/{cartoon-channel → animation-channel}/package.json +2 -2
  9. package/templates/{cartoon-channel → animation-channel}/src/episode.ts +22 -22
  10. package/templates/{cartoon-channel → animation-channel}/src/experimental/README.md +5 -5
  11. package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.css +3 -3
  12. package/templates/{cartoon-channel → animation-channel}/src/experimental/concept-episode-2-5d.ts +7 -7
  13. package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.css +4 -4
  14. package/templates/{cartoon-channel → animation-channel}/src/experimental/image-puppet-episode.ts +6 -6
  15. package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.css +3 -3
  16. package/templates/{cartoon-channel → animation-channel}/src/experimental/puppet-episode-2d.ts +7 -7
  17. package/templates/{cartoon-channel → animation-channel}/src/main.ts +32 -32
  18. package/templates/{cartoon-channel → animation-channel}/src/render-plan.ts +13 -13
  19. package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.css +34 -34
  20. package/templates/{cartoon-channel → animation-channel}/src/sample-episode-visual.ts +20 -20
  21. package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d-animation.spec.ts +3 -3
  22. package/templates/{cartoon-channel → animation-channel}/tests/concept-2-5d.spec.ts +6 -6
  23. package/templates/{cartoon-channel → animation-channel}/tests/image-puppet-animation.spec.ts +3 -3
  24. package/templates/{cartoon-channel → animation-channel}/tests/image-puppet.spec.ts +5 -5
  25. package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d-animation.spec.ts +3 -3
  26. package/templates/{cartoon-channel → animation-channel}/tests/puppet-2d.spec.ts +4 -4
  27. package/templates/{prompt-cartoon-channel → animation-channel}/tests/route-health.spec.ts +1 -1
  28. package/templates/{cartoon-channel → animation-channel}/tests/sample-episode-visual.spec.ts +5 -5
  29. package/templates/{cartoon-channel → animation-channel}/tests/storyboard-playback.spec.ts +7 -7
  30. package/templates/animation-studio/AGENTS.md +71 -0
  31. package/templates/{cartoon-studio → animation-studio}/ASSET-LICENSES.md +7 -7
  32. package/templates/{cartoon-studio → animation-studio}/README.md +6 -6
  33. package/templates/animation-studio/aura.assets.json +669 -0
  34. package/templates/animation-studio/dist/episodes/scene/episode-3d.webm +0 -0
  35. package/templates/animation-studio/dist/episodes/scene/frames/action.png +0 -0
  36. package/templates/animation-studio/dist/episodes/scene/frames/dialogue.png +0 -0
  37. package/templates/animation-studio/dist/episodes/scene/frames/final.png +0 -0
  38. package/templates/animation-studio/dist/episodes/scene/frames/first.png +0 -0
  39. package/templates/animation-studio/dist/episodes/scene/frames/mouth-closed.png +0 -0
  40. package/templates/animation-studio/dist/episodes/scene/frames/mouth-open.png +0 -0
  41. package/templates/animation-studio/dist/episodes/scene/render-live-summary.json +10284 -0
  42. package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-1.png +0 -0
  43. package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-2.png +0 -0
  44. package/templates/animation-studio/dist/generated/second-scene.document.json +1210 -0
  45. package/templates/animation-studio/dist/generated/studio-edited.document.json +1196 -0
  46. package/templates/animation-studio/dist/scene/inshader-accept.document.json +1 -0
  47. package/templates/animation-studio/dist/scene/inshader-test.document.json +1 -0
  48. package/templates/animation-studio/dist/scene/integ.document.json +1 -0
  49. package/templates/animation-studio/dist/scene/working.document.json +723 -0
  50. package/templates/animation-studio/dist/scene/working.history.json +1 -0
  51. package/templates/{cartoon-studio → animation-studio}/live-route.html +1 -1
  52. package/templates/{cartoon-studio → animation-studio}/package-lock.json +2 -2
  53. package/templates/animation-studio/package.json +32 -0
  54. package/templates/animation-studio/public/aura-assets/cast-a.catalog.glb +0 -0
  55. package/templates/animation-studio/public/aura-assets/cast-b.catalog.glb +0 -0
  56. package/templates/animation-studio/public/aura-assets/luma.catalog.glb +0 -0
  57. package/templates/animation-studio/public/aura-assets/luma2.catalog.glb +0 -0
  58. package/templates/animation-studio/public/aura-assets/miko.catalog.glb +0 -0
  59. package/templates/{cartoon-studio → animation-studio}/public/aura-assets/moonGarden.gltf +1 -1
  60. package/templates/animation-studio/public/aura-assets/mushroom.catalog.glb +0 -0
  61. package/templates/animation-studio/public/aura-assets/rusty.catalog.glb +0 -0
  62. package/templates/animation-studio/public/cast-library/cast-library.json +71 -0
  63. package/templates/animation-studio/public/clip-library/gesture.json +173903 -0
  64. package/templates/animation-studio/public/clip-library/idle.json +23035 -0
  65. package/templates/animation-studio/public/clip-library/manifest.json +154 -0
  66. package/templates/animation-studio/public/clip-library/nod.json +173903 -0
  67. package/templates/animation-studio/public/clip-library/point.json +69879 -0
  68. package/templates/animation-studio/public/clip-library/react.json +66084 -0
  69. package/templates/animation-studio/public/clip-library/run.json +9648 -0
  70. package/templates/animation-studio/public/clip-library/talk.json +69879 -0
  71. package/templates/animation-studio/public/clip-library/walk.json +8283 -0
  72. package/templates/animation-studio/public/hifi-cast/BrainStem.glb +0 -0
  73. package/templates/animation-studio/public/hifi-cast/CesiumMan.glb +0 -0
  74. package/templates/animation-studio/public/hifi-cast/RiggedFigure.glb +0 -0
  75. package/templates/animation-studio/public/hifi-cast/kaykit/Barbarian.glb +0 -0
  76. package/templates/animation-studio/public/hifi-cast/kaykit/Knight.glb +0 -0
  77. package/templates/animation-studio/public/hifi-cast/kaykit/Mage.glb +0 -0
  78. package/templates/animation-studio/public/hifi-cast/kaykit/Rogue.glb +0 -0
  79. package/templates/animation-studio/public/hifi-cast/kaykit/Rogue_Hooded.glb +0 -0
  80. package/templates/animation-studio/public/hifi-cast/khronos-report.json +295 -0
  81. package/templates/animation-studio/public/hifi-cast/quaternius-report.json +449 -0
  82. package/templates/animation-studio/public/hifi-cast/rpm/cesiumman.glb +0 -0
  83. package/templates/animation-studio/public/hifi-cast/rpm/fox.glb +0 -0
  84. package/templates/animation-studio/public/hifi-cast/rpm/riggedfigure.glb +0 -0
  85. package/templates/animation-studio/public/hifi-cast/rpm-report.json +301 -0
  86. package/templates/animation-studio/scripts/anim.ts +103 -0
  87. package/templates/animation-studio/scripts/animation-scene.ts +457 -0
  88. package/templates/animation-studio/scripts/asset-motion-probe.ts +450 -0
  89. package/templates/animation-studio/scripts/asset-render-probe.ts +152 -0
  90. package/templates/animation-studio/scripts/author-office-scene.ts +65 -0
  91. package/templates/animation-studio/scripts/build-cast-library.ts +97 -0
  92. package/templates/animation-studio/scripts/build-characters.ts +1543 -0
  93. package/templates/animation-studio/scripts/build-clip-library.ts +972 -0
  94. package/templates/animation-studio/scripts/clip-decision-cli.ts +51 -0
  95. package/templates/animation-studio/scripts/determinism-check.ts +48 -0
  96. package/templates/animation-studio/scripts/generate-scene.ts +95 -0
  97. package/templates/animation-studio/scripts/hifi-cast-validate.ts +572 -0
  98. package/templates/animation-studio/scripts/motion-evidence-cli.ts +150 -0
  99. package/templates/animation-studio/scripts/motion-evidence.ts +362 -0
  100. package/templates/animation-studio/scripts/preview-server.ts +52 -0
  101. package/templates/animation-studio/scripts/regen-manifest.ts +156 -0
  102. package/templates/animation-studio/scripts/render-core.ts +360 -0
  103. package/templates/animation-studio/scripts/render-live.ts +813 -0
  104. package/templates/animation-studio/scripts/render-parallel.ts +70 -0
  105. package/templates/animation-studio/scripts/render-server.ts +119 -0
  106. package/templates/animation-studio/scripts/resolve-asset.ts +669 -0
  107. package/templates/animation-studio/scripts/skeleton-overlay-cli.ts +82 -0
  108. package/templates/animation-studio/scripts/skeleton-overlay.ts +293 -0
  109. package/templates/animation-studio/scripts/studio-tools-demo.ts +45 -0
  110. package/templates/animation-studio/scripts/texture-bake.ts +297 -0
  111. package/templates/{cartoon-studio → animation-studio}/scripts/validate-characters.ts +0 -0
  112. package/templates/animation-studio/scripts/verify-extracted-overlay-cli.ts +264 -0
  113. package/templates/animation-studio/src/animation-episode-validator.ts +97 -0
  114. package/templates/animation-studio/src/animation-performance.ts +556 -0
  115. package/templates/animation-studio/src/aura-assets.ts +71 -0
  116. package/templates/animation-studio/src/character.ts +40 -0
  117. package/templates/animation-studio/src/director/compile-episode-document.ts +45 -0
  118. package/templates/animation-studio/src/director/director-heuristics.ts +697 -0
  119. package/templates/animation-studio/src/director/prompt-to-scene.ts +369 -0
  120. package/templates/animation-studio/src/empty-document.ts +77 -0
  121. package/templates/animation-studio/src/episode-document.ts +442 -0
  122. package/templates/animation-studio/src/examples/moon-garden.example.ts +183 -0
  123. package/templates/animation-studio/src/fidelity.ts +129 -0
  124. package/templates/animation-studio/src/graph.ts +14 -0
  125. package/templates/animation-studio/src/procedural-hdri.ts +243 -0
  126. package/templates/animation-studio/src/profile.ts +97 -0
  127. package/templates/animation-studio/src/render-live-route.ts +42 -0
  128. package/templates/animation-studio/src/render-modes.ts +137 -0
  129. package/templates/animation-studio/src/scene-player.ts +867 -0
  130. package/templates/animation-studio/src/set-templates.ts +361 -0
  131. package/templates/animation-studio/src/studio/episode-document-store.ts +72 -0
  132. package/templates/animation-studio/src/studio/scene-tool-registry.ts +86 -0
  133. package/templates/animation-studio/src/studio/scene-tools.ts +169 -0
  134. package/templates/animation-studio/tests/reports/animation-studio/hifi-cast-validation.json +938 -0
  135. package/templates/animation-studio/tsconfig.json +26 -0
  136. package/templates/{cartoon-studio → animation-studio}/vite.config.ts +6 -1
  137. package/templates/character-controller/README.md +33 -0
  138. package/templates/character-controller/index.html +19 -0
  139. package/templates/character-controller/package.json +23 -0
  140. package/templates/character-controller/playwright.config.ts +14 -0
  141. package/templates/character-controller/src/controller.ts +44 -0
  142. package/templates/character-controller/src/main.ts +62 -0
  143. package/templates/character-controller/tests/route-health.spec.ts +26 -0
  144. package/templates/character-controller/tests/screenshot.spec.ts +9 -0
  145. package/templates/character-controller/tsconfig.json +15 -0
  146. package/templates/cinematic-scene/package.json +1 -1
  147. package/templates/episode-builder/README.md +4 -4
  148. package/templates/episode-builder/package.json +1 -1
  149. package/templates/episode-builder/src/aura-assets.ts +1 -1
  150. package/templates/episode-builder/src/builder.ts +4 -4
  151. package/templates/episode-builder/src/episode.ts +21 -21
  152. package/templates/episode-builder/src/main.ts +20 -20
  153. package/templates/episode-builder/src/render-plan.ts +13 -13
  154. package/templates/episode-builder/tests/storyboard-playback.spec.ts +7 -7
  155. package/templates/fighting-game/package.json +1 -1
  156. package/templates/mini-game/package.json +1 -1
  157. package/templates/product-viewer/package.json +1 -1
  158. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/README.md +5 -5
  159. package/templates/{cartoon-channel → prompt-animation-channel}/index.html +1 -1
  160. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/package.json +2 -2
  161. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/aura-assets.ts +1 -1
  162. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/episode.ts +22 -22
  163. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/main.ts +28 -28
  164. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/render-plan.ts +13 -13
  165. package/templates/{cartoon-channel → prompt-animation-channel}/tests/route-health.spec.ts +1 -1
  166. package/templates/{prompt-cartoon-channel → prompt-animation-channel}/tests/storyboard-playback.spec.ts +8 -8
  167. package/templates/cartoon-studio/aura.assets.json +0 -400
  168. package/templates/cartoon-studio/package.json +0 -33
  169. package/templates/cartoon-studio/public/aura-assets/luma.authored.glb +0 -0
  170. package/templates/cartoon-studio/public/aura-assets/miko.authored.glb +0 -0
  171. package/templates/cartoon-studio/scripts/build-characters.ts +0 -738
  172. package/templates/cartoon-studio/scripts/build-dialogue-audio.ts +0 -262
  173. package/templates/cartoon-studio/scripts/episode.ts +0 -323
  174. package/templates/cartoon-studio/scripts/render-live.ts +0 -873
  175. package/templates/cartoon-studio/src/aura-assets.ts +0 -64
  176. package/templates/cartoon-studio/src/characters.ts +0 -65
  177. package/templates/cartoon-studio/src/episode-renderer.ts +0 -605
  178. package/templates/cartoon-studio/src/episode.ts +0 -306
  179. package/templates/cartoon-studio/src/main.ts +0 -400
  180. package/templates/cartoon-studio/src/render-live-route.ts +0 -913
  181. package/templates/cartoon-studio/src/render-plan.ts +0 -567
  182. package/templates/cartoon-studio/src/review.ts +0 -99
  183. package/templates/cartoon-studio/src/studio.ts +0 -101
  184. package/templates/cartoon-studio/test-results/.last-run.json +0 -4
  185. package/templates/cartoon-studio/tests/episode-render.spec.ts +0 -44
  186. package/templates/cartoon-studio/tests/motion-quality.spec.ts +0 -45
  187. package/templates/cartoon-studio/tests/route-health.spec.ts +0 -7
  188. package/templates/cartoon-studio/tests/storyboard-playback.spec.ts +0 -99
  189. package/templates/cartoon-studio/tests/visual-review.spec.ts +0 -21
  190. package/templates/cartoon-studio/tsconfig.json +0 -14
  191. package/templates/prompt-cartoon-channel/index.html +0 -13
  192. package/templates/prompt-cartoon-channel/src/sets.ts +0 -14
  193. /package/templates/{cartoon-channel → animation-channel}/aura.assets.json +0 -0
  194. /package/templates/{cartoon-channel → animation-channel}/playwright.config.ts +0 -0
  195. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.047f5e5f.glb +0 -0
  196. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/luma.thumb.svg +0 -0
  197. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.047f5e5f.glb +0 -0
  198. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/miko.thumb.svg +0 -0
  199. /package/templates/{cartoon-channel → animation-channel}/public/aura-assets/moon-garden-feature-frame.png +0 -0
  200. /package/templates/{cartoon-channel → animation-channel}/src/aura-assets.ts +0 -0
  201. /package/templates/{cartoon-channel → animation-channel}/src/characters.ts +0 -0
  202. /package/templates/{cartoon-channel → animation-channel}/src/contract.ts +0 -0
  203. /package/templates/{cartoon-channel → animation-channel}/src/sets.ts +0 -0
  204. /package/templates/{cartoon-channel → animation-channel}/test-results/.last-run.json +0 -0
  205. /package/templates/{cartoon-channel → animation-channel}/tests/reports/prompt-animation/cartoon-sample-episode.png +0 -0
  206. /package/templates/{cartoon-channel → animation-channel}/tsconfig.json +0 -0
  207. /package/templates/{cartoon-studio → animation-studio}/playwright.config.ts +0 -0
  208. /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/luma.thumb.svg +0 -0
  209. /package/templates/{cartoon-studio → animation-studio}/public/aura-assets/miko.thumb.svg +0 -0
  210. /package/templates/{cartoon-studio → animation-studio}/src/contract.ts +0 -0
  211. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/playwright.config.ts +0 -0
  212. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/characters.ts +0 -0
  213. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/src/contract.ts +0 -0
  214. /package/templates/{cartoon-studio → prompt-animation-channel}/src/sets.ts +0 -0
  215. /package/templates/{prompt-cartoon-channel → prompt-animation-channel}/tsconfig.json +0 -0
@@ -5,14 +5,14 @@ test("episode builder storyboard caption renders", async ({ page }) => {
5
5
  await expect(page.getByText(/Aura3D episode builder|moon|robot/i)).toBeVisible();
6
6
  });
7
7
 
8
- test("storyboard playback, character performance, caption timing, cuts, and nonblank cartoon frames are sourced", async ({
8
+ test("storyboard playback, character performance, caption timing, cuts, and nonblank animation frames are sourced", async ({
9
9
  page
10
10
  }) => {
11
11
  await page.goto("/");
12
12
 
13
13
  const routeProof = (await page.evaluate(() => {
14
14
  const template = (window as unknown as {
15
- __AURA3D_CARTOON_TEMPLATE__?: {
15
+ __AURA3D_ANIMATION_TEMPLATE__?: {
16
16
  shotIds: readonly string[];
17
17
  captionIds: readonly string[];
18
18
  storyBible?: unknown;
@@ -20,7 +20,7 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
20
20
  playbackProbeSamples: readonly unknown[];
21
21
  sampleAt(time: number): unknown;
22
22
  };
23
- }).__AURA3D_CARTOON_TEMPLATE__;
23
+ }).__AURA3D_ANIMATION_TEMPLATE__;
24
24
  return {
25
25
  shotIds: template?.shotIds ?? [],
26
26
  captionIds: template?.captionIds ?? [],
@@ -28,8 +28,8 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
28
28
  builder: template?.builder,
29
29
  samples: [1, 21, 43].map((time) => template?.sampleAt(time)),
30
30
  playbackProbeSamples: template?.playbackProbeSamples ?? [],
31
- bodyShotCount: document.body.dataset.cartoonShotCount,
32
- bodyCaptionCount: document.body.dataset.cartoonCaptionCount,
31
+ bodyShotCount: document.body.dataset.animationShotCount,
32
+ bodyCaptionCount: document.body.dataset.animationCaptionCount,
33
33
  bodyFormats: document.body.dataset.episodeBuilderFormats
34
34
  };
35
35
  })) as {
@@ -73,7 +73,7 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
73
73
  expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "miko")).toBe(true);
74
74
  expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "luma")).toBe(true);
75
75
  expect(routeProof.storyBible?.props?.length).toBeGreaterThanOrEqual(3);
76
- expect(routeProof.storyBible?.styleGuide?.visualStyle).toMatch(/cartoon/i);
76
+ expect(routeProof.storyBible?.styleGuide?.visualStyle).toMatch(/animation/i);
77
77
  expect(routeProof.storyBible?.shotList).toHaveLength(3);
78
78
  expect(routeProof.playbackProbeSamples).toHaveLength(3);
79
79
  expect(routeProof.bodyShotCount).toBe("3");
@@ -89,7 +89,7 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
89
89
  expect(routeProof.builder?.compiledEpisode?.shotCount).toBe(3);
90
90
  expect(routeProof.builder?.compiledEpisode?.captionCount).toBe(6);
91
91
  expect(routeProof.builder?.compiledEpisode?.renderQueueItems).toBeGreaterThan(0);
92
- expect(routeProof.builder?.typedAssets?.commands?.some((command) => command.includes("assets validate-cartoon"))).toBe(true);
92
+ expect(routeProof.builder?.typedAssets?.commands?.some((command) => command.includes("assets validate-animation"))).toBe(true);
93
93
  expect(routeProof.bodyFormats).toBe("short-form,standard,series-pilot,educational,music-video");
94
94
  await expect(page.locator("#episode-builder-panel")).toBeVisible();
95
95
 
@@ -11,7 +11,7 @@
11
11
  "test": "playwright test tests/route-health.spec.ts tests/gameplay-smoke.spec.ts --workers=1"
12
12
  },
13
13
  "dependencies": {
14
- "@aura3d/engine": "1.1.0"
14
+ "@aura3d/engine": "1.3.1"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@playwright/test": "^1.52.0",
@@ -11,7 +11,7 @@
11
11
  "test": "playwright test tests/route-health.spec.ts tests/screenshot.spec.ts --workers=1"
12
12
  },
13
13
  "dependencies": {
14
- "@aura3d/engine": "1.1.0"
14
+ "@aura3d/engine": "1.3.1"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@playwright/test": "^1.52.0",
@@ -11,7 +11,7 @@
11
11
  "test": "playwright test tests/route-health.spec.ts tests/screenshot.spec.ts --workers=1"
12
12
  },
13
13
  "dependencies": {
14
- "@aura3d/engine": "1.1.0"
14
+ "@aura3d/engine": "1.3.1"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@playwright/test": "^1.52.0",
@@ -1,7 +1,7 @@
1
- # Aura3D Cartoon Channel Template
1
+ # Aura3D Animation Channel Template
2
2
 
3
- > **Status: example / experimental.** The flagship cartoon pipeline is the
4
- > [`cartoon-studio`](../cartoon-studio) template. This template is a
3
+ > **Status: example / experimental.** The flagship animation pipeline is the
4
+ > [`animation-studio`](../animation-studio) template. This template is a
5
5
  > contract/example only.
6
6
 
7
7
  This template demonstrates the AuraVoice-to-Aura3D prompt-animation contract.
@@ -23,7 +23,7 @@ Replace primitive characters with typed GLB assets by running:
23
23
  ```bash
24
24
  npx @aura3d/cli@latest assets add ./assets/miko.glb --name miko
25
25
  npx @aura3d/cli@latest assets add ./assets/luma.glb --name luma
26
- npx @aura3d/cli@latest assets validate-cartoon
26
+ npx @aura3d/cli@latest assets validate-animation
27
27
  ```
28
28
 
29
29
  Then import `assets.miko` and `assets.luma` from `src/aura-assets.ts` and pass them to `model(assets.miko)` and `model(assets.luma)`.
@@ -41,6 +41,6 @@ Do not replace this with a string asset id or a raw loader.
41
41
 
42
42
  This scaffold intentionally does not claim publish readiness from source alone.
43
43
  Before closing build, route, asset, screenshot, render, or visual-quality gates,
44
- archive the matching `npm run build`, `assets validate-cartoon`, browser
44
+ archive the matching `npm run build`, `assets validate-animation`, browser
45
45
  evidence, screenshot hashes, render outputs, and human or automated review
46
46
  artifacts.
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Aura3D Cartoon Channel</title>
6
+ <title>Aura3D Animation Channel</title>
7
7
  </head>
8
8
  <body>
9
9
  <div id="app"></div>
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "aura3d-cartoon-channel",
2
+ "name": "aura3d-animation-channel",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "test": "playwright test tests/route-health.spec.ts tests/storyboard-playback.spec.ts --workers=1"
12
12
  },
13
13
  "dependencies": {
14
- "@aura3d/engine": "1.1.0"
14
+ "@aura3d/engine": "1.3.1"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@playwright/test": "^1.52.0",
@@ -9,6 +9,6 @@ export const assets = defineAuraAssets({
9
9
  *
10
10
  * npx @aura3d/cli@latest assets add ./assets/miko.glb --name miko
11
11
  * npx @aura3d/cli@latest assets add ./assets/luma.glb --name luma
12
- * npx @aura3d/cli@latest assets validate-cartoon
12
+ * npx @aura3d/cli@latest assets validate-animation
13
13
  */
14
14
  });
@@ -4,37 +4,37 @@ import { AURAVOICE_AURA3D_PROMPT_ANIMATION_CONTRACT_ID } from "./contract";
4
4
 
5
5
  export const episodeContractId = AURAVOICE_AURA3D_PROMPT_ANIMATION_CONTRACT_ID;
6
6
 
7
- export type CartoonAssetKey = "miko" | "luma" | "glowBroom" | "glowStones" | "moonLilies";
7
+ export type AnimationAssetKey = "miko" | "luma" | "glowBroom" | "glowStones" | "moonLilies";
8
8
 
9
- type TypedCartoonAssets = Partial<Record<CartoonAssetKey, AuraAssetRef<"model">>>;
9
+ type TypedAnimationAssets = Partial<Record<AnimationAssetKey, AuraAssetRef<"model">>>;
10
10
 
11
- const typedCartoonAssets = assets as TypedCartoonAssets;
11
+ const typedAnimationAssets = assets as TypedAnimationAssets;
12
12
 
13
- export const requiredCartoonCharacterAssets = ["miko", "luma"] as const;
14
- export const optionalCartoonPropAssets = ["glowBroom", "glowStones", "moonLilies"] as const;
15
- export const publicCartoonAssetInstructions = [
13
+ export const requiredAnimationCharacterAssets = ["miko", "luma"] as const;
14
+ export const optionalAnimationPropAssets = ["glowBroom", "glowStones", "moonLilies"] as const;
15
+ export const publicAnimationAssetInstructions = [
16
16
  "npx @aura3d/cli@latest assets add ./assets/miko.glb --name miko",
17
17
  "npx @aura3d/cli@latest assets add ./assets/luma.glb --name luma",
18
- "npx @aura3d/cli@latest assets validate-cartoon"
18
+ "npx @aura3d/cli@latest assets validate-animation"
19
19
  ] as const;
20
20
 
21
- export const missingCartoonCharacterAssets = requiredCartoonCharacterAssets.filter((key) => !typedCartoonAssets[key]);
22
- export const typedCartoonAssetSummary = {
23
- requiredCharacterAssets: requiredCartoonCharacterAssets,
24
- optionalPropAssets: optionalCartoonPropAssets,
25
- typedCharacterAssetCount: requiredCartoonCharacterAssets.length - missingCartoonCharacterAssets.length,
26
- missingCharacterAssets: missingCartoonCharacterAssets
21
+ export const missingAnimationCharacterAssets = requiredAnimationCharacterAssets.filter((key) => !typedAnimationAssets[key]);
22
+ export const typedAnimationAssetSummary = {
23
+ requiredCharacterAssets: requiredAnimationCharacterAssets,
24
+ optionalPropAssets: optionalAnimationPropAssets,
25
+ typedCharacterAssetCount: requiredAnimationCharacterAssets.length - missingAnimationCharacterAssets.length,
26
+ missingCharacterAssets: missingAnimationCharacterAssets
27
27
  } as const;
28
28
 
29
- function typedAsset(key: CartoonAssetKey): AuraAssetRef<"model"> | undefined {
30
- return typedCartoonAssets[key];
29
+ function typedAsset(key: AnimationAssetKey): AuraAssetRef<"model"> | undefined {
30
+ return typedAnimationAssets[key];
31
31
  }
32
32
 
33
33
  export const youtubeDraftMetadata = {
34
34
  contractId: episodeContractId,
35
- title: "Moon Garden Cleanup | Aura3D Cartoon Channel",
35
+ title: "Moon Garden Cleanup | Aura3D Animation Channel",
36
36
  description: "Two tiny robots clean a glowing moon garden with soft captions and reduced-flash visuals.",
37
- tags: ["Aura3D", "kids cartoon", "moon garden", "robots"],
37
+ tags: ["Aura3D", "kids animation", "moon garden", "robots"],
38
38
  madeForKids: true,
39
39
  thumbnailCaptureTime: 10,
40
40
  defaultLanguage: "en",
@@ -77,15 +77,15 @@ export const episodeSampleDescription = {
77
77
  shotCount: 3,
78
78
  speakingCharacters: ["miko", "luma"],
79
79
  captionSource: "captions are derived one-to-one from the AuraVoice dialogue track",
80
- performanceSource: "body, facial, gesture, blocking, and gaze cues are generated from the cartoon director",
80
+ performanceSource: "body, facial, gesture, blocking, and gaze cues are generated from the animation director",
81
81
  musicAmbience: ["music:moon-garden-lullaby", "ambience:moon-garden-night"],
82
82
  sfxCue: "sfx:glow-stone-chime",
83
83
  thumbnailCaptureTime: youtubeDraftMetadata.thumbnailCaptureTime,
84
84
  thumbnailSource: "same Aura3D scene state and AuraVoice timestamp as the render queue capture",
85
85
  typedAssetSource: "./src/aura-assets",
86
- requiredTypedAssets: requiredCartoonCharacterAssets,
87
- missingTypedAssets: missingCartoonCharacterAssets,
88
- assetCommands: publicCartoonAssetInstructions,
86
+ requiredTypedAssets: requiredAnimationCharacterAssets,
87
+ missingTypedAssets: missingAnimationCharacterAssets,
88
+ assetCommands: publicAnimationAssetInstructions,
89
89
  reviewPackageRequiredPaths: ["video", "captions", "thumbnail", "timeline", "audio-stems", "evidence-json", "youtube-draft-metadata"],
90
90
  accessibilityProof: ["captions", "reduced motion", "high contrast"]
91
91
  } as const;
@@ -167,7 +167,7 @@ export const episode = compilePromptEpisodePlan({
167
167
  }
168
168
  ],
169
169
  styleGuide: {
170
- visualStyle: "rounded bedtime sci-fi cartoon with toy-like robot silhouettes",
170
+ visualStyle: "rounded bedtime sci-fi animation with toy-like robot silhouettes",
171
171
  palette: ["#081b2a", "#7de2ff", "#ffe18e", "#40ffbf", "#f8fff2"],
172
172
  shapeLanguage: "circles, capsules, crescent props, and chunky moon-garden forms",
173
173
  lighting: "soft blue night key, warm prop glows, no hard flashes",
@@ -19,11 +19,11 @@ import { assets } from "./aura-assets";
19
19
  import {
20
20
  episode,
21
21
  episodeContractId,
22
- missingCartoonCharacterAssets,
23
- publicCartoonAssetInstructions,
24
- requiredCartoonCharacterAssets,
25
- typedCartoonAssetSummary,
26
- type CartoonAssetKey
22
+ missingAnimationCharacterAssets,
23
+ publicAnimationAssetInstructions,
24
+ requiredAnimationCharacterAssets,
25
+ typedAnimationAssetSummary,
26
+ type AnimationAssetKey
27
27
  } from "./episode";
28
28
  import {
29
29
  accessibilityProofMetadata,
@@ -47,7 +47,7 @@ import {
47
47
 
48
48
  declare global {
49
49
  interface Window {
50
- __AURA3D_CARTOON_TEMPLATE__?: {
50
+ __AURA3D_ANIMATION_TEMPLATE__?: {
51
51
  readonly contractId: string;
52
52
  readonly template: string;
53
53
  readonly storyBible: unknown;
@@ -75,11 +75,11 @@ const firstCaption = episode.captionTrack.cues[0];
75
75
  const thumbnailCapture = renderOutputPackage.thumbnailCapture;
76
76
  const thumbnailCaption = captionCueAtTime(episode.captionTrack, thumbnailCapture.time);
77
77
  const storyBible = episode.storyBible;
78
- const typedCartoonAssets = assets as Partial<Record<CartoonAssetKey, AuraAssetRef<"model">>>;
78
+ const typedAnimationAssets = assets as Partial<Record<AnimationAssetKey, AuraAssetRef<"model">>>;
79
79
 
80
80
  const captionOverlay = document.createElement("div");
81
81
  captionOverlay.id = "caption-overlay";
82
- captionOverlay.textContent = firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D cartoon channel";
82
+ captionOverlay.textContent = firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D animation channel";
83
83
  captionOverlay.style.cssText = [
84
84
  "position:fixed",
85
85
  "left:50%",
@@ -111,12 +111,12 @@ const shotPlaybackPlan = createShotPlaybackPlan({
111
111
  });
112
112
 
113
113
  const playbackProbeTimes = [1, 21, 43] as const;
114
- const playbackProbeSamples = playbackProbeTimes.map((time) => sampleCartoonRouteAt(time));
114
+ const playbackProbeSamples = playbackProbeTimes.map((time) => sampleAnimationRouteAt(time));
115
115
  captionOverlay.dataset.shotId = playbackProbeSamples[0]?.shotId ?? "";
116
116
  captionOverlay.dataset.captionId = playbackProbeSamples[0]?.captionId ?? firstCaption?.captionId ?? "";
117
- document.body.dataset.cartoonShotCount = String(episode.shotTimeline.shots.length);
118
- document.body.dataset.cartoonCaptionCount = String(episode.captionTrack.cues.length);
119
- document.body.dataset.cartoonStoryBibleProps = String(storyBible.props.length);
117
+ document.body.dataset.animationShotCount = String(episode.shotTimeline.shots.length);
118
+ document.body.dataset.animationCaptionCount = String(episode.captionTrack.cues.length);
119
+ document.body.dataset.animationStoryBibleProps = String(storyBible.props.length);
120
120
 
121
121
  const app = createAuraApp("#app", {
122
122
  scene: scene()
@@ -143,14 +143,14 @@ const app = createAuraApp("#app", {
143
143
  .position(-0.38, 0.2, 0.18)
144
144
  .scale([0.12, 0.24, 0.04])
145
145
  )
146
- .add(labels.hud({ text: firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D cartoon channel", position: "bottom-center" }))
146
+ .add(labels.hud({ text: firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D animation channel", position: "bottom-center" }))
147
147
  .add(lights.studio({ intensity: 1.2 }))
148
148
  .add(effects.bloom({ intensity: 0.18, color: "#7de2ff" }))
149
149
  .camera(camera.perspective({ position: [0, 1.4, 4.2], target: [0, 0.7, 0], fov: 42 })),
150
150
  diagnostics: true,
151
151
  metadata: {
152
152
  contractId: episodeContractId,
153
- template: "prompt-cartoon-channel",
153
+ template: "prompt-animation-channel",
154
154
  runtimePlayback: "app.onFrame updates runtime nodes; createAuraApp is called once",
155
155
  renderQueueItems: renderPlan.items.length,
156
156
  renderPackageId: renderOutputPackage.packageId,
@@ -170,10 +170,10 @@ const app = createAuraApp("#app", {
170
170
  thumbnailCaptionId: thumbnailCaption?.captionId,
171
171
  deterministicCaptureItems: renderPlan.items.filter((item) => item.sourceSceneState).length,
172
172
  deterministicScreenshotFixtures,
173
- typedAssets: typedCartoonAssetSummary,
174
- requiredTypedAssets: requiredCartoonCharacterAssets,
175
- missingTypedAssets: missingCartoonCharacterAssets,
176
- assetCommands: publicCartoonAssetInstructions,
173
+ typedAssets: typedAnimationAssetSummary,
174
+ requiredTypedAssets: requiredAnimationCharacterAssets,
175
+ missingTypedAssets: missingAnimationCharacterAssets,
176
+ assetCommands: publicAnimationAssetInstructions,
177
177
  bridgeIssueCount: bridgeIssues.length,
178
178
  bridgeSampleAtThumbnail: {
179
179
  time: bridgeSampleAtThumbnail.time,
@@ -212,19 +212,19 @@ const app = createAuraApp("#app", {
212
212
  }
213
213
  });
214
214
 
215
- window.__AURA3D_CARTOON_TEMPLATE__ = {
215
+ window.__AURA3D_ANIMATION_TEMPLATE__ = {
216
216
  contractId: episodeContractId,
217
- template: "prompt-cartoon-channel",
217
+ template: "prompt-animation-channel",
218
218
  storyBible,
219
219
  shotIds: episode.shotTimeline.shots.map((shot) => shot.shotId),
220
220
  captionIds: episode.captionTrack.cues.map((caption) => caption.captionId),
221
221
  playbackProbeTimes,
222
222
  playbackProbeSamples,
223
223
  renderQueueItems: renderPlan.items.length,
224
- typedAssets: typedCartoonAssetSummary,
225
- requiredTypedAssets: requiredCartoonCharacterAssets,
226
- missingTypedAssets: missingCartoonCharacterAssets,
227
- assetCommands: publicCartoonAssetInstructions,
224
+ typedAssets: typedAnimationAssetSummary,
225
+ requiredTypedAssets: requiredAnimationCharacterAssets,
226
+ missingTypedAssets: missingAnimationCharacterAssets,
227
+ assetCommands: publicAnimationAssetInstructions,
228
228
  bridgeIssues,
229
229
  promptAnimationEvidence,
230
230
  publishReadiness,
@@ -235,7 +235,7 @@ window.__AURA3D_CARTOON_TEMPLATE__ = {
235
235
  },
236
236
  sampleRenderSourceWorkflow,
237
237
  sampleAt(time: number) {
238
- return sampleCartoonRouteAt(time);
238
+ return sampleAnimationRouteAt(time);
239
239
  }
240
240
  };
241
241
 
@@ -254,13 +254,13 @@ installShotPlayback(app, shotPlaybackPlan, {
254
254
  function createCharacterBody(
255
255
  id: "miko" | "luma",
256
256
  name: string,
257
- assetKey: CartoonAssetKey,
257
+ assetKey: AnimationAssetKey,
258
258
  position: readonly [number, number, number],
259
259
  fallbackScale: readonly [number, number, number],
260
260
  modelScale: number,
261
261
  color: string
262
262
  ) {
263
- const asset = typedCartoonAssets[assetKey];
263
+ const asset = typedAnimationAssets[assetKey];
264
264
  const runtime = game.runtimeNode(id, { tags: ["character", id, asset ? "typed-asset" : "primitive-fallback"] });
265
265
  if (asset) {
266
266
  return model(asset, { name: `${name} typed character asset` })
@@ -289,7 +289,7 @@ function createMouthCard(id: "miko:mouth" | "luma:mouth", name: string, position
289
289
  .runtime(game.runtimeNode(id, { tags: ["mouth", "primitive", name.toLowerCase()] }));
290
290
  }
291
291
 
292
- function sampleCartoonRouteAt(time: number) {
292
+ function sampleAnimationRouteAt(time: number) {
293
293
  const bridgeSample = sampleAuraVoiceBridgeAtTime(auraVoicePackage, time);
294
294
  const caption = captionCueAtTime(episode.captionTrack, time);
295
295
  const speakingCharacterId = bridgeSample.dialogue?.speakerId;
@@ -5,8 +5,8 @@ import {
5
5
  createAuraVoiceVisemeTrack,
6
6
  createCaptionTimingProof,
7
7
  createGlbBlendshapeVisemeCue,
8
- createCartoonPerformanceCoverage,
9
- createCartoonRenderOutputPackageMetadata,
8
+ createAnimationPerformanceCoverage,
9
+ createAnimationRenderOutputPackageMetadata,
10
10
  createPrimitiveMouthVisemeCues,
11
11
  createPromptAnimationDeterministicScreenshotFixtureMetadata,
12
12
  evaluatePromptAnimationPublishReadiness,
@@ -21,10 +21,10 @@ import {
21
21
  episode,
22
22
  episodeAudioCues,
23
23
  episodeContractId,
24
- missingCartoonCharacterAssets,
25
- publicCartoonAssetInstructions,
26
- requiredCartoonCharacterAssets,
27
- typedCartoonAssetSummary,
24
+ missingAnimationCharacterAssets,
25
+ publicAnimationAssetInstructions,
26
+ requiredAnimationCharacterAssets,
27
+ typedAnimationAssetSummary,
28
28
  youtubeDraftMetadata
29
29
  } from "./episode";
30
30
 
@@ -34,7 +34,7 @@ export const renderContractId = episodeContractId;
34
34
 
35
35
  export const renderPlan = episode.renderQueue;
36
36
 
37
- export const renderOutputPackage = createCartoonRenderOutputPackageMetadata({
37
+ export const renderOutputPackage = createAnimationRenderOutputPackageMetadata({
38
38
  episodePlan: episode.episodePlan,
39
39
  shotTimeline: episode.shotTimeline,
40
40
  renderQueue: renderPlan,
@@ -255,7 +255,7 @@ export const phonemeVisemeDubSyncSourceProof = {
255
255
  executionBoundary: "Source harness only; actual phoneme, viseme, and dub playback proof requires rendered frame/video evidence."
256
256
  } as const;
257
257
 
258
- export const performanceCoverage = createCartoonPerformanceCoverage(episode.performance, episode.dialogueTrack);
258
+ export const performanceCoverage = createAnimationPerformanceCoverage(episode.performance, episode.dialogueTrack);
259
259
 
260
260
  export const reviewPackagePaths = renderOutputPackage.reviewPackagePaths;
261
261
 
@@ -283,10 +283,10 @@ export const sampleRenderSourceWorkflow = {
283
283
  resolution: episode.episodePlan.runtime.resolution,
284
284
  shotCount: episode.shotTimeline.shots.length,
285
285
  speakingCharacterIds: Array.from(new Set(episode.dialogueTrack.lines.map((line) => line.speakerId))),
286
- requiredTypedAssets: requiredCartoonCharacterAssets,
287
- typedAssetSummary: typedCartoonAssetSummary,
288
- missingTypedCharacterAssets: missingCartoonCharacterAssets,
289
- assetCommands: publicCartoonAssetInstructions,
286
+ requiredTypedAssets: requiredAnimationCharacterAssets,
287
+ typedAssetSummary: typedAnimationAssetSummary,
288
+ missingTypedCharacterAssets: missingAnimationCharacterAssets,
289
+ assetCommands: publicAnimationAssetInstructions,
290
290
  audioStemRoles: audioStemManifest.stems.map((stem) => stem.role),
291
291
  requiresNoManualTimingEdits: true,
292
292
  doesNotClaimRenderedArtifacts: true,
@@ -357,7 +357,7 @@ export const sampleRenderSourceWorkflow = {
357
357
  "Fresh scaffold npm run build output",
358
358
  "Browser route health and storyboard playback output",
359
359
  "Typed character GLBs added through src/aura-assets.ts",
360
- "npx @aura3d/cli@latest assets validate-cartoon output",
360
+ "npx @aura3d/cli@latest assets validate-animation output",
361
361
  "Actual 60-second MP4/WebM render artifact",
362
362
  "Actual thumbnail artifact captured from the same Aura3D scene state",
363
363
  "Actual captions/timeline/audio-stems/evidence JSON files with hashes",
@@ -1,6 +1,6 @@
1
1
  import { expect, test } from "@playwright/test";
2
2
 
3
- test("cartoon channel route loads", async ({ page }) => {
3
+ test("animation channel route loads", async ({ page }) => {
4
4
  await page.goto("/");
5
5
  await expect(page.locator("#app")).toBeVisible();
6
6
  });
@@ -1,33 +1,33 @@
1
1
  import { expect, test } from "@playwright/test";
2
2
 
3
- test("cartoon channel storyboard caption renders", async ({ page }) => {
3
+ test("animation channel storyboard caption renders", async ({ page }) => {
4
4
  await page.goto("/");
5
- await expect(page.getByText(/Aura3D cartoon channel|moon|robot/i)).toBeVisible();
5
+ await expect(page.getByText(/Aura3D animation channel|moon|robot/i)).toBeVisible();
6
6
  });
7
7
 
8
- test("storyboard playback, character performance, caption timing, cuts, and nonblank cartoon frames are sourced", async ({
8
+ test("storyboard playback, character performance, caption timing, cuts, and nonblank animation frames are sourced", async ({
9
9
  page
10
10
  }) => {
11
11
  await page.goto("/");
12
12
 
13
13
  const routeProof = (await page.evaluate(() => {
14
14
  const template = (window as unknown as {
15
- __AURA3D_CARTOON_TEMPLATE__?: {
15
+ __AURA3D_ANIMATION_TEMPLATE__?: {
16
16
  shotIds: readonly string[];
17
17
  captionIds: readonly string[];
18
18
  storyBible?: unknown;
19
19
  playbackProbeSamples: readonly unknown[];
20
20
  sampleAt(time: number): unknown;
21
21
  };
22
- }).__AURA3D_CARTOON_TEMPLATE__;
22
+ }).__AURA3D_ANIMATION_TEMPLATE__;
23
23
  return {
24
24
  shotIds: template?.shotIds ?? [],
25
25
  captionIds: template?.captionIds ?? [],
26
26
  storyBible: template?.storyBible,
27
27
  samples: [1, 21, 43].map((time) => template?.sampleAt(time)),
28
28
  playbackProbeSamples: template?.playbackProbeSamples ?? [],
29
- bodyShotCount: document.body.dataset.cartoonShotCount,
30
- bodyCaptionCount: document.body.dataset.cartoonCaptionCount
29
+ bodyShotCount: document.body.dataset.animationShotCount,
30
+ bodyCaptionCount: document.body.dataset.animationCaptionCount
31
31
  };
32
32
  })) as {
33
33
  shotIds: string[];
@@ -63,7 +63,7 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
63
63
  expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "miko")).toBe(true);
64
64
  expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "luma")).toBe(true);
65
65
  expect(routeProof.storyBible?.props?.length).toBeGreaterThanOrEqual(3);
66
- expect(routeProof.storyBible?.styleGuide?.visualStyle).toMatch(/cartoon/i);
66
+ expect(routeProof.storyBible?.styleGuide?.visualStyle).toMatch(/animation/i);
67
67
  expect(routeProof.storyBible?.shotList).toHaveLength(3);
68
68
  expect(routeProof.playbackProbeSamples).toHaveLength(3);
69
69
  expect(routeProof.bodyShotCount).toBe("3");