@aura3d/engine 1.0.2 → 1.0.5

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 (296) hide show
  1. package/README.md +331 -16
  2. package/dist/animation/AnimationClipEvents.d.ts +57 -0
  3. package/dist/animation/AnimationClipEvents.d.ts.map +1 -0
  4. package/dist/animation/AnimationClipEvents.js +171 -0
  5. package/dist/animation/AnimationClipEvents.js.map +1 -0
  6. package/dist/animation/AnimationClipRegistry.d.ts +76 -0
  7. package/dist/animation/AnimationClipRegistry.d.ts.map +1 -0
  8. package/dist/animation/AnimationClipRegistry.js +130 -0
  9. package/dist/animation/AnimationClipRegistry.js.map +1 -0
  10. package/dist/animation/AnimationController.d.ts +168 -0
  11. package/dist/animation/AnimationController.d.ts.map +1 -0
  12. package/dist/animation/AnimationController.js +619 -0
  13. package/dist/animation/AnimationController.js.map +1 -0
  14. package/dist/animation/HumanoidRetargeting.d.ts +76 -0
  15. package/dist/animation/HumanoidRetargeting.d.ts.map +1 -0
  16. package/dist/animation/HumanoidRetargeting.js +331 -0
  17. package/dist/animation/HumanoidRetargeting.js.map +1 -0
  18. package/dist/animation/browser-index.d.ts +18 -0
  19. package/dist/animation/browser-index.d.ts.map +1 -1
  20. package/dist/animation/browser-index.js +13 -0
  21. package/dist/animation/browser-index.js.map +1 -1
  22. package/dist/animation/index.d.ts +16 -1
  23. package/dist/animation/index.d.ts.map +1 -1
  24. package/dist/animation/index.js +11 -1
  25. package/dist/animation/index.js.map +1 -1
  26. package/dist/animation/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -1
  27. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js +3 -5
  28. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js.map +1 -1
  29. package/dist/assets/GLTFAnimationRuntime.js +1 -1
  30. package/dist/assets/GLTFLoader.js +1 -1
  31. package/dist/aura3d-cli/cli.js +194 -8
  32. package/dist/aura3d-cli/cli.js.map +1 -1
  33. package/dist/aura3d-cli/index.d.ts +280 -3
  34. package/dist/aura3d-cli/index.d.ts.map +1 -1
  35. package/dist/aura3d-cli/index.js +886 -4
  36. package/dist/aura3d-cli/index.js.map +1 -1
  37. package/dist/aura3d-cli/pull-bridge.d.ts +95 -0
  38. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -0
  39. package/dist/aura3d-cli/pull-bridge.js +247 -0
  40. package/dist/aura3d-cli/pull-bridge.js.map +1 -0
  41. package/dist/create-aura3d/index.d.ts +1 -1
  42. package/dist/create-aura3d/index.d.ts.map +1 -1
  43. package/dist/create-aura3d/index.js +9 -2
  44. package/dist/create-aura3d/index.js.map +1 -1
  45. package/dist/editor-runtime/ProjectSerializer.d.ts +74 -1
  46. package/dist/editor-runtime/ProjectSerializer.d.ts.map +1 -1
  47. package/dist/editor-runtime/ProjectSerializer.js +123 -6
  48. package/dist/editor-runtime/ProjectSerializer.js.map +1 -1
  49. package/dist/editor-runtime/TimelineModel.d.ts +18 -0
  50. package/dist/editor-runtime/TimelineModel.d.ts.map +1 -1
  51. package/dist/editor-runtime/TimelineModel.js +67 -3
  52. package/dist/editor-runtime/TimelineModel.js.map +1 -1
  53. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts +98 -0
  54. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts.map +1 -0
  55. package/dist/editor-runtime/TimelineRuntimeBridge.js +186 -0
  56. package/dist/editor-runtime/TimelineRuntimeBridge.js.map +1 -0
  57. package/dist/editor-runtime/index.d.ts +3 -1
  58. package/dist/editor-runtime/index.d.ts.map +1 -1
  59. package/dist/editor-runtime/index.js +1 -0
  60. package/dist/editor-runtime/index.js.map +1 -1
  61. package/dist/engine/agent-api/AnimationController.d.ts +607 -0
  62. package/dist/engine/agent-api/AnimationController.d.ts.map +1 -0
  63. package/dist/engine/agent-api/AnimationController.js +2192 -0
  64. package/dist/engine/agent-api/AnimationController.js.map +1 -0
  65. package/dist/engine/agent-api/AssetEvidence.d.ts +88 -0
  66. package/dist/engine/agent-api/AssetEvidence.d.ts.map +1 -0
  67. package/dist/engine/agent-api/AssetEvidence.js +157 -0
  68. package/dist/engine/agent-api/AssetEvidence.js.map +1 -0
  69. package/dist/engine/agent-api/AuraAppHandle.d.ts +55 -0
  70. package/dist/engine/agent-api/AuraAppHandle.d.ts.map +1 -0
  71. package/dist/engine/agent-api/AuraAppHandle.js +15 -0
  72. package/dist/engine/agent-api/AuraAppHandle.js.map +1 -0
  73. package/dist/engine/agent-api/AuraVoiceBridge.d.ts +96 -0
  74. package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -0
  75. package/dist/engine/agent-api/AuraVoiceBridge.js +370 -0
  76. package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -0
  77. package/dist/engine/agent-api/CartoonDirector.d.ts +95 -0
  78. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
  79. package/dist/engine/agent-api/CartoonDirector.js +342 -0
  80. package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
  81. package/dist/engine/agent-api/CartoonPerformance.d.ts +149 -0
  82. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
  83. package/dist/engine/agent-api/CartoonPerformance.js +317 -0
  84. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
  85. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +132 -0
  86. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
  87. package/dist/engine/agent-api/CartoonRenderQueue.js +385 -0
  88. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
  89. package/dist/engine/agent-api/CharacterAssembly.d.ts +126 -0
  90. package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -0
  91. package/dist/engine/agent-api/CharacterAssembly.js +280 -0
  92. package/dist/engine/agent-api/CharacterAssembly.js.map +1 -0
  93. package/dist/engine/agent-api/DialoguePerformance.d.ts +150 -0
  94. package/dist/engine/agent-api/DialoguePerformance.d.ts.map +1 -0
  95. package/dist/engine/agent-api/DialoguePerformance.js +335 -0
  96. package/dist/engine/agent-api/DialoguePerformance.js.map +1 -0
  97. package/dist/engine/agent-api/FrameLoop.d.ts +70 -0
  98. package/dist/engine/agent-api/FrameLoop.d.ts.map +1 -0
  99. package/dist/engine/agent-api/FrameLoop.js +165 -0
  100. package/dist/engine/agent-api/FrameLoop.js.map +1 -0
  101. package/dist/engine/agent-api/GameAssetValidation.d.ts +279 -0
  102. package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -0
  103. package/dist/engine/agent-api/GameAssetValidation.js +719 -0
  104. package/dist/engine/agent-api/GameAssetValidation.js.map +1 -0
  105. package/dist/engine/agent-api/GameEvidence.d.ts +148 -0
  106. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -0
  107. package/dist/engine/agent-api/GameEvidence.js +269 -0
  108. package/dist/engine/agent-api/GameEvidence.js.map +1 -0
  109. package/dist/engine/agent-api/GameRuntime.d.ts +931 -0
  110. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -0
  111. package/dist/engine/agent-api/GameRuntime.js +2229 -0
  112. package/dist/engine/agent-api/GameRuntime.js.map +1 -0
  113. package/dist/engine/agent-api/GameSceneBridge.d.ts +54 -0
  114. package/dist/engine/agent-api/GameSceneBridge.d.ts.map +1 -0
  115. package/dist/engine/agent-api/GameSceneBridge.js +110 -0
  116. package/dist/engine/agent-api/GameSceneBridge.js.map +1 -0
  117. package/dist/engine/agent-api/PromptAnimationContract.d.ts +278 -0
  118. package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -0
  119. package/dist/engine/agent-api/PromptAnimationContract.js +238 -0
  120. package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -0
  121. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +183 -0
  122. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -0
  123. package/dist/engine/agent-api/PromptAnimationEvidence.js +454 -0
  124. package/dist/engine/agent-api/PromptAnimationEvidence.js.map +1 -0
  125. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +100 -0
  126. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -0
  127. package/dist/engine/agent-api/RuntimeNodeHandle.js +36 -0
  128. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -0
  129. package/dist/engine/agent-api/ShotTimeline.d.ts +179 -0
  130. package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -0
  131. package/dist/engine/agent-api/ShotTimeline.js +264 -0
  132. package/dist/engine/agent-api/ShotTimeline.js.map +1 -0
  133. package/dist/engine/agent-api/VisemeController.d.ts +89 -0
  134. package/dist/engine/agent-api/VisemeController.d.ts.map +1 -0
  135. package/dist/engine/agent-api/VisemeController.js +207 -0
  136. package/dist/engine/agent-api/VisemeController.js.map +1 -0
  137. package/dist/engine/agent-api/game-kits/fighting.d.ts +123 -0
  138. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -0
  139. package/dist/engine/agent-api/game-kits/fighting.js +483 -0
  140. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -0
  141. package/dist/engine/agent-api/game-kits/index.d.ts +15 -0
  142. package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -0
  143. package/dist/engine/agent-api/game-kits/index.js +6 -0
  144. package/dist/engine/agent-api/game-kits/index.js.map +1 -0
  145. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +18 -81
  146. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts.map +1 -1
  147. package/dist/engine/agent-api/humanoid-walk-runtime.js +4 -279
  148. package/dist/engine/agent-api/humanoid-walk-runtime.js.map +1 -1
  149. package/dist/engine/agent-api/index.d.ts +490 -4
  150. package/dist/engine/agent-api/index.d.ts.map +1 -1
  151. package/dist/engine/agent-api/index.js +759 -1802
  152. package/dist/engine/agent-api/index.js.map +1 -1
  153. package/dist/engine/agent-api/particle-fountain-runtime.d.ts +5 -80
  154. package/dist/engine/agent-api/particle-fountain-runtime.d.ts.map +1 -1
  155. package/dist/engine/agent-api/particle-fountain-runtime.js +7 -291
  156. package/dist/engine/agent-api/particle-fountain-runtime.js.map +1 -1
  157. package/dist/engine/agent-api/product-viewer-runtime.d.ts +17 -107
  158. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  159. package/dist/engine/agent-api/product-viewer-runtime.js +4 -330
  160. package/dist/engine/agent-api/product-viewer-runtime.js.map +1 -1
  161. package/dist/index.d.ts +1 -0
  162. package/dist/index.js +1 -0
  163. package/dist/physics/CollisionVolumes.d.ts +57 -0
  164. package/dist/physics/CollisionVolumes.d.ts.map +1 -0
  165. package/dist/physics/CollisionVolumes.js +159 -0
  166. package/dist/physics/CollisionVolumes.js.map +1 -0
  167. package/dist/physics/HitboxWorld.d.ts +229 -0
  168. package/dist/physics/HitboxWorld.d.ts.map +1 -0
  169. package/dist/physics/HitboxWorld.js +640 -0
  170. package/dist/physics/HitboxWorld.js.map +1 -0
  171. package/dist/physics/KinematicBody.d.ts +157 -0
  172. package/dist/physics/KinematicBody.d.ts.map +1 -0
  173. package/dist/physics/KinematicBody.js +405 -0
  174. package/dist/physics/KinematicBody.js.map +1 -0
  175. package/dist/physics/KinematicWorld.d.ts +58 -0
  176. package/dist/physics/KinematicWorld.d.ts.map +1 -0
  177. package/dist/physics/KinematicWorld.js +246 -0
  178. package/dist/physics/KinematicWorld.js.map +1 -0
  179. package/dist/physics/index.d.ts +4 -0
  180. package/dist/physics/index.d.ts.map +1 -1
  181. package/dist/physics/index.js +4 -0
  182. package/dist/physics/index.js.map +1 -1
  183. package/dist/rendering/ForwardPass.js +2 -2
  184. package/dist/rendering/ShaderLibrary.js +2 -2
  185. package/dist/rendering/SkinnedLitMaterial.js +3 -3
  186. package/dist/rendering/SkinnedUnlitMaterial.js +3 -3
  187. package/dist/scene/Renderable.js +2 -2
  188. package/dist/scripting/VisualGraph.d.ts +2 -1
  189. package/dist/scripting/VisualGraph.d.ts.map +1 -1
  190. package/dist/scripting/VisualGraph.js +118 -1
  191. package/dist/scripting/VisualGraph.js.map +1 -1
  192. package/dist/scripting/VisualGraphContext.d.ts +123 -0
  193. package/dist/scripting/VisualGraphContext.d.ts.map +1 -0
  194. package/dist/scripting/VisualGraphContext.js +2 -0
  195. package/dist/scripting/VisualGraphContext.js.map +1 -0
  196. package/dist/scripting/VisualGraphExecutor.d.ts +6 -1
  197. package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
  198. package/dist/scripting/VisualGraphExecutor.js +364 -7
  199. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  200. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  201. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  202. package/dist/scripting/VisualNodeCatalog.js +61 -1
  203. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  204. package/dist/scripting/index.d.ts +1 -0
  205. package/dist/scripting/index.d.ts.map +1 -1
  206. package/dist/scripting/index.js.map +1 -1
  207. package/package.json +193 -121
  208. package/templates/product-viewer/src/main.ts +1 -0
  209. package/dist/three-compat/ThreeApiInventory.d.ts +0 -18
  210. package/dist/three-compat/ThreeApiInventory.d.ts.map +0 -1
  211. package/dist/three-compat/ThreeApiInventory.js +0 -99
  212. package/dist/three-compat/ThreeApiInventory.js.map +0 -1
  213. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts +0 -30
  214. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts.map +0 -1
  215. package/dist/three-compat/ThreeCompatibilityMatrix.js +0 -69
  216. package/dist/three-compat/ThreeCompatibilityMatrix.js.map +0 -1
  217. package/dist/three-compat/animation/index.d.ts +0 -3
  218. package/dist/three-compat/animation/index.d.ts.map +0 -1
  219. package/dist/three-compat/animation/index.js +0 -2
  220. package/dist/three-compat/animation/index.js.map +0 -1
  221. package/dist/three-compat/cameras/index.d.ts +0 -24
  222. package/dist/three-compat/cameras/index.d.ts.map +0 -1
  223. package/dist/three-compat/cameras/index.js +0 -44
  224. package/dist/three-compat/cameras/index.js.map +0 -1
  225. package/dist/three-compat/controls/index.d.ts +0 -3
  226. package/dist/three-compat/controls/index.d.ts.map +0 -1
  227. package/dist/three-compat/controls/index.js +0 -2
  228. package/dist/three-compat/controls/index.js.map +0 -1
  229. package/dist/three-compat/core/Object3DCompat.d.ts +0 -62
  230. package/dist/three-compat/core/Object3DCompat.d.ts.map +0 -1
  231. package/dist/three-compat/core/Object3DCompat.js +0 -112
  232. package/dist/three-compat/core/Object3DCompat.js.map +0 -1
  233. package/dist/three-compat/core/RaycasterCompat.d.ts +0 -18
  234. package/dist/three-compat/core/RaycasterCompat.d.ts.map +0 -1
  235. package/dist/three-compat/core/RaycasterCompat.js +0 -28
  236. package/dist/three-compat/core/RaycasterCompat.js.map +0 -1
  237. package/dist/three-compat/core/SceneCompat.d.ts +0 -8
  238. package/dist/three-compat/core/SceneCompat.d.ts.map +0 -1
  239. package/dist/three-compat/core/SceneCompat.js +0 -8
  240. package/dist/three-compat/core/SceneCompat.js.map +0 -1
  241. package/dist/three-compat/geometries/index.d.ts +0 -67
  242. package/dist/three-compat/geometries/index.d.ts.map +0 -1
  243. package/dist/three-compat/geometries/index.js +0 -114
  244. package/dist/three-compat/geometries/index.js.map +0 -1
  245. package/dist/three-compat/helpers/index.d.ts +0 -40
  246. package/dist/three-compat/helpers/index.d.ts.map +0 -1
  247. package/dist/three-compat/helpers/index.js +0 -129
  248. package/dist/three-compat/helpers/index.js.map +0 -1
  249. package/dist/three-compat/index.d.ts +0 -32
  250. package/dist/three-compat/index.d.ts.map +0 -1
  251. package/dist/three-compat/index.js +0 -22
  252. package/dist/three-compat/index.js.map +0 -1
  253. package/dist/three-compat/lights/index.d.ts +0 -35
  254. package/dist/three-compat/lights/index.d.ts.map +0 -1
  255. package/dist/three-compat/lights/index.js +0 -39
  256. package/dist/three-compat/lights/index.js.map +0 -1
  257. package/dist/three-compat/loaders/index.d.ts +0 -54
  258. package/dist/three-compat/loaders/index.d.ts.map +0 -1
  259. package/dist/three-compat/loaders/index.js +0 -79
  260. package/dist/three-compat/loaders/index.js.map +0 -1
  261. package/dist/three-compat/materials/index.d.ts +0 -70
  262. package/dist/three-compat/materials/index.d.ts.map +0 -1
  263. package/dist/three-compat/materials/index.js +0 -85
  264. package/dist/three-compat/materials/index.js.map +0 -1
  265. package/dist/three-compat/math/index.d.ts +0 -34
  266. package/dist/three-compat/math/index.d.ts.map +0 -1
  267. package/dist/three-compat/math/index.js +0 -90
  268. package/dist/three-compat/math/index.js.map +0 -1
  269. package/dist/three-compat/migration/CompatibilityWarnings.d.ts +0 -6
  270. package/dist/three-compat/migration/CompatibilityWarnings.d.ts.map +0 -1
  271. package/dist/three-compat/migration/CompatibilityWarnings.js +0 -8
  272. package/dist/three-compat/migration/CompatibilityWarnings.js.map +0 -1
  273. package/dist/three-compat/migration/ImportMap.d.ts +0 -2
  274. package/dist/three-compat/migration/ImportMap.d.ts.map +0 -1
  275. package/dist/three-compat/migration/ImportMap.js +0 -10
  276. package/dist/three-compat/migration/ImportMap.js.map +0 -1
  277. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts +0 -8
  278. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts.map +0 -1
  279. package/dist/three-compat/migration/ThreeToA3DAdapter.js +0 -20
  280. package/dist/three-compat/migration/ThreeToA3DAdapter.js.map +0 -1
  281. package/dist/three-compat/postprocessing/index.d.ts +0 -2
  282. package/dist/three-compat/postprocessing/index.d.ts.map +0 -1
  283. package/dist/three-compat/postprocessing/index.js +0 -2
  284. package/dist/three-compat/postprocessing/index.js.map +0 -1
  285. package/dist/three-compat/render-targets/index.d.ts +0 -17
  286. package/dist/three-compat/render-targets/index.d.ts.map +0 -1
  287. package/dist/three-compat/render-targets/index.js +0 -29
  288. package/dist/three-compat/render-targets/index.js.map +0 -1
  289. package/dist/three-compat/shaders/index.d.ts +0 -3
  290. package/dist/three-compat/shaders/index.d.ts.map +0 -1
  291. package/dist/three-compat/shaders/index.js +0 -3
  292. package/dist/three-compat/shaders/index.js.map +0 -1
  293. package/dist/three-compat/textures/index.d.ts +0 -19
  294. package/dist/three-compat/textures/index.d.ts.map +0 -1
  295. package/dist/three-compat/textures/index.js +0 -24
  296. package/dist/three-compat/textures/index.js.map +0 -1
