vidspotai-shared 1.0.67 → 1.0.69-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/lib/globals/aiModels/enums.d.ts +63 -6
  2. package/lib/globals/aiModels/enums.d.ts.map +1 -1
  3. package/lib/globals/aiModels/enums.js +78 -9
  4. package/lib/globals/aiModels/index.d.ts +2 -0
  5. package/lib/globals/aiModels/index.d.ts.map +1 -1
  6. package/lib/globals/aiModels/index.js +6 -0
  7. package/lib/globals/aiModels/providers/alibaba.d.ts +4 -0
  8. package/lib/globals/aiModels/providers/alibaba.d.ts.map +1 -0
  9. package/lib/globals/aiModels/providers/alibaba.js +194 -0
  10. package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -1
  11. package/lib/globals/aiModels/providers/bytedance.js +19 -0
  12. package/lib/globals/aiModels/providers/elevenlabs.d.ts +14 -0
  13. package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +1 -0
  14. package/lib/globals/aiModels/providers/elevenlabs.js +29 -0
  15. package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
  16. package/lib/globals/aiModels/providers/google.js +150 -2
  17. package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
  18. package/lib/globals/aiModels/providers/kling.js +280 -37
  19. package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -1
  20. package/lib/globals/aiModels/providers/minimax.js +73 -2
  21. package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
  22. package/lib/globals/aiModels/providers/openai.js +90 -6
  23. package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -1
  24. package/lib/globals/aiModels/providers/pixverse.js +111 -29
  25. package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +36 -0
  26. package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +1 -0
  27. package/lib/globals/aiModels/providers/pixverseTemplates.js +42 -0
  28. package/lib/globals/aiModels/providers/runway.d.ts.map +1 -1
  29. package/lib/globals/aiModels/providers/runway.js +64 -2
  30. package/lib/globals/aiModels/tierHelpers.d.ts +33 -0
  31. package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -0
  32. package/lib/globals/aiModels/tierHelpers.js +109 -0
  33. package/lib/globals/aiModels/types.d.ts +20 -1
  34. package/lib/globals/aiModels/types.d.ts.map +1 -1
  35. package/lib/globals/ttsModels/index.d.ts +2 -0
  36. package/lib/globals/ttsModels/index.d.ts.map +1 -1
  37. package/lib/globals/ttsModels/index.js +9 -1
  38. package/lib/globals/ttsModels/providers/minimax.d.ts +8 -0
  39. package/lib/globals/ttsModels/providers/minimax.d.ts.map +1 -0
  40. package/lib/globals/ttsModels/providers/minimax.js +18 -0
  41. package/lib/globals/ttsModels/providers/openai.d.ts +12 -0
  42. package/lib/globals/ttsModels/providers/openai.d.ts.map +1 -0
  43. package/lib/globals/ttsModels/providers/openai.js +22 -0
  44. package/lib/globals/ttsModels/types.d.ts +1 -1
  45. package/lib/globals/ttsModels/types.d.ts.map +1 -1
  46. package/lib/globals/ttsModels/voices.d.ts +39 -4
  47. package/lib/globals/ttsModels/voices.d.ts.map +1 -1
  48. package/lib/globals/ttsModels/voices.js +273 -26
  49. package/lib/globals/types.d.ts +59 -1
  50. package/lib/globals/types.d.ts.map +1 -1
  51. package/lib/globals/types.js +81 -2
  52. package/lib/index.d.ts +1 -0
  53. package/lib/index.d.ts.map +1 -1
  54. package/lib/index.js +1 -0
  55. package/lib/models/agent.model.d.ts +357 -0
  56. package/lib/models/agent.model.d.ts.map +1 -0
  57. package/lib/models/agent.model.js +21 -0
  58. package/lib/models/cachedAsset.model.d.ts +18 -0
  59. package/lib/models/cachedAsset.model.d.ts.map +1 -0
  60. package/lib/models/cachedAsset.model.js +2 -0
  61. package/lib/models/cachedRawAsset.model.d.ts +20 -0
  62. package/lib/models/cachedRawAsset.model.d.ts.map +1 -0
  63. package/lib/models/cachedRawAsset.model.js +2 -0
  64. package/lib/models/image.model.d.ts +47 -0
  65. package/lib/models/image.model.d.ts.map +1 -0
  66. package/lib/models/image.model.js +2 -0
  67. package/lib/models/index.d.ts +6 -0
  68. package/lib/models/index.d.ts.map +1 -1
  69. package/lib/models/index.js +6 -0
  70. package/lib/models/notification.model.d.ts +25 -0
  71. package/lib/models/notification.model.d.ts.map +1 -0
  72. package/lib/models/notification.model.js +2 -0
  73. package/lib/models/ref.model.d.ts +80 -0
  74. package/lib/models/ref.model.d.ts.map +1 -0
  75. package/lib/models/ref.model.js +13 -0
  76. package/lib/models/share.model.d.ts +29 -0
  77. package/lib/models/share.model.d.ts.map +1 -0
  78. package/lib/models/share.model.js +2 -0
  79. package/lib/models/user.model.d.ts +12 -1
  80. package/lib/models/user.model.d.ts.map +1 -1
  81. package/lib/models/video.model.d.ts +120 -0
  82. package/lib/models/video.model.d.ts.map +1 -1
  83. package/lib/models/video.model.js +10 -0
  84. package/lib/schemas/agentPersona.schema.d.ts +10 -0
  85. package/lib/schemas/agentPersona.schema.d.ts.map +1 -0
  86. package/lib/schemas/agentPersona.schema.js +11 -0
  87. package/lib/schemas/agentRunJob.schema.d.ts +105 -0
  88. package/lib/schemas/agentRunJob.schema.d.ts.map +1 -0
  89. package/lib/schemas/agentRunJob.schema.js +88 -0
  90. package/lib/schemas/brandKit.schema.d.ts +113 -0
  91. package/lib/schemas/brandKit.schema.d.ts.map +1 -0
  92. package/lib/schemas/brandKit.schema.js +46 -0
  93. package/lib/schemas/brief.schema.d.ts +263 -0
  94. package/lib/schemas/brief.schema.d.ts.map +1 -0
  95. package/lib/schemas/brief.schema.js +157 -0
  96. package/lib/schemas/index.d.ts +7 -0
  97. package/lib/schemas/index.d.ts.map +1 -0
  98. package/lib/schemas/index.js +22 -0
  99. package/lib/schemas/project.schema.d.ts +1025 -0
  100. package/lib/schemas/project.schema.d.ts.map +1 -0
  101. package/lib/schemas/project.schema.js +256 -0
  102. package/lib/schemas/videoPlan.schema.d.ts +590 -0
  103. package/lib/schemas/videoPlan.schema.d.ts.map +1 -0
  104. package/lib/schemas/videoPlan.schema.js +412 -0
  105. package/lib/services/agent/beatSnap.d.ts +10 -0
  106. package/lib/services/agent/beatSnap.d.ts.map +1 -0
  107. package/lib/services/agent/beatSnap.js +128 -0
  108. package/lib/services/agent/bibleBuilder.d.ts +43 -0
  109. package/lib/services/agent/bibleBuilder.d.ts.map +1 -0
  110. package/lib/services/agent/bibleBuilder.js +102 -0
  111. package/lib/services/agent/bibleImageVision.d.ts +45 -0
  112. package/lib/services/agent/bibleImageVision.d.ts.map +1 -0
  113. package/lib/services/agent/bibleImageVision.js +169 -0
  114. package/lib/services/agent/chatAgent.d.ts +79 -0
  115. package/lib/services/agent/chatAgent.d.ts.map +1 -0
  116. package/lib/services/agent/chatAgent.js +136 -0
  117. package/lib/services/agent/costPreflight.d.ts +61 -0
  118. package/lib/services/agent/costPreflight.d.ts.map +1 -0
  119. package/lib/services/agent/costPreflight.js +143 -0
  120. package/lib/services/agent/critic.d.ts +103 -0
  121. package/lib/services/agent/critic.d.ts.map +1 -0
  122. package/lib/services/agent/critic.js +139 -0
  123. package/lib/services/agent/editClassifier.d.ts +262 -0
  124. package/lib/services/agent/editClassifier.d.ts.map +1 -0
  125. package/lib/services/agent/editClassifier.js +186 -0
  126. package/lib/services/agent/eval/index.d.ts +5 -0
  127. package/lib/services/agent/eval/index.d.ts.map +1 -0
  128. package/lib/services/agent/eval/index.js +20 -0
  129. package/lib/services/agent/eval/judge.d.ts +14 -0
  130. package/lib/services/agent/eval/judge.d.ts.map +1 -0
  131. package/lib/services/agent/eval/judge.js +96 -0
  132. package/lib/services/agent/eval/recorder.d.ts +28 -0
  133. package/lib/services/agent/eval/recorder.d.ts.map +1 -0
  134. package/lib/services/agent/eval/recorder.js +100 -0
  135. package/lib/services/agent/eval/seedBriefs.d.ts +16 -0
  136. package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -0
  137. package/lib/services/agent/eval/seedBriefs.js +1188 -0
  138. package/lib/services/agent/eval/types.d.ts +230 -0
  139. package/lib/services/agent/eval/types.d.ts.map +1 -0
  140. package/lib/services/agent/eval/types.js +73 -0
  141. package/lib/services/agent/executor.d.ts +141 -0
  142. package/lib/services/agent/executor.d.ts.map +1 -0
  143. package/lib/services/agent/executor.js +561 -0
  144. package/lib/services/agent/globalActions.d.ts +49 -0
  145. package/lib/services/agent/globalActions.d.ts.map +1 -0
  146. package/lib/services/agent/globalActions.js +328 -0
  147. package/lib/services/agent/index.d.ts +38 -0
  148. package/lib/services/agent/index.d.ts.map +1 -0
  149. package/lib/services/agent/index.js +53 -0
  150. package/lib/services/agent/llmCaller.d.ts +144 -0
  151. package/lib/services/agent/llmCaller.d.ts.map +1 -0
  152. package/lib/services/agent/llmCaller.js +16 -0
  153. package/lib/services/agent/llmCallerAnthropic.d.ts +90 -0
  154. package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -0
  155. package/lib/services/agent/llmCallerAnthropic.js +255 -0
  156. package/lib/services/agent/llmCallerGateway.d.ts +61 -0
  157. package/lib/services/agent/llmCallerGateway.d.ts.map +1 -0
  158. package/lib/services/agent/llmCallerGateway.js +360 -0
  159. package/lib/services/agent/llmCallerRegistry.d.ts +6 -0
  160. package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -0
  161. package/lib/services/agent/llmCallerRegistry.js +39 -0
  162. package/lib/services/agent/modelQualityNotes.d.ts +100 -0
  163. package/lib/services/agent/modelQualityNotes.d.ts.map +1 -0
  164. package/lib/services/agent/modelQualityNotes.js +248 -0
  165. package/lib/services/agent/modelRouter.d.ts +41 -0
  166. package/lib/services/agent/modelRouter.d.ts.map +1 -0
  167. package/lib/services/agent/modelRouter.js +65 -0
  168. package/lib/services/agent/musicSelect.d.ts +23 -0
  169. package/lib/services/agent/musicSelect.d.ts.map +1 -0
  170. package/lib/services/agent/musicSelect.js +109 -0
  171. package/lib/services/agent/overlayRenderer.d.ts +67 -0
  172. package/lib/services/agent/overlayRenderer.d.ts.map +1 -0
  173. package/lib/services/agent/overlayRenderer.js +253 -0
  174. package/lib/services/agent/perSceneCritic.d.ts +90 -0
  175. package/lib/services/agent/perSceneCritic.d.ts.map +1 -0
  176. package/lib/services/agent/perSceneCritic.js +125 -0
  177. package/lib/services/agent/personas.d.ts +78 -0
  178. package/lib/services/agent/personas.d.ts.map +1 -0
  179. package/lib/services/agent/personas.js +177 -0
  180. package/lib/services/agent/planDiff.d.ts +76 -0
  181. package/lib/services/agent/planDiff.d.ts.map +1 -0
  182. package/lib/services/agent/planDiff.js +182 -0
  183. package/lib/services/agent/planMutations.d.ts +46 -0
  184. package/lib/services/agent/planMutations.d.ts.map +1 -0
  185. package/lib/services/agent/planMutations.js +120 -0
  186. package/lib/services/agent/planner/Planner.d.ts +107 -0
  187. package/lib/services/agent/planner/Planner.d.ts.map +1 -0
  188. package/lib/services/agent/planner/Planner.js +591 -0
  189. package/lib/services/agent/planner/overlaySanity.d.ts +7 -0
  190. package/lib/services/agent/planner/overlaySanity.d.ts.map +1 -0
  191. package/lib/services/agent/planner/overlaySanity.js +86 -0
  192. package/lib/services/agent/planner/promptSections.d.ts +25 -0
  193. package/lib/services/agent/planner/promptSections.d.ts.map +1 -0
  194. package/lib/services/agent/planner/promptSections.js +174 -0
  195. package/lib/services/agent/planner/repair.d.ts +16 -0
  196. package/lib/services/agent/planner/repair.d.ts.map +1 -0
  197. package/lib/services/agent/planner/repair.js +51 -0
  198. package/lib/services/agent/planner/structuralRules.d.ts +10 -0
  199. package/lib/services/agent/planner/structuralRules.d.ts.map +1 -0
  200. package/lib/services/agent/planner/structuralRules.js +111 -0
  201. package/lib/services/agent/planner/validators.d.ts +65 -0
  202. package/lib/services/agent/planner/validators.d.ts.map +1 -0
  203. package/lib/services/agent/planner/validators.js +284 -0
  204. package/lib/services/agent/planner.d.ts +3 -0
  205. package/lib/services/agent/planner.d.ts.map +1 -0
  206. package/lib/services/agent/planner.js +14 -0
  207. package/lib/services/agent/providerFallback/chains.d.ts +100 -0
  208. package/lib/services/agent/providerFallback/chains.d.ts.map +1 -0
  209. package/lib/services/agent/providerFallback/chains.js +198 -0
  210. package/lib/services/agent/providerFallback/classifier.d.ts +36 -0
  211. package/lib/services/agent/providerFallback/classifier.d.ts.map +1 -0
  212. package/lib/services/agent/providerFallback/classifier.js +103 -0
  213. package/lib/services/agent/providerFallback/index.d.ts +4 -0
  214. package/lib/services/agent/providerFallback/index.d.ts.map +1 -0
  215. package/lib/services/agent/providerFallback/index.js +19 -0
  216. package/lib/services/agent/providerFallback/withFallback.d.ts +60 -0
  217. package/lib/services/agent/providerFallback/withFallback.d.ts.map +1 -0
  218. package/lib/services/agent/providerFallback/withFallback.js +93 -0
  219. package/lib/services/agent/providerTaskCache.d.ts +50 -0
  220. package/lib/services/agent/providerTaskCache.d.ts.map +1 -0
  221. package/lib/services/agent/providerTaskCache.js +98 -0
  222. package/lib/services/agent/qualityGate.d.ts +82 -0
  223. package/lib/services/agent/qualityGate.d.ts.map +1 -0
  224. package/lib/services/agent/qualityGate.js +232 -0
  225. package/lib/services/agent/referenceImageRenderer.d.ts +37 -0
  226. package/lib/services/agent/referenceImageRenderer.d.ts.map +1 -0
  227. package/lib/services/agent/referenceImageRenderer.js +92 -0
  228. package/lib/services/agent/regenCore.d.ts +60 -0
  229. package/lib/services/agent/regenCore.d.ts.map +1 -0
  230. package/lib/services/agent/regenCore.js +487 -0
  231. package/lib/services/agent/runHelpers.d.ts +44 -0
  232. package/lib/services/agent/runHelpers.d.ts.map +1 -0
  233. package/lib/services/agent/runHelpers.js +196 -0
  234. package/lib/services/agent/sceneLayoutVision.d.ts +90 -0
  235. package/lib/services/agent/sceneLayoutVision.d.ts.map +1 -0
  236. package/lib/services/agent/sceneLayoutVision.js +212 -0
  237. package/lib/services/agent/stitchedVideoCritic.d.ts +136 -0
  238. package/lib/services/agent/stitchedVideoCritic.d.ts.map +1 -0
  239. package/lib/services/agent/stitchedVideoCritic.gemini.d.ts +26 -0
  240. package/lib/services/agent/stitchedVideoCritic.gemini.d.ts.map +1 -0
  241. package/lib/services/agent/stitchedVideoCritic.gemini.js +198 -0
  242. package/lib/services/agent/stitchedVideoCritic.js +162 -0
  243. package/lib/services/agent/taskPoller.d.ts +65 -0
  244. package/lib/services/agent/taskPoller.d.ts.map +1 -0
  245. package/lib/services/agent/taskPoller.js +176 -0
  246. package/lib/services/agent/textOverlayStyles.d.ts +60 -0
  247. package/lib/services/agent/textOverlayStyles.d.ts.map +1 -0
  248. package/lib/services/agent/textOverlayStyles.js +174 -0
  249. package/lib/services/agent/toolRegistry.d.ts +73 -0
  250. package/lib/services/agent/toolRegistry.d.ts.map +1 -0
  251. package/lib/services/agent/toolRegistry.js +95 -0
  252. package/lib/services/agent/tools/analyzeReference.tool.d.ts +36 -0
  253. package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +1 -0
  254. package/lib/services/agent/tools/analyzeReference.tool.js +44 -0
  255. package/lib/services/agent/tools/animateImage.tool.d.ts +24 -0
  256. package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -0
  257. package/lib/services/agent/tools/animateImage.tool.js +115 -0
  258. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +32 -0
  259. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +1 -0
  260. package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +135 -0
  261. package/lib/services/agent/tools/composeScene.tool.d.ts +978 -0
  262. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -0
  263. package/lib/services/agent/tools/composeScene.tool.js +90 -0
  264. package/lib/services/agent/tools/estimateCost.tool.d.ts +352 -0
  265. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -0
  266. package/lib/services/agent/tools/estimateCost.tool.js +62 -0
  267. package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +32 -0
  268. package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +1 -0
  269. package/lib/services/agent/tools/generateAvatarVideo.tool.js +143 -0
  270. package/lib/services/agent/tools/generateCaptions.tool.d.ts +42 -0
  271. package/lib/services/agent/tools/generateCaptions.tool.d.ts.map +1 -0
  272. package/lib/services/agent/tools/generateCaptions.tool.js +196 -0
  273. package/lib/services/agent/tools/generateImage.tool.d.ts +74 -0
  274. package/lib/services/agent/tools/generateImage.tool.d.ts.map +1 -0
  275. package/lib/services/agent/tools/generateImage.tool.js +206 -0
  276. package/lib/services/agent/tools/generateVideo.tool.d.ts +31 -0
  277. package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -0
  278. package/lib/services/agent/tools/generateVideo.tool.js +153 -0
  279. package/lib/services/agent/tools/generateVoiceover.tool.d.ts +44 -0
  280. package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +1 -0
  281. package/lib/services/agent/tools/generateVoiceover.tool.js +206 -0
  282. package/lib/services/agent/tools/index.d.ts +20 -0
  283. package/lib/services/agent/tools/index.d.ts.map +1 -0
  284. package/lib/services/agent/tools/index.js +35 -0
  285. package/lib/services/agent/tools/planVideo.tool.d.ts +343 -0
  286. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -0
  287. package/lib/services/agent/tools/planVideo.tool.js +46 -0
  288. package/lib/services/agent/tools/render.tool.d.ts +367 -0
  289. package/lib/services/agent/tools/render.tool.d.ts.map +1 -0
  290. package/lib/services/agent/tools/render.tool.js +48 -0
  291. package/lib/services/agent/tools/searchMusic.tool.d.ts +49 -0
  292. package/lib/services/agent/tools/searchMusic.tool.d.ts.map +1 -0
  293. package/lib/services/agent/tools/searchMusic.tool.js +74 -0
  294. package/lib/services/agent/tools/searchStock.tool.d.ts +41 -0
  295. package/lib/services/agent/tools/searchStock.tool.d.ts.map +1 -0
  296. package/lib/services/agent/tools/searchStock.tool.js +314 -0
  297. package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +59 -0
  298. package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +1 -0
  299. package/lib/services/agent/tools/searchUserLibrary.tool.js +58 -0
  300. package/lib/services/agent/ttsDuration.d.ts +29 -0
  301. package/lib/services/agent/ttsDuration.d.ts.map +1 -0
  302. package/lib/services/agent/ttsDuration.js +60 -0
  303. package/lib/services/aiGen/aiGenFactory.service.d.ts +21 -1
  304. package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
  305. package/lib/services/aiGen/aiGenFactory.service.js +84 -21
  306. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +31 -0
  307. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +1 -0
  308. package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +2 -0
  309. package/lib/services/aiGen/canonicalAdapters/index.d.ts +3 -0
  310. package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +1 -0
  311. package/lib/services/aiGen/canonicalAdapters/index.js +18 -0
  312. package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +23 -0
  313. package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +1 -0
  314. package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +12 -0
  315. package/lib/services/aiGen/helpers.d.ts.map +1 -1
  316. package/lib/services/aiGen/helpers.js +10 -0
  317. package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +14 -3
  318. package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
  319. package/lib/services/aiGen/providers/alibaba/alibaba.js +155 -22
  320. package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts +22 -4
  321. package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts.map +1 -1
  322. package/lib/services/aiGen/providers/baseAiGenProvider.service.js +32 -0
  323. package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
  324. package/lib/services/aiGen/providers/bytedance/bytedance.service.js +13 -13
  325. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +18 -0
  326. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +1 -0
  327. package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +102 -0
  328. package/lib/services/aiGen/providers/fal/falImage.service.d.ts +15 -0
  329. package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +1 -0
  330. package/lib/services/aiGen/providers/fal/falImage.service.js +141 -0
  331. package/lib/services/aiGen/providers/fal/index.d.ts +2 -0
  332. package/lib/services/aiGen/providers/fal/index.d.ts.map +1 -0
  333. package/lib/services/aiGen/providers/fal/index.js +17 -0
  334. package/lib/services/aiGen/providers/google/google.service.d.ts +11 -2
  335. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  336. package/lib/services/aiGen/providers/google/google.service.js +245 -28
  337. package/lib/services/aiGen/providers/index.d.ts +3 -0
  338. package/lib/services/aiGen/providers/index.d.ts.map +1 -1
  339. package/lib/services/aiGen/providers/index.js +3 -0
  340. package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +4 -0
  341. package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +1 -0
  342. package/lib/services/aiGen/providers/kling/cameraAdapter.js +53 -0
  343. package/lib/services/aiGen/providers/kling/index.d.ts +1 -0
  344. package/lib/services/aiGen/providers/kling/index.d.ts.map +1 -1
  345. package/lib/services/aiGen/providers/kling/index.js +1 -0
  346. package/lib/services/aiGen/providers/kling/kling.service.d.ts +12 -1
  347. package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
  348. package/lib/services/aiGen/providers/kling/kling.service.js +357 -26
  349. package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +21 -0
  350. package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +1 -0
  351. package/lib/services/aiGen/providers/kling/klingImage.service.js +208 -0
  352. package/lib/services/aiGen/providers/kling/types.d.ts +105 -0
  353. package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
  354. package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +15 -2
  355. package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
  356. package/lib/services/aiGen/providers/minimax/minimax.service.js +127 -1
  357. package/lib/services/aiGen/providers/minimax/types.d.ts +10 -1
  358. package/lib/services/aiGen/providers/minimax/types.d.ts.map +1 -1
  359. package/lib/services/aiGen/providers/openai/openai.service.d.ts +8 -2
  360. package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
  361. package/lib/services/aiGen/providers/openai/openai.service.js +184 -7
  362. package/lib/services/aiGen/providers/pexels/index.d.ts +2 -0
  363. package/lib/services/aiGen/providers/pexels/index.d.ts.map +1 -0
  364. package/lib/services/aiGen/providers/{azure → pexels}/index.js +1 -1
  365. package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +11 -0
  366. package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +1 -0
  367. package/lib/services/aiGen/providers/pexels/pexels.service.js +150 -0
  368. package/lib/services/aiGen/providers/pixabay/index.d.ts +2 -0
  369. package/lib/services/aiGen/providers/pixabay/index.d.ts.map +1 -0
  370. package/lib/services/aiGen/providers/pixabay/index.js +17 -0
  371. package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts +12 -0
  372. package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts.map +1 -0
  373. package/lib/services/aiGen/providers/pixabay/pixabay.service.js +156 -0
  374. package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
  375. package/lib/services/aiGen/providers/pixverse/pixverse.service.js +125 -2
  376. package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +3 -0
  377. package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +1 -0
  378. package/lib/services/aiGen/providers/runway/cameraAdapter.js +46 -0
  379. package/lib/services/aiGen/providers/runway/runway.service.d.ts +12 -2
  380. package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
  381. package/lib/services/aiGen/providers/runway/runway.service.js +224 -21
  382. package/lib/services/aiGen/providers/types.d.ts +263 -6
  383. package/lib/services/aiGen/providers/types.d.ts.map +1 -1
  384. package/lib/services/aiGen/providers/unsplash/index.d.ts +2 -0
  385. package/lib/services/aiGen/providers/unsplash/index.d.ts.map +1 -0
  386. package/lib/services/aiGen/providers/unsplash/index.js +17 -0
  387. package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts +16 -0
  388. package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts.map +1 -0
  389. package/lib/services/aiGen/providers/unsplash/unsplash.service.js +131 -0
  390. package/lib/services/analytics.service.js +2 -4
  391. package/lib/services/apiUsageCounter.service.d.ts +20 -0
  392. package/lib/services/apiUsageCounter.service.d.ts.map +1 -0
  393. package/lib/services/apiUsageCounter.service.js +84 -0
  394. package/lib/services/asr/assemblyai.service.d.ts +72 -0
  395. package/lib/services/asr/assemblyai.service.d.ts.map +1 -0
  396. package/lib/services/asr/assemblyai.service.js +89 -0
  397. package/lib/services/asr/index.d.ts +3 -0
  398. package/lib/services/asr/index.d.ts.map +1 -0
  399. package/lib/services/asr/index.js +18 -0
  400. package/lib/services/asr/whisper.service.d.ts +18 -0
  401. package/lib/services/asr/whisper.service.d.ts.map +1 -0
  402. package/lib/services/asr/whisper.service.js +151 -0
  403. package/lib/services/assetCache.service.d.ts +54 -0
  404. package/lib/services/assetCache.service.d.ts.map +1 -0
  405. package/lib/services/assetCache.service.js +109 -0
  406. package/lib/services/audioAnalysis/index.d.ts +2 -0
  407. package/lib/services/audioAnalysis/index.d.ts.map +1 -0
  408. package/lib/services/audioAnalysis/index.js +17 -0
  409. package/lib/services/audioAnalysis/onsetDetection.service.d.ts +50 -0
  410. package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +1 -0
  411. package/lib/services/audioAnalysis/onsetDetection.service.js +140 -0
  412. package/lib/services/bullmq.service.d.ts +6 -1
  413. package/lib/services/bullmq.service.d.ts.map +1 -1
  414. package/lib/services/bullmq.service.js +62 -14
  415. package/lib/services/credit.service.d.ts.map +1 -1
  416. package/lib/services/credit.service.js +45 -7
  417. package/lib/services/credits/pricing.d.ts +58 -0
  418. package/lib/services/credits/pricing.d.ts.map +1 -0
  419. package/lib/services/credits/pricing.js +111 -0
  420. package/lib/services/editor/designToProject.d.ts +75 -0
  421. package/lib/services/editor/designToProject.d.ts.map +1 -0
  422. package/lib/services/editor/designToProject.js +295 -0
  423. package/lib/services/editor/planToProject.d.ts +84 -0
  424. package/lib/services/editor/planToProject.d.ts.map +1 -0
  425. package/lib/services/editor/planToProject.js +395 -0
  426. package/lib/services/editor/projectToDesign.d.ts +4 -0
  427. package/lib/services/editor/projectToDesign.d.ts.map +1 -0
  428. package/lib/services/editor/projectToDesign.js +186 -0
  429. package/lib/services/firestore.service.d.ts +17 -0
  430. package/lib/services/firestore.service.d.ts.map +1 -1
  431. package/lib/services/firestore.service.js +30 -0
  432. package/lib/services/gcp/index.d.ts +1 -0
  433. package/lib/services/gcp/index.d.ts.map +1 -1
  434. package/lib/services/gcp/index.js +1 -0
  435. package/lib/services/gcp/uploadAudioBuffer.d.ts +13 -0
  436. package/lib/services/gcp/uploadAudioBuffer.d.ts.map +1 -0
  437. package/lib/services/gcp/uploadAudioBuffer.js +28 -0
  438. package/lib/services/index.d.ts +13 -0
  439. package/lib/services/index.d.ts.map +1 -1
  440. package/lib/services/index.js +13 -0
  441. package/lib/services/musicGen/index.d.ts +6 -0
  442. package/lib/services/musicGen/index.d.ts.map +1 -0
  443. package/lib/services/musicGen/index.js +26 -0
  444. package/lib/services/musicGen/musicSearchFactory.service.d.ts +14 -0
  445. package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +1 -0
  446. package/lib/services/musicGen/musicSearchFactory.service.js +59 -0
  447. package/lib/services/musicGen/providers/curated.service.d.ts +24 -0
  448. package/lib/services/musicGen/providers/curated.service.d.ts.map +1 -0
  449. package/lib/services/musicGen/providers/curated.service.js +173 -0
  450. package/lib/services/musicGen/providers/jamendo.service.d.ts +8 -0
  451. package/lib/services/musicGen/providers/jamendo.service.d.ts.map +1 -0
  452. package/lib/services/musicGen/providers/jamendo.service.js +113 -0
  453. package/lib/services/musicGen/providers/mubert.service.d.ts +10 -0
  454. package/lib/services/musicGen/providers/mubert.service.d.ts.map +1 -0
  455. package/lib/services/musicGen/providers/mubert.service.js +128 -0
  456. package/lib/services/musicGen/types.d.ts +46 -0
  457. package/lib/services/musicGen/types.d.ts.map +1 -0
  458. package/lib/services/musicGen/types.js +10 -0
  459. package/lib/services/notification.service.d.ts +22 -0
  460. package/lib/services/notification.service.d.ts.map +1 -0
  461. package/lib/services/notification.service.js +76 -0
  462. package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +78 -0
  463. package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +1 -0
  464. package/lib/services/rateLimiter/distributedRateLimiter.service.js +269 -0
  465. package/lib/services/rateLimiter/index.d.ts +2 -0
  466. package/lib/services/rateLimiter/index.d.ts.map +1 -0
  467. package/lib/services/rateLimiter/index.js +17 -0
  468. package/lib/services/redis.service.d.ts +9 -0
  469. package/lib/services/redis.service.d.ts.map +1 -1
  470. package/lib/services/redis.service.js +20 -11
  471. package/lib/services/redisOptions.d.ts +22 -0
  472. package/lib/services/redisOptions.d.ts.map +1 -0
  473. package/lib/services/redisOptions.js +51 -0
  474. package/lib/services/tts/index.d.ts +2 -0
  475. package/lib/services/tts/index.d.ts.map +1 -1
  476. package/lib/services/tts/index.js +2 -0
  477. package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
  478. package/lib/services/tts/providers/elevenlabs.service.js +91 -24
  479. package/lib/services/tts/providers/minimax.service.d.ts +14 -0
  480. package/lib/services/tts/providers/minimax.service.d.ts.map +1 -0
  481. package/lib/services/tts/providers/minimax.service.js +78 -0
  482. package/lib/services/tts/providers/openai.service.d.ts +14 -0
  483. package/lib/services/tts/providers/openai.service.d.ts.map +1 -0
  484. package/lib/services/tts/providers/openai.service.js +73 -0
  485. package/lib/services/tts/ttsFactory.service.d.ts.map +1 -1
  486. package/lib/services/tts/ttsFactory.service.js +6 -0
  487. package/lib/services/tts/types.d.ts +33 -0
  488. package/lib/services/tts/types.d.ts.map +1 -1
  489. package/lib/utils/errors.d.ts +8 -0
  490. package/lib/utils/errors.d.ts.map +1 -1
  491. package/lib/utils/errors.js +8 -0
  492. package/lib/utils/helpers.d.ts +13 -0
  493. package/lib/utils/helpers.d.ts.map +1 -1
  494. package/lib/utils/helpers.js +48 -11
  495. package/lib/utils/logger.d.ts.map +1 -1
  496. package/lib/utils/logger.js +37 -1
  497. package/package.json +5 -1
  498. package/lib/services/aiGen/providers/azure/azure.service.d.ts +0 -14
  499. package/lib/services/aiGen/providers/azure/azure.service.d.ts.map +0 -1
  500. package/lib/services/aiGen/providers/azure/azure.service.js +0 -108
  501. package/lib/services/aiGen/providers/azure/index.d.ts +0 -2
  502. package/lib/services/aiGen/providers/azure/index.d.ts.map +0 -1
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ /**
3
+ * AG-40 — overlay renderer. Turns a `TextOverlay[]` into a list of ffmpeg
4
+ * `drawtext` filter expressions ready to chain in a `-filter_complex` graph.
5
+ *
6
+ * Word-wrap policy:
7
+ * - Each role has a `maxWidthFraction` (e.g. 0.88 of frame width).
8
+ * - We estimate text width as `chars * fontSize * 0.55` (Arial-ish ratio).
9
+ * - If a line exceeds the max width, greedy word-wrap into multiple lines.
10
+ * - If a single word exceeds max width even alone, we shrink fontSize stepwise.
11
+ *
12
+ * Anti-emoji guard:
13
+ * drawtext can't render colour glyphs without libass — strip surrogate-pair
14
+ * emoji upfront. Was the cause of "the H is cut off" mishap in Test 1: the
15
+ * "🌊" wasn't rendered but its width was counted toward layout.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.renderOverlay = renderOverlay;
19
+ exports.renderOverlayChain = renderOverlayChain;
20
+ exports.expandPersistentOverlays = expandPersistentOverlays;
21
+ const textOverlayStyles_1 = require("./textOverlayStyles");
22
+ /**
23
+ * Strip emojis + chars drawtext can't render. Emojis are stripped because
24
+ * the colour-glyph rendering needs libass, not drawtext. Other control chars
25
+ * get cleaned out for the same reason.
26
+ */
27
+ function stripEmoji(s) {
28
+ return s
29
+ .replace(/[\u{1F300}-\u{1FAFF}\u{2600}-\u{27BF}\u{FE0F}\u{200D}]/gu, "")
30
+ .replace(/\s+/g, " ")
31
+ .trim();
32
+ }
33
+ /**
34
+ * Greedy word-wrap. Given a max char count per line, returns the text split
35
+ * into lines. If a single word exceeds the budget, the line gets that word
36
+ * alone — caller handles font shrink in that case.
37
+ */
38
+ function wrapWords(text, maxCharsPerLine) {
39
+ if (maxCharsPerLine <= 0)
40
+ return [text];
41
+ const words = text.split(/\s+/).filter(Boolean);
42
+ const lines = [];
43
+ let current = "";
44
+ for (const w of words) {
45
+ if (!current) {
46
+ current = w;
47
+ continue;
48
+ }
49
+ if ((current + " " + w).length <= maxCharsPerLine) {
50
+ current += " " + w;
51
+ }
52
+ else {
53
+ lines.push(current);
54
+ current = w;
55
+ }
56
+ }
57
+ if (current)
58
+ lines.push(current);
59
+ return lines;
60
+ }
61
+ /**
62
+ * Approximate char width relative to font size. 0.55 is a decent fit for
63
+ * Arial-family sans-serif at mixed case. Bolder weights are slightly wider —
64
+ * we bump to 0.6 for bold/black to be safe.
65
+ */
66
+ function avgCharWidth(fontSizePx, weight) {
67
+ const ratio = weight === "bold" || weight === "black" ? 0.6 : 0.55;
68
+ return fontSizePx * ratio;
69
+ }
70
+ /**
71
+ * Escape a literal text string for ffmpeg drawtext filter syntax. Special chars
72
+ * that need escaping inside single-quoted drawtext text=: backslash, single
73
+ * quote, colon. Newlines stay literal "\n" in the text expression — drawtext
74
+ * with `text_align=center` and `\n` produces multi-line output (modern ffmpeg)
75
+ * or we pre-render each line as a separate drawtext with y offsets (compat).
76
+ */
77
+ function escapeDrawtext(s) {
78
+ return s
79
+ .replace(/\\/g, "\\\\")
80
+ .replace(/:/g, "\\:")
81
+ .replace(/'/g, "\\'")
82
+ .replace(/%/g, "\\%");
83
+ }
84
+ /**
85
+ * Compute x/y ffmpeg expressions for a given position. ffmpeg drawtext
86
+ * accepts `x` / `y` as expressions referencing `w` (frame W), `h`, `text_w`,
87
+ * `text_h`.
88
+ */
89
+ function positionExprs(position, edgePadPx) {
90
+ switch (position) {
91
+ case "top":
92
+ return { x: "(w-text_w)/2", y: `${edgePadPx}` };
93
+ case "top-left":
94
+ return { x: `${edgePadPx}`, y: `${edgePadPx}` };
95
+ case "top-right":
96
+ return { x: `w-text_w-${edgePadPx}`, y: `${edgePadPx}` };
97
+ case "center":
98
+ return { x: "(w-text_w)/2", y: "(h-text_h)/2" };
99
+ case "lower-third":
100
+ return { x: "(w-text_w)/2", y: "h*0.66" };
101
+ case "bottom":
102
+ return { x: "(w-text_w)/2", y: `h-text_h-${edgePadPx}` };
103
+ case "bottom-left":
104
+ return { x: `${edgePadPx}`, y: `h-text_h-${edgePadPx}` };
105
+ case "bottom-right":
106
+ return { x: `w-text_w-${edgePadPx}`, y: `h-text_h-${edgePadPx}` };
107
+ default:
108
+ return { x: "(w-text_w)/2", y: `h-text_h-${edgePadPx}` };
109
+ }
110
+ }
111
+ /**
112
+ * Convert animation kind + scene timing into ffmpeg drawtext `enable` and
113
+ * `alpha` expressions. Best-effort: fade and pop are supported; type/slide-up
114
+ * fall back to plain (drawtext can't do per-glyph typewriter without -filter_complex
115
+ * gymnastics).
116
+ */
117
+ function animationExprs(_animation, startSec, endSec) {
118
+ // ffmpeg filter graph parser treats commas as filter separators even inside
119
+ // single-quoted option values when used with -vf. Multi-term expressions like
120
+ // `min(1,max(0,...))` were being split into "filters" by ffmpeg, producing
121
+ // `No such filter: '0.000'`. Quoted commas inside drawtext's `between(...)`
122
+ // also fail unless explicitly escaped. Escape commas with `\,` per ffmpeg
123
+ // filter-graph quoting rules. We keep things simple: only emit the `enable`
124
+ // gate (no alpha) — short overlays don't need a fade-out to look acceptable.
125
+ const enable = `between(t\\,${startSec.toFixed(3)}\\,${endSec.toFixed(3)})`;
126
+ return { enable };
127
+ }
128
+ /**
129
+ * Build one drawtext expression for a single overlay. Returns the expression
130
+ * plus debug metadata. Caller chains many of these with `,` (or splits per
131
+ * scene depending on its mux structure).
132
+ */
133
+ function renderOverlay(overlay, ctx) {
134
+ const resolved = (0, textOverlayStyles_1.resolveOverlayStyle)(overlay);
135
+ // 1. Compute initial font size from frame height + max width budget in px.
136
+ let fontSizePx = typeof overlay.fontSize === "number"
137
+ ? overlay.fontSize
138
+ : Math.round(ctx.frameHeight * resolved.fontSizeFraction);
139
+ const maxWidthPx = ctx.frameWidth * resolved.maxWidthFraction;
140
+ const edgePadPx = Math.round(Math.min(ctx.frameWidth, ctx.frameHeight) * resolved.edgePaddingFraction);
141
+ // 2. Clean text (strip emoji) — same content the user sees.
142
+ const cleanText = stripEmoji(overlay.text);
143
+ // 3. Wrap by char budget, auto-shrinking until widest line fits the width
144
+ // budget. Cap at 6 shrink passes (each -10%) so we don't infinite-loop
145
+ // on an absurd single word.
146
+ let lines = [cleanText];
147
+ for (let pass = 0; pass < 6; pass++) {
148
+ const charW = avgCharWidth(fontSizePx, resolved.weight);
149
+ const maxCharsPerLine = Math.max(1, Math.floor(maxWidthPx / charW));
150
+ lines = wrapWords(cleanText, maxCharsPerLine);
151
+ // Check that no single line is over-wide (an unwrappable long word).
152
+ const widestPx = Math.max(...lines.map((l) => l.length * charW));
153
+ if (widestPx <= maxWidthPx)
154
+ break;
155
+ // Shrink ~10% and retry.
156
+ fontSizePx = Math.max(12, Math.round(fontSizePx * 0.9));
157
+ }
158
+ // Multi-line text in drawtext requires either a real newline (which breaks
159
+ // -vf parsing) or a doubly-escaped backslash that survives filter-graph
160
+ // unescape and reaches drawtext as `\n`. The single-escape form ("\\n",
161
+ // 2 chars: backslash+n) gets stripped by the filter parser and drawtext
162
+ // renders a literal "n" glyph — that's what produced "yournwatertasten"
163
+ // in the Test 1 repair. Use a 4-char source escape so drawtext sees `\n`.
164
+ const wrapped = lines.map(escapeDrawtext).join("\\\\n");
165
+ const startSec = (overlay.startMs ?? 0) / 1000;
166
+ const endSec = (overlay.endMs ?? overlay.startMs ?? ctx.sceneDurationSec * 1000) / 1000;
167
+ // Default end = scene end when no endMs given.
168
+ const effectiveEnd = overlay.endMs !== undefined ? endSec : ctx.sceneDurationSec;
169
+ const effectiveStart = startSec;
170
+ const { x, y } = positionExprs(resolved.position, edgePadPx);
171
+ const anim = animationExprs(resolved.animation, effectiveStart, effectiveEnd);
172
+ // Compose drawtext expression. Order: fontfile, text, fontsize, fontcolor,
173
+ // box (if bgColor), borderw + bordercolor (stroke), x, y, enable, alpha.
174
+ const parts = [];
175
+ parts.push(`fontfile='${ctx.fontFile.replace(/'/g, "\\'")}'`);
176
+ // Wrap the multi-line text in single quotes for the filter; we already
177
+ // escaped colons + quotes + backslashes inside.
178
+ parts.push(`text='${wrapped}'`);
179
+ parts.push(`fontsize=${fontSizePx}`);
180
+ parts.push(`fontcolor=${resolved.color}`);
181
+ if (resolved.bgColor) {
182
+ parts.push("box=1");
183
+ parts.push(`boxcolor=${resolved.bgColor}@${(resolved.bgAlpha ?? 0.85).toFixed(2)}`);
184
+ parts.push("boxborderw=18");
185
+ }
186
+ if (resolved.strokeWidth > 0) {
187
+ parts.push(`borderw=${resolved.strokeWidth}`);
188
+ parts.push(`bordercolor=${resolved.strokeColor}`);
189
+ }
190
+ parts.push("line_spacing=12");
191
+ parts.push("text_align=C");
192
+ parts.push(`x=${x}`);
193
+ parts.push(`y=${y}`);
194
+ parts.push(`enable='${anim.enable}'`);
195
+ if (anim.alpha)
196
+ parts.push(`alpha='${anim.alpha}'`);
197
+ return {
198
+ drawtextExpr: `drawtext=${parts.join(":")}`,
199
+ source: overlay,
200
+ resolved,
201
+ finalFontSizePx: fontSizePx,
202
+ finalText: wrapped,
203
+ lineCount: lines.length,
204
+ };
205
+ }
206
+ /**
207
+ * Render many overlays into a single chained filter expression, joined by
208
+ * commas. Caller pipes it through `-vf` (single video stream) or wraps in
209
+ * `-filter_complex` if mixing with other filters.
210
+ */
211
+ function renderOverlayChain(overlays, ctx) {
212
+ const rendered = overlays.map((o) => renderOverlay(o, ctx));
213
+ return {
214
+ vfilter: rendered.map((r) => r.drawtextExpr).join(","),
215
+ rendered,
216
+ };
217
+ }
218
+ /**
219
+ * AG-40: persist-across-scenes resolver. Given the per-scene overlay arrays
220
+ * in playback order, append any overlay flagged `persistAcrossScenes` (or with
221
+ * a role whose default-persist is true, like watermark) onto every subsequent
222
+ * scene that doesn't already have an overlay of the same role.
223
+ *
224
+ * This is what lets the planner emit a watermark exactly once (on scene 0) and
225
+ * have it appear on every scene — no need to repeat it scene-by-scene.
226
+ */
227
+ function expandPersistentOverlays(perScene) {
228
+ const sticky = [];
229
+ const out = [];
230
+ for (const sceneOverlays of perScene) {
231
+ const own = sceneOverlays ?? [];
232
+ // Inject sticky overlays at the front, but skip any whose role this scene
233
+ // already has explicitly (per-scene override wins).
234
+ const ownRoles = new Set(own.map((o) => o.role));
235
+ const carried = sticky.filter((o) => !ownRoles.has(o.role));
236
+ const final = [...carried, ...own];
237
+ out.push(final);
238
+ // Update sticky stack with this scene's persistent overlays.
239
+ for (const o of own) {
240
+ const persist = o.persistAcrossScenes ??
241
+ ((0, textOverlayStyles_1.resolveOverlayStyle)(o).persistAcrossScenesDefault ?? false);
242
+ if (persist) {
243
+ // Replace existing sticky of same role with the newer instance.
244
+ const idx = sticky.findIndex((s) => s.role === o.role);
245
+ if (idx >= 0)
246
+ sticky[idx] = o;
247
+ else
248
+ sticky.push(o);
249
+ }
250
+ }
251
+ }
252
+ return out;
253
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * AG-43: per-scene critic. Runs a lightweight Gemini Flash pass on each scene's
3
+ * raw MP4 *before* stitch, focused on the failure modes that show up in a
4
+ * single clip (action plausibility, character drift across the clip's own
5
+ * frames, brand label legibility, prompt adherence). The full stitched critic
6
+ * (stitchedVideoCritic.ts) still grades the assembled result — this is an
7
+ * earlier safety net so we can flag broken scenes and queue targeted re-gens
8
+ * via AG-41 instead of paying for a stitch + critic over already-broken assets.
9
+ *
10
+ * Cost: ~$0.0001 per scene (Gemini Flash, ~3s clip ≈ 800 input tokens). For a
11
+ * 5-scene plan that's ~$0.0005 total — negligible vs the $0.20-0.50 we save
12
+ * by re-generating one scene instead of the whole thing.
13
+ */
14
+ import { z } from "zod";
15
+ export declare const PerSceneFindingSchema: z.ZodObject<{
16
+ severity: z.ZodEnum<{
17
+ fail: "fail";
18
+ warn: "warn";
19
+ pass: "pass";
20
+ }>;
21
+ dimension: z.ZodEnum<{
22
+ brandTextLegibility: "brandTextLegibility";
23
+ actionPlausibility: "actionPlausibility";
24
+ promptAdherence: "promptAdherence";
25
+ characterDrift: "characterDrift";
26
+ compositionQuality: "compositionQuality";
27
+ motionQuality: "motionQuality";
28
+ }>;
29
+ message: z.ZodString;
30
+ }, z.core.$strip>;
31
+ export type PerSceneFinding = z.infer<typeof PerSceneFindingSchema>;
32
+ export declare const PerSceneReviewSchema: z.ZodObject<{
33
+ sceneIndex: z.ZodNumber;
34
+ score: z.ZodNumber;
35
+ shippable: z.ZodBoolean;
36
+ summary: z.ZodString;
37
+ findings: z.ZodArray<z.ZodObject<{
38
+ severity: z.ZodEnum<{
39
+ fail: "fail";
40
+ warn: "warn";
41
+ pass: "pass";
42
+ }>;
43
+ dimension: z.ZodEnum<{
44
+ brandTextLegibility: "brandTextLegibility";
45
+ actionPlausibility: "actionPlausibility";
46
+ promptAdherence: "promptAdherence";
47
+ characterDrift: "characterDrift";
48
+ compositionQuality: "compositionQuality";
49
+ motionQuality: "motionQuality";
50
+ }>;
51
+ message: z.ZodString;
52
+ }, z.core.$strip>>;
53
+ recommendRegenerate: z.ZodBoolean;
54
+ }, z.core.$strip>;
55
+ export type PerSceneReview = z.infer<typeof PerSceneReviewSchema>;
56
+ export interface PerSceneCriticInput {
57
+ sceneIndex: number;
58
+ videoUrl: string;
59
+ /** Original visual prompt the model was given. */
60
+ prompt: string;
61
+ /** Optional spoken line for context (don't grade audio — there is none yet). */
62
+ voiceoverLine?: string;
63
+ /** Optional on-screen text that overlays will burn later. */
64
+ onScreenText?: string;
65
+ /** Bible entities so we know what objects/characters should be present. */
66
+ expectedEntities?: Array<{
67
+ name: string;
68
+ kind: "character" | "object" | "environment";
69
+ }>;
70
+ }
71
+ export declare function buildPerSceneCriticPrompt(input: PerSceneCriticInput): string;
72
+ /**
73
+ * Run the per-scene critic. Caller passes the same Gemini invoker the stitched
74
+ * critic uses; only difference is the prompt + smaller response schema.
75
+ */
76
+ export declare function runPerSceneCritic(input: PerSceneCriticInput, invokeGemini: (args: {
77
+ prompt: string;
78
+ videoUrl: string;
79
+ responseSchema: z.ZodType<PerSceneReview>;
80
+ }) => Promise<PerSceneReview>): Promise<PerSceneReview>;
81
+ /**
82
+ * Convenience: run the per-scene critic over many scenes in parallel (capped
83
+ * concurrency to keep Gemini quota safe).
84
+ */
85
+ export declare function runPerSceneCriticBatch(scenes: PerSceneCriticInput[], invokeGemini: (args: {
86
+ prompt: string;
87
+ videoUrl: string;
88
+ responseSchema: z.ZodType<PerSceneReview>;
89
+ }) => Promise<PerSceneReview>, concurrency?: number): Promise<PerSceneReview[]>;
90
+ //# sourceMappingURL=perSceneCritic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perSceneCritic.d.ts","sourceRoot":"","sources":["../../../src/services/agent/perSceneCritic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAWhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;iBAY/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAgC5E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,EAC1B,YAAY,EAAE,CAAC,IAAI,EAAE;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;CAC3C,KAAK,OAAO,CAAC,cAAc,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,mBAAmB,EAAE,EAC7B,YAAY,EAAE,CAAC,IAAI,EAAE;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;CAC3C,KAAK,OAAO,CAAC,cAAc,CAAC,EAC7B,WAAW,SAAI,GACd,OAAO,CAAC,cAAc,EAAE,CAAC,CAY3B"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * AG-43: per-scene critic. Runs a lightweight Gemini Flash pass on each scene's
4
+ * raw MP4 *before* stitch, focused on the failure modes that show up in a
5
+ * single clip (action plausibility, character drift across the clip's own
6
+ * frames, brand label legibility, prompt adherence). The full stitched critic
7
+ * (stitchedVideoCritic.ts) still grades the assembled result — this is an
8
+ * earlier safety net so we can flag broken scenes and queue targeted re-gens
9
+ * via AG-41 instead of paying for a stitch + critic over already-broken assets.
10
+ *
11
+ * Cost: ~$0.0001 per scene (Gemini Flash, ~3s clip ≈ 800 input tokens). For a
12
+ * 5-scene plan that's ~$0.0005 total — negligible vs the $0.20-0.50 we save
13
+ * by re-generating one scene instead of the whole thing.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PerSceneReviewSchema = exports.PerSceneFindingSchema = void 0;
17
+ exports.buildPerSceneCriticPrompt = buildPerSceneCriticPrompt;
18
+ exports.runPerSceneCritic = runPerSceneCritic;
19
+ exports.runPerSceneCriticBatch = runPerSceneCriticBatch;
20
+ const zod_1 = require("zod");
21
+ const logger_1 = require("../../utils/logger");
22
+ exports.PerSceneFindingSchema = zod_1.z.object({
23
+ severity: zod_1.z.enum(["pass", "warn", "fail"]),
24
+ dimension: zod_1.z.enum([
25
+ "actionPlausibility",
26
+ "promptAdherence",
27
+ "brandTextLegibility",
28
+ "characterDrift",
29
+ "compositionQuality",
30
+ "motionQuality",
31
+ ]),
32
+ message: zod_1.z.string().min(4),
33
+ });
34
+ exports.PerSceneReviewSchema = zod_1.z.object({
35
+ sceneIndex: zod_1.z.number().int().nonnegative(),
36
+ score: zod_1.z.number().min(0).max(10),
37
+ shippable: zod_1.z.boolean(),
38
+ summary: zod_1.z.string().min(8).max(400),
39
+ findings: zod_1.z.array(exports.PerSceneFindingSchema),
40
+ /**
41
+ * Critic recommends regenerating this scene if true — usually because at
42
+ * least one FAIL finding fired. AG-41 edit-classifier reads this to decide
43
+ * whether to surface a `modify-scene-visual` edit suggestion.
44
+ */
45
+ recommendRegenerate: zod_1.z.boolean(),
46
+ });
47
+ function buildPerSceneCriticPrompt(input) {
48
+ const entities = input.expectedEntities?.length
49
+ ? input.expectedEntities.map((e) => ` - ${e.kind}: ${e.name}`).join("\n")
50
+ : " (none specified)";
51
+ return [
52
+ "You are a per-scene QC reviewer for AI-generated short ad clips.",
53
+ "WATCH the attached video (silent, no audio yet — judge VISUALS only).",
54
+ "Grade against the spec and rubric below. Be strict — this is the pre-stitch",
55
+ "safety net that catches breakage worth a re-generation.",
56
+ "",
57
+ `Scene index: ${input.sceneIndex}`,
58
+ `Visual prompt the model was given:`,
59
+ ` """${input.prompt}"""`,
60
+ input.voiceoverLine ? `Spoken line (for context — will be added later):\n """${input.voiceoverLine}"""` : "",
61
+ input.onScreenText ? `Planned on-screen text (will be overlaid later):\n """${input.onScreenText}"""` : "",
62
+ "Expected entities in the frame (from the visual bible):",
63
+ entities,
64
+ "",
65
+ "Rubric — score each dimension pass / warn / fail:",
66
+ " - actionPlausibility : every visible action must be physically possible given the state of the objects on screen. MUST flag FAIL: drinking from a sealed/capped bottle, pouring from a closed container, using a phone with a dark screen, walking through a closed door, etc. Pay attention to caps, lids, seals, buttons, doors, switches.",
67
+ " - promptAdherence : does the scene actually depict what the prompt asked for, or did the model drift?",
68
+ " - brandTextLegibility : if a product label is visible, is the brand name spelled correctly and readable?",
69
+ " - characterDrift : within this single scene, does the person stay the same throughout (no morphing mid-clip)?",
70
+ " - compositionQuality : framing, lighting, focus all professional — not amateur / blurry / mis-composed?",
71
+ " - motionQuality : motion feels natural — no warping limbs, melting faces, teleporting objects?",
72
+ "",
73
+ "Set recommendRegenerate=true if ANY dimension is FAIL. The orchestrator will queue a targeted re-generation",
74
+ "(keeping all other scenes + voice + music intact) when this is true, so be honest — a generous PASS",
75
+ "when you should have said FAIL costs more than a strict FAIL when you should have said WARN.",
76
+ "",
77
+ "Output JSON exactly matching the response schema.",
78
+ ].filter(Boolean).join("\n");
79
+ }
80
+ /**
81
+ * Run the per-scene critic. Caller passes the same Gemini invoker the stitched
82
+ * critic uses; only difference is the prompt + smaller response schema.
83
+ */
84
+ async function runPerSceneCritic(input, invokeGemini) {
85
+ try {
86
+ const prompt = buildPerSceneCriticPrompt(input);
87
+ const review = await invokeGemini({
88
+ prompt,
89
+ videoUrl: input.videoUrl,
90
+ responseSchema: exports.PerSceneReviewSchema,
91
+ });
92
+ return { ...review, sceneIndex: input.sceneIndex };
93
+ }
94
+ catch (e) {
95
+ const msg = e instanceof Error ? e.message : String(e);
96
+ logger_1.logger.warn("perSceneCritic failed; soft-fail review", { sceneIndex: input.sceneIndex, err: msg });
97
+ return {
98
+ sceneIndex: input.sceneIndex,
99
+ score: 0,
100
+ shippable: false,
101
+ summary: `Per-scene critic failed: ${msg}. Manual review required.`,
102
+ findings: [
103
+ { severity: "warn", dimension: "compositionQuality", message: `Critic call failed: ${msg}` },
104
+ ],
105
+ recommendRegenerate: false,
106
+ };
107
+ }
108
+ }
109
+ /**
110
+ * Convenience: run the per-scene critic over many scenes in parallel (capped
111
+ * concurrency to keep Gemini quota safe).
112
+ */
113
+ async function runPerSceneCriticBatch(scenes, invokeGemini, concurrency = 3) {
114
+ const out = [];
115
+ let i = 0;
116
+ async function worker() {
117
+ while (i < scenes.length) {
118
+ const idx = i++;
119
+ const scene = scenes[idx];
120
+ out[idx] = await runPerSceneCritic(scene, invokeGemini);
121
+ }
122
+ }
123
+ await Promise.all(Array.from({ length: Math.min(concurrency, scenes.length) }, worker));
124
+ return out;
125
+ }
@@ -0,0 +1,78 @@
1
+ import { AgentPersona, AgentPersonaSchema } from "../../schemas/agentPersona.schema";
2
+ import { LlmCaller } from "./llmCaller";
3
+ import { ModelRouter } from "./modelRouter";
4
+ export type { AgentPersona };
5
+ export { AgentPersonaSchema };
6
+ /**
7
+ * Vertical agent personas. Each persona = curated planner system prompt
8
+ * + recommended tier mix + critic rubric. Router LLM picks the persona
9
+ * from the user's first message (single classification call, Haiku-tier).
10
+ *
11
+ * Why personas: vertical specialisation is what makes a small model and
12
+ * a small team feel like a domain expert. invideo / Captions both win
13
+ * on this. v1 ships 5; v2 adds general + niche personas.
14
+ */
15
+ export interface PersonaPack {
16
+ id: AgentPersona;
17
+ /** Short user-facing label. */
18
+ label: string;
19
+ /** Single-sentence pitch shown in persona picker. */
20
+ blurb: string;
21
+ /** Default brief axes the persona pre-fills (used when LLM confidence is low). */
22
+ defaults: {
23
+ aspect: "16:9" | "9:16" | "1:1";
24
+ durationSec: number;
25
+ tone: string;
26
+ pacing: "slow" | "medium" | "fast" | "very-fast";
27
+ hookStyle: string;
28
+ tierBudget: "T0" | "T1" | "T2" | "T3";
29
+ };
30
+ /** Planner system-prompt addendum: niche-specific structural priors. */
31
+ plannerPrompt: string;
32
+ /**
33
+ * Default BPM for the beat-snap pass when neither the user nor the planner
34
+ * specifies one. Personas where steady BPM cuts feel right (recap, UGC) set
35
+ * a value; cinematic / educational personas leave it undefined so cuts stay
36
+ * free-form.
37
+ */
38
+ defaultBpm?: number;
39
+ /** Critic rubric weights (override the global judge). */
40
+ criticEmphasis: Partial<{
41
+ hookStrength: number;
42
+ voVisualSync: number;
43
+ pacingFit: number;
44
+ brandSafety: number;
45
+ costVsTier: number;
46
+ intentMatch: number;
47
+ }>;
48
+ /**
49
+ * AG-30: recommended consistency tier for this persona. Used as the default
50
+ * when the brief leaves `consistencyTier` undefined. Character-driven
51
+ * personas (UGC, talking-head, product-demo with presenter) need C2 — text
52
+ * descriptions alone do not anchor faces tightly enough across scenes, so
53
+ * we end up with a different actor in every cut. Stock-driven personas
54
+ * (recipe B-roll, travel) stay on C1 since there's no recurring face.
55
+ */
56
+ recommendedConsistencyTier?: "C0" | "C1" | "C2";
57
+ }
58
+ export declare const PERSONA_PACKS: Record<AgentPersona, PersonaPack>;
59
+ /**
60
+ * AG-30: resolve the consistency tier for an agent run. Brief wins when set
61
+ * explicitly; otherwise fall back to the persona's recommendation; otherwise
62
+ * the safe global default of C1. UGC / talking-head / product-demo
63
+ * recommend C2 because the same presenter/product needs to look identical
64
+ * across cuts — text descriptions alone produce a different actor every
65
+ * scene (Test 1 had 5 different women in 5 scenes on C1).
66
+ */
67
+ export declare function resolveConsistencyTier(persona: AgentPersona | undefined, briefTier: "C0" | "C1" | "C2" | undefined): "C0" | "C1" | "C2";
68
+ export declare class PersonaRouter {
69
+ private readonly llm;
70
+ private readonly router;
71
+ constructor(llm: LlmCaller, router?: ModelRouter);
72
+ route(rawPrompt: string): Promise<{
73
+ persona: AgentPersona;
74
+ confidence: number;
75
+ reason: string;
76
+ }>;
77
+ }
78
+ //# sourceMappingURL=personas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../../src/services/agent/personas.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,YAAY,CAAC;IACjB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QACjD,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KACvC,CAAC;IACF,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,CAmH3D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GACxC,IAAI,GAAG,IAAI,GAAG,IAAI,CAIpB;AAQD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,GAAG,EAAE,SAAS,EACd,MAAM,GAAE,WAA+B;IAGpD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,YAAY,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CA4BH"}