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
@@ -1,101 +0,0 @@
1
- import { episode, publicCartoonAssetInstructions, typedCartoonAssetSummary } from "./episode";
2
- import { publishReadiness, renderPlan } from "./render-plan";
3
-
4
- export const cartoonStudioSupport = {
5
- template: "cartoon-studio",
6
- panels: ["timeline", "assets", "performance", "render"] as const,
7
- timelineTracks: [
8
- {
9
- id: "shots",
10
- label: "Shots",
11
- clips: episode.shotTimeline.shots.map((shot) => ({
12
- id: shot.shotId,
13
- startTime: shot.startTime,
14
- endTime: shot.endTime,
15
- cameraMove: shot.camera.move,
16
- transitionOut: shot.transitionOut ?? "cut"
17
- }))
18
- },
19
- {
20
- id: "dialogue",
21
- label: "Dialogue",
22
- clips: episode.dialogueTrack.lines.map((line) => ({
23
- id: line.lineId,
24
- speakerId: line.speakerId,
25
- startTime: line.startTime,
26
- endTime: line.endTime,
27
- text: line.text
28
- }))
29
- },
30
- {
31
- id: "render",
32
- label: "Render",
33
- clips: renderPlan.items.map((item) => ({
34
- id: item.id,
35
- time: item.time,
36
- outputIds: item.outputIds,
37
- width: item.viewport.width,
38
- height: item.viewport.height
39
- }))
40
- }
41
- ],
42
- assetLibrary: {
43
- requiredCharacters: typedCartoonAssetSummary.requiredCharacterAssets,
44
- optionalProps: typedCartoonAssetSummary.optionalPropAssets,
45
- missingCharacters: typedCartoonAssetSummary.missingCharacterAssets,
46
- commands: publicCartoonAssetInstructions
47
- },
48
- renderPipeline: {
49
- outputs: renderPlan.outputs.map((output) => output.kind),
50
- itemCount: renderPlan.items.length,
51
- publishReadyFromCurrentEvidence: publishReadiness.ready,
52
- issueCount: publishReadiness.issues.length
53
- }
54
- } as const;
55
-
56
- export function installCartoonStudioPanel(target: HTMLElement): void {
57
- const panel = document.createElement("section");
58
- panel.id = "cartoon-studio-panel";
59
- panel.style.cssText = [
60
- "position:fixed",
61
- "left:18px",
62
- "top:18px",
63
- "width:min(360px,calc(100vw - 36px))",
64
- "display:grid",
65
- "grid-template-columns:repeat(4,1fr)",
66
- "gap:6px",
67
- "padding:10px",
68
- "border:1px solid rgba(248,255,242,0.22)",
69
- "border-radius:8px",
70
- "background:rgba(3,12,20,0.78)",
71
- "color:#f8fff2",
72
- "font:600 12px/1.2 system-ui,sans-serif",
73
- "z-index:9"
74
- ].join(";");
75
-
76
- for (const name of cartoonStudioSupport.panels) {
77
- const button = document.createElement("button");
78
- button.type = "button";
79
- button.textContent = name;
80
- button.dataset.panel = name;
81
- button.style.cssText = [
82
- "min-width:0",
83
- "height:30px",
84
- "border:1px solid rgba(125,226,255,0.42)",
85
- "border-radius:6px",
86
- "background:rgba(24,45,63,0.84)",
87
- "color:#f8fff2",
88
- "font:inherit",
89
- "text-transform:capitalize"
90
- ].join(";");
91
- panel.appendChild(button);
92
- }
93
-
94
- const status = document.createElement("div");
95
- status.id = "cartoon-studio-status";
96
- status.textContent = `${episode.shotTimeline.shots.length} shots | ${episode.dialogueTrack.lines.length} lines | ${renderPlan.items.length} render cues`;
97
- status.style.cssText = "grid-column:1 / -1;color:#7de2ff;white-space:normal";
98
- panel.appendChild(status);
99
-
100
- target.appendChild(panel);
101
- }
@@ -1,4 +0,0 @@
1
- {
2
- "status": "passed",
3
- "failedTests": []
4
- }
@@ -1,44 +0,0 @@
1
- import { expect, test } from "@playwright/test";
2
- import {
3
- createCartoonEpisodePackage,
4
- createCartoonRenderManifestArtifact,
5
- createRenderedPromptAnimationEvidenceArtifact
6
- } from "../src/episode-renderer";
7
- import { requiredCartoonEpisodePackageFiles } from "../src/review";
8
-
9
- test("episode renderer package declares encoded video and required package files", () => {
10
- const pkg = createCartoonEpisodePackage("package");
11
- const filePaths = new Set(pkg.files.map((file) => file.path));
12
- const manifest = createCartoonRenderManifestArtifact();
13
- const evidence = createRenderedPromptAnimationEvidenceArtifact();
14
-
15
- expect(pkg.packageDirectory).toBe("dist/episodes/moon-garden-001");
16
- expect(pkg.hasWebm).toBe(true);
17
- expect(pkg.hasPngSequenceFallback).toBe(false);
18
- expect(pkg.requiredFiles).toEqual([...requiredCartoonEpisodePackageFiles]);
19
- expect([...requiredCartoonEpisodePackageFiles]
20
- .filter((file) => file !== "episode.webm" && file !== "thumbnail.png")
21
- .every((file) => filePaths.has(file))).toBe(true);
22
- expect(filePaths.has("episode.webm")).toBe(false);
23
- expect(filePaths.has("thumbnail.png")).toBe(false);
24
- expect(pkg.files.filter((file) => /^frames\/frame-\d+\.svg$/.test(file.path)).length).toBeGreaterThan(20);
25
-
26
- expect(manifest).toMatchObject({
27
- artifact: "cartoon-render-manifest",
28
- outputMode: "encoded-webm",
29
- hasEncodedVideo: true,
30
- encodedVideo: {
31
- path: "episode.webm",
32
- codec: "vp9"
33
- }
34
- });
35
- expect(evidence).toMatchObject({
36
- artifact: "prompt-animation-evidence",
37
- ok: true,
38
- renderOutput: {
39
- mode: "encoded-webm",
40
- encodedVideoPresent: true,
41
- pngSequenceFallbackPresent: false
42
- }
43
- });
44
- });
@@ -1,45 +0,0 @@
1
- import { expect, test } from "@playwright/test";
2
- import { createCartoonMotionQualityArtifact, createCartoonVisualAcceptanceArtifact } from "../src/episode-renderer";
3
-
4
- test("motion quality rejects still-image wobble and requires regional character motion", () => {
5
- const motion = createCartoonMotionQualityArtifact();
6
-
7
- expect(motion).toMatchObject({
8
- artifact: "cartoon-motion-quality",
9
- videoPath: "episode.webm",
10
- globalOnlyMotion: false,
11
- flatLayerMotion: false,
12
- cameraMotionDeclared: true,
13
- rejectedEvidence: {
14
- stillImageWobbleAccepted: false,
15
- subtitleOverStillAccepted: false,
16
- sourceOnlyAccepted: false
17
- }
18
- });
19
- expect(motion.independentRegionMotionSegments).toBeGreaterThanOrEqual(2);
20
- expect(motion.characterRegionMotionSegments).toBeGreaterThanOrEqual(2);
21
- expect(motion.bodyRegionMotionSegments).toBeGreaterThanOrEqual(2);
22
- expect(motion.mouthMotionSegments).toBeGreaterThanOrEqual(2);
23
- expect(motion.regions.some((region) => region.kind === "mouth" && region.movesDuringDialogue)).toBe(true);
24
- expect(motion.regions.some((region) => region.kind === "limb" && region.movesDuringAction)).toBe(true);
25
- });
26
-
27
- test("visual acceptance requires both characters and refuses source-only publish evidence", () => {
28
- const visual = createCartoonVisualAcceptanceArtifact();
29
-
30
- expect(visual).toMatchObject({
31
- artifact: "cartoon-visual-acceptance",
32
- ok: true,
33
- visualOk: true,
34
- encodedVideoPresent: true,
35
- notTrue3DAccepted: false,
36
- sourceOnlyAcceptedAsPublishProof: false,
37
- requiredHumanReview: true,
38
- visibleCharacterCount: 2,
39
- globalOnlyMotion: false,
40
- flatLayerMotion: false,
41
- reviewerRequiredBeforePublish: true
42
- });
43
- expect(visual.frameHashChanges).toBeGreaterThan(1);
44
- expect(visual.motionSegments.every((segment) => segment.independentRegionMotion)).toBe(true);
45
- });
@@ -1,7 +0,0 @@
1
- import { expect, test } from "@playwright/test";
2
-
3
- test("cartoon studio route loads", async ({ page }) => {
4
- await page.goto("/");
5
- await expect(page.locator("#app")).toBeVisible();
6
- });
7
-
@@ -1,99 +0,0 @@
1
- import { expect, test } from "@playwright/test";
2
-
3
- test("cartoon studio storyboard caption renders", async ({ page }) => {
4
- await page.goto("/");
5
- await expect(page.locator("#caption-overlay")).toContainText(/moon|sparkle|garden/i);
6
- });
7
-
8
- test("storyboard playback, character performance, caption timing, cuts, and nonblank cartoon frames are sourced", async ({
9
- page
10
- }) => {
11
- await page.goto("/");
12
-
13
- const routeProof = (await page.evaluate(() => {
14
- const proof = (window as unknown as {
15
- __AURA3D_CARTOON_EPISODE_PROOF__?: {
16
- proofKind: string;
17
- shotIds: readonly string[];
18
- captionIds: readonly string[];
19
- storyBible?: unknown;
20
- studio?: unknown;
21
- sourceOnlyAcceptedAsPublishProof: boolean;
22
- playbackProbeSamples: readonly unknown[];
23
- sampleAt(time: number): unknown;
24
- };
25
- }).__AURA3D_CARTOON_EPISODE_PROOF__;
26
- return {
27
- proofKind: proof?.proofKind,
28
- shotIds: proof?.shotIds ?? [],
29
- captionIds: proof?.captionIds ?? [],
30
- storyBible: proof?.storyBible,
31
- studio: proof?.studio,
32
- sourceOnlyAcceptedAsPublishProof: proof?.sourceOnlyAcceptedAsPublishProof,
33
- samples: [1, 21, 43].map((time) => proof?.sampleAt(time)),
34
- playbackProbeSamples: proof?.playbackProbeSamples ?? [],
35
- bodyShotCount: document.body.dataset.cartoonShotCount,
36
- bodyCaptionCount: document.body.dataset.cartoonCaptionCount,
37
- bodyPanels: document.body.dataset.cartoonStudioPanels
38
- };
39
- })) as {
40
- proofKind?: string;
41
- shotIds: string[];
42
- captionIds: string[];
43
- storyBible?: {
44
- props?: unknown[];
45
- styleGuide?: { visualStyle?: string };
46
- shotList?: unknown[];
47
- };
48
- studio?: {
49
- panels?: readonly string[];
50
- timelineTracks?: readonly { id: string; clips: readonly unknown[] }[];
51
- assetLibrary?: { commands?: readonly string[] };
52
- renderPipeline?: { itemCount?: number };
53
- };
54
- samples: Array<{
55
- shotId?: string;
56
- captionId?: string;
57
- captionText?: string;
58
- cameraMove?: string;
59
- transitionOut?: string;
60
- nodeUpdates?: Array<{ characterId?: string; action?: string; emotion?: string }>;
61
- }>;
62
- playbackProbeSamples: unknown[];
63
- sourceOnlyAcceptedAsPublishProof?: boolean;
64
- bodyShotCount?: string;
65
- bodyCaptionCount?: string;
66
- bodyPanels?: string;
67
- };
68
-
69
- expect(routeProof.proofKind).toBe("aura3d-cartoon-episode-proof");
70
- expect(routeProof.sourceOnlyAcceptedAsPublishProof).toBe(false);
71
- expect(routeProof.shotIds).toEqual([
72
- "shot-moon-garden-open",
73
- "shot-glow-stone-teamwork",
74
- "shot-moon-garden-finish"
75
- ]);
76
- expect(new Set(routeProof.samples.map((sample) => sample.shotId)).size).toBe(3);
77
- expect(routeProof.captionIds).toHaveLength(6);
78
- expect(routeProof.samples.every((sample) => sample.captionId && sample.captionText)).toBe(true);
79
- expect(routeProof.samples.some((sample) => sample.cameraMove === "push-in" || sample.transitionOut === "cut")).toBe(true);
80
- expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.action === "speak")).toBe(true);
81
- expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "miko")).toBe(true);
82
- expect(routeProof.samples.flatMap((sample) => sample.nodeUpdates ?? []).some((update) => update.characterId === "luma")).toBe(true);
83
- expect(routeProof.storyBible?.props?.length).toBeGreaterThanOrEqual(3);
84
- expect(routeProof.storyBible?.styleGuide?.visualStyle).toMatch(/cartoon/i);
85
- expect(routeProof.storyBible?.shotList).toHaveLength(3);
86
- expect(routeProof.playbackProbeSamples).toHaveLength(3);
87
- expect(routeProof.bodyShotCount).toBe("3");
88
- expect(routeProof.bodyCaptionCount).toBe("6");
89
- expect(routeProof.studio?.panels).toEqual(["timeline", "assets", "performance", "render"]);
90
- expect(routeProof.studio?.timelineTracks?.map((track) => track.id)).toEqual(["shots", "dialogue", "render"]);
91
- expect(routeProof.studio?.timelineTracks?.every((track) => track.clips.length > 0)).toBe(true);
92
- expect(routeProof.studio?.assetLibrary?.commands?.some((command) => command.includes("assets validate-cartoon"))).toBe(true);
93
- expect(routeProof.studio?.renderPipeline?.itemCount).toBeGreaterThan(0);
94
- expect(routeProof.bodyPanels).toBe("timeline,assets,performance,render");
95
- await expect(page.locator("#cartoon-studio-panel")).toBeVisible();
96
-
97
- const screenshot = await page.screenshot();
98
- expect(screenshot.byteLength).toBeGreaterThan(2048);
99
- });
@@ -1,21 +0,0 @@
1
- import { expect, test } from "@playwright/test";
2
- import { createCartoonEpisodeReviewPackage } from "../src/review";
3
-
4
- test("review package includes human approval checklist and publish boundary", () => {
5
- const review = createCartoonEpisodeReviewPackage({
6
- hasWebm: true,
7
- hasPngSequenceFallback: false,
8
- generatedAt: "2026-06-06T00:00:00.000Z"
9
- });
10
-
11
- expect(review).toContain("# Moon Garden 001 Review Package");
12
- expect(review).toContain("Output mode: `encoded-webm`");
13
- expect(review).toContain("Review status: `ready-for-human-review`");
14
- expect(review).toContain("- [ ] Both characters are readable in representative frames.");
15
- expect(review).toContain("- [ ] Captions do not cover important action.");
16
- expect(review).toContain("- [ ] Mouth movement is visible during dialogue in the browser route.");
17
- expect(review).toContain("- [ ] Character body motion is more than still-image wobble.");
18
- expect(review).toContain("- [ ] No route chrome, proof panels, or debug overlays appear in encoded output.");
19
- expect(review).toContain("- [ ] Reviewer name and approval date are recorded before publish-ready claims.");
20
- expect(review).toContain("Human review and asset readiness are still required before public publish-ready claims.");
21
- });
@@ -1,14 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "Bundler",
6
- "strict": true,
7
- "jsx": "react-jsx",
8
- "types": ["vite/client"]
9
- },
10
- "include": ["src"],
11
- "//": "render-live-route.ts is the experimental real-3D path; it needs engine exports newer than the published @aura3d/engine and runs only via `npm run episode:render-3d` (which aliases @aura3d/* to a monorepo build). Excluded from the default scaffold typecheck/build.",
12
- "exclude": ["src/render-live-route.ts"]
13
- }
14
-
@@ -1,13 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Aura3D Cartoon Channel</title>
7
- </head>
8
- <body>
9
- <div id="app"></div>
10
- <script type="module" src="/src/main.ts"></script>
11
- </body>
12
- </html>
13
-
@@ -1,14 +0,0 @@
1
- import { AURAVOICE_AURA3D_PROMPT_ANIMATION_CONTRACT_ID } from "./contract";
2
-
3
- export const setContractId = AURAVOICE_AURA3D_PROMPT_ANIMATION_CONTRACT_ID;
4
-
5
- export const sets = [
6
- {
7
- id: "moon-garden",
8
- name: "Moon Garden",
9
- layers: ["foreground flowers", "midground robot path", "background planet skyline"],
10
- primitiveFallbackProps: ["glow-broom", "glow-stones", "moon-lilies"],
11
- optionalTypedAssetKeys: ["glowBroom", "glowStones", "moonLilies"],
12
- safety: "soft colors, readable captions, reduced flash by default"
13
- }
14
- ];