@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,45 @@
1
+ import { type PromptAnimationId, type PromptAnimationValidationIssue } from "./PromptAnimationContract.js";
2
+ export type ShotCompositionRule = "rule-of-thirds" | "center-safe" | "headroom" | "leading-room";
3
+ export interface ShotCompositionGuide {
4
+ readonly rule: ShotCompositionRule;
5
+ readonly lines: readonly {
6
+ readonly axis: "x" | "y";
7
+ readonly value: number;
8
+ }[];
9
+ readonly safeArea: {
10
+ readonly x: number;
11
+ readonly y: number;
12
+ readonly width: number;
13
+ readonly height: number;
14
+ };
15
+ readonly notes: readonly string[];
16
+ }
17
+ export interface ShotSubjectFrameBox {
18
+ readonly subjectId: PromptAnimationId;
19
+ readonly x: number;
20
+ readonly y: number;
21
+ readonly width: number;
22
+ readonly height: number;
23
+ readonly facing?: "left" | "right" | "camera" | "three-quarter" | undefined;
24
+ }
25
+ export interface ShotCompositionRuleOptions {
26
+ readonly ruleOfThirdsTolerance?: number | undefined;
27
+ readonly minHeadroom?: number | undefined;
28
+ readonly maxHeadroom?: number | undefined;
29
+ readonly minLeadingRoom?: number | undefined;
30
+ readonly safeAreaMargin?: number | undefined;
31
+ }
32
+ export interface ShotCompositionReport {
33
+ readonly subjectCount: number;
34
+ readonly score: number;
35
+ readonly issues: readonly PromptAnimationValidationIssue[];
36
+ readonly overlays: readonly ShotCompositionOverlay[];
37
+ }
38
+ export interface ShotCompositionOverlay {
39
+ readonly kind: "rule-of-thirds" | "safe-area" | "headroom" | "leading-room";
40
+ readonly lines?: readonly number[] | undefined;
41
+ readonly margin?: number | undefined;
42
+ }
43
+ export declare function createShotCompositionGuide(rule: ShotCompositionRule, aspectRatio?: number): ShotCompositionGuide;
44
+ export declare function evaluateShotComposition(subjects: readonly ShotSubjectFrameBox[], options?: ShotCompositionRuleOptions): ShotCompositionReport;
45
+ //# sourceMappingURL=ShotCompositionRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShotCompositionRules.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotCompositionRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,iBAAiB,EAAE,KAAK,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAEvI,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AAEjG,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChF,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/G,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC;CAC7E;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,EAAE,WAAW,SAAS,GAAG,oBAAoB,CAWhH;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,EACxC,OAAO,GAAE,0BAA+B,GACvC,qBAAqB,CAyCvB"}
@@ -0,0 +1,54 @@
1
+ import { createPromptAnimationIssue } from "./PromptAnimationContract.js";
2
+ export function createShotCompositionGuide(rule, aspectRatio = 16 / 9) {
3
+ const safeX = rule === "center-safe" ? 0.12 : 0.08;
4
+ const safeY = rule === "headroom" ? 0.06 : 0.08;
5
+ return {
6
+ rule,
7
+ lines: rule === "rule-of-thirds"
8
+ ? [{ axis: "x", value: 1 / 3 }, { axis: "x", value: 2 / 3 }, { axis: "y", value: 1 / 3 }, { axis: "y", value: 2 / 3 }]
9
+ : [{ axis: "x", value: 0.5 }, { axis: "y", value: rule === "headroom" ? 0.42 : 0.5 }],
10
+ safeArea: { x: safeX, y: safeY, width: 1 - safeX * 2, height: Math.min(1 - safeY * 2, (1 - safeX * 2) / aspectRatio) },
11
+ notes: rule === "leading-room" ? ["Leave extra room in the subject's facing direction."] : []
12
+ };
13
+ }
14
+ export function evaluateShotComposition(subjects, options = {}) {
15
+ const issues = [];
16
+ const thirds = [1 / 3, 2 / 3];
17
+ const tolerance = options.ruleOfThirdsTolerance ?? 0.08;
18
+ const safeAreaMargin = options.safeAreaMargin ?? 0.05;
19
+ const minHeadroom = options.minHeadroom ?? 0.03;
20
+ const maxHeadroom = options.maxHeadroom ?? 0.18;
21
+ const minLeadingRoom = options.minLeadingRoom ?? 0.08;
22
+ for (const subject of subjects) {
23
+ const centerX = subject.x + subject.width / 2;
24
+ const nearThird = thirds.some((third) => Math.abs(centerX - third) <= tolerance);
25
+ if (!nearThird && subjects.length <= 2) {
26
+ issues.push(createPromptAnimationIssue("warning", "shot-composition-thirds", `Subject "${subject.subjectId}" is not near a rule-of-thirds vertical.`, { path: `subjects.${subject.subjectId}` }));
27
+ }
28
+ const headroom = subject.y;
29
+ if (headroom < minHeadroom || headroom > maxHeadroom) {
30
+ issues.push(createPromptAnimationIssue("warning", "shot-composition-headroom", `Subject "${subject.subjectId}" headroom is outside the preferred range.`, { path: `subjects.${subject.subjectId}.y` }));
31
+ }
32
+ if (subject.x < safeAreaMargin || subject.y < safeAreaMargin || subject.x + subject.width > 1 - safeAreaMargin || subject.y + subject.height > 1 - safeAreaMargin) {
33
+ issues.push(createPromptAnimationIssue("error", "shot-composition-safe-area", `Subject "${subject.subjectId}" leaves the safe title area.`, { path: `subjects.${subject.subjectId}` }));
34
+ }
35
+ if (subject.facing === "left" && subject.x < minLeadingRoom) {
36
+ issues.push(createPromptAnimationIssue("warning", "shot-composition-leading-room", `Subject "${subject.subjectId}" needs more leading room to the left.`, { path: `subjects.${subject.subjectId}.x` }));
37
+ }
38
+ if (subject.facing === "right" && 1 - (subject.x + subject.width) < minLeadingRoom) {
39
+ issues.push(createPromptAnimationIssue("warning", "shot-composition-leading-room", `Subject "${subject.subjectId}" needs more leading room to the right.`, { path: `subjects.${subject.subjectId}.x` }));
40
+ }
41
+ }
42
+ return {
43
+ subjectCount: subjects.length,
44
+ score: Math.max(0, 1 - issues.length / Math.max(1, subjects.length * 4)),
45
+ issues,
46
+ overlays: [
47
+ { kind: "rule-of-thirds", lines: thirds },
48
+ { kind: "safe-area", margin: safeAreaMargin },
49
+ { kind: "headroom", lines: [minHeadroom, maxHeadroom] },
50
+ { kind: "leading-room", margin: minLeadingRoom }
51
+ ]
52
+ };
53
+ }
54
+ //# sourceMappingURL=ShotCompositionRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShotCompositionRules.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotCompositionRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type PromptAnimationId, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
2
+ import type { ShotTimelineArtifact, ShotTimelineShot, ShotTransition } from "./ShotTimeline.js";
3
+ export type ShotTransitionKind = ShotTransition | "crossfade" | "dip-to-black";
4
+ export type WipeDirection = "left" | "right" | "up" | "down";
5
+ export interface ShotTransitionDescriptor {
6
+ readonly id: PromptAnimationId;
7
+ readonly kind: ShotTransitionKind;
8
+ readonly fromShotId?: PromptAnimationId | undefined;
9
+ readonly toShotId?: PromptAnimationId | undefined;
10
+ readonly startTime: PromptAnimationSeconds;
11
+ readonly endTime: PromptAnimationSeconds;
12
+ readonly duration: PromptAnimationSeconds;
13
+ readonly direction?: WipeDirection | undefined;
14
+ readonly color?: string | undefined;
15
+ readonly matchTargetId?: PromptAnimationId | undefined;
16
+ }
17
+ export interface ShotTransitionSample {
18
+ readonly time: PromptAnimationSeconds;
19
+ readonly transition?: ShotTransitionDescriptor | undefined;
20
+ readonly progress: number;
21
+ readonly fromOpacity: number;
22
+ readonly toOpacity: number;
23
+ readonly overlayOpacity: number;
24
+ readonly wipeProgress?: number | undefined;
25
+ }
26
+ export interface ShotTransitionPlan {
27
+ readonly kind: "shot-transition-plan";
28
+ readonly episodeId: PromptAnimationId;
29
+ readonly transitions: readonly ShotTransitionDescriptor[];
30
+ }
31
+ export interface LegacyShotTransitionSample {
32
+ readonly kind: "shot-transition-sample";
33
+ readonly transition: ShotTransition;
34
+ readonly progress: number;
35
+ readonly outgoingOpacity: number;
36
+ readonly incomingOpacity: number;
37
+ readonly wipeOffset: number;
38
+ }
39
+ export declare function createShotTransitionPlan(input: {
40
+ readonly timeline: ShotTimelineArtifact;
41
+ readonly defaultDuration?: PromptAnimationSeconds | undefined;
42
+ }): ShotTransitionPlan;
43
+ export declare function sampleShotTransition(plan: ShotTransitionPlan, time: PromptAnimationSeconds): ShotTransitionSample;
44
+ export declare function sampleShotTransition(transition: ShotTransition, progress: number): LegacyShotTransitionSample;
45
+ export declare function createShotTransitionDescriptor(fromShot: ShotTimelineShot, toShot: ShotTimelineShot, kind: ShotTransitionKind, duration: PromptAnimationSeconds): ShotTransitionDescriptor;
46
+ //# sourceMappingURL=ShotTransitionEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShotTransitionEngine.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotTransitionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACjI,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhG,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,CAAC;AAC/E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC/D,GAAG,kBAAkB,CAgBrB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;AACnH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,0BAA0B,CAAC;AAsD/G,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,sBAAsB,GAC/B,wBAAwB,CAgB1B"}
@@ -0,0 +1,98 @@
1
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
2
+ export function createShotTransitionPlan(input) {
3
+ const defaultDuration = input.defaultDuration ?? 0.35;
4
+ const transitions = [];
5
+ for (let index = 0; index < input.timeline.shots.length - 1; index += 1) {
6
+ const fromShot = input.timeline.shots[index];
7
+ const toShot = input.timeline.shots[index + 1];
8
+ if (!fromShot || !toShot)
9
+ continue;
10
+ const kind = normalizeTransitionKind(fromShot.transitionOut ?? toShot.transitionIn ?? "cut");
11
+ const duration = transitionDuration(kind, defaultDuration);
12
+ transitions.push(createShotTransitionDescriptor(fromShot, toShot, kind, duration));
13
+ }
14
+ return {
15
+ kind: "shot-transition-plan",
16
+ episodeId: input.timeline.episodeId,
17
+ transitions
18
+ };
19
+ }
20
+ export function sampleShotTransition(planOrTransition, timeOrProgress) {
21
+ if (typeof planOrTransition === "string") {
22
+ const t = Math.min(1, Math.max(0, timeOrProgress));
23
+ return {
24
+ kind: "shot-transition-sample",
25
+ transition: planOrTransition,
26
+ progress: t,
27
+ outgoingOpacity: planOrTransition === "cut" ? 0 : planOrTransition === "hold" ? 1 : 1 - t,
28
+ incomingOpacity: planOrTransition === "cut" ? 1 : planOrTransition === "hold" ? 0 : t,
29
+ wipeOffset: planOrTransition === "wipe" ? t : 0
30
+ };
31
+ }
32
+ const plan = planOrTransition;
33
+ const time = timeOrProgress;
34
+ const normalized = normalizePromptAnimationTime(time);
35
+ const transition = plan.transitions.find((candidate) => normalized > candidate.startTime && normalized < candidate.endTime);
36
+ if (!transition) {
37
+ return {
38
+ time: normalized,
39
+ progress: 1,
40
+ fromOpacity: 0,
41
+ toOpacity: 1,
42
+ overlayOpacity: 0
43
+ };
44
+ }
45
+ const progress = transition.duration <= 0 ? 1 : Math.max(0, Math.min(1, (normalized - transition.startTime) / transition.duration));
46
+ if (transition.kind === "cut" || transition.kind === "hold") {
47
+ return { time: normalized, transition, progress: 1, fromOpacity: 0, toOpacity: 1, overlayOpacity: 0 };
48
+ }
49
+ if (transition.kind === "dip-to-black" || transition.kind === "fade") {
50
+ return {
51
+ time: normalized,
52
+ transition,
53
+ progress,
54
+ fromOpacity: progress < 0.5 ? 1 - progress * 2 : 0,
55
+ toOpacity: progress < 0.5 ? 0 : (progress - 0.5) * 2,
56
+ overlayOpacity: 1 - Math.abs(progress - 0.5) * 2
57
+ };
58
+ }
59
+ return {
60
+ time: normalized,
61
+ transition,
62
+ progress,
63
+ fromOpacity: 1 - progress,
64
+ toOpacity: progress,
65
+ overlayOpacity: 0,
66
+ ...(transition.kind === "wipe" ? { wipeProgress: progress } : {})
67
+ };
68
+ }
69
+ export function createShotTransitionDescriptor(fromShot, toShot, kind, duration) {
70
+ const startTime = normalizePromptAnimationTime(toShot.startTime);
71
+ const endTime = normalizePromptAnimationTime(Math.min(toShot.endTime, toShot.startTime + duration));
72
+ const actualDuration = Math.max(0, endTime - startTime);
73
+ return {
74
+ id: `${fromShot.shotId}:to:${toShot.shotId}`,
75
+ kind,
76
+ fromShotId: fromShot.shotId,
77
+ toShotId: toShot.shotId,
78
+ startTime,
79
+ endTime,
80
+ duration: normalizePromptAnimationTime(actualDuration),
81
+ ...(kind === "wipe" ? { direction: "left" } : {}),
82
+ ...(kind === "dip-to-black" || kind === "fade" ? { color: "#000000" } : {}),
83
+ ...(kind === "match-cut" ? { matchTargetId: toShot.characters[0]?.characterId } : {})
84
+ };
85
+ }
86
+ function normalizeTransitionKind(kind) {
87
+ if (kind === "fade")
88
+ return "crossfade";
89
+ return kind;
90
+ }
91
+ function transitionDuration(kind, defaultDuration) {
92
+ if (kind === "cut")
93
+ return 0;
94
+ if (kind === "hold")
95
+ return Math.max(defaultDuration, 0.5);
96
+ return defaultDuration;
97
+ }
98
+ //# sourceMappingURL=ShotTransitionEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShotTransitionEngine.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotTransitionEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { CartoonRenderOutputPackageMetadata, CartoonThumbnailSceneStateCapture, CartoonViewport } from "./CartoonRenderQueue.js";
2
+ import { type PromptAnimationId, type PromptAnimationSeconds } from "./PromptAnimationContract.js";
3
+ export interface ThumbnailGenerationPlan {
4
+ readonly kind: "thumbnail-generation-plan";
5
+ readonly episodeId: PromptAnimationId;
6
+ readonly capture: CartoonThumbnailSceneStateCapture;
7
+ readonly outputPath: string;
8
+ readonly width: number;
9
+ readonly height: number;
10
+ readonly mimeType: "image/webp" | "image/png" | "image/jpeg";
11
+ readonly time: PromptAnimationSeconds;
12
+ readonly resizeMode: "cover" | "contain";
13
+ }
14
+ export interface ThumbnailArtifact {
15
+ readonly kind: "thumbnail";
16
+ readonly plan: ThumbnailGenerationPlan;
17
+ readonly path: string;
18
+ readonly width: number;
19
+ readonly height: number;
20
+ readonly time: PromptAnimationSeconds;
21
+ readonly mimeType: "image/webp" | "image/png" | "image/jpeg";
22
+ readonly byteLength: number;
23
+ readonly checksum: string;
24
+ readonly image?: Blob | Uint8Array | string | undefined;
25
+ }
26
+ export interface ThumbnailCaptureRuntime {
27
+ captureThumbnail(plan: ThumbnailGenerationPlan): Promise<Blob | Uint8Array | string | undefined> | Blob | Uint8Array | string | undefined;
28
+ }
29
+ export declare function createThumbnailGenerationPlan(input: {
30
+ readonly packageMetadata: CartoonRenderOutputPackageMetadata;
31
+ readonly width?: number | undefined;
32
+ readonly height?: number | undefined;
33
+ readonly mimeType?: "image/webp" | "image/png" | "image/jpeg" | undefined;
34
+ readonly resizeMode?: "cover" | "contain" | undefined;
35
+ }): ThumbnailGenerationPlan;
36
+ export declare function generateThumbnailArtifact(plan: ThumbnailGenerationPlan, runtime: ThumbnailCaptureRuntime): Promise<ThumbnailArtifact>;
37
+ export declare function createThumbnailArtifact(input: {
38
+ readonly path: string;
39
+ readonly viewport: CartoonViewport;
40
+ readonly time: number;
41
+ readonly data?: Blob | Uint8Array | string | undefined;
42
+ readonly mimeType?: "image/webp" | "image/png" | "image/jpeg" | undefined;
43
+ }): ThumbnailArtifact;
44
+ //# sourceMappingURL=ThumbnailGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbnailGenerator.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ThumbnailGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtI,OAAO,EAAgC,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEjI,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CAC3I;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,eAAe,EAAE,kCAAkC,CAAC;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;CACvD,GAAG,uBAAuB,CAa1B;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;CAC3E,GAAG,iBAAiB,CAwBpB"}
@@ -0,0 +1,82 @@
1
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
2
+ export function createThumbnailGenerationPlan(input) {
3
+ const viewport = youtubeThumbnailViewport(input.packageMetadata.viewport, input.width, input.height);
4
+ return {
5
+ kind: "thumbnail-generation-plan",
6
+ episodeId: input.packageMetadata.episodeId,
7
+ capture: input.packageMetadata.thumbnailCapture,
8
+ outputPath: input.packageMetadata.outputs.thumbnail?.path ?? "dist/render/thumbnail.webp",
9
+ width: viewport.width,
10
+ height: viewport.height,
11
+ mimeType: input.mimeType ?? "image/webp",
12
+ time: normalizePromptAnimationTime(input.packageMetadata.thumbnailCapture.time),
13
+ resizeMode: input.resizeMode ?? "cover"
14
+ };
15
+ }
16
+ export async function generateThumbnailArtifact(plan, runtime) {
17
+ const image = await runtime.captureThumbnail(plan);
18
+ return createThumbnailArtifactFromPlan(plan, image);
19
+ }
20
+ export function createThumbnailArtifact(input) {
21
+ const plan = {
22
+ kind: "thumbnail-generation-plan",
23
+ episodeId: "thumbnail",
24
+ capture: {
25
+ id: "thumbnail:capture",
26
+ source: "same-aura3d-scene-state",
27
+ outputId: "thumbnail",
28
+ outputPath: input.path,
29
+ route: "",
30
+ time: input.time,
31
+ auraVoiceTimestamp: input.time,
32
+ frame: 0,
33
+ sourceSceneStateId: "thumbnail:scene-state",
34
+ deterministicSeed: "thumbnail"
35
+ },
36
+ outputPath: input.path,
37
+ width: input.viewport.width,
38
+ height: input.viewport.height,
39
+ mimeType: input.mimeType ?? "image/png",
40
+ time: input.time,
41
+ resizeMode: "cover"
42
+ };
43
+ return createThumbnailArtifactFromPlan(plan, input.data);
44
+ }
45
+ function createThumbnailArtifactFromPlan(plan, image) {
46
+ const byteLength = estimateImageByteLength(image, plan);
47
+ return {
48
+ kind: "thumbnail",
49
+ plan,
50
+ path: plan.outputPath,
51
+ width: plan.width,
52
+ height: plan.height,
53
+ time: plan.time,
54
+ mimeType: plan.mimeType,
55
+ byteLength,
56
+ checksum: thumbnailChecksum(`${plan.outputPath}:${byteLength}:${plan.time}`),
57
+ ...(image !== undefined ? { image } : {})
58
+ };
59
+ }
60
+ function youtubeThumbnailViewport(source, width = 1280, height = 720) {
61
+ if (width > 0 && height > 0)
62
+ return { width, height };
63
+ if (source.width / source.height >= 16 / 9)
64
+ return { width: 1280, height: 720 };
65
+ return { width: 720, height: 1280 };
66
+ }
67
+ function estimateImageByteLength(image, plan) {
68
+ if (image instanceof Uint8Array)
69
+ return image.byteLength;
70
+ if (typeof Blob !== "undefined" && image instanceof Blob)
71
+ return image.size;
72
+ if (typeof image === "string")
73
+ return image.length;
74
+ return Math.round(plan.width * plan.height * 0.18);
75
+ }
76
+ function thumbnailChecksum(value) {
77
+ let hash = 0;
78
+ for (let index = 0; index < value.length; index += 1)
79
+ hash = (Math.imul(hash, 31) + value.charCodeAt(index)) | 0;
80
+ return `thumb-${(hash >>> 0).toString(16).padStart(8, "0")}`;
81
+ }
82
+ //# sourceMappingURL=ThumbnailGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbnailGenerator.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ThumbnailGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { CartoonRenderOutputPackageMetadata, CartoonRenderQueueArtifact, CartoonRenderQueueItem } from "./CartoonRenderQueue.js";
2
+ import { type EncodedVideoArtifact, type FrameEncoder, type FrameEncoderAdapter, type FrameEncoderCodec } from "./FrameEncoder.js";
3
+ import { type AudioMuxer, type AudioMuxerInputStem, type MuxedVideoArtifact } from "./AudioMuxer.js";
4
+ import { type RenderProgressSnapshot, type RenderProgressTracker } from "./RenderProgressTracker.js";
5
+ import type { AudioStemManifestArtifact } from "./DialoguePerformance.js";
6
+ import { type PromptAnimationSeconds } from "./PromptAnimationContract.js";
7
+ export interface VideoExportFrameCapture {
8
+ readonly item: CartoonRenderQueueItem;
9
+ readonly image?: ImageBitmap | HTMLCanvasElement | OffscreenCanvas | Blob | Uint8Array | string | undefined;
10
+ }
11
+ export interface VideoExportRuntime {
12
+ seek?(time: PromptAnimationSeconds, item: CartoonRenderQueueItem): Promise<void> | void;
13
+ step?(dt: PromptAnimationSeconds, item: CartoonRenderQueueItem): Promise<void> | void;
14
+ captureFrame(item: CartoonRenderQueueItem): Promise<VideoExportFrameCapture> | VideoExportFrameCapture;
15
+ }
16
+ export interface VideoExportPlan {
17
+ readonly kind: "video-export-plan";
18
+ readonly episodeId: string;
19
+ readonly route: string;
20
+ readonly frameRate: number;
21
+ readonly duration: PromptAnimationSeconds;
22
+ readonly frameCount: number;
23
+ readonly outputPath: string;
24
+ readonly outputMimeType: string;
25
+ readonly codec: FrameEncoderCodec;
26
+ readonly audioStemCount: number;
27
+ readonly captionOutputCount: number;
28
+ readonly thumbnailOutputPath?: string | undefined;
29
+ readonly evidenceOutputPath?: string | undefined;
30
+ }
31
+ export interface VideoExportResult {
32
+ readonly kind: "video-export-result";
33
+ readonly plan: VideoExportPlan;
34
+ readonly encodedVideo: EncodedVideoArtifact;
35
+ readonly muxedVideo: MuxedVideoArtifact;
36
+ readonly progress: RenderProgressSnapshot;
37
+ readonly checksum: string;
38
+ readonly renderTimeMs: number;
39
+ }
40
+ export interface CreateVideoExportPipelineOptions {
41
+ readonly renderQueue: CartoonRenderQueueArtifact;
42
+ readonly outputPackage: CartoonRenderOutputPackageMetadata;
43
+ readonly runtime: VideoExportRuntime;
44
+ readonly audioStems?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined;
45
+ readonly codec?: FrameEncoderCodec | undefined;
46
+ readonly encoder?: FrameEncoder | undefined;
47
+ readonly encoderAdapter?: FrameEncoderAdapter | undefined;
48
+ readonly muxer?: AudioMuxer | undefined;
49
+ readonly progress?: RenderProgressTracker | undefined;
50
+ readonly now?: (() => number) | undefined;
51
+ }
52
+ export interface VideoExportPipeline {
53
+ readonly plan: VideoExportPlan;
54
+ readonly progress: RenderProgressTracker;
55
+ render(): Promise<VideoExportResult>;
56
+ cancel(message?: string): RenderProgressSnapshot;
57
+ }
58
+ export declare function createVideoExportPlan(input: {
59
+ readonly renderQueue: CartoonRenderQueueArtifact;
60
+ readonly outputPackage: CartoonRenderOutputPackageMetadata;
61
+ readonly audioStems?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined;
62
+ readonly codec?: FrameEncoderCodec | undefined;
63
+ }): VideoExportPlan;
64
+ export declare function createVideoExportPipeline(options: CreateVideoExportPipelineOptions): VideoExportPipeline;
65
+ export declare function normalizeAudioStemInput(input?: readonly AudioMuxerInputStem[] | AudioStemManifestArtifact | undefined): readonly AudioMuxerInputStem[];
66
+ //# sourceMappingURL=VideoExportPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoExportPipeline.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VideoExportPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { createFrameEncoder } from "./FrameEncoder.js";
2
+ import { audioStemsFromManifest, createAudioMuxer } from "./AudioMuxer.js";
3
+ import { createRenderProgressTracker } from "./RenderProgressTracker.js";
4
+ import { normalizePromptAnimationTime } from "./PromptAnimationContract.js";
5
+ export function createVideoExportPlan(input) {
6
+ const videoOutput = input.outputPackage.outputs.webm ?? input.outputPackage.outputs.mp4;
7
+ const codec = input.codec ?? videoOutput?.codec ?? (videoOutput?.kind === "mp4" ? "h264" : "vp9");
8
+ const audioStems = normalizeAudioStemInput(input.audioStems);
9
+ return {
10
+ kind: "video-export-plan",
11
+ episodeId: input.renderQueue.episodeId,
12
+ route: input.renderQueue.route,
13
+ frameRate: input.renderQueue.frameRate,
14
+ duration: input.outputPackage.duration,
15
+ frameCount: input.renderQueue.items.length,
16
+ outputPath: videoOutput?.path ?? "dist/render/episode.webm",
17
+ outputMimeType: videoOutput?.mimeType ?? (codec === "h264" ? "video/mp4" : "video/webm"),
18
+ codec,
19
+ audioStemCount: audioStems.length,
20
+ captionOutputCount: input.outputPackage.outputs.captions.length,
21
+ ...(input.outputPackage.outputs.thumbnail?.path ? { thumbnailOutputPath: input.outputPackage.outputs.thumbnail.path } : {}),
22
+ ...(input.outputPackage.outputs.evidenceJson?.path ? { evidenceOutputPath: input.outputPackage.outputs.evidenceJson.path } : {})
23
+ };
24
+ }
25
+ export function createVideoExportPipeline(options) {
26
+ const now = options.now ?? defaultNow;
27
+ const plan = createVideoExportPlan(options);
28
+ const encoder = options.encoder ?? createFrameEncoder({
29
+ codec: plan.codec,
30
+ frameRate: options.renderQueue.frameRate,
31
+ viewport: options.renderQueue.viewport,
32
+ adapter: options.encoderAdapter
33
+ });
34
+ const muxer = options.muxer ?? createAudioMuxer({ container: plan.codec === "h264" ? "mp4" : "webm" });
35
+ const progress = options.progress ?? createRenderProgressTracker({ totalFrames: options.renderQueue.items.length, now });
36
+ const audioStems = normalizeAudioStemInput(options.audioStems);
37
+ let cancelled = false;
38
+ return {
39
+ plan,
40
+ progress,
41
+ async render() {
42
+ const startedAt = now();
43
+ progress.start(`Rendering ${plan.frameCount} frames.`);
44
+ for (const item of options.renderQueue.items) {
45
+ if (cancelled || progress.snapshot().cancelled)
46
+ break;
47
+ await options.runtime.seek?.(item.time, item);
48
+ await options.runtime.step?.(1 / options.renderQueue.frameRate, item);
49
+ const capture = await options.runtime.captureFrame(item);
50
+ await encoder.encodeFrame({
51
+ frame: item.frame,
52
+ time: item.time,
53
+ viewport: item.viewport,
54
+ image: capture.image,
55
+ durationMs: 1000 / options.renderQueue.frameRate
56
+ });
57
+ progress.advance({ frame: item.frame, time: item.time });
58
+ }
59
+ if (cancelled || progress.snapshot().cancelled) {
60
+ const encodedVideo = encoder.snapshot();
61
+ const muxedVideo = await muxer.mux(encodedVideo, audioStems, options.renderQueue.frameRate);
62
+ return createVideoExportResult(plan, encodedVideo, muxedVideo, progress.snapshot(), startedAt, now());
63
+ }
64
+ const encodedVideo = await encoder.finalize();
65
+ const muxedVideo = await muxer.mux(encodedVideo, audioStems, options.renderQueue.frameRate);
66
+ progress.complete("Render export complete.");
67
+ return createVideoExportResult(plan, encodedVideo, muxedVideo, progress.snapshot(), startedAt, now());
68
+ },
69
+ cancel(message) {
70
+ cancelled = true;
71
+ return progress.cancel(message);
72
+ }
73
+ };
74
+ }
75
+ export function normalizeAudioStemInput(input) {
76
+ if (!input)
77
+ return [];
78
+ if (isAudioStemManifestArtifact(input))
79
+ return audioStemsFromManifest(input);
80
+ return input;
81
+ }
82
+ function isAudioStemManifestArtifact(input) {
83
+ return !Array.isArray(input) && Array.isArray(input.stems);
84
+ }
85
+ function createVideoExportResult(plan, encodedVideo, muxedVideo, progress, startedAt, endedAt) {
86
+ const checksumSource = `${plan.episodeId}:${encodedVideo.frameCount}:${muxedVideo.byteLength}:${normalizePromptAnimationTime(muxedVideo.duration)}`;
87
+ return {
88
+ kind: "video-export-result",
89
+ plan,
90
+ encodedVideo,
91
+ muxedVideo,
92
+ progress,
93
+ checksum: deterministicChecksum(checksumSource),
94
+ renderTimeMs: Math.max(0, endedAt - startedAt)
95
+ };
96
+ }
97
+ function deterministicChecksum(value) {
98
+ let hash = 2166136261;
99
+ for (let index = 0; index < value.length; index += 1) {
100
+ hash ^= value.charCodeAt(index);
101
+ hash = Math.imul(hash, 16777619);
102
+ }
103
+ return `fnv1a-${(hash >>> 0).toString(16).padStart(8, "0")}`;
104
+ }
105
+ function defaultNow() {
106
+ return typeof globalThis.performance === "undefined" ? Date.now() : globalThis.performance.now();
107
+ }
108
+ //# sourceMappingURL=VideoExportPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoExportPipeline.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VideoExportPipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkG,MAAM,mBAAmB,CAAC;AACvJ,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAsE,MAAM,iBAAiB,CAAC;AAC/I,OAAO,EAAE,2BAA2B,EAA2D,MAAM,4BAA4B,CAAC;AAElI,OAAO,EAAE,4BAA4B,EAA+B,MAAM,8BAA8B,CAAC;AA2DzG,MAAM,UAAU,qBAAqB,CAAC,KAKrC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;IACxF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAK,WAAW,EAAE,KAAuC,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrI,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;QACtC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK;QAC9B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;QACtC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;QACtC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;QAC1C,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,0BAA0B;QAC3D,cAAc,EAAE,WAAW,EAAE,QAAQ,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QACxF,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;QAC/D,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3H,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjI,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAyC;IACjF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC;IACtC,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC;QACpD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS;QACxC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ;QACtC,OAAO,EAAE,OAAO,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,2BAA2B,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACzH,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,KAAK,CAAC,MAAM;YACV,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC;YACvD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAC7C,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS;oBAAE,MAAM;gBACtD,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM,OAAO,CAAC,WAAW,CAAC;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS;iBACjD,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5F,OAAO,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YACxG,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5F,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YAC7C,OAAO,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,CAAC,OAAO;YACZ,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA8E;IACpH,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,2BAA2B,CAAC,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAiE;IACpG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAE,KAAmC,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAqB,EACrB,YAAkC,EAClC,UAA8B,EAC9B,QAAgC,EAChC,SAAiB,EACjB,OAAe;IAEf,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,IAAI,4BAA4B,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpJ,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,IAAI;QACJ,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,QAAQ,EAAE,qBAAqB,CAAC,cAAc,CAAC;QAC/C,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,UAAU,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AACnG,CAAC"}