@aura3d/engine 1.0.8 → 1.0.10

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 (289) hide show
  1. package/README.md +15 -15
  2. package/dist/animation/AnimationController.d.ts +1 -0
  3. package/dist/animation/AnimationController.d.ts.map +1 -1
  4. package/dist/animation/AnimationController.js +7 -0
  5. package/dist/animation/AnimationController.js.map +1 -1
  6. package/dist/audio/AudioFileManager.d.ts +54 -0
  7. package/dist/audio/AudioFileManager.d.ts.map +1 -0
  8. package/dist/audio/AudioFileManager.js +108 -0
  9. package/dist/audio/AudioFileManager.js.map +1 -0
  10. package/dist/audio/AudioTimelineTrack.d.ts +110 -0
  11. package/dist/audio/AudioTimelineTrack.d.ts.map +1 -0
  12. package/dist/audio/AudioTimelineTrack.js +297 -0
  13. package/dist/audio/AudioTimelineTrack.js.map +1 -0
  14. package/dist/audio/AudioWaveform.d.ts +42 -0
  15. package/dist/audio/AudioWaveform.d.ts.map +1 -0
  16. package/dist/audio/AudioWaveform.js +128 -0
  17. package/dist/audio/AudioWaveform.js.map +1 -0
  18. package/dist/audio/index.d.ts +6 -0
  19. package/dist/audio/index.d.ts.map +1 -1
  20. package/dist/audio/index.js +3 -0
  21. package/dist/audio/index.js.map +1 -1
  22. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts +14 -0
  23. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts.map +1 -0
  24. package/dist/aura3d-cli/cartoon-asset-profiles.js +42 -0
  25. package/dist/aura3d-cli/cartoon-asset-profiles.js.map +1 -0
  26. package/dist/aura3d-cli/cli.js +16 -6
  27. package/dist/aura3d-cli/cli.js.map +1 -1
  28. package/dist/aura3d-cli/game-asset-profiles.d.ts +13 -0
  29. package/dist/aura3d-cli/game-asset-profiles.d.ts.map +1 -0
  30. package/dist/aura3d-cli/game-asset-profiles.js +36 -0
  31. package/dist/aura3d-cli/game-asset-profiles.js.map +1 -0
  32. package/dist/aura3d-cli/game-asset-validator.d.ts +9 -0
  33. package/dist/aura3d-cli/game-asset-validator.d.ts.map +1 -0
  34. package/dist/aura3d-cli/game-asset-validator.js +5 -0
  35. package/dist/aura3d-cli/game-asset-validator.js.map +1 -0
  36. package/dist/aura3d-cli/index.d.ts +2 -0
  37. package/dist/aura3d-cli/index.d.ts.map +1 -1
  38. package/dist/aura3d-cli/index.js +1 -0
  39. package/dist/aura3d-cli/index.js.map +1 -1
  40. package/dist/aura3d-cli/pull-bridge.d.ts +3 -3
  41. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
  42. package/dist/aura3d-cli/pull-bridge.js +52 -21
  43. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  44. package/dist/create-aura3d/index.d.ts +1 -1
  45. package/dist/create-aura3d/index.d.ts.map +1 -1
  46. package/dist/create-aura3d/index.js +4 -2
  47. package/dist/create-aura3d/index.js.map +1 -1
  48. package/dist/editor-runtime/AssetDropZone.d.ts +50 -0
  49. package/dist/editor-runtime/AssetDropZone.d.ts.map +1 -0
  50. package/dist/editor-runtime/AssetDropZone.js +101 -0
  51. package/dist/editor-runtime/AssetDropZone.js.map +1 -0
  52. package/dist/editor-runtime/CartoonSceneEditor.d.ts +87 -0
  53. package/dist/editor-runtime/CartoonSceneEditor.d.ts.map +1 -0
  54. package/dist/editor-runtime/CartoonSceneEditor.js +252 -0
  55. package/dist/editor-runtime/CartoonSceneEditor.js.map +1 -0
  56. package/dist/editor-runtime/CurveEditor.d.ts +38 -0
  57. package/dist/editor-runtime/CurveEditor.d.ts.map +1 -0
  58. package/dist/editor-runtime/CurveEditor.js +112 -0
  59. package/dist/editor-runtime/CurveEditor.js.map +1 -0
  60. package/dist/editor-runtime/KeyframeEditor.d.ts +49 -0
  61. package/dist/editor-runtime/KeyframeEditor.d.ts.map +1 -0
  62. package/dist/editor-runtime/KeyframeEditor.js +161 -0
  63. package/dist/editor-runtime/KeyframeEditor.js.map +1 -0
  64. package/dist/editor-runtime/PropertyPanel.d.ts +21 -0
  65. package/dist/editor-runtime/PropertyPanel.d.ts.map +1 -0
  66. package/dist/editor-runtime/PropertyPanel.js +72 -0
  67. package/dist/editor-runtime/PropertyPanel.js.map +1 -0
  68. package/dist/editor-runtime/SceneOutliner.d.ts +19 -0
  69. package/dist/editor-runtime/SceneOutliner.d.ts.map +1 -0
  70. package/dist/editor-runtime/SceneOutliner.js +64 -0
  71. package/dist/editor-runtime/SceneOutliner.js.map +1 -0
  72. package/dist/editor-runtime/TimelineEditorController.d.ts +92 -0
  73. package/dist/editor-runtime/TimelineEditorController.d.ts.map +1 -0
  74. package/dist/editor-runtime/TimelineEditorController.js +424 -0
  75. package/dist/editor-runtime/TimelineEditorController.js.map +1 -0
  76. package/dist/editor-runtime/TimelineTrackTypes.d.ts +25 -0
  77. package/dist/editor-runtime/TimelineTrackTypes.d.ts.map +1 -0
  78. package/dist/editor-runtime/TimelineTrackTypes.js +48 -0
  79. package/dist/editor-runtime/TimelineTrackTypes.js.map +1 -0
  80. package/dist/editor-runtime/TimelineUI.d.ts +27 -0
  81. package/dist/editor-runtime/TimelineUI.d.ts.map +1 -0
  82. package/dist/editor-runtime/TimelineUI.js +118 -0
  83. package/dist/editor-runtime/TimelineUI.js.map +1 -0
  84. package/dist/editor-runtime/index.d.ts +18 -0
  85. package/dist/editor-runtime/index.d.ts.map +1 -1
  86. package/dist/editor-runtime/index.js +9 -0
  87. package/dist/editor-runtime/index.js.map +1 -1
  88. package/dist/engine/advanced-runtime/A3DRenderer.d.ts +24 -2
  89. package/dist/engine/advanced-runtime/A3DRenderer.d.ts.map +1 -1
  90. package/dist/engine/advanced-runtime/A3DRenderer.js +70 -9
  91. package/dist/engine/advanced-runtime/A3DRenderer.js.map +1 -1
  92. package/dist/engine/agent-api/AssetLibraryBrowser.d.ts +39 -0
  93. package/dist/engine/agent-api/AssetLibraryBrowser.d.ts.map +1 -0
  94. package/dist/engine/agent-api/AssetLibraryBrowser.js +60 -0
  95. package/dist/engine/agent-api/AssetLibraryBrowser.js.map +1 -0
  96. package/dist/engine/agent-api/AudioMuxer.d.ts +68 -0
  97. package/dist/engine/agent-api/AudioMuxer.d.ts.map +1 -0
  98. package/dist/engine/agent-api/AudioMuxer.js +74 -0
  99. package/dist/engine/agent-api/AudioMuxer.js.map +1 -0
  100. package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts +43 -0
  101. package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts.map +1 -0
  102. package/dist/engine/agent-api/AudioVisemeAnalyzer.js +110 -0
  103. package/dist/engine/agent-api/AudioVisemeAnalyzer.js.map +1 -0
  104. package/dist/engine/agent-api/BodyLanguageLibrary.d.ts +4 -0
  105. package/dist/engine/agent-api/BodyLanguageLibrary.d.ts.map +1 -0
  106. package/dist/engine/agent-api/BodyLanguageLibrary.js +10 -0
  107. package/dist/engine/agent-api/BodyLanguageLibrary.js.map +1 -0
  108. package/dist/engine/agent-api/CameraChoreographer.d.ts +69 -0
  109. package/dist/engine/agent-api/CameraChoreographer.d.ts.map +1 -0
  110. package/dist/engine/agent-api/CameraChoreographer.js +165 -0
  111. package/dist/engine/agent-api/CameraChoreographer.js.map +1 -0
  112. package/dist/engine/agent-api/CameraPathEditor.d.ts +20 -0
  113. package/dist/engine/agent-api/CameraPathEditor.d.ts.map +1 -0
  114. package/dist/engine/agent-api/CameraPathEditor.js +47 -0
  115. package/dist/engine/agent-api/CameraPathEditor.js.map +1 -0
  116. package/dist/engine/agent-api/CameraPresetLibrary.d.ts +22 -0
  117. package/dist/engine/agent-api/CameraPresetLibrary.d.ts.map +1 -0
  118. package/dist/engine/agent-api/CameraPresetLibrary.js +91 -0
  119. package/dist/engine/agent-api/CameraPresetLibrary.js.map +1 -0
  120. package/dist/engine/agent-api/CaptionExporter.d.ts +19 -0
  121. package/dist/engine/agent-api/CaptionExporter.d.ts.map +1 -0
  122. package/dist/engine/agent-api/CaptionExporter.js +54 -0
  123. package/dist/engine/agent-api/CaptionExporter.js.map +1 -0
  124. package/dist/engine/agent-api/CartoonAssetManifest.d.ts +32 -0
  125. package/dist/engine/agent-api/CartoonAssetManifest.d.ts.map +1 -0
  126. package/dist/engine/agent-api/CartoonAssetManifest.js +4 -0
  127. package/dist/engine/agent-api/CartoonAssetManifest.js.map +1 -0
  128. package/dist/engine/agent-api/DialogueAlignment.d.ts +18 -0
  129. package/dist/engine/agent-api/DialogueAlignment.d.ts.map +1 -0
  130. package/dist/engine/agent-api/DialogueAlignment.js +23 -0
  131. package/dist/engine/agent-api/DialogueAlignment.js.map +1 -0
  132. package/dist/engine/agent-api/EpisodeStructure.d.ts +77 -0
  133. package/dist/engine/agent-api/EpisodeStructure.d.ts.map +1 -0
  134. package/dist/engine/agent-api/EpisodeStructure.js +123 -0
  135. package/dist/engine/agent-api/EpisodeStructure.js.map +1 -0
  136. package/dist/engine/agent-api/EpisodeTemplates.d.ts +13 -0
  137. package/dist/engine/agent-api/EpisodeTemplates.d.ts.map +1 -0
  138. package/dist/engine/agent-api/EpisodeTemplates.js +14 -0
  139. package/dist/engine/agent-api/EpisodeTemplates.js.map +1 -0
  140. package/dist/engine/agent-api/FrameEncoder.d.ts +62 -0
  141. package/dist/engine/agent-api/FrameEncoder.d.ts.map +1 -0
  142. package/dist/engine/agent-api/FrameEncoder.js +117 -0
  143. package/dist/engine/agent-api/FrameEncoder.js.map +1 -0
  144. package/dist/engine/agent-api/GameEvidence.d.ts +43 -0
  145. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -1
  146. package/dist/engine/agent-api/GameEvidence.js +30 -1
  147. package/dist/engine/agent-api/GameEvidence.js.map +1 -1
  148. package/dist/engine/agent-api/GameInspector.d.ts +65 -0
  149. package/dist/engine/agent-api/GameInspector.d.ts.map +1 -0
  150. package/dist/engine/agent-api/GameInspector.js +53 -0
  151. package/dist/engine/agent-api/GameInspector.js.map +1 -0
  152. package/dist/engine/agent-api/GameRuntime.d.ts +67 -1
  153. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
  154. package/dist/engine/agent-api/GameRuntime.js +191 -7
  155. package/dist/engine/agent-api/GameRuntime.js.map +1 -1
  156. package/dist/engine/agent-api/PerformanceBlender.d.ts +11 -0
  157. package/dist/engine/agent-api/PerformanceBlender.d.ts.map +1 -0
  158. package/dist/engine/agent-api/PerformanceBlender.js +29 -0
  159. package/dist/engine/agent-api/PerformanceBlender.js.map +1 -0
  160. package/dist/engine/agent-api/PerformancePoseEditor.d.ts +21 -0
  161. package/dist/engine/agent-api/PerformancePoseEditor.d.ts.map +1 -0
  162. package/dist/engine/agent-api/PerformancePoseEditor.js +23 -0
  163. package/dist/engine/agent-api/PerformancePoseEditor.js.map +1 -0
  164. package/dist/engine/agent-api/PerformanceScriptParser.d.ts +9 -0
  165. package/dist/engine/agent-api/PerformanceScriptParser.d.ts.map +1 -0
  166. package/dist/engine/agent-api/PerformanceScriptParser.js +16 -0
  167. package/dist/engine/agent-api/PerformanceScriptParser.js.map +1 -0
  168. package/dist/engine/agent-api/PublishingPipeline.d.ts +57 -0
  169. package/dist/engine/agent-api/PublishingPipeline.d.ts.map +1 -0
  170. package/dist/engine/agent-api/PublishingPipeline.js +67 -0
  171. package/dist/engine/agent-api/PublishingPipeline.js.map +1 -0
  172. package/dist/engine/agent-api/RenderProgressTracker.d.ts +49 -0
  173. package/dist/engine/agent-api/RenderProgressTracker.d.ts.map +1 -0
  174. package/dist/engine/agent-api/RenderProgressTracker.js +106 -0
  175. package/dist/engine/agent-api/RenderProgressTracker.js.map +1 -0
  176. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +50 -0
  177. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -1
  178. package/dist/engine/agent-api/RuntimeNodeHandle.js +48 -0
  179. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -1
  180. package/dist/engine/agent-api/SceneSequencer.d.ts +54 -0
  181. package/dist/engine/agent-api/SceneSequencer.d.ts.map +1 -0
  182. package/dist/engine/agent-api/SceneSequencer.js +64 -0
  183. package/dist/engine/agent-api/SceneSequencer.js.map +1 -0
  184. package/dist/engine/agent-api/ShotCompositionRules.d.ts +45 -0
  185. package/dist/engine/agent-api/ShotCompositionRules.d.ts.map +1 -0
  186. package/dist/engine/agent-api/ShotCompositionRules.js +54 -0
  187. package/dist/engine/agent-api/ShotCompositionRules.js.map +1 -0
  188. package/dist/engine/agent-api/ShotTransitionEngine.d.ts +46 -0
  189. package/dist/engine/agent-api/ShotTransitionEngine.d.ts.map +1 -0
  190. package/dist/engine/agent-api/ShotTransitionEngine.js +98 -0
  191. package/dist/engine/agent-api/ShotTransitionEngine.js.map +1 -0
  192. package/dist/engine/agent-api/ThumbnailGenerator.d.ts +44 -0
  193. package/dist/engine/agent-api/ThumbnailGenerator.d.ts.map +1 -0
  194. package/dist/engine/agent-api/ThumbnailGenerator.js +82 -0
  195. package/dist/engine/agent-api/ThumbnailGenerator.js.map +1 -0
  196. package/dist/engine/agent-api/VideoExportPipeline.d.ts +66 -0
  197. package/dist/engine/agent-api/VideoExportPipeline.d.ts.map +1 -0
  198. package/dist/engine/agent-api/VideoExportPipeline.js +108 -0
  199. package/dist/engine/agent-api/VideoExportPipeline.js.map +1 -0
  200. package/dist/engine/agent-api/VisemeTimelineTrack.d.ts +29 -0
  201. package/dist/engine/agent-api/VisemeTimelineTrack.d.ts.map +1 -0
  202. package/dist/engine/agent-api/VisemeTimelineTrack.js +34 -0
  203. package/dist/engine/agent-api/VisemeTimelineTrack.js.map +1 -0
  204. package/dist/engine/agent-api/WaveformVisualizer.d.ts +61 -0
  205. package/dist/engine/agent-api/WaveformVisualizer.d.ts.map +1 -0
  206. package/dist/engine/agent-api/WaveformVisualizer.js +108 -0
  207. package/dist/engine/agent-api/WaveformVisualizer.js.map +1 -0
  208. package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts +21 -0
  209. package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts.map +1 -0
  210. package/dist/engine/agent-api/YouTubeMetadataGenerator.js +51 -0
  211. package/dist/engine/agent-api/YouTubeMetadataGenerator.js.map +1 -0
  212. package/dist/engine/agent-api/game-kits/fighting.d.ts +20 -0
  213. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -1
  214. package/dist/engine/agent-api/game-kits/fighting.js +20 -0
  215. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -1
  216. package/dist/engine/agent-api/index.d.ts +92 -3
  217. package/dist/engine/agent-api/index.d.ts.map +1 -1
  218. package/dist/engine/agent-api/index.js +116 -2
  219. package/dist/engine/agent-api/index.js.map +1 -1
  220. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  221. package/dist/engine/game/GameAudio.d.ts +65 -0
  222. package/dist/engine/game/GameAudio.d.ts.map +1 -0
  223. package/dist/engine/game/GameAudio.js +155 -0
  224. package/dist/engine/game/GameAudio.js.map +1 -0
  225. package/dist/engine/game/index.d.ts +3 -0
  226. package/dist/engine/game/index.d.ts.map +1 -0
  227. package/dist/engine/game/index.js +2 -0
  228. package/dist/engine/game/index.js.map +1 -0
  229. package/dist/engine/index.d.ts +2 -0
  230. package/dist/engine/index.d.ts.map +1 -1
  231. package/dist/engine/index.js +2 -0
  232. package/dist/engine/index.js.map +1 -1
  233. package/dist/engine/production-runtime/GameAppRuntime.d.ts +3 -0
  234. package/dist/engine/production-runtime/GameAppRuntime.d.ts.map +1 -0
  235. package/dist/engine/production-runtime/GameAppRuntime.js +2 -0
  236. package/dist/engine/production-runtime/GameAppRuntime.js.map +1 -0
  237. package/dist/engine/production-runtime/GameRenderPreset.d.ts +55 -0
  238. package/dist/engine/production-runtime/GameRenderPreset.d.ts.map +1 -0
  239. package/dist/engine/production-runtime/GameRenderPreset.js +90 -0
  240. package/dist/engine/production-runtime/GameRenderPreset.js.map +1 -0
  241. package/dist/engine/production-runtime/index.d.ts +18 -1
  242. package/dist/engine/production-runtime/index.d.ts.map +1 -1
  243. package/dist/engine/production-runtime/index.js +35 -1
  244. package/dist/engine/production-runtime/index.js.map +1 -1
  245. package/dist/engine/runtime/AssetPreloader.d.ts +14 -0
  246. package/dist/engine/runtime/AssetPreloader.d.ts.map +1 -0
  247. package/dist/engine/runtime/AssetPreloader.js +22 -0
  248. package/dist/engine/runtime/AssetPreloader.js.map +1 -0
  249. package/dist/engine/runtime/ResourceManager.d.ts +48 -0
  250. package/dist/engine/runtime/ResourceManager.d.ts.map +1 -0
  251. package/dist/engine/runtime/ResourceManager.js +156 -0
  252. package/dist/engine/runtime/ResourceManager.js.map +1 -0
  253. package/dist/engine/runtime/index.d.ts +5 -0
  254. package/dist/engine/runtime/index.d.ts.map +1 -0
  255. package/dist/engine/runtime/index.js +3 -0
  256. package/dist/engine/runtime/index.js.map +1 -0
  257. package/dist/physics/CharacterController.d.ts +31 -0
  258. package/dist/physics/CharacterController.d.ts.map +1 -1
  259. package/dist/physics/CharacterController.js +90 -0
  260. package/dist/physics/CharacterController.js.map +1 -1
  261. package/dist/physics/CollisionVolumes.d.ts +29 -0
  262. package/dist/physics/CollisionVolumes.d.ts.map +1 -1
  263. package/dist/physics/CollisionVolumes.js +43 -0
  264. package/dist/physics/CollisionVolumes.js.map +1 -1
  265. package/dist/physics/KinematicBody.d.ts +15 -0
  266. package/dist/physics/KinematicBody.d.ts.map +1 -1
  267. package/dist/physics/KinematicBody.js +28 -0
  268. package/dist/physics/KinematicBody.js.map +1 -1
  269. package/dist/physics/KinematicWorld.js +6 -0
  270. package/dist/physics/KinematicWorld.js.map +1 -1
  271. package/dist/scripting/CartoonNodeCategories.d.ts +3 -0
  272. package/dist/scripting/CartoonNodeCategories.d.ts.map +1 -0
  273. package/dist/scripting/CartoonNodeCategories.js +9 -0
  274. package/dist/scripting/CartoonNodeCategories.js.map +1 -0
  275. package/dist/scripting/CartoonVisualNodes.d.ts +3 -0
  276. package/dist/scripting/CartoonVisualNodes.d.ts.map +1 -0
  277. package/dist/scripting/CartoonVisualNodes.js +41 -0
  278. package/dist/scripting/CartoonVisualNodes.js.map +1 -0
  279. package/dist/scripting/VisualGraphExecutor.js +46 -0
  280. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  281. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  282. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  283. package/dist/scripting/VisualNodeCatalog.js +3 -1
  284. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  285. package/dist/scripting/index.d.ts +3 -0
  286. package/dist/scripting/index.d.ts.map +1 -1
  287. package/dist/scripting/index.js +2 -0
  288. package/dist/scripting/index.js.map +1 -1
  289. package/package.json +126 -126
