create-aura3d 1.1.2 → 1.3.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 (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 +5 -3
  4. package/dist/index.js.map +1 -1
  5. package/package.json +11 -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
@@ -21,11 +21,11 @@ import { assets } from "./aura-assets";
21
21
  import {
22
22
  episode,
23
23
  episodeContractId,
24
- missingCartoonCharacterAssets,
25
- publicCartoonAssetInstructions,
26
- requiredCartoonCharacterAssets,
27
- typedCartoonAssetSummary,
28
- type CartoonAssetKey
24
+ missingAnimationCharacterAssets,
25
+ publicAnimationAssetInstructions,
26
+ requiredAnimationCharacterAssets,
27
+ typedAnimationAssetSummary,
28
+ type AnimationAssetKey
29
29
  } from "./episode";
30
30
  import {
31
31
  accessibilityProofMetadata,
@@ -50,7 +50,7 @@ import { installSampleEpisodeVisual } from "./sample-episode-visual";
50
50
 
51
51
  declare global {
52
52
  interface Window {
53
- __AURA3D_CARTOON_TEMPLATE__?: {
53
+ __AURA3D_ANIMATION_TEMPLATE__?: {
54
54
  readonly contractId: string;
55
55
  readonly template: string;
56
56
  readonly storyBible: unknown;
@@ -82,11 +82,11 @@ const firstCaption = episode.captionTrack.cues[0];
82
82
  const thumbnailCapture = renderOutputPackage.thumbnailCapture;
83
83
  const thumbnailCaption = captionCueAtTime(episode.captionTrack, thumbnailCapture.time);
84
84
  const storyBible = episode.storyBible;
85
- const typedCartoonAssets = assets as Partial<Record<CartoonAssetKey, AuraAssetRef<"model">>>;
85
+ const typedAnimationAssets = assets as Partial<Record<AnimationAssetKey, AuraAssetRef<"model">>>;
86
86
 
87
87
  const captionOverlay = document.createElement("div");
88
88
  captionOverlay.id = "caption-overlay";
89
- captionOverlay.textContent = firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D cartoon channel";
89
+ captionOverlay.textContent = firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D animation channel";
90
90
  captionOverlay.style.cssText = [
91
91
  "position:fixed",
92
92
  "left:50%",
@@ -118,24 +118,24 @@ const shotPlaybackPlan = createShotPlaybackPlan({
118
118
  });
119
119
 
120
120
  const playbackProbeTimes = [1, 21, 43] as const;
121
- const playbackProbeSamples = playbackProbeTimes.map((time) => sampleCartoonRouteAt(time));
121
+ const playbackProbeSamples = playbackProbeTimes.map((time) => sampleAnimationRouteAt(time));
122
122
  captionOverlay.dataset.shotId = playbackProbeSamples[0]?.shotId ?? "";
123
123
  captionOverlay.dataset.captionId = playbackProbeSamples[0]?.captionId ?? firstCaption?.captionId ?? "";
124
- document.body.dataset.cartoonShotCount = String(episode.shotTimeline.shots.length);
125
- document.body.dataset.cartoonCaptionCount = String(episode.captionTrack.cues.length);
126
- document.body.dataset.cartoonStoryBibleProps = String(storyBible.props.length);
127
- document.body.dataset.cartoonReleaseFacingView = "sample-episode-visual";
128
- document.body.dataset.cartoonRejectedViews = "concept-2-5d,puppet-2d,image-puppet";
124
+ document.body.dataset.animationShotCount = String(episode.shotTimeline.shots.length);
125
+ document.body.dataset.animationCaptionCount = String(episode.captionTrack.cues.length);
126
+ document.body.dataset.animationStoryBibleProps = String(storyBible.props.length);
127
+ document.body.dataset.animationReleaseFacingView = "sample-episode-visual";
128
+ document.body.dataset.animationRejectedViews = "concept-2-5d,puppet-2d,image-puppet";
129
129
  installSampleEpisodeVisual({
130
- sampleAt: sampleCartoonRouteAt,
130
+ sampleAt: sampleAnimationRouteAt,
131
131
  duration: episode.episodePlan.runtime.duration,
132
- usesTypedAssets: missingCartoonCharacterAssets.length === 0
132
+ usesTypedAssets: missingAnimationCharacterAssets.length === 0
133
133
  });
134
134
 
135
135
  const app = createAuraApp("#app", {
136
136
  scene: scene()
137
137
  .background("#081b2a")
138
- .addMany(createAuraRenderedCartoonScene())
138
+ .addMany(createAuraRenderedAnimationScene())
139
139
  .add(createCharacterBody("miko", "Miko", "miko", [-0.72, 0.08, -0.34], [0.32, 0.42, 0.32], 0.9, "#7de2ff"))
140
140
  .add(createMouthCard("miko:mouth", "Miko", [-3.2, -3.2, -3.2], "#f8fff2"))
141
141
  .add(createCharacterBody("luma", "Luma", "luma", [0.72, 0.08, -0.34], [0.3, 0.38, 0.3], 0.9, "#ffe18e"))
@@ -158,33 +158,33 @@ const app = createAuraApp("#app", {
158
158
  .position(-0.38, 0.2, 0.18)
159
159
  .scale([0.12, 0.24, 0.04])
160
160
  )
161
- .add(labels.hud(firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D cartoon channel"))
161
+ .add(labels.hud(firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D animation channel"))
162
162
  .add(lights.studio({ intensity: 1.2 }))
163
163
  .add(effects.bloom({ intensity: 0.18, color: "#7de2ff" }))
164
164
  .camera(camera.perspective({ position: [0, 1.18, 4.4], target: [0, 0.82, -0.45], fov: 38 })),
165
165
  diagnostics: true
166
166
  });
167
167
 
168
- window.__AURA3D_CARTOON_TEMPLATE__ = {
168
+ window.__AURA3D_ANIMATION_TEMPLATE__ = {
169
169
  contractId: episodeContractId,
170
- template: "cartoon-channel",
170
+ template: "animation-channel",
171
171
  storyBible,
172
172
  shotIds: episode.shotTimeline.shots.map((shot) => shot.shotId),
173
173
  captionIds: episode.captionTrack.cues.map((caption) => caption.captionId),
174
174
  playbackProbeTimes,
175
175
  playbackProbeSamples,
176
176
  renderQueueItems: renderPlan.items.length,
177
- typedAssets: typedCartoonAssetSummary,
178
- requiredTypedAssets: requiredCartoonCharacterAssets,
179
- missingTypedAssets: missingCartoonCharacterAssets,
180
- assetCommands: publicCartoonAssetInstructions,
177
+ typedAssets: typedAnimationAssetSummary,
178
+ requiredTypedAssets: requiredAnimationCharacterAssets,
179
+ missingTypedAssets: missingAnimationCharacterAssets,
180
+ assetCommands: publicAnimationAssetInstructions,
181
181
  bridgeIssues,
182
182
  promptAnimationEvidence,
183
183
  publishReadiness,
184
184
  releaseFacingViews: ["sample-episode-visual"],
185
185
  rejectedViews: ["concept-2-5d", "puppet-2d", "image-puppet"],
186
186
  rejectedViewReason:
187
- "Rejected 1.0.10 puppet/parallax experiments are quarantined from the release-facing cartoon-channel route because still-image parallax, flat cutout motion, and notTrue3D proof cannot satisfy Aura3D 1.1 cartoon animation readiness.",
187
+ "Rejected 1.0.10 puppet/parallax experiments are quarantined from the release-facing animation-channel route because still-image parallax, flat cutout motion, and notTrue3D proof cannot satisfy Aura3D 1.1 animation animation readiness.",
188
188
  sourceProofs: {
189
189
  captionFrameSyncSourceProof,
190
190
  visemeFrameSyncSourceProof,
@@ -195,7 +195,7 @@ window.__AURA3D_CARTOON_TEMPLATE__ = {
195
195
  return app.diagnostics();
196
196
  },
197
197
  sampleAt(time: number) {
198
- return sampleCartoonRouteAt(time);
198
+ return sampleAnimationRouteAt(time);
199
199
  }
200
200
  };
201
201
 
@@ -214,13 +214,13 @@ installShotPlayback(app, shotPlaybackPlan, {
214
214
  function createCharacterBody(
215
215
  id: "miko" | "luma",
216
216
  name: string,
217
- assetKey: CartoonAssetKey,
217
+ assetKey: AnimationAssetKey,
218
218
  position: readonly [number, number, number],
219
219
  fallbackScale: readonly [number, number, number],
220
220
  modelScale: number,
221
221
  color: string
222
222
  ) {
223
- const asset = typedCartoonAssets[assetKey];
223
+ const asset = typedAnimationAssets[assetKey];
224
224
  const runtime = game.runtimeNode(id, { tags: ["character", id, asset ? "typed-asset" : "primitive-fallback"] });
225
225
  if (asset) {
226
226
  return model(asset, { name: `${name} typed character asset` })
@@ -250,7 +250,7 @@ function createMouthCard(id: "miko:mouth" | "luma:mouth", name: string, position
250
250
  .runtime(game.runtimeNode(id, { tags: ["mouth", "primitive", name.toLowerCase()] }));
251
251
  }
252
252
 
253
- function createAuraRenderedCartoonScene() {
253
+ function createAuraRenderedAnimationScene() {
254
254
  const skyMat = material.emissive({ color: "#0a2941", emissive: "#0f4765", emissiveIntensity: 0.18 });
255
255
  const gardenMat = material.pbr({ color: "#17493e", roughness: 0.64, metallic: 0.02 });
256
256
  const pathMat = material.clearcoat({ color: "#526b62", roughness: 0.2, clearcoat: 0.4 });
@@ -262,7 +262,7 @@ function createAuraRenderedCartoonScene() {
262
262
  primitives.plane({ name: "Aura3D moon garden sky plate", material: skyMat }).position(0, 1.35, -2.15).rotate(-0.04, 0, 0).scale([5.8, 1, 2.5]),
263
263
  primitives.sphere({ name: "Aura3D glowing moon portal core", material: moonMat }).position(0, 1.35, -1.95).scale([0.62, 0.62, 0.04]),
264
264
  primitives.torus({ name: "Aura3D moon portal rim", material: bloomCyan }).position(0, 1.35, -1.94).scale([0.78, 0.78, 0.026]),
265
- ...createCartoonCitySilhouette(),
265
+ ...createAnimationCitySilhouette(),
266
266
  primitives.plane({ name: "Aura3D moon garden floor", material: gardenMat }).position(0, -0.02, -0.45).scale([4.8, 1, 2.6]),
267
267
  primitives.cylinder({ name: "Aura3D curved garden mound", material: gardenMat }).position(0, 0.03, -0.64).scale([1.72, 0.08, 0.74]),
268
268
  primitives.box({ name: "Aura3D warm stone path", material: pathMat }).position(0, 0.06, 0.1).scale([1.58, 0.04, 0.28]),
@@ -278,7 +278,7 @@ function createAuraRenderedCartoonScene() {
278
278
  ];
279
279
  }
280
280
 
281
- function createCartoonCitySilhouette() {
281
+ function createAnimationCitySilhouette() {
282
282
  const mat = material.pbr({ color: "#071825", roughness: 0.88, metallic: 0.04 });
283
283
  return [-2.2, -1.45, -0.62, 0.38, 1.25, 2.04].map((x, index) =>
284
284
  primitives.box({ name: `Aura3D rounded distant city tower ${index + 1}`, material: mat })
@@ -308,7 +308,7 @@ function createMoonLilies() {
308
308
  ];
309
309
  }
310
310
 
311
- function sampleCartoonRouteAt(time: number) {
311
+ function sampleAnimationRouteAt(time: number) {
312
312
  const bridgeSample = sampleAuraVoiceBridgeAtTime(auraVoicePackage, time);
313
313
  const playbackSample = sampleShotPlaybackPlan(shotPlaybackPlan, time);
314
314
  const caption = captionCueAtTime(episode.captionTrack, time);
@@ -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",
@@ -163,7 +163,7 @@ body {
163
163
  right: 18%;
164
164
  }
165
165
 
166
- .cartoon-robot {
166
+ .animation-robot {
167
167
  --accent: #7de2ff;
168
168
  --shadow: rgba(125, 226, 255, 0.28);
169
169
  position: absolute;
@@ -178,7 +178,7 @@ body {
178
178
  right 420ms ease;
179
179
  }
180
180
 
181
- .sample-episode[data-uses-typed-assets="true"] .cartoon-robot {
181
+ .sample-episode[data-uses-typed-assets="true"] .animation-robot {
182
182
  display: none;
183
183
  }
184
184
 
@@ -188,41 +188,41 @@ body {
188
188
  .sample-episode[data-uses-typed-assets="true"] .sample-episode__path,
189
189
  .sample-episode[data-uses-typed-assets="true"] .sample-episode__stones,
190
190
  .sample-episode[data-uses-typed-assets="true"] .sample-episode__flowers,
191
- .sample-episode[data-uses-typed-assets="true"] .cartoon-broom {
191
+ .sample-episode[data-uses-typed-assets="true"] .animation-broom {
192
192
  display: none;
193
193
  }
194
194
 
195
- .cartoon-robot--miko {
195
+ .animation-robot--miko {
196
196
  left: 26%;
197
197
  }
198
198
 
199
- .cartoon-robot--luma {
199
+ .animation-robot--luma {
200
200
  --accent: #ffe18e;
201
201
  --shadow: rgba(255, 225, 142, 0.32);
202
202
  right: 26%;
203
203
  }
204
204
 
205
- .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .cartoon-robot--miko {
205
+ .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .animation-robot--miko {
206
206
  transform: translateX(8%) rotate(-6deg);
207
207
  }
208
208
 
209
- .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .cartoon-robot--luma {
209
+ .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .animation-robot--luma {
210
210
  transform: translateX(-8%) rotate(5deg);
211
211
  }
212
212
 
213
- .sample-episode[data-shot-id="shot-moon-garden-finish"] .cartoon-robot--miko {
213
+ .sample-episode[data-shot-id="shot-moon-garden-finish"] .animation-robot--miko {
214
214
  transform: translateX(14%) scale(1.05);
215
215
  }
216
216
 
217
- .sample-episode[data-shot-id="shot-moon-garden-finish"] .cartoon-robot--luma {
217
+ .sample-episode[data-shot-id="shot-moon-garden-finish"] .animation-robot--luma {
218
218
  transform: translateX(-14%) scale(1.05);
219
219
  }
220
220
 
221
- .cartoon-robot__antenna,
222
- .cartoon-robot__head,
223
- .cartoon-robot__body,
224
- .cartoon-robot__arm,
225
- .cartoon-robot__leg {
221
+ .animation-robot__antenna,
222
+ .animation-robot__head,
223
+ .animation-robot__body,
224
+ .animation-robot__arm,
225
+ .animation-robot__leg {
226
226
  position: absolute;
227
227
  left: 50%;
228
228
  transform: translateX(-50%);
@@ -232,7 +232,7 @@ body {
232
232
  border: 2px solid rgba(255, 255, 255, 0.38);
233
233
  }
234
234
 
235
- .cartoon-robot__antenna {
235
+ .animation-robot__antenna {
236
236
  top: 0;
237
237
  width: 8%;
238
238
  height: 10%;
@@ -240,14 +240,14 @@ body {
240
240
  box-shadow: 0 -10px 0 -2px var(--accent);
241
241
  }
242
242
 
243
- .cartoon-robot__head {
243
+ .animation-robot__head {
244
244
  top: 9%;
245
245
  width: 58%;
246
246
  height: 26%;
247
247
  border-radius: 42% 42% 36% 36%;
248
248
  }
249
249
 
250
- .cartoon-robot__eye {
250
+ .animation-robot__eye {
251
251
  position: absolute;
252
252
  top: 40%;
253
253
  width: 10%;
@@ -257,15 +257,15 @@ body {
257
257
  box-shadow: 0 0 10px rgba(6, 16, 31, 0.45);
258
258
  }
259
259
 
260
- .cartoon-robot__eye--left {
260
+ .animation-robot__eye--left {
261
261
  left: 34%;
262
262
  }
263
263
 
264
- .cartoon-robot__eye--right {
264
+ .animation-robot__eye--right {
265
265
  right: 34%;
266
266
  }
267
267
 
268
- .cartoon-robot__mouth {
268
+ .animation-robot__mouth {
269
269
  position: absolute;
270
270
  left: 50%;
271
271
  bottom: 21%;
@@ -276,57 +276,57 @@ body {
276
276
  background: #f8fff2;
277
277
  }
278
278
 
279
- .sample-episode[data-speaker="miko"] .cartoon-robot--miko .cartoon-robot__mouth,
280
- .sample-episode[data-speaker="luma"] .cartoon-robot--luma .cartoon-robot__mouth {
279
+ .sample-episode[data-speaker="miko"] .animation-robot--miko .animation-robot__mouth,
280
+ .sample-episode[data-speaker="luma"] .animation-robot--luma .animation-robot__mouth {
281
281
  height: 14%;
282
282
  bottom: 17%;
283
283
  }
284
284
 
285
- .cartoon-robot__body {
285
+ .animation-robot__body {
286
286
  top: 38%;
287
287
  width: 70%;
288
288
  height: 33%;
289
289
  border-radius: 28% 28% 34% 34%;
290
290
  }
291
291
 
292
- .cartoon-robot__arm {
292
+ .animation-robot__arm {
293
293
  top: 42%;
294
294
  width: 15%;
295
295
  height: 34%;
296
296
  border-radius: 999px;
297
297
  }
298
298
 
299
- .cartoon-robot__arm--left {
299
+ .animation-robot__arm--left {
300
300
  left: 12%;
301
301
  transform: rotate(22deg);
302
302
  }
303
303
 
304
- .cartoon-robot__arm--right {
304
+ .animation-robot__arm--right {
305
305
  left: auto;
306
306
  right: 12%;
307
307
  transform: rotate(-22deg);
308
308
  }
309
309
 
310
- .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .cartoon-robot__arm--right {
310
+ .sample-episode[data-shot-id="shot-glow-stone-teamwork"] .animation-robot__arm--right {
311
311
  transform: rotate(-54deg);
312
312
  }
313
313
 
314
- .cartoon-robot__leg {
314
+ .animation-robot__leg {
315
315
  top: 70%;
316
316
  width: 17%;
317
317
  height: 28%;
318
318
  border-radius: 999px;
319
319
  }
320
320
 
321
- .cartoon-robot__leg--left {
321
+ .animation-robot__leg--left {
322
322
  left: 36%;
323
323
  }
324
324
 
325
- .cartoon-robot__leg--right {
325
+ .animation-robot__leg--right {
326
326
  left: 62%;
327
327
  }
328
328
 
329
- .cartoon-broom {
329
+ .animation-broom {
330
330
  position: absolute;
331
331
  z-index: 6;
332
332
  left: 42%;
@@ -339,7 +339,7 @@ body {
339
339
  box-shadow: 0 0 18px rgba(125, 226, 255, 0.48);
340
340
  }
341
341
 
342
- .cartoon-broom::after {
342
+ .animation-broom::after {
343
343
  content: "";
344
344
  position: absolute;
345
345
  right: -8%;
@@ -351,7 +351,7 @@ body {
351
351
  background: #ffe18e;
352
352
  }
353
353
 
354
- .sample-episode[data-shot-id="shot-moon-garden-open"] .cartoon-broom {
354
+ .sample-episode[data-shot-id="shot-moon-garden-open"] .animation-broom {
355
355
  opacity: 0.35;
356
356
  }
357
357
 
@@ -451,7 +451,7 @@ body {
451
451
  font-size: 10px;
452
452
  }
453
453
 
454
- .cartoon-robot {
454
+ .animation-robot {
455
455
  min-width: 88px;
456
456
  }
457
457
  }
@@ -1,6 +1,6 @@
1
1
  import { episode, episodeSampleDescription, youtubeDraftMetadata } from "./episode";
2
2
 
3
- export interface CartoonRouteSampleForVisual {
3
+ export interface AnimationRouteSampleForVisual {
4
4
  readonly time: number;
5
5
  readonly frame: number;
6
6
  readonly shotId?: string;
@@ -16,7 +16,7 @@ export interface CartoonRouteSampleForVisual {
16
16
  }
17
17
 
18
18
  export interface SampleEpisodeVisualOptions {
19
- readonly sampleAt: (time: number) => CartoonRouteSampleForVisual;
19
+ readonly sampleAt: (time: number) => AnimationRouteSampleForVisual;
20
20
  readonly duration: number;
21
21
  readonly fixedTime?: number;
22
22
  readonly usesTypedAssets?: boolean;
@@ -26,7 +26,7 @@ export function installSampleEpisodeVisual(options: SampleEpisodeVisualOptions)
26
26
  const root = document.createElement("section");
27
27
  root.id = "sample-episode-visual";
28
28
  root.className = "sample-episode";
29
- root.setAttribute("aria-label", "Aura3D cartoon sample episode preview");
29
+ root.setAttribute("aria-label", "Aura3D animation sample episode preview");
30
30
  root.innerHTML = `
31
31
  <div class="sample-episode__frame">
32
32
  <div class="sample-episode__aura-host-slot" data-aura-host-slot></div>
@@ -38,10 +38,10 @@ export function installSampleEpisodeVisual(options: SampleEpisodeVisualOptions)
38
38
  <div class="sample-episode__flowers" aria-hidden="true"></div>
39
39
  ${robotMarkup("miko", "Miko")}
40
40
  ${robotMarkup("luma", "Luma")}
41
- <div class="cartoon-broom" aria-hidden="true"></div>
41
+ <div class="animation-broom" aria-hidden="true"></div>
42
42
  <h1 class="sample-episode__title">${escapeHtml(episode.episodePlan.title)}</h1>
43
43
  <div class="sample-episode__shot" data-sample-shot-label>Shot 1 / 3</div>
44
- <div class="sample-episode__proof">Aura3D cartoon contract · captions · visemes · render queue</div>
44
+ <div class="sample-episode__proof">Aura3D animation contract · captions · visemes · render queue</div>
45
45
  <div class="sample-episode__caption" data-sample-caption></div>
46
46
  <div class="sample-episode__timeline" aria-hidden="true">
47
47
  <span class="sample-episode__timeline-fill" data-sample-progress></span>
@@ -75,7 +75,7 @@ export function installSampleEpisodeVisual(options: SampleEpisodeVisualOptions)
75
75
  root.dataset.speaker = speaker;
76
76
  root.dataset.visemeId = sample.visemeId ?? "";
77
77
  root.dataset.usesTypedAssets = options.usesTypedAssets ? "true" : "false";
78
- root.dataset.cartoonSampleEpisode = "moon-garden-cleanup";
78
+ root.dataset.animationSampleEpisode = "moon-garden-cleanup";
79
79
  root.dataset.youtubeDraftTitle = youtubeDraftMetadata.title;
80
80
 
81
81
  if (caption) {
@@ -88,7 +88,7 @@ export function installSampleEpisodeVisual(options: SampleEpisodeVisualOptions)
88
88
  progress.style.setProperty("--progress", `${progressPercent}%`);
89
89
  }
90
90
 
91
- window.__AURA3D_CARTOON_SAMPLE_EPISODE__ = {
91
+ window.__AURA3D_ANIMATION_SAMPLE_EPISODE__ = {
92
92
  contractId: episodeSampleDescription.contractId,
93
93
  episodeId: episode.episodePlan.episodeId,
94
94
  title: episode.episodePlan.title,
@@ -122,12 +122,12 @@ export function installSampleEpisodeVisual(options: SampleEpisodeVisualOptions)
122
122
 
123
123
  declare global {
124
124
  interface Window {
125
- __AURA3D_CARTOON_SAMPLE_EPISODE__?: {
125
+ __AURA3D_ANIMATION_SAMPLE_EPISODE__?: {
126
126
  readonly contractId: string;
127
127
  readonly episodeId: string;
128
128
  readonly title: string;
129
129
  readonly route: string;
130
- readonly sample: CartoonRouteSampleForVisual;
130
+ readonly sample: AnimationRouteSampleForVisual;
131
131
  readonly visualLayer: {
132
132
  readonly id: string;
133
133
  readonly deterministicSampleTime: number | null;
@@ -144,18 +144,18 @@ declare global {
144
144
 
145
145
  function robotMarkup(id: "miko" | "luma", label: string) {
146
146
  return `
147
- <div class="cartoon-robot cartoon-robot--${id}" role="img" aria-label="${label} cartoon robot">
148
- <span class="cartoon-robot__antenna"></span>
149
- <span class="cartoon-robot__head">
150
- <span class="cartoon-robot__eye cartoon-robot__eye--left"></span>
151
- <span class="cartoon-robot__eye cartoon-robot__eye--right"></span>
152
- <span class="cartoon-robot__mouth"></span>
147
+ <div class="animation-robot animation-robot--${id}" role="img" aria-label="${label} animation robot">
148
+ <span class="animation-robot__antenna"></span>
149
+ <span class="animation-robot__head">
150
+ <span class="animation-robot__eye animation-robot__eye--left"></span>
151
+ <span class="animation-robot__eye animation-robot__eye--right"></span>
152
+ <span class="animation-robot__mouth"></span>
153
153
  </span>
154
- <span class="cartoon-robot__body"></span>
155
- <span class="cartoon-robot__arm cartoon-robot__arm--left"></span>
156
- <span class="cartoon-robot__arm cartoon-robot__arm--right"></span>
157
- <span class="cartoon-robot__leg cartoon-robot__leg--left"></span>
158
- <span class="cartoon-robot__leg cartoon-robot__leg--right"></span>
154
+ <span class="animation-robot__body"></span>
155
+ <span class="animation-robot__arm animation-robot__arm--left"></span>
156
+ <span class="animation-robot__arm animation-robot__arm--right"></span>
157
+ <span class="animation-robot__leg animation-robot__leg--left"></span>
158
+ <span class="animation-robot__leg animation-robot__leg--right"></span>
159
159
  </div>
160
160
  `;
161
161
  }
@@ -8,9 +8,9 @@ test("2.5D animation recording lane is disabled for release-facing proof", async
8
8
 
9
9
  const proof = await page.evaluate(() => ({
10
10
  rejectedViews: (window as unknown as {
11
- __AURA3D_CARTOON_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
- }).__AURA3D_CARTOON_TEMPLATE__?.rejectedViews ?? [],
13
- conceptProof: (window as unknown as { __AURA3D_CARTOON_2_5D_PROOF__?: unknown }).__AURA3D_CARTOON_2_5D_PROOF__
11
+ __AURA3D_ANIMATION_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
+ }).__AURA3D_ANIMATION_TEMPLATE__?.rejectedViews ?? [],
13
+ conceptProof: (window as unknown as { __AURA3D_ANIMATION_2_5D_PROOF__?: unknown }).__AURA3D_ANIMATION_2_5D_PROOF__
14
14
  }));
15
15
 
16
16
  expect(proof.conceptProof).toBeUndefined();
@@ -1,6 +1,6 @@
1
1
  import { expect, test } from "@playwright/test";
2
2
 
3
- test("2.5D concept query is quarantined from the release-facing cartoon route", async ({ page }) => {
3
+ test("2.5D concept query is quarantined from the release-facing animation route", async ({ page }) => {
4
4
  await page.setViewportSize({ width: 1440, height: 900 });
5
5
  await page.goto("/?view=concept-2-5d&sampleTime=24&parallax=0.78&animateParallax=1");
6
6
 
@@ -9,16 +9,16 @@ test("2.5D concept query is quarantined from the release-facing cartoon route",
9
9
  await expect(page.locator("[data-sample-caption]")).toContainText(/tiny circle|stones|cleanup/i);
10
10
 
11
11
  const quarantine = await page.evaluate(() => ({
12
- releaseFacingView: document.body.dataset.cartoonReleaseFacingView,
13
- rejectedViews: document.body.dataset.cartoonRejectedViews,
14
- conceptProof: (window as unknown as { __AURA3D_CARTOON_2_5D_PROOF__?: unknown }).__AURA3D_CARTOON_2_5D_PROOF__,
12
+ releaseFacingView: document.body.dataset.animationReleaseFacingView,
13
+ rejectedViews: document.body.dataset.animationRejectedViews,
14
+ conceptProof: (window as unknown as { __AURA3D_ANIMATION_2_5D_PROOF__?: unknown }).__AURA3D_ANIMATION_2_5D_PROOF__,
15
15
  template: (window as unknown as {
16
- __AURA3D_CARTOON_TEMPLATE__?: {
16
+ __AURA3D_ANIMATION_TEMPLATE__?: {
17
17
  readonly releaseFacingViews?: readonly string[];
18
18
  readonly rejectedViews?: readonly string[];
19
19
  readonly rejectedViewReason?: string;
20
20
  };
21
- }).__AURA3D_CARTOON_TEMPLATE__
21
+ }).__AURA3D_ANIMATION_TEMPLATE__
22
22
  }));
23
23
 
24
24
  expect(quarantine.releaseFacingView).toBe("sample-episode-visual");
@@ -8,9 +8,9 @@ test("image-puppet animation recording lane cannot produce release-facing proof"
8
8
 
9
9
  const proof = await page.evaluate(() => ({
10
10
  rejectedViews: (window as unknown as {
11
- __AURA3D_CARTOON_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
- }).__AURA3D_CARTOON_TEMPLATE__?.rejectedViews ?? [],
13
- imagePuppetProof: (window as unknown as { __AURA3D_CARTOON_IMAGE_PUPPET_PROOF__?: unknown }).__AURA3D_CARTOON_IMAGE_PUPPET_PROOF__
11
+ __AURA3D_ANIMATION_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
+ }).__AURA3D_ANIMATION_TEMPLATE__?.rejectedViews ?? [],
13
+ imagePuppetProof: (window as unknown as { __AURA3D_ANIMATION_IMAGE_PUPPET_PROOF__?: unknown }).__AURA3D_ANIMATION_IMAGE_PUPPET_PROOF__
14
14
  }));
15
15
 
16
16
  expect(proof.imagePuppetProof).toBeUndefined();
@@ -9,16 +9,16 @@ test("image-puppet query is kept as rejected evidence and does not mount a cutou
9
9
  await expect(page.locator("[data-source-cutout]")).toHaveCount(0);
10
10
 
11
11
  const quarantine = await page.evaluate(() => ({
12
- imagePuppetProof: (window as unknown as { __AURA3D_CARTOON_IMAGE_PUPPET_PROOF__?: unknown }).__AURA3D_CARTOON_IMAGE_PUPPET_PROOF__,
13
- sampleProof: (window as unknown as { __AURA3D_CARTOON_SAMPLE_EPISODE__?: { visualLayer?: { renderedBy?: string } } })
14
- .__AURA3D_CARTOON_SAMPLE_EPISODE__,
12
+ imagePuppetProof: (window as unknown as { __AURA3D_ANIMATION_IMAGE_PUPPET_PROOF__?: unknown }).__AURA3D_ANIMATION_IMAGE_PUPPET_PROOF__,
13
+ sampleProof: (window as unknown as { __AURA3D_ANIMATION_SAMPLE_EPISODE__?: { visualLayer?: { renderedBy?: string } } })
14
+ .__AURA3D_ANIMATION_SAMPLE_EPISODE__,
15
15
  template: (window as unknown as {
16
- __AURA3D_CARTOON_TEMPLATE__?: {
16
+ __AURA3D_ANIMATION_TEMPLATE__?: {
17
17
  readonly releaseFacingViews?: readonly string[];
18
18
  readonly rejectedViews?: readonly string[];
19
19
  readonly rejectedViewReason?: string;
20
20
  };
21
- }).__AURA3D_CARTOON_TEMPLATE__
21
+ }).__AURA3D_ANIMATION_TEMPLATE__
22
22
  }));
23
23
 
24
24
  expect(quarantine.imagePuppetProof).toBeUndefined();
@@ -8,9 +8,9 @@ test("2D puppet recording lane remains negative evidence only", async ({ page })
8
8
 
9
9
  const proof = await page.evaluate(() => ({
10
10
  rejectedViews: (window as unknown as {
11
- __AURA3D_CARTOON_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
- }).__AURA3D_CARTOON_TEMPLATE__?.rejectedViews ?? [],
13
- puppetProof: (window as unknown as { __AURA3D_CARTOON_2D_PUPPET_PROOF__?: unknown }).__AURA3D_CARTOON_2D_PUPPET_PROOF__
11
+ __AURA3D_ANIMATION_TEMPLATE__?: { readonly rejectedViews?: readonly string[]; readonly rejectedViewReason?: string };
12
+ }).__AURA3D_ANIMATION_TEMPLATE__?.rejectedViews ?? [],
13
+ puppetProof: (window as unknown as { __AURA3D_ANIMATION_2D_PUPPET_PROOF__?: unknown }).__AURA3D_ANIMATION_2D_PUPPET_PROOF__
14
14
  }));
15
15
 
16
16
  expect(proof.puppetProof).toBeUndefined();