@@ -0,0 +1,264 @@
1
+ import { createPromptAnimationIssue, normalizePromptAnimationTime, promptAnimationContractVersion, promptAnimationFrameAtTime } from "./PromptAnimationContract.js";
2
+ import { sampleVisemeTrack } from "./VisemeController.js";
3
+ export function defineShotTimeline(timeline) {
4
+ return timeline;
5
+ }
6
+ export function createShotTimeline(input) {
7
+ let duration = input.duration ?? 0;
8
+ for (const shot of input.shots) {
9
+ duration = Math.max(duration, shot.endTime);
10
+ }
11
+ return {
12
+ artifact: "shot-timeline",
13
+ contractId: promptAnimationContractVersion,
14
+ episodeId: input.episodeId,
15
+ frameRate: input.frameRate,
16
+ duration: normalizePromptAnimationTime(duration),
17
+ shots: input.shots,
18
+ ...(input.generatedAt ? { generatedAt: input.generatedAt } : {})
19
+ };
20
+ }
21
+ export function shotTimeline(input) {
22
+ return createShotTimeline(input);
23
+ }
24
+ export function createShotPlaybackPlan(input) {
25
+ const runtimeNodeByCharacterId = {};
26
+ for (const shot of input.timeline.shots) {
27
+ for (const character of shot.characters) {
28
+ runtimeNodeByCharacterId[character.characterId] =
29
+ input.runtimeNodeByCharacterId?.[character.characterId] ?? character.characterId;
30
+ }
31
+ }
32
+ return {
33
+ kind: "shot-playback-plan",
34
+ timeline: input.timeline,
35
+ ...(input.performance ? { performance: input.performance } : {}),
36
+ ...(input.captions ? { captions: input.captions } : {}),
37
+ ...(input.visemes ? { visemes: input.visemes } : {}),
38
+ runtimeNodeByCharacterId,
39
+ loop: input.loop ?? false
40
+ };
41
+ }
42
+ export function sampleShotPlaybackPlan(plan, time) {
43
+ const sampledTime = normalizeShotPlaybackTime(plan, time);
44
+ const shot = getShotAtTime(plan.timeline, sampledTime);
45
+ if (!shot) {
46
+ return {
47
+ time: sampledTime,
48
+ frame: promptAnimationFrameAtTime(sampledTime, plan.timeline.frameRate),
49
+ nodeUpdates: []
50
+ };
51
+ }
52
+ const caption = plan.captions?.cues.find((cue) => sampledTime >= cue.startTime && sampledTime < cue.endTime);
53
+ const nodeUpdates = shot.characters.map((character) => {
54
+ const activeCues = activePerformanceCues(plan.performance, sampledTime, character.characterId, shot.shotId);
55
+ const primaryCue = activeCues.find((cue) => cue.action === "speak") ??
56
+ activeCues.find((cue) => cue.animationClip || cue.blocking || cue.body) ??
57
+ activeCues[activeCues.length - 1];
58
+ const viseme = plan.visemes ? sampleVisemeTrack(plan.visemes, sampledTime, character.characterId) : undefined;
59
+ const blockingPosition = primaryCue?.blocking?.position ?? primaryCue?.body?.position ?? character.position;
60
+ const blockingRotation = primaryCue?.blocking?.rotation ?? primaryCue?.body?.rotation ?? facingRotation(character.facing);
61
+ const scale = primaryCue?.blocking?.scale ?? primaryCue?.body?.scale;
62
+ return {
63
+ nodeId: plan.runtimeNodeByCharacterId[character.characterId] ?? character.characterId,
64
+ characterId: character.characterId,
65
+ ...(blockingPosition ? { position: blockingPosition } : {}),
66
+ ...(blockingRotation ? { rotation: blockingRotation } : {}),
67
+ ...(scale !== undefined ? { scale } : {}),
68
+ visible: primaryCue?.blocking?.visible ?? true,
69
+ ...(primaryCue?.animationClip ?? character.animationClip
70
+ ? { animationClip: primaryCue?.animationClip ?? character.animationClip }
71
+ : {}),
72
+ action: primaryCue?.action ?? character.action,
73
+ ...(primaryCue?.emotion ?? character.emotion ? { emotion: primaryCue?.emotion ?? character.emotion } : {}),
74
+ ...(primaryCue?.gaze?.targetId
75
+ ? { gazeTargetId: primaryCue.gaze.targetId }
76
+ : typeof character.lookAt === "string"
77
+ ? { gazeTargetId: character.lookAt }
78
+ : {}),
79
+ activeCueIds: activeCues.map((cue) => cue.id),
80
+ ...(viseme
81
+ ? {
82
+ mouth: {
83
+ visemeId: viseme.primaryVisemeId,
84
+ mouthOpenness: viseme.mouthOpenness,
85
+ primitiveMouthCard: viseme.primitiveMouthCard,
86
+ blendshapeWeights: viseme.blendshapeWeights
87
+ }
88
+ }
89
+ : {})
90
+ };
91
+ });
92
+ return {
93
+ time: sampledTime,
94
+ frame: promptAnimationFrameAtTime(sampledTime, plan.timeline.frameRate),
95
+ shot,
96
+ shotId: shot.shotId,
97
+ sceneId: shot.sceneId,
98
+ ...(caption ? { caption } : {}),
99
+ nodeUpdates
100
+ };
101
+ }
102
+ export function applyShotPlaybackFrame(app, framePlan, options = {}) {
103
+ for (const update of framePlan.nodeUpdates) {
104
+ const node = app.nodes.get(update.nodeId);
105
+ if (node)
106
+ applyNodeUpdate(node, update, options.playAnimationClips ?? true);
107
+ const mouthNodeId = update.characterId ? options.primitiveMouthNodeByCharacterId?.[update.characterId] : undefined;
108
+ const mouthNode = mouthNodeId ? app.nodes.get(mouthNodeId) : undefined;
109
+ if (mouthNode && update.mouth)
110
+ applyPrimitiveMouthUpdate(mouthNode, update.mouth, update.position);
111
+ }
112
+ options.onCaption?.(framePlan.caption, framePlan);
113
+ }
114
+ export function installShotPlayback(app, plan, options = {}) {
115
+ let localTime = options.timeOffset ?? 0;
116
+ return app.onFrame((frame) => {
117
+ const sampledTime = options.useRuntimeTime === false ? localTime : frame.time + (options.timeOffset ?? 0);
118
+ applyShotPlaybackFrame(app, sampleShotPlaybackPlan(plan, sampledTime), options);
119
+ localTime = normalizePromptAnimationTime(localTime + frame.dt);
120
+ });
121
+ }
122
+ export function shotDuration(shot) {
123
+ return normalizePromptAnimationTime(shot.endTime - shot.startTime);
124
+ }
125
+ export function getShotAtTime(timeline, time) {
126
+ const normalized = normalizePromptAnimationTime(time);
127
+ for (const shot of timeline.shots) {
128
+ if (normalized >= shot.startTime && normalized < shot.endTime)
129
+ return shot;
130
+ }
131
+ const lastShot = timeline.shots[timeline.shots.length - 1];
132
+ if (lastShot && normalized === lastShot.endTime)
133
+ return lastShot;
134
+ return undefined;
135
+ }
136
+ export function getShotTimelineCaptureTimes(timeline) {
137
+ const times = new Set();
138
+ for (const shot of timeline.shots) {
139
+ for (const captureTime of shot.captureTimes) {
140
+ times.add(normalizePromptAnimationTime(captureTime));
141
+ }
142
+ }
143
+ return [...times].sort((a, b) => a - b);
144
+ }
145
+ export function validateShotTimeline(timeline) {
146
+ const issues = [];
147
+ const shotIds = new Set();
148
+ let previousEnd = 0;
149
+ if (timeline.frameRate <= 0) {
150
+ issues.push(createPromptAnimationIssue("error", "shot-timeline-frame-rate", "Shot timeline frame rate must be positive."));
151
+ }
152
+ if (timeline.shots.length === 0) {
153
+ issues.push(createPromptAnimationIssue("error", "shot-timeline-empty", "Shot timeline must contain at least one shot."));
154
+ }
155
+ timeline.shots.forEach((shot, index) => {
156
+ if (!shot.shotId) {
157
+ issues.push(createPromptAnimationIssue("error", "shot-id-missing", `Shot at index ${index} is missing a stable shot id.`, {
158
+ path: `shots.${index}.shotId`
159
+ }));
160
+ }
161
+ if (shotIds.has(shot.shotId)) {
162
+ issues.push(createPromptAnimationIssue("error", "shot-id-duplicate", `Duplicate shot id "${shot.shotId}".`, {
163
+ path: `shots.${index}.shotId`
164
+ }));
165
+ }
166
+ shotIds.add(shot.shotId);
167
+ if (shot.endTime <= shot.startTime) {
168
+ issues.push(createPromptAnimationIssue("error", "shot-duration-invalid", `Shot "${shot.shotId}" must end after it starts.`, {
169
+ path: `shots.${index}`,
170
+ time: shot.startTime
171
+ }));
172
+ }
173
+ if (index > 0 && shot.startTime < previousEnd) {
174
+ issues.push(createPromptAnimationIssue("error", "shot-overlap", `Shot "${shot.shotId}" overlaps the previous shot.`, {
175
+ path: `shots.${index}`,
176
+ time: shot.startTime
177
+ }));
178
+ }
179
+ for (const captureTime of shot.captureTimes) {
180
+ if (captureTime < shot.startTime || captureTime > shot.endTime) {
181
+ issues.push(createPromptAnimationIssue("error", "shot-capture-outside-bounds", `Capture time ${captureTime}s is outside shot "${shot.shotId}".`, {
182
+ path: `shots.${index}.captureTimes`,
183
+ frame: promptAnimationFrameAtTime(captureTime, timeline.frameRate),
184
+ time: captureTime
185
+ }));
186
+ }
187
+ }
188
+ previousEnd = Math.max(previousEnd, shot.endTime);
189
+ });
190
+ if (previousEnd > timeline.duration) {
191
+ issues.push(createPromptAnimationIssue("error", "shot-timeline-duration-short", "Shot timeline duration is shorter than its final shot.", { time: previousEnd }));
192
+ }
193
+ return issues;
194
+ }
195
+ export function createShotTimelineDiagnostics(timeline) {
196
+ const sceneIds = new Set();
197
+ for (const shot of timeline.shots)
198
+ sceneIds.add(shot.sceneId);
199
+ const captureTimes = getShotTimelineCaptureTimes(timeline);
200
+ return {
201
+ shotCount: timeline.shots.length,
202
+ duration: timeline.duration,
203
+ captureCount: captureTimes.length,
204
+ uniqueSceneIds: [...sceneIds],
205
+ frameRate: timeline.frameRate,
206
+ issues: validateShotTimeline(timeline)
207
+ };
208
+ }
209
+ function activePerformanceCues(performance, time, characterId, shotId) {
210
+ if (!performance)
211
+ return [];
212
+ return performance.cues.filter((cue) => {
213
+ if (cue.characterId !== characterId)
214
+ return false;
215
+ if (cue.shotId && cue.shotId !== shotId)
216
+ return false;
217
+ return time >= cue.startTime && time < cue.endTime;
218
+ });
219
+ }
220
+ function normalizeShotPlaybackTime(plan, time) {
221
+ const normalized = normalizePromptAnimationTime(time);
222
+ if (!plan.loop || plan.timeline.duration <= 0)
223
+ return normalized;
224
+ return normalizePromptAnimationTime(normalized % plan.timeline.duration);
225
+ }
226
+ function facingRotation(facing) {
227
+ if (facing === "left")
228
+ return [0, -0.35, 0];
229
+ if (facing === "right")
230
+ return [0, 0.35, 0];
231
+ if (facing === "three-quarter")
232
+ return [0, 0.18, 0];
233
+ return undefined;
234
+ }
235
+ function applyNodeUpdate(node, update, playAnimationClips) {
236
+ if (update.visible !== undefined)
237
+ node.setVisible?.(update.visible);
238
+ if (update.position)
239
+ node.setPosition?.(update.position[0], update.position[1], update.position[2]);
240
+ if (update.rotation)
241
+ node.setRotation?.(update.rotation[0], update.rotation[1], update.rotation[2]);
242
+ if (update.scale !== undefined)
243
+ node.setScale?.(update.scale);
244
+ if (playAnimationClips && update.animationClip)
245
+ node.play?.(update.animationClip, { loop: true });
246
+ }
247
+ function applyPrimitiveMouthUpdate(mouthNode, mouth, bodyPosition) {
248
+ const openness = Math.min(1, Math.max(0, mouth.mouthOpenness));
249
+ const width = mouth.primitiveMouthCard === "round"
250
+ ? 0.16
251
+ : mouth.primitiveMouthCard === "wide"
252
+ ? 0.34
253
+ : mouth.primitiveMouthCard === "narrow"
254
+ ? 0.12
255
+ : mouth.primitiveMouthCard === "smile"
256
+ ? 0.3
257
+ : 0.22;
258
+ const height = mouth.primitiveMouthCard === "closed" ? 0.025 : 0.035 + openness * 0.12;
259
+ if (bodyPosition)
260
+ mouthNode.setPosition?.(bodyPosition[0], bodyPosition[1] + 0.05, bodyPosition[2] + 0.32);
261
+ mouthNode.setScale?.([width, height, 0.025]);
262
+ mouthNode.setVisible?.(mouth.primitiveMouthCard !== "closed" || openness > 0.04);
263
+ }
264
+ //# sourceMappingURL=ShotTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShotTimeline.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotTimeline.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,EAM3B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAA8E,MAAM,uBAAuB,CAAC;AAmLtI,MAAM,UAAU,kBAAkB,CAA+C,QAAmB;IAClG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,4BAA4B,CAAC,QAAQ,CAAC;QAChD,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,MAAM,wBAAwB,GAAsC,EAAE,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,wBAAwB,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC7C,KAAK,CAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,wBAAwB;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAsB,EACtB,IAA4B;IAE5B,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvE,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,IAAI,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7G,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACpD,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5G,MAAM,UAAU,GACd,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC;YACvE,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9G,MAAM,gBAAgB,GAAG,UAAU,EAAE,QAAQ,EAAE,QAAQ,IAAI,UAAU,EAAE,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC;QAC5G,MAAM,gBAAgB,GAAG,UAAU,EAAE,QAAQ,EAAE,QAAQ,IAAI,UAAU,EAAE,IAAI,EAAE,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1H,MAAM,KAAK,GAAG,UAAU,EAAE,QAAQ,EAAE,KAAK,IAAI,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,WAAW;YACrF,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;YAC9C,GAAG,CAAC,UAAU,EAAE,aAAa,IAAI,SAAS,CAAC,aAAa;gBACtD,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,IAAI,SAAS,CAAC,aAAa,EAAE;gBACzE,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,SAAS,CAAC,MAAM;YAC9C,GAAG,CAAC,UAAU,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1G,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ;gBAC5B,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC5C,CAAC,CAAC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;oBACpC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE;oBACpC,CAAC,CAAC,EAAE,CAAC;YACT,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAM;gBACR,CAAC,CAAC;oBACE,KAAK,EAAE;wBACL,QAAQ,EAAE,MAAM,CAAC,eAAe;wBAChC,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;wBAC7C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;qBAC5C;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvE,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,GAAuF,EACvF,SAAgC,EAChC,UAAyC,EAAE;IAE3C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,IAAI;YAAE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC;QAE5E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK;YAAE,yBAAyB,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrG,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAA2B,EAC3B,IAAsB,EACtB,UAAsC,EAAE;IAExC,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;QAC1G,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAChF,SAAS,GAAG,4BAA4B,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,OAAO,4BAA4B,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAA8B,EAC9B,IAA4B;IAE5B,MAAM,UAAU,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;IAC7E,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,IAAI,QAAQ,IAAI,UAAU,KAAK,QAAQ,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IACjE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAA8B;IACxE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAA8B;IACjE,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,0BAA0B,EAAE,4CAA4C,CAAC,CAAC,CAAC;IAC7H,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,qBAAqB,EAAE,+CAA+C,CAAC,CAAC,CAAC;IAC3H,CAAC;IAED,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CACT,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,KAAK,+BAA+B,EAAE;gBAC5G,IAAI,EAAE,SAAS,KAAK,SAAS;aAC9B,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACT,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,IAAI,CAAC,MAAM,IAAI,EAAE;gBAC9F,IAAI,EAAE,SAAS,KAAK,SAAS;aAC9B,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACT,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,EAAE,SAAS,IAAI,CAAC,MAAM,6BAA6B,EAAE;gBAC9G,IAAI,EAAE,SAAS,KAAK,EAAE;gBACtB,IAAI,EAAE,IAAI,CAAC,SAAS;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CACT,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,IAAI,CAAC,MAAM,+BAA+B,EAAE;gBACvG,IAAI,EAAE,SAAS,KAAK,EAAE;gBACtB,IAAI,EAAE,IAAI,CAAC,SAAS;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CACT,0BAA0B,CACxB,OAAO,EACP,6BAA6B,EAC7B,gBAAgB,WAAW,sBAAsB,IAAI,CAAC,MAAM,IAAI,EAChE;oBACE,IAAI,EAAE,SAAS,KAAK,eAAe;oBACnC,KAAK,EAAE,0BAA0B,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC;oBAClE,IAAI,EAAE,WAAW;iBAClB,CACF,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,0BAA0B,CACxB,OAAO,EACP,8BAA8B,EAC9B,wDAAwD,EACxD,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAA8B;IAC1E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC3D,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,YAAY,CAAC,MAAM;QACjC,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC;QAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAAmD,EACnD,IAA4B,EAC5B,WAA8B,EAC9B,MAAyB;IAEzB,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACrC,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAsB,EAAE,IAA4B;IACrF,MAAM,UAAU,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IACjE,OAAO,4BAA4B,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,MAAuC;IAC7D,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,IAAmC,EAAE,MAA8B,EAAE,kBAA2B;IACvH,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ;QAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,MAAM,CAAC,QAAQ;QAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,kBAAkB,IAAI,MAAM,CAAC,aAAa;QAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,yBAAyB,CAChC,SAAwC,EACxC,KAAsC,EACtC,YAAmC;IAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GACT,KAAK,CAAC,kBAAkB,KAAK,OAAO;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,MAAM;YACnC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,QAAQ;gBACrC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,OAAO;oBACpC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,CAAC;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;IACvF,IAAI,YAAY;QAAE,SAAS,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3G,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,kBAAkB,KAAK,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { type PromptAnimationArtifactBase, type PromptAnimationFrameRate, type PromptAnimationId, type PromptAnimationLanguageCode, type PromptAnimationSeconds, type PromptAnimationValidationIssue } from "./PromptAnimationContract.js";
2
+ export type AuraVoiceVisemeFormat = "auravoice-visemes-v2";
3
+ export type AuraVoiceVisemeId = "sil" | "aa" | "ae" | "ah" | "ao" | "eh" | "er" | "ih" | "iy" | "oh" | "ow" | "uh" | "uw" | "bmp" | "ch" | "d" | "fv" | "g" | "k" | "l" | "m" | "n" | "p" | "r" | "s" | "th" | "wq" | string;
4
+ export type PrimitiveMouthCard = "closed" | "narrow" | "open" | "wide" | "round" | "smile";
5
+ export interface AuraVoiceVisemeCue {
6
+ readonly id: PromptAnimationId;
7
+ readonly characterId: PromptAnimationId;
8
+ readonly speakerId?: PromptAnimationId | undefined;
9
+ readonly lineId?: PromptAnimationId | undefined;
10
+ readonly phoneme?: string | undefined;
11
+ readonly phonemeId?: string | undefined;
12
+ readonly word?: string | undefined;
13
+ readonly wordIndex?: number | undefined;
14
+ readonly wordStartTime?: PromptAnimationSeconds | undefined;
15
+ readonly wordEndTime?: PromptAnimationSeconds | undefined;
16
+ readonly startTime: PromptAnimationSeconds;
17
+ readonly endTime: PromptAnimationSeconds;
18
+ readonly visemeId: AuraVoiceVisemeId;
19
+ readonly mouthOpenness: number;
20
+ readonly weight: number;
21
+ readonly weights?: Record<string, number> | undefined;
22
+ readonly blendshapeWeights?: Record<string, number> | undefined;
23
+ readonly blendshapeNames?: readonly string[] | undefined;
24
+ }
25
+ export interface AuraVoiceVisemeTrack extends PromptAnimationArtifactBase<"visemes"> {
26
+ readonly format: AuraVoiceVisemeFormat;
27
+ readonly language: PromptAnimationLanguageCode;
28
+ readonly frameRate: PromptAnimationFrameRate;
29
+ readonly cues: readonly AuraVoiceVisemeCue[];
30
+ }
31
+ export interface VisemeSample {
32
+ readonly time: PromptAnimationSeconds;
33
+ readonly characterId?: PromptAnimationId | undefined;
34
+ readonly activeCues: readonly AuraVoiceVisemeCue[];
35
+ readonly visemeId: AuraVoiceVisemeId;
36
+ readonly primaryVisemeId: AuraVoiceVisemeId;
37
+ readonly mouthOpenness: number;
38
+ readonly primitiveMouthCard: PrimitiveMouthCard;
39
+ readonly weights: Record<string, number>;
40
+ readonly blendshapeWeights: Record<string, number>;
41
+ }
42
+ export interface VisemeController {
43
+ readonly track: AuraVoiceVisemeTrack;
44
+ sample(time: PromptAnimationSeconds, characterId?: PromptAnimationId): VisemeSample;
45
+ validate(): readonly PromptAnimationValidationIssue[];
46
+ }
47
+ export interface PrimitiveMouthVisemeCueInput {
48
+ readonly characterId: PromptAnimationId;
49
+ readonly speakerId?: PromptAnimationId | undefined;
50
+ readonly lineId?: PromptAnimationId | undefined;
51
+ readonly startTime: PromptAnimationSeconds;
52
+ readonly endTime: PromptAnimationSeconds;
53
+ readonly openVisemeId?: AuraVoiceVisemeId | undefined;
54
+ readonly closeVisemeId?: AuraVoiceVisemeId | undefined;
55
+ }
56
+ export interface GlbVisemeBlendshapeExample {
57
+ readonly description: string;
58
+ readonly mouthFallback: "blendshape";
59
+ readonly requiredCharacterAssetRule: string;
60
+ readonly blendshapeMap: Record<string, string>;
61
+ readonly sampleWeights: Record<string, number>;
62
+ readonly notes: readonly string[];
63
+ }
64
+ export interface PrimitiveMouthExample {
65
+ readonly description: string;
66
+ readonly mouthFallback: "primitive-mouth-card";
67
+ readonly runtimeNodeSuffix: string;
68
+ readonly cards: readonly PrimitiveMouthCard[];
69
+ readonly notes: readonly string[];
70
+ }
71
+ export declare const primitiveMouthVisemeExample: PrimitiveMouthExample;
72
+ export declare const glbVisemeBlendshapeExample: GlbVisemeBlendshapeExample;
73
+ export declare function defineAuraVoiceVisemes<const TTrack extends AuraVoiceVisemeTrack>(track: TTrack): TTrack;
74
+ export declare function createAuraVoiceVisemeTrack(input: {
75
+ readonly episodeId: PromptAnimationId;
76
+ readonly language: PromptAnimationLanguageCode;
77
+ readonly frameRate: PromptAnimationFrameRate;
78
+ readonly cues: readonly AuraVoiceVisemeCue[];
79
+ readonly generatedAt?: string | undefined;
80
+ }): AuraVoiceVisemeTrack;
81
+ export declare function createPrimitiveMouthVisemeCues(input: PrimitiveMouthVisemeCueInput): readonly AuraVoiceVisemeCue[];
82
+ export declare function createGlbBlendshapeVisemeCue(input: Omit<AuraVoiceVisemeCue, "blendshapeWeights" | "blendshapeNames"> & {
83
+ readonly blendshapeMap?: Record<string, string> | undefined;
84
+ }): AuraVoiceVisemeCue;
85
+ export declare function primitiveMouthCardForViseme(visemeId: AuraVoiceVisemeId, mouthOpenness: number): PrimitiveMouthCard;
86
+ export declare function sampleVisemeTrack(track: AuraVoiceVisemeTrack, time: PromptAnimationSeconds, characterId?: PromptAnimationId): VisemeSample;
87
+ export declare function createVisemeController(track: AuraVoiceVisemeTrack): VisemeController;
88
+ export declare function validateVisemeTrack(track: AuraVoiceVisemeTrack): readonly PromptAnimationValidationIssue[];
89
+ //# sourceMappingURL=VisemeController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisemeController.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ import { createPromptAnimationIssue, normalizePromptAnimationTime, promptAnimationContractVersion } from "./PromptAnimationContract.js";
2
+ export const primitiveMouthVisemeExample = {
3
+ description: "Primitive character fallback that scales a small mouth-card runtime node from sampled visemes.",
4
+ mouthFallback: "primitive-mouth-card",
5
+ runtimeNodeSuffix: ":mouth",
6
+ cards: ["closed", "narrow", "open", "wide", "round", "smile"],
7
+ notes: [
8
+ "Use this for generated primitive characters only.",
9
+ "Register the mouth card with game.runtimeNode(`${characterId}:mouth`) and update it from sampleVisemeTrack."
10
+ ]
11
+ };
12
+ export const glbVisemeBlendshapeExample = {
13
+ description: "Typed GLB character example that drives named blendshape weights from AuraVoice visemes.",
14
+ mouthFallback: "blendshape",
15
+ requiredCharacterAssetRule: "Add the GLB with `npx @aura3d/cli@latest assets add ./assets/character.glb --name character`, then use model(assets.character).",
16
+ blendshapeMap: {
17
+ sil: "mouthClose",
18
+ aa: "mouthOpen",
19
+ ah: "mouthOpen",
20
+ ae: "mouthSmile",
21
+ eh: "mouthSmile",
22
+ iy: "mouthNarrow",
23
+ oh: "mouthFunnel",
24
+ ow: "mouthFunnel",
25
+ uw: "mouthPucker",
26
+ bmp: "mouthPress",
27
+ m: "mouthPress",
28
+ p: "mouthPress",
29
+ fv: "mouthLowerLipBite",
30
+ th: "tongueOut"
31
+ },
32
+ sampleWeights: {
33
+ mouthOpen: 0.68,
34
+ mouthFunnel: 0.12,
35
+ mouthSmile: 0.18,
36
+ mouthPress: 0
37
+ },
38
+ notes: [
39
+ "Do not reference a string asset id; import generated typed assets from ./aura-assets.",
40
+ "Keep primitive-mouth-card available as a fallback when a GLB does not expose matching blendshapes."
41
+ ]
42
+ };
43
+ export function defineAuraVoiceVisemes(track) {
44
+ return track;
45
+ }
46
+ export function createAuraVoiceVisemeTrack(input) {
47
+ return {
48
+ artifact: "visemes",
49
+ contractId: promptAnimationContractVersion,
50
+ episodeId: input.episodeId,
51
+ format: "auravoice-visemes-v2",
52
+ language: input.language,
53
+ frameRate: input.frameRate,
54
+ cues: input.cues,
55
+ ...(input.generatedAt ? { generatedAt: input.generatedAt } : {})
56
+ };
57
+ }
58
+ export function createPrimitiveMouthVisemeCues(input) {
59
+ const duration = Math.max(0.001, input.endTime - input.startTime);
60
+ const openEnd = input.startTime + duration * 0.62;
61
+ return [
62
+ {
63
+ id: `${input.lineId ?? input.characterId}:${input.startTime}:primitive-mouth-open`,
64
+ characterId: input.characterId,
65
+ ...(input.speakerId ? { speakerId: input.speakerId } : {}),
66
+ ...(input.lineId ? { lineId: input.lineId } : {}),
67
+ startTime: input.startTime,
68
+ endTime: normalizePromptAnimationTime(openEnd),
69
+ visemeId: input.openVisemeId ?? "ah",
70
+ mouthOpenness: 0.58,
71
+ weight: 0.9
72
+ },
73
+ {
74
+ id: `${input.lineId ?? input.characterId}:${input.startTime}:primitive-mouth-close`,
75
+ characterId: input.characterId,
76
+ ...(input.speakerId ? { speakerId: input.speakerId } : {}),
77
+ ...(input.lineId ? { lineId: input.lineId } : {}),
78
+ startTime: normalizePromptAnimationTime(openEnd),
79
+ endTime: input.endTime,
80
+ visemeId: input.closeVisemeId ?? "m",
81
+ mouthOpenness: 0.12,
82
+ weight: 0.82
83
+ }
84
+ ];
85
+ }
86
+ export function createGlbBlendshapeVisemeCue(input) {
87
+ const { blendshapeMap: inputBlendshapeMap, ...cue } = input;
88
+ const blendshapeMap = inputBlendshapeMap ?? glbVisemeBlendshapeExample.blendshapeMap;
89
+ const blendshapeName = blendshapeMap[input.visemeId] ?? blendshapeMap[String(input.visemeId)] ?? input.visemeId;
90
+ return {
91
+ ...cue,
92
+ blendshapeNames: [blendshapeName],
93
+ blendshapeWeights: {
94
+ [blendshapeName]: Math.min(1, Math.max(0, input.weight * Math.max(input.mouthOpenness, 0.12)))
95
+ }
96
+ };
97
+ }
98
+ export function primitiveMouthCardForViseme(visemeId, mouthOpenness) {
99
+ if (mouthOpenness <= 0.08 || visemeId === "sil")
100
+ return "closed";
101
+ if (visemeId === "oh" || visemeId === "ow" || visemeId === "uw" || visemeId === "wq")
102
+ return "round";
103
+ if (visemeId === "iy" || visemeId === "s" || visemeId === "th")
104
+ return "narrow";
105
+ if (mouthOpenness >= 0.72 || visemeId === "aa" || visemeId === "ah")
106
+ return "wide";
107
+ if (visemeId === "eh" || visemeId === "ae")
108
+ return "smile";
109
+ return "open";
110
+ }
111
+ export function sampleVisemeTrack(track, time, characterId) {
112
+ const normalized = normalizePromptAnimationTime(time);
113
+ const activeCues = [];
114
+ let primary;
115
+ let mouthOpenness = 0;
116
+ const weights = {};
117
+ const blendshapeWeights = {};
118
+ for (const cue of track.cues) {
119
+ if (characterId && cue.characterId !== characterId)
120
+ continue;
121
+ if (normalized < cue.startTime || normalized >= cue.endTime)
122
+ continue;
123
+ activeCues.push(cue);
124
+ if (!primary || cue.weight > primary.weight)
125
+ primary = cue;
126
+ mouthOpenness = Math.max(mouthOpenness, cue.mouthOpenness * cue.weight);
127
+ weights[cue.visemeId] = Math.max(weights[cue.visemeId] ?? 0, cue.weight);
128
+ if (cue.weights) {
129
+ for (const [name, value] of Object.entries(cue.weights)) {
130
+ weights[name] = Math.max(weights[name] ?? 0, value);
131
+ }
132
+ }
133
+ if (cue.blendshapeWeights) {
134
+ for (const [name, value] of Object.entries(cue.blendshapeWeights)) {
135
+ blendshapeWeights[name] = Math.max(blendshapeWeights[name] ?? 0, value * cue.weight);
136
+ }
137
+ }
138
+ }
139
+ const primaryVisemeId = primary?.visemeId ?? "sil";
140
+ return {
141
+ time: normalized,
142
+ ...(characterId ? { characterId } : {}),
143
+ activeCues,
144
+ visemeId: primaryVisemeId,
145
+ primaryVisemeId,
146
+ mouthOpenness,
147
+ primitiveMouthCard: primitiveMouthCardForViseme(primaryVisemeId, mouthOpenness),
148
+ weights,
149
+ blendshapeWeights
150
+ };
151
+ }
152
+ export function createVisemeController(track) {
153
+ return {
154
+ track,
155
+ sample(time, characterId) {
156
+ return sampleVisemeTrack(track, time, characterId);
157
+ },
158
+ validate() {
159
+ return validateVisemeTrack(track);
160
+ }
161
+ };
162
+ }
163
+ export function validateVisemeTrack(track) {
164
+ const issues = [];
165
+ const ids = new Set();
166
+ if (track.format !== "auravoice-visemes-v2") {
167
+ issues.push(createPromptAnimationIssue("error", "viseme-format", "Viseme track must use AuraVoice v2 format."));
168
+ }
169
+ if (track.frameRate <= 0) {
170
+ issues.push(createPromptAnimationIssue("error", "viseme-frame-rate", "Viseme track frame rate must be positive."));
171
+ }
172
+ track.cues.forEach((cue, index) => {
173
+ if (ids.has(cue.id)) {
174
+ issues.push(createPromptAnimationIssue("error", "viseme-id-duplicate", `Duplicate viseme cue id "${cue.id}".`, {
175
+ path: `cues.${index}.id`,
176
+ time: cue.startTime
177
+ }));
178
+ }
179
+ ids.add(cue.id);
180
+ if (cue.endTime <= cue.startTime) {
181
+ issues.push(createPromptAnimationIssue("error", "viseme-duration", `Viseme cue "${cue.id}" must end after it starts.`, {
182
+ path: `cues.${index}`,
183
+ time: cue.startTime
184
+ }));
185
+ }
186
+ if (cue.wordStartTime !== undefined && cue.wordEndTime !== undefined && cue.wordEndTime < cue.wordStartTime) {
187
+ issues.push(createPromptAnimationIssue("error", "viseme-word-timing-order", `Viseme cue "${cue.id}" word timing must not end before it starts.`, { path: `cues.${index}.wordEndTime`, time: cue.startTime }));
188
+ }
189
+ if (cue.wordIndex !== undefined && cue.wordIndex < 0) {
190
+ issues.push(createPromptAnimationIssue("error", "viseme-word-index", `Viseme cue "${cue.id}" word index must be non-negative.`, {
191
+ path: `cues.${index}.wordIndex`,
192
+ time: cue.startTime
193
+ }));
194
+ }
195
+ if (cue.mouthOpenness < 0 || cue.mouthOpenness > 1) {
196
+ issues.push(createPromptAnimationIssue("error", "viseme-mouth-openness", `Viseme cue "${cue.id}" mouth openness must be between 0 and 1.`, { path: `cues.${index}.mouthOpenness`, time: cue.startTime }));
197
+ }
198
+ if (cue.weight < 0 || cue.weight > 1) {
199
+ issues.push(createPromptAnimationIssue("error", "viseme-weight", `Viseme cue "${cue.id}" weight must be between 0 and 1.`, {
200
+ path: `cues.${index}.weight`,
201
+ time: cue.startTime
202
+ }));
203
+ }
204
+ });
205
+ return issues;
206
+ }
207
+ //# sourceMappingURL=VisemeController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisemeController.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeController.ts"],"names":[],"mappings":"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"}