@@ -0,0 +1,68 @@
1
+ import type { AudioStem, AudioStemManifestArtifact } from "./DialoguePerformance.js";
2
+ import { type PromptAnimationFrameRate, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
3
+ import type { EncodedVideoArtifact } from "./FrameEncoder.js";
4
+ export type AudioMuxerContainer = "webm" | "mp4";
5
+ export type AudioMuxerCodec = "opus" | "aac" | "pcm";
6
+ export interface AudioMuxerInputStem extends AudioStem {
7
+ readonly source?: Blob | Uint8Array | ArrayBuffer | string | undefined;
8
+ readonly codec?: AudioMuxerCodec | undefined;
9
+ readonly sampleRate?: number | undefined;
10
+ readonly channels?: number | undefined;
11
+ }
12
+ export interface AudioMuxPlanTrack {
13
+ readonly stemId: string;
14
+ readonly role: AudioStem["role"];
15
+ readonly path: string;
16
+ readonly startTime: PromptAnimationSeconds;
17
+ readonly endTime: PromptAnimationSeconds;
18
+ readonly gainDb: number;
19
+ readonly ducking: AudioStem["ducking"];
20
+ readonly codec: AudioMuxerCodec;
21
+ }
22
+ export interface AudioMuxPlan {
23
+ readonly kind: "audio-mux-plan";
24
+ readonly container: AudioMuxerContainer;
25
+ readonly videoDuration: PromptAnimationSeconds;
26
+ readonly frameRate: PromptAnimationFrameRate;
27
+ readonly frameDuration: PromptAnimationSeconds;
28
+ readonly tracks: readonly AudioMuxPlanTrack[];
29
+ readonly maxSyncDriftSeconds: PromptAnimationSeconds;
30
+ readonly maxSyncDriftFrames: number;
31
+ }
32
+ export interface MuxedVideoArtifact {
33
+ readonly kind: "muxed-video";
34
+ readonly container: AudioMuxerContainer;
35
+ readonly mimeType: string;
36
+ readonly duration: PromptAnimationSeconds;
37
+ readonly video: EncodedVideoArtifact;
38
+ readonly muxPlan: AudioMuxPlan;
39
+ readonly audioTrackCount: number;
40
+ readonly byteLength: number;
41
+ readonly output?: Blob | Uint8Array | string | undefined;
42
+ }
43
+ export interface AudioMuxerAdapter {
44
+ mux(input: {
45
+ readonly video: EncodedVideoArtifact;
46
+ readonly plan: AudioMuxPlan;
47
+ readonly stems: readonly AudioMuxerInputStem[];
48
+ }): Promise<Blob | Uint8Array | string | undefined> | Blob | Uint8Array | string | undefined;
49
+ }
50
+ export interface AudioMuxer {
51
+ createPlan(video: EncodedVideoArtifact, stems: readonly AudioMuxerInputStem[], frameRate?: PromptAnimationFrameRate): AudioMuxPlan;
52
+ mux(video: EncodedVideoArtifact, stems: readonly AudioMuxerInputStem[], frameRate?: PromptAnimationFrameRate): Promise<MuxedVideoArtifact>;
53
+ }
54
+ export interface CreateAudioMuxerOptions {
55
+ readonly container?: AudioMuxerContainer | undefined;
56
+ readonly audioCodec?: AudioMuxerCodec | undefined;
57
+ readonly adapter?: AudioMuxerAdapter | undefined;
58
+ }
59
+ export declare function createAudioMuxer(options?: CreateAudioMuxerOptions): AudioMuxer;
60
+ export declare function createAudioMuxPlan(input: {
61
+ readonly video: EncodedVideoArtifact;
62
+ readonly stems: readonly AudioMuxerInputStem[];
63
+ readonly frameRate?: PromptAnimationFrameRate | undefined;
64
+ readonly container?: AudioMuxerContainer | undefined;
65
+ readonly audioCodec?: AudioMuxerCodec | undefined;
66
+ }): AudioMuxPlan;
67
+ export declare function audioStemsFromManifest(manifest: AudioStemManifestArtifact): readonly AudioMuxerInputStem[];
68
+ //# sourceMappingURL=AudioMuxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioMuxer.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/AudioMuxer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
2
+ export function createAudioMuxer(options = {}) {
3
+ const container = options.container ?? "webm";
4
+ const audioCodec = options.audioCodec ?? (container === "mp4" ? "aac" : "opus");
5
+ const adapter = options.adapter ?? { mux: () => undefined };
6
+ return {
7
+ createPlan(video, stems, frameRate = video.frameRate) {
8
+ return createAudioMuxPlan({ video, stems, frameRate, container, audioCodec });
9
+ },
10
+ async mux(video, stems, frameRate = video.frameRate) {
11
+ const plan = createAudioMuxPlan({ video, stems, frameRate, container, audioCodec });
12
+ const output = await adapter.mux({ video, plan, stems });
13
+ return {
14
+ kind: "muxed-video",
15
+ container,
16
+ mimeType: container === "mp4" ? "video/mp4" : "video/webm",
17
+ duration: Math.max(video.duration, ...plan.tracks.map((track) => track.endTime), 0),
18
+ video,
19
+ muxPlan: plan,
20
+ audioTrackCount: plan.tracks.length,
21
+ byteLength: video.byteLength + estimateAudioByteLength(stems),
22
+ ...(output !== undefined ? { output } : {})
23
+ };
24
+ }
25
+ };
26
+ }
27
+ export function createAudioMuxPlan(input) {
28
+ const frameRate = input.frameRate ?? input.video.frameRate;
29
+ const frameDuration = 1 / frameRate;
30
+ const tracks = input.stems.map((stem) => ({
31
+ stemId: stem.id,
32
+ role: stem.role,
33
+ path: stem.path,
34
+ startTime: normalizePromptAnimationTime(stem.startTime),
35
+ endTime: normalizePromptAnimationTime(stem.startTime + stem.duration),
36
+ gainDb: stem.gainDb ?? 0,
37
+ ducking: stem.ducking ?? "none",
38
+ codec: stem.codec ?? input.audioCodec ?? "opus"
39
+ }));
40
+ const maxSyncDriftSeconds = tracks.length === 0
41
+ ? 0
42
+ : Math.max(...tracks.map((track) => nearestFrameDrift(track.startTime, frameRate)));
43
+ return {
44
+ kind: "audio-mux-plan",
45
+ container: input.container ?? (input.video.container === "mp4" ? "mp4" : "webm"),
46
+ videoDuration: input.video.duration,
47
+ frameRate,
48
+ frameDuration,
49
+ tracks,
50
+ maxSyncDriftSeconds: normalizePromptAnimationTime(maxSyncDriftSeconds),
51
+ maxSyncDriftFrames: Math.round(maxSyncDriftSeconds * frameRate)
52
+ };
53
+ }
54
+ export function audioStemsFromManifest(manifest) {
55
+ return manifest.stems.map((stem) => ({ ...stem }));
56
+ }
57
+ function nearestFrameDrift(time, frameRate) {
58
+ const frame = Math.round(time * frameRate);
59
+ return Math.abs(time - frame / frameRate);
60
+ }
61
+ function estimateAudioByteLength(stems) {
62
+ return stems.reduce((sum, stem) => {
63
+ if (stem.source instanceof Uint8Array)
64
+ return sum + stem.source.byteLength;
65
+ if (stem.source instanceof ArrayBuffer)
66
+ return sum + stem.source.byteLength;
67
+ if (typeof Blob !== "undefined" && stem.source instanceof Blob)
68
+ return sum + stem.source.size;
69
+ if (typeof stem.source === "string")
70
+ return sum + stem.source.length;
71
+ return sum + Math.round(Math.max(0, stem.duration) * 16_000);
72
+ }, 0);
73
+ }
74
+ //# sourceMappingURL=AudioMuxer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioMuxer.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/AudioMuxer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type AudioWaveformData } from "./WaveformVisualizer.js";
2
+ import { type AuraVoiceVisemeId, type AuraVoiceVisemeTrack } from "./VisemeController.js";
3
+ import { type PromptAnimationFrameRate, type PromptAnimationId, type PromptAnimationLanguageCode, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
4
+ export interface AudioVisemeAnalysisFrame {
5
+ readonly index: number;
6
+ readonly startTime: PromptAnimationSeconds;
7
+ readonly endTime: PromptAnimationSeconds;
8
+ readonly rms: number;
9
+ readonly peak: number;
10
+ readonly mouthOpenness: number;
11
+ readonly visemeId: AuraVoiceVisemeId;
12
+ }
13
+ export interface AudioVisemeAnalysis {
14
+ readonly kind: "audio-viseme-analysis";
15
+ readonly characterId: PromptAnimationId;
16
+ readonly language: PromptAnimationLanguageCode;
17
+ readonly sampleRate: number;
18
+ readonly frameRate: PromptAnimationFrameRate;
19
+ readonly duration: PromptAnimationSeconds;
20
+ readonly analysisWindowSeconds: PromptAnimationSeconds;
21
+ readonly frames: readonly AudioVisemeAnalysisFrame[];
22
+ readonly waveform: AudioWaveformData;
23
+ }
24
+ export interface AnalyzeAudioVisemesOptions {
25
+ readonly episodeId: PromptAnimationId;
26
+ readonly characterId: PromptAnimationId;
27
+ readonly speakerId?: PromptAnimationId | undefined;
28
+ readonly lineId?: PromptAnimationId | undefined;
29
+ readonly language: PromptAnimationLanguageCode;
30
+ readonly frameRate: PromptAnimationFrameRate;
31
+ readonly samples: Float32Array | readonly number[];
32
+ readonly sampleRate: number;
33
+ readonly channelCount?: number | undefined;
34
+ readonly startTime?: PromptAnimationSeconds | undefined;
35
+ readonly analysisWindowSeconds?: PromptAnimationSeconds | undefined;
36
+ readonly silenceThreshold?: number | undefined;
37
+ readonly blendshapeMap?: Record<string, string> | undefined;
38
+ readonly generatedAt?: string | undefined;
39
+ }
40
+ export declare function analyzeAudioVisemes(options: AnalyzeAudioVisemesOptions): AudioVisemeAnalysis;
41
+ export declare function createAudioDrivenVisemeTrack(options: AnalyzeAudioVisemesOptions): AuraVoiceVisemeTrack;
42
+ export declare function mergeAudioVisemeFrames(frames: readonly AudioVisemeAnalysisFrame[]): readonly AudioVisemeAnalysisFrame[];
43
+ //# sourceMappingURL=AudioVisemeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioVisemeAnalyzer.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/AudioVisemeAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgC,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,KAAK,2BAA2B,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAElM,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAqD5F;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,0BAA0B,GAAG,oBAAoB,CAqBtG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,GAAG,SAAS,wBAAwB,EAAE,CAiBvH"}
@@ -0,0 +1,110 @@
1
+ import { createAudioWaveformData } from "./WaveformVisualizer.js";
2
+ import { createAuraVoiceVisemeTrack, createGlbBlendshapeVisemeCue } from "./VisemeController.js";
3
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
4
+ export function analyzeAudioVisemes(options) {
5
+ const channelCount = Math.max(1, Math.floor(options.channelCount ?? 1));
6
+ const sampleCount = Math.floor(options.samples.length / channelCount);
7
+ const duration = sampleCount / options.sampleRate;
8
+ const windowSeconds = options.analysisWindowSeconds ?? Math.min(0.05, 1 / options.frameRate);
9
+ const samplesPerWindow = Math.max(1, Math.round(windowSeconds * options.sampleRate));
10
+ const silenceThreshold = options.silenceThreshold ?? 0.025;
11
+ const frames = [];
12
+ for (let startSample = 0, index = 0; startSample < sampleCount; startSample += samplesPerWindow, index += 1) {
13
+ const endSample = Math.min(sampleCount, startSample + samplesPerWindow);
14
+ let sumSquares = 0;
15
+ let peak = 0;
16
+ let count = 0;
17
+ for (let sample = startSample; sample < endSample; sample += 1) {
18
+ for (let channel = 0; channel < channelCount; channel += 1) {
19
+ const value = Math.abs(options.samples[sample * channelCount + channel] ?? 0);
20
+ peak = Math.max(peak, value);
21
+ sumSquares += value * value;
22
+ count += 1;
23
+ }
24
+ }
25
+ const rms = count === 0 ? 0 : Math.sqrt(sumSquares / count);
26
+ const mouthOpenness = rms <= silenceThreshold ? 0 : Math.max(0, Math.min(1, (rms - silenceThreshold) / Math.max(0.001, 0.45 - silenceThreshold)));
27
+ const startTime = normalizePromptAnimationTime((options.startTime ?? 0) + startSample / options.sampleRate);
28
+ const endTime = normalizePromptAnimationTime((options.startTime ?? 0) + endSample / options.sampleRate);
29
+ frames.push({
30
+ index,
31
+ startTime,
32
+ endTime,
33
+ rms,
34
+ peak,
35
+ mouthOpenness,
36
+ visemeId: classifyAmplitudeViseme(mouthOpenness, peak)
37
+ });
38
+ }
39
+ return {
40
+ kind: "audio-viseme-analysis",
41
+ characterId: options.characterId,
42
+ language: options.language,
43
+ sampleRate: options.sampleRate,
44
+ frameRate: options.frameRate,
45
+ duration: normalizePromptAnimationTime(duration),
46
+ analysisWindowSeconds: normalizePromptAnimationTime(windowSeconds),
47
+ frames,
48
+ waveform: createAudioWaveformData({
49
+ samples: options.samples,
50
+ sampleRate: options.sampleRate,
51
+ channelCount,
52
+ bins: Math.min(2048, Math.max(64, frames.length))
53
+ })
54
+ };
55
+ }
56
+ export function createAudioDrivenVisemeTrack(options) {
57
+ const analysis = analyzeAudioVisemes(options);
58
+ const cues = mergeAudioVisemeFrames(analysis.frames).map((frame, index) => createGlbBlendshapeVisemeCue({
59
+ id: `${options.lineId ?? options.characterId}:audio-viseme:${index}`,
60
+ characterId: options.characterId,
61
+ ...(options.speakerId ? { speakerId: options.speakerId } : {}),
62
+ ...(options.lineId ? { lineId: options.lineId } : {}),
63
+ startTime: frame.startTime,
64
+ endTime: frame.endTime,
65
+ visemeId: frame.visemeId,
66
+ mouthOpenness: frame.mouthOpenness,
67
+ weight: frame.visemeId === "sil" ? 0.2 : Math.max(0.35, frame.mouthOpenness),
68
+ ...(options.blendshapeMap ? { blendshapeMap: options.blendshapeMap } : {})
69
+ }));
70
+ return createAuraVoiceVisemeTrack({
71
+ episodeId: options.episodeId,
72
+ language: options.language,
73
+ frameRate: options.frameRate,
74
+ cues,
75
+ generatedAt: options.generatedAt
76
+ });
77
+ }
78
+ export function mergeAudioVisemeFrames(frames) {
79
+ const merged = [];
80
+ for (const frame of frames) {
81
+ const previous = merged[merged.length - 1];
82
+ if (previous && previous.visemeId === frame.visemeId) {
83
+ merged[merged.length - 1] = {
84
+ ...previous,
85
+ endTime: frame.endTime,
86
+ rms: Math.max(previous.rms, frame.rms),
87
+ peak: Math.max(previous.peak, frame.peak),
88
+ mouthOpenness: Math.max(previous.mouthOpenness, frame.mouthOpenness)
89
+ };
90
+ }
91
+ else {
92
+ merged.push(frame);
93
+ }
94
+ }
95
+ return merged;
96
+ }
97
+ function classifyAmplitudeViseme(mouthOpenness, peak) {
98
+ if (mouthOpenness <= 0.04)
99
+ return "sil";
100
+ if (mouthOpenness >= 0.72)
101
+ return "aa";
102
+ if (peak >= 0.62)
103
+ return "ah";
104
+ if (mouthOpenness >= 0.42)
105
+ return "eh";
106
+ if (mouthOpenness >= 0.22)
107
+ return "ih";
108
+ return "m";
109
+ }
110
+ //# sourceMappingURL=AudioVisemeAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioVisemeAnalyzer.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/AudioVisemeAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CartoonGesture } from "./CartoonPerformance.js";
2
+ export declare const bodyLanguageLibrary: readonly CartoonGesture[];
3
+ export declare function resolveBodyLanguageGesture(id: string): CartoonGesture | undefined;
4
+ //# sourceMappingURL=BodyLanguageLibrary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BodyLanguageLibrary.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/BodyLanguageLibrary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAKxD,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjF"}
@@ -0,0 +1,10 @@
1
+ export const bodyLanguageLibrary = [
2
+ { id: "shrug", label: "Shrug", action: "gesture", defaultDuration: 1, body: { shoulderRaise: 0.45, handPose: "open" }, gesture: { gestureId: "shrug", hand: "both", amplitude: 0.6 }, facial: { brow: "raised", mouth: "neutral" }, reducedMotionSafe: true },
3
+ { id: "thumbs-up", label: "Thumbs Up", action: "gesture", defaultDuration: 0.8, body: { armPose: "open", handPose: "point", energy: 0.7 }, gesture: { gestureId: "thumbs-up", hand: "right", amplitude: 0.5 }, facial: { mouth: "smile" }, reducedMotionSafe: true },
4
+ { id: "thinking", label: "Thinking", action: "gesture", defaultDuration: 1.4, body: { headTilt: -0.12, handPose: "pinch", energy: 0.35 }, gesture: { gestureId: "thinking", hand: "right", amplitude: 0.25 }, facial: { brow: "arched", eyes: "soft" }, reducedMotionSafe: true },
5
+ { id: "applause", label: "Applause", action: "gesture", defaultDuration: 1.2, body: { armPose: "open", handPose: "open", energy: 0.85 }, gesture: { gestureId: "applause", hand: "both", amplitude: 0.8, frequency: 2 }, facial: { mouth: "smile" }, reducedMotionSafe: false }
6
+ ];
7
+ export function resolveBodyLanguageGesture(id) {
8
+ return bodyLanguageLibrary.find((gesture) => gesture.id === id);
9
+ }
10
+ //# sourceMappingURL=BodyLanguageLibrary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BodyLanguageLibrary.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/BodyLanguageLibrary.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC7P,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;IACpQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;IACjR,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE;CAChR,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,EAAU;IACnD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { AuraVec3 } from "./index.js";
2
+ import { type PromptAnimationId, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
3
+ import { type CameraPresetId } from "./CameraPresetLibrary.js";
4
+ import type { ShotCameraInstruction } from "./ShotTimeline.js";
5
+ export type CameraPathInterpolation = "linear" | "smoothstep" | "catmull-rom";
6
+ export interface CameraKeyframe {
7
+ readonly id: PromptAnimationId;
8
+ readonly time: PromptAnimationSeconds;
9
+ readonly position: AuraVec3;
10
+ readonly target: AuraVec3;
11
+ readonly fov: number;
12
+ readonly focusDistance?: number | undefined;
13
+ readonly shake?: number | undefined;
14
+ }
15
+ export interface CameraPath {
16
+ readonly id: PromptAnimationId;
17
+ readonly interpolation: CameraPathInterpolation;
18
+ readonly keyframes: readonly CameraKeyframe[];
19
+ }
20
+ export interface CameraChoreographyArtifact {
21
+ readonly artifact: "camera-choreography";
22
+ readonly contractId: string;
23
+ readonly episodeId: PromptAnimationId;
24
+ readonly paths: readonly CameraPath[];
25
+ readonly generatedAt?: string | undefined;
26
+ }
27
+ export interface LegacyCameraChoreography {
28
+ readonly kind: "camera-choreography";
29
+ readonly duration: number;
30
+ readonly keyframes: readonly CameraKeyframe[];
31
+ }
32
+ export interface CameraSample {
33
+ readonly time: PromptAnimationSeconds;
34
+ readonly pathId: PromptAnimationId;
35
+ readonly position: AuraVec3;
36
+ readonly target: AuraVec3;
37
+ readonly fov: number;
38
+ readonly focusDistance?: number | undefined;
39
+ readonly shake: number;
40
+ }
41
+ export declare function createCameraChoreography(input: {
42
+ readonly episodeId: PromptAnimationId;
43
+ readonly paths: readonly CameraPath[];
44
+ readonly generatedAt?: string | undefined;
45
+ }): CameraChoreographyArtifact;
46
+ export declare function createCameraChoreography(keyframes: readonly CameraKeyframe[], duration?: number): LegacyCameraChoreography;
47
+ export declare function cameraKeyframeFromPreset(id: CameraPresetId, time: PromptAnimationSeconds): CameraKeyframe;
48
+ export declare function sampleCameraChoreography(choreography: LegacyCameraChoreography, time: PromptAnimationSeconds): CameraKeyframe;
49
+ export declare function createCameraPathFromPreset(input: {
50
+ readonly id: PromptAnimationId;
51
+ readonly presetId: CameraPresetId;
52
+ readonly startTime: PromptAnimationSeconds;
53
+ readonly endTime: PromptAnimationSeconds;
54
+ readonly subjectPosition?: AuraVec3 | undefined;
55
+ readonly interpolation?: CameraPathInterpolation | undefined;
56
+ }): CameraPath;
57
+ export declare function sampleCameraPath(path: CameraPath, time: PromptAnimationSeconds): CameraSample;
58
+ export declare function shotReverseShotCameraPaths(input: {
59
+ readonly episodeId: PromptAnimationId;
60
+ readonly speakerAId: PromptAnimationId;
61
+ readonly speakerBId: PromptAnimationId;
62
+ readonly speakerAPosition: AuraVec3;
63
+ readonly speakerBPosition: AuraVec3;
64
+ readonly startTime: PromptAnimationSeconds;
65
+ readonly turnDuration: PromptAnimationSeconds;
66
+ readonly turns: number;
67
+ }): CameraChoreographyArtifact;
68
+ export declare function cameraInstructionFromSample(sample: CameraSample): ShotCameraInstruction;
69
+ //# sourceMappingURL=CameraChoreographer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraChoreographer.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/CameraChoreographer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { normalizePromptAnimationTime, promptAnimationContractVersion } from "./PromptAnimationContract.js";
2
+ import { applyCameraPreset } from "./CameraPresetLibrary.js";
3
+ export function createCameraChoreography(input, duration) {
4
+ if (Array.isArray(input)) {
5
+ const sorted = [...input].sort((left, right) => left.time - right.time);
6
+ return {
7
+ kind: "camera-choreography",
8
+ duration: duration ?? Math.max(0, ...sorted.map((keyframe) => keyframe.time)),
9
+ keyframes: sorted
10
+ };
11
+ }
12
+ const planInput = input;
13
+ return {
14
+ artifact: "camera-choreography",
15
+ contractId: promptAnimationContractVersion,
16
+ episodeId: planInput.episodeId,
17
+ paths: planInput.paths.map((path) => ({
18
+ ...path,
19
+ keyframes: [...path.keyframes].sort((a, b) => a.time - b.time)
20
+ })),
21
+ ...(planInput.generatedAt ? { generatedAt: planInput.generatedAt } : {})
22
+ };
23
+ }
24
+ export function cameraKeyframeFromPreset(id, time) {
25
+ const camera = applyCameraPreset(id);
26
+ return {
27
+ id: `${id}:${time}`,
28
+ time: normalizePromptAnimationTime(time),
29
+ position: camera.position ?? camera.from ?? [0, 1.6, 4],
30
+ target: camera.target ?? [0, 1.2, 0],
31
+ fov: camera.fov ?? 40,
32
+ focusDistance: camera.focusDistance,
33
+ shake: camera.shake
34
+ };
35
+ }
36
+ export function sampleCameraChoreography(choreography, time) {
37
+ if (choreography.keyframes.length === 0)
38
+ throw new Error("Camera choreography requires at least one keyframe.");
39
+ const first = choreography.keyframes[0];
40
+ const last = choreography.keyframes[choreography.keyframes.length - 1];
41
+ if (time <= first.time)
42
+ return first;
43
+ if (time >= last.time)
44
+ return last;
45
+ const end = choreography.keyframes.find((keyframe) => keyframe.time >= time) ?? last;
46
+ const start = choreography.keyframes[Math.max(0, choreography.keyframes.indexOf(end) - 1)] ?? first;
47
+ const t = (time - start.time) / Math.max(0.0001, end.time - start.time);
48
+ return {
49
+ id: `${start.id}:sample:${normalizePromptAnimationTime(time)}`,
50
+ time: normalizePromptAnimationTime(time),
51
+ position: lerpVec3(start.position, end.position, t),
52
+ target: lerpVec3(start.target, end.target, t),
53
+ fov: Number(lerp(start.fov, end.fov, t).toFixed(4)),
54
+ focusDistance: start.focusDistance !== undefined || end.focusDistance !== undefined
55
+ ? lerp(start.focusDistance ?? end.focusDistance ?? 0, end.focusDistance ?? start.focusDistance ?? 0, t)
56
+ : undefined,
57
+ shake: lerp(start.shake ?? 0, end.shake ?? 0, t)
58
+ };
59
+ }
60
+ export function createCameraPathFromPreset(input) {
61
+ const camera = applyCameraPreset(input.presetId, { subjectPosition: input.subjectPosition });
62
+ const start = camera.from ?? camera.position ?? [0, 1.6, 4];
63
+ const end = camera.to ?? camera.position ?? start;
64
+ const target = camera.target ?? [0, 1.2, 0];
65
+ return {
66
+ id: input.id,
67
+ interpolation: input.interpolation ?? "smoothstep",
68
+ keyframes: [
69
+ {
70
+ id: `${input.id}:start`,
71
+ time: normalizePromptAnimationTime(input.startTime),
72
+ position: start,
73
+ target,
74
+ fov: camera.fov ?? 40,
75
+ focusDistance: camera.focusDistance,
76
+ shake: camera.shake
77
+ },
78
+ {
79
+ id: `${input.id}:end`,
80
+ time: normalizePromptAnimationTime(input.endTime),
81
+ position: end,
82
+ target,
83
+ fov: camera.fov ?? 40,
84
+ focusDistance: camera.focusDistance,
85
+ shake: 0
86
+ }
87
+ ]
88
+ };
89
+ }
90
+ export function sampleCameraPath(path, time) {
91
+ const keyframes = [...path.keyframes].sort((a, b) => a.time - b.time);
92
+ const first = keyframes[0];
93
+ if (!first)
94
+ throw new Error(`Camera path "${path.id}" has no keyframes.`);
95
+ const normalized = normalizePromptAnimationTime(time);
96
+ const previous = [...keyframes].reverse().find((keyframe) => keyframe.time <= normalized) ?? first;
97
+ const next = keyframes.find((keyframe) => keyframe.time >= normalized) ?? keyframes[keyframes.length - 1] ?? first;
98
+ const span = Math.max(0.0001, next.time - previous.time);
99
+ const t = previous === next ? 0 : easing((normalized - previous.time) / span, path.interpolation);
100
+ return {
101
+ time: normalized,
102
+ pathId: path.id,
103
+ position: lerpVec3(previous.position, next.position, t),
104
+ target: lerpVec3(previous.target, next.target, t),
105
+ fov: lerp(previous.fov, next.fov, t),
106
+ ...(previous.focusDistance !== undefined || next.focusDistance !== undefined
107
+ ? { focusDistance: lerp(previous.focusDistance ?? next.focusDistance ?? 0, next.focusDistance ?? previous.focusDistance ?? 0, t) }
108
+ : {}),
109
+ shake: lerp(previous.shake ?? 0, next.shake ?? 0, t)
110
+ };
111
+ }
112
+ export function shotReverseShotCameraPaths(input) {
113
+ const paths = [];
114
+ for (let turn = 0; turn < input.turns; turn += 1) {
115
+ const focusA = turn % 2 === 0;
116
+ const subjectPosition = focusA ? input.speakerAPosition : input.speakerBPosition;
117
+ const focusId = focusA ? input.speakerAId : input.speakerBId;
118
+ const startTime = input.startTime + turn * input.turnDuration;
119
+ const camera = applyCameraPreset("over-shoulder", { subjectPosition, focusTargetId: focusId });
120
+ paths.push({
121
+ id: `shot-reverse:${turn}:${focusId}`,
122
+ interpolation: "smoothstep",
123
+ keyframes: [
124
+ {
125
+ id: `shot-reverse:${turn}:start`,
126
+ time: normalizePromptAnimationTime(startTime),
127
+ position: camera.position ?? [0, 1.6, 3.2],
128
+ target: camera.target ?? subjectPosition,
129
+ fov: camera.fov ?? 35
130
+ },
131
+ {
132
+ id: `shot-reverse:${turn}:end`,
133
+ time: normalizePromptAnimationTime(startTime + input.turnDuration),
134
+ position: camera.position ?? [0, 1.6, 3.2],
135
+ target: camera.target ?? subjectPosition,
136
+ fov: camera.fov ?? 35
137
+ }
138
+ ]
139
+ });
140
+ }
141
+ return createCameraChoreography({ episodeId: input.episodeId, paths });
142
+ }
143
+ export function cameraInstructionFromSample(sample) {
144
+ return {
145
+ move: sample.shake > 0 ? "handheld" : "static",
146
+ position: sample.position,
147
+ target: sample.target,
148
+ fov: sample.fov,
149
+ focusDistance: sample.focusDistance,
150
+ shake: sample.shake
151
+ };
152
+ }
153
+ function easing(t, interpolation) {
154
+ const clamped = Math.max(0, Math.min(1, t));
155
+ if (interpolation === "smoothstep" || interpolation === "catmull-rom")
156
+ return clamped * clamped * (3 - 2 * clamped);
157
+ return clamped;
158
+ }
159
+ function lerp(a, b, t) {
160
+ return a + (b - a) * t;
161
+ }
162
+ function lerpVec3(a, b, t) {
163
+ return [lerp(a[0], b[0], t), lerp(a[1], b[1], t), lerp(a[2], b[2], t)];
164
+ }
165
+ //# sourceMappingURL=CameraChoreographer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraChoreographer.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/CameraChoreographer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AuraVec3 } from "./index.js";
2
+ import { type CameraKeyframe, type CameraPath, type CameraSample } from "./CameraChoreographer.js";
3
+ import { type PromptAnimationId, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
4
+ export interface CameraPathEditorState {
5
+ readonly path: CameraPath;
6
+ readonly selectedKeyframeIds: readonly PromptAnimationId[];
7
+ readonly pathMarkers: readonly CameraPathMarker[];
8
+ }
9
+ export interface CameraPathMarker {
10
+ readonly keyframeId: PromptAnimationId;
11
+ readonly position: AuraVec3;
12
+ readonly target: AuraVec3;
13
+ readonly label: string;
14
+ }
15
+ export declare function createCameraPathEditorState(path: CameraPath): CameraPathEditorState;
16
+ export declare function addCameraKeyframe(path: CameraPath, keyframe: CameraKeyframe): CameraPath;
17
+ export declare function moveCameraKeyframe(path: CameraPath, keyframeId: PromptAnimationId, patch: Partial<Pick<CameraKeyframe, "time" | "position" | "target" | "fov" | "focusDistance" | "shake">>): CameraPath;
18
+ export declare function removeCameraKeyframe(path: CameraPath, keyframeId: PromptAnimationId): CameraPath;
19
+ export declare function sampleCameraPathEditorPreview(state: CameraPathEditorState, times: readonly PromptAnimationSeconds[]): readonly CameraSample[];
20
+ //# sourceMappingURL=CameraPathEditor.d.ts.map