@vibeframe/cli 0.55.0 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/dist/index.js +63452 -233
  2. package/package.json +11 -6
  3. package/dist/agent/adapters/claude.d.ts +0 -15
  4. package/dist/agent/adapters/claude.d.ts.map +0 -1
  5. package/dist/agent/adapters/claude.js +0 -119
  6. package/dist/agent/adapters/claude.js.map +0 -1
  7. package/dist/agent/adapters/gemini.d.ts +0 -15
  8. package/dist/agent/adapters/gemini.d.ts.map +0 -1
  9. package/dist/agent/adapters/gemini.js +0 -132
  10. package/dist/agent/adapters/gemini.js.map +0 -1
  11. package/dist/agent/adapters/index.d.ts +0 -28
  12. package/dist/agent/adapters/index.d.ts.map +0 -1
  13. package/dist/agent/adapters/index.js +0 -43
  14. package/dist/agent/adapters/index.js.map +0 -1
  15. package/dist/agent/adapters/ollama.d.ts +0 -20
  16. package/dist/agent/adapters/ollama.d.ts.map +0 -1
  17. package/dist/agent/adapters/ollama.js +0 -186
  18. package/dist/agent/adapters/ollama.js.map +0 -1
  19. package/dist/agent/adapters/openai.d.ts +0 -15
  20. package/dist/agent/adapters/openai.d.ts.map +0 -1
  21. package/dist/agent/adapters/openai.js +0 -92
  22. package/dist/agent/adapters/openai.js.map +0 -1
  23. package/dist/agent/adapters/openrouter.d.ts +0 -16
  24. package/dist/agent/adapters/openrouter.d.ts.map +0 -1
  25. package/dist/agent/adapters/openrouter.js +0 -100
  26. package/dist/agent/adapters/openrouter.js.map +0 -1
  27. package/dist/agent/adapters/openrouter.test.d.ts +0 -5
  28. package/dist/agent/adapters/openrouter.test.d.ts.map +0 -1
  29. package/dist/agent/adapters/openrouter.test.js +0 -73
  30. package/dist/agent/adapters/openrouter.test.js.map +0 -1
  31. package/dist/agent/adapters/xai.d.ts +0 -15
  32. package/dist/agent/adapters/xai.d.ts.map +0 -1
  33. package/dist/agent/adapters/xai.js +0 -95
  34. package/dist/agent/adapters/xai.js.map +0 -1
  35. package/dist/agent/index.d.ts +0 -69
  36. package/dist/agent/index.d.ts.map +0 -1
  37. package/dist/agent/index.js +0 -180
  38. package/dist/agent/index.js.map +0 -1
  39. package/dist/agent/memory/index.d.ts +0 -70
  40. package/dist/agent/memory/index.d.ts.map +0 -1
  41. package/dist/agent/memory/index.js +0 -132
  42. package/dist/agent/memory/index.js.map +0 -1
  43. package/dist/agent/prompts/system.d.ts +0 -6
  44. package/dist/agent/prompts/system.d.ts.map +0 -1
  45. package/dist/agent/prompts/system.js +0 -103
  46. package/dist/agent/prompts/system.js.map +0 -1
  47. package/dist/agent/tools/ai-editing.d.ts +0 -15
  48. package/dist/agent/tools/ai-editing.d.ts.map +0 -1
  49. package/dist/agent/tools/ai-editing.js +0 -763
  50. package/dist/agent/tools/ai-editing.js.map +0 -1
  51. package/dist/agent/tools/ai-generation.d.ts +0 -13
  52. package/dist/agent/tools/ai-generation.d.ts.map +0 -1
  53. package/dist/agent/tools/ai-generation.js +0 -973
  54. package/dist/agent/tools/ai-generation.js.map +0 -1
  55. package/dist/agent/tools/ai-pipeline.d.ts +0 -14
  56. package/dist/agent/tools/ai-pipeline.d.ts.map +0 -1
  57. package/dist/agent/tools/ai-pipeline.js +0 -961
  58. package/dist/agent/tools/ai-pipeline.js.map +0 -1
  59. package/dist/agent/tools/ai.d.ts +0 -13
  60. package/dist/agent/tools/ai.d.ts.map +0 -1
  61. package/dist/agent/tools/ai.js +0 -19
  62. package/dist/agent/tools/ai.js.map +0 -1
  63. package/dist/agent/tools/batch.d.ts +0 -6
  64. package/dist/agent/tools/batch.d.ts.map +0 -1
  65. package/dist/agent/tools/batch.js +0 -383
  66. package/dist/agent/tools/batch.js.map +0 -1
  67. package/dist/agent/tools/e2e.test.d.ts +0 -26
  68. package/dist/agent/tools/e2e.test.d.ts.map +0 -1
  69. package/dist/agent/tools/e2e.test.js +0 -397
  70. package/dist/agent/tools/e2e.test.js.map +0 -1
  71. package/dist/agent/tools/export.d.ts +0 -6
  72. package/dist/agent/tools/export.d.ts.map +0 -1
  73. package/dist/agent/tools/export.js +0 -171
  74. package/dist/agent/tools/export.js.map +0 -1
  75. package/dist/agent/tools/filesystem.d.ts +0 -6
  76. package/dist/agent/tools/filesystem.d.ts.map +0 -1
  77. package/dist/agent/tools/filesystem.js +0 -212
  78. package/dist/agent/tools/filesystem.js.map +0 -1
  79. package/dist/agent/tools/index.d.ts +0 -66
  80. package/dist/agent/tools/index.d.ts.map +0 -1
  81. package/dist/agent/tools/index.js +0 -123
  82. package/dist/agent/tools/index.js.map +0 -1
  83. package/dist/agent/tools/integration.test.d.ts +0 -11
  84. package/dist/agent/tools/integration.test.d.ts.map +0 -1
  85. package/dist/agent/tools/integration.test.js +0 -659
  86. package/dist/agent/tools/integration.test.js.map +0 -1
  87. package/dist/agent/tools/media.d.ts +0 -6
  88. package/dist/agent/tools/media.d.ts.map +0 -1
  89. package/dist/agent/tools/media.js +0 -616
  90. package/dist/agent/tools/media.js.map +0 -1
  91. package/dist/agent/tools/project.d.ts +0 -6
  92. package/dist/agent/tools/project.d.ts.map +0 -1
  93. package/dist/agent/tools/project.js +0 -284
  94. package/dist/agent/tools/project.js.map +0 -1
  95. package/dist/agent/tools/scene.d.ts +0 -17
  96. package/dist/agent/tools/scene.d.ts.map +0 -1
  97. package/dist/agent/tools/scene.js +0 -263
  98. package/dist/agent/tools/scene.js.map +0 -1
  99. package/dist/agent/tools/scene.test.d.ts +0 -2
  100. package/dist/agent/tools/scene.test.d.ts.map +0 -1
  101. package/dist/agent/tools/scene.test.js +0 -139
  102. package/dist/agent/tools/scene.test.js.map +0 -1
  103. package/dist/agent/tools/timeline.d.ts +0 -6
  104. package/dist/agent/tools/timeline.d.ts.map +0 -1
  105. package/dist/agent/tools/timeline.js +0 -875
  106. package/dist/agent/tools/timeline.js.map +0 -1
  107. package/dist/agent/types.d.ts +0 -59
  108. package/dist/agent/types.d.ts.map +0 -1
  109. package/dist/agent/types.js +0 -5
  110. package/dist/agent/types.js.map +0 -1
  111. package/dist/commands/_shared/scene-audio-mux.d.ts +0 -75
  112. package/dist/commands/_shared/scene-audio-mux.d.ts.map +0 -1
  113. package/dist/commands/_shared/scene-audio-mux.js +0 -159
  114. package/dist/commands/_shared/scene-audio-mux.js.map +0 -1
  115. package/dist/commands/_shared/scene-audio-mux.test.d.ts +0 -7
  116. package/dist/commands/_shared/scene-audio-mux.test.d.ts.map +0 -1
  117. package/dist/commands/_shared/scene-audio-mux.test.js +0 -94
  118. package/dist/commands/_shared/scene-audio-mux.test.js.map +0 -1
  119. package/dist/commands/_shared/scene-audio-scan.d.ts +0 -94
  120. package/dist/commands/_shared/scene-audio-scan.d.ts.map +0 -1
  121. package/dist/commands/_shared/scene-audio-scan.js +0 -144
  122. package/dist/commands/_shared/scene-audio-scan.js.map +0 -1
  123. package/dist/commands/_shared/scene-audio-scan.test.d.ts +0 -6
  124. package/dist/commands/_shared/scene-audio-scan.test.d.ts.map +0 -1
  125. package/dist/commands/_shared/scene-audio-scan.test.js +0 -190
  126. package/dist/commands/_shared/scene-audio-scan.test.js.map +0 -1
  127. package/dist/commands/_shared/scene-html-emit.d.ts +0 -120
  128. package/dist/commands/_shared/scene-html-emit.d.ts.map +0 -1
  129. package/dist/commands/_shared/scene-html-emit.js +0 -422
  130. package/dist/commands/_shared/scene-html-emit.js.map +0 -1
  131. package/dist/commands/_shared/scene-html-emit.test.d.ts +0 -2
  132. package/dist/commands/_shared/scene-html-emit.test.d.ts.map +0 -1
  133. package/dist/commands/_shared/scene-html-emit.test.js +0 -396
  134. package/dist/commands/_shared/scene-html-emit.test.js.map +0 -1
  135. package/dist/commands/_shared/scene-lint.d.ts +0 -110
  136. package/dist/commands/_shared/scene-lint.d.ts.map +0 -1
  137. package/dist/commands/_shared/scene-lint.js +0 -207
  138. package/dist/commands/_shared/scene-lint.js.map +0 -1
  139. package/dist/commands/_shared/scene-lint.test.d.ts +0 -2
  140. package/dist/commands/_shared/scene-lint.test.d.ts.map +0 -1
  141. package/dist/commands/_shared/scene-lint.test.js +0 -208
  142. package/dist/commands/_shared/scene-lint.test.js.map +0 -1
  143. package/dist/commands/_shared/scene-project.d.ts +0 -101
  144. package/dist/commands/_shared/scene-project.d.ts.map +0 -1
  145. package/dist/commands/_shared/scene-project.js +0 -281
  146. package/dist/commands/_shared/scene-project.js.map +0 -1
  147. package/dist/commands/_shared/scene-project.test.d.ts +0 -2
  148. package/dist/commands/_shared/scene-project.test.d.ts.map +0 -1
  149. package/dist/commands/_shared/scene-project.test.js +0 -203
  150. package/dist/commands/_shared/scene-project.test.js.map +0 -1
  151. package/dist/commands/_shared/scene-render.d.ts +0 -85
  152. package/dist/commands/_shared/scene-render.d.ts.map +0 -1
  153. package/dist/commands/_shared/scene-render.js +0 -178
  154. package/dist/commands/_shared/scene-render.js.map +0 -1
  155. package/dist/commands/_shared/scene-render.test.d.ts +0 -2
  156. package/dist/commands/_shared/scene-render.test.d.ts.map +0 -1
  157. package/dist/commands/_shared/scene-render.test.js +0 -145
  158. package/dist/commands/_shared/scene-render.test.js.map +0 -1
  159. package/dist/commands/_shared/segments-to-scenes.d.ts +0 -85
  160. package/dist/commands/_shared/segments-to-scenes.d.ts.map +0 -1
  161. package/dist/commands/_shared/segments-to-scenes.js +0 -202
  162. package/dist/commands/_shared/segments-to-scenes.js.map +0 -1
  163. package/dist/commands/_shared/segments-to-scenes.test.d.ts +0 -2
  164. package/dist/commands/_shared/segments-to-scenes.test.d.ts.map +0 -1
  165. package/dist/commands/_shared/segments-to-scenes.test.js +0 -219
  166. package/dist/commands/_shared/segments-to-scenes.test.js.map +0 -1
  167. package/dist/commands/_shared/tts-resolve.d.ts +0 -75
  168. package/dist/commands/_shared/tts-resolve.d.ts.map +0 -1
  169. package/dist/commands/_shared/tts-resolve.js +0 -89
  170. package/dist/commands/_shared/tts-resolve.js.map +0 -1
  171. package/dist/commands/_shared/tts-resolve.test.d.ts +0 -6
  172. package/dist/commands/_shared/tts-resolve.test.d.ts.map +0 -1
  173. package/dist/commands/_shared/tts-resolve.test.js +0 -147
  174. package/dist/commands/_shared/tts-resolve.test.js.map +0 -1
  175. package/dist/commands/agent.d.ts +0 -21
  176. package/dist/commands/agent.d.ts.map +0 -1
  177. package/dist/commands/agent.js +0 -285
  178. package/dist/commands/agent.js.map +0 -1
  179. package/dist/commands/ai-analyze.d.ts +0 -106
  180. package/dist/commands/ai-analyze.d.ts.map +0 -1
  181. package/dist/commands/ai-analyze.js +0 -320
  182. package/dist/commands/ai-analyze.js.map +0 -1
  183. package/dist/commands/ai-animated-caption.d.ts +0 -64
  184. package/dist/commands/ai-animated-caption.d.ts.map +0 -1
  185. package/dist/commands/ai-animated-caption.js +0 -272
  186. package/dist/commands/ai-animated-caption.js.map +0 -1
  187. package/dist/commands/ai-audio.d.ts +0 -98
  188. package/dist/commands/ai-audio.d.ts.map +0 -1
  189. package/dist/commands/ai-audio.js +0 -1059
  190. package/dist/commands/ai-audio.js.map +0 -1
  191. package/dist/commands/ai-broll.d.ts +0 -15
  192. package/dist/commands/ai-broll.d.ts.map +0 -1
  193. package/dist/commands/ai-broll.js +0 -421
  194. package/dist/commands/ai-broll.js.map +0 -1
  195. package/dist/commands/ai-edit-cli.d.ts +0 -14
  196. package/dist/commands/ai-edit-cli.d.ts.map +0 -1
  197. package/dist/commands/ai-edit-cli.js +0 -585
  198. package/dist/commands/ai-edit-cli.js.map +0 -1
  199. package/dist/commands/ai-edit.d.ts +0 -398
  200. package/dist/commands/ai-edit.d.ts.map +0 -1
  201. package/dist/commands/ai-edit.js +0 -1060
  202. package/dist/commands/ai-edit.js.map +0 -1
  203. package/dist/commands/ai-fill-gaps.d.ts +0 -14
  204. package/dist/commands/ai-fill-gaps.d.ts.map +0 -1
  205. package/dist/commands/ai-fill-gaps.js +0 -447
  206. package/dist/commands/ai-fill-gaps.js.map +0 -1
  207. package/dist/commands/ai-helpers.d.ts +0 -20
  208. package/dist/commands/ai-helpers.d.ts.map +0 -1
  209. package/dist/commands/ai-helpers.js +0 -59
  210. package/dist/commands/ai-helpers.js.map +0 -1
  211. package/dist/commands/ai-highlights.d.ts +0 -127
  212. package/dist/commands/ai-highlights.d.ts.map +0 -1
  213. package/dist/commands/ai-highlights.js +0 -1053
  214. package/dist/commands/ai-highlights.js.map +0 -1
  215. package/dist/commands/ai-image.d.ts +0 -76
  216. package/dist/commands/ai-image.d.ts.map +0 -1
  217. package/dist/commands/ai-image.js +0 -858
  218. package/dist/commands/ai-image.js.map +0 -1
  219. package/dist/commands/ai-motion.d.ts +0 -50
  220. package/dist/commands/ai-motion.d.ts.map +0 -1
  221. package/dist/commands/ai-motion.js +0 -297
  222. package/dist/commands/ai-motion.js.map +0 -1
  223. package/dist/commands/ai-narrate.d.ts +0 -66
  224. package/dist/commands/ai-narrate.d.ts.map +0 -1
  225. package/dist/commands/ai-narrate.js +0 -332
  226. package/dist/commands/ai-narrate.js.map +0 -1
  227. package/dist/commands/ai-review.d.ts +0 -57
  228. package/dist/commands/ai-review.d.ts.map +0 -1
  229. package/dist/commands/ai-review.js +0 -270
  230. package/dist/commands/ai-review.js.map +0 -1
  231. package/dist/commands/ai-script-pipeline-cli.d.ts +0 -9
  232. package/dist/commands/ai-script-pipeline-cli.d.ts.map +0 -1
  233. package/dist/commands/ai-script-pipeline-cli.js +0 -502
  234. package/dist/commands/ai-script-pipeline-cli.js.map +0 -1
  235. package/dist/commands/ai-script-pipeline.d.ts +0 -305
  236. package/dist/commands/ai-script-pipeline.d.ts.map +0 -1
  237. package/dist/commands/ai-script-pipeline.js +0 -1546
  238. package/dist/commands/ai-script-pipeline.js.map +0 -1
  239. package/dist/commands/ai-suggest-edit.d.ts +0 -14
  240. package/dist/commands/ai-suggest-edit.d.ts.map +0 -1
  241. package/dist/commands/ai-suggest-edit.js +0 -215
  242. package/dist/commands/ai-suggest-edit.js.map +0 -1
  243. package/dist/commands/ai-video-fx.d.ts +0 -14
  244. package/dist/commands/ai-video-fx.d.ts.map +0 -1
  245. package/dist/commands/ai-video-fx.js +0 -396
  246. package/dist/commands/ai-video-fx.js.map +0 -1
  247. package/dist/commands/ai-video.d.ts +0 -91
  248. package/dist/commands/ai-video.d.ts.map +0 -1
  249. package/dist/commands/ai-video.js +0 -1055
  250. package/dist/commands/ai-video.js.map +0 -1
  251. package/dist/commands/ai-viral.d.ts +0 -15
  252. package/dist/commands/ai-viral.d.ts.map +0 -1
  253. package/dist/commands/ai-viral.js +0 -507
  254. package/dist/commands/ai-viral.js.map +0 -1
  255. package/dist/commands/ai-visual-fx.d.ts +0 -14
  256. package/dist/commands/ai-visual-fx.d.ts.map +0 -1
  257. package/dist/commands/ai-visual-fx.js +0 -521
  258. package/dist/commands/ai-visual-fx.js.map +0 -1
  259. package/dist/commands/ai.d.ts +0 -38
  260. package/dist/commands/ai.d.ts.map +0 -1
  261. package/dist/commands/ai.js +0 -225
  262. package/dist/commands/ai.js.map +0 -1
  263. package/dist/commands/ai.test.d.ts +0 -2
  264. package/dist/commands/ai.test.d.ts.map +0 -1
  265. package/dist/commands/ai.test.js +0 -557
  266. package/dist/commands/ai.test.js.map +0 -1
  267. package/dist/commands/analyze.d.ts +0 -16
  268. package/dist/commands/analyze.d.ts.map +0 -1
  269. package/dist/commands/analyze.js +0 -247
  270. package/dist/commands/analyze.js.map +0 -1
  271. package/dist/commands/audio.d.ts +0 -18
  272. package/dist/commands/audio.d.ts.map +0 -1
  273. package/dist/commands/audio.js +0 -539
  274. package/dist/commands/audio.js.map +0 -1
  275. package/dist/commands/batch.d.ts +0 -3
  276. package/dist/commands/batch.d.ts.map +0 -1
  277. package/dist/commands/batch.js +0 -419
  278. package/dist/commands/batch.js.map +0 -1
  279. package/dist/commands/batch.test.d.ts +0 -2
  280. package/dist/commands/batch.test.d.ts.map +0 -1
  281. package/dist/commands/batch.test.js +0 -203
  282. package/dist/commands/batch.test.js.map +0 -1
  283. package/dist/commands/context.d.ts +0 -7
  284. package/dist/commands/context.d.ts.map +0 -1
  285. package/dist/commands/context.js +0 -66
  286. package/dist/commands/context.js.map +0 -1
  287. package/dist/commands/demo.d.ts +0 -7
  288. package/dist/commands/demo.d.ts.map +0 -1
  289. package/dist/commands/demo.js +0 -192
  290. package/dist/commands/demo.js.map +0 -1
  291. package/dist/commands/detect.d.ts +0 -56
  292. package/dist/commands/detect.d.ts.map +0 -1
  293. package/dist/commands/detect.js +0 -464
  294. package/dist/commands/detect.js.map +0 -1
  295. package/dist/commands/doctor.d.ts +0 -6
  296. package/dist/commands/doctor.d.ts.map +0 -1
  297. package/dist/commands/doctor.js +0 -322
  298. package/dist/commands/doctor.js.map +0 -1
  299. package/dist/commands/edit-cmd.d.ts +0 -112
  300. package/dist/commands/edit-cmd.d.ts.map +0 -1
  301. package/dist/commands/edit-cmd.js +0 -1041
  302. package/dist/commands/edit-cmd.js.map +0 -1
  303. package/dist/commands/export.d.ts +0 -61
  304. package/dist/commands/export.d.ts.map +0 -1
  305. package/dist/commands/export.js +0 -980
  306. package/dist/commands/export.js.map +0 -1
  307. package/dist/commands/export.test.d.ts +0 -2
  308. package/dist/commands/export.test.d.ts.map +0 -1
  309. package/dist/commands/export.test.js +0 -107
  310. package/dist/commands/export.test.js.map +0 -1
  311. package/dist/commands/generate.d.ts +0 -84
  312. package/dist/commands/generate.d.ts.map +0 -1
  313. package/dist/commands/generate.js +0 -2030
  314. package/dist/commands/generate.js.map +0 -1
  315. package/dist/commands/media.d.ts +0 -3
  316. package/dist/commands/media.d.ts.map +0 -1
  317. package/dist/commands/media.js +0 -163
  318. package/dist/commands/media.js.map +0 -1
  319. package/dist/commands/output.d.ts +0 -51
  320. package/dist/commands/output.d.ts.map +0 -1
  321. package/dist/commands/output.js +0 -219
  322. package/dist/commands/output.js.map +0 -1
  323. package/dist/commands/output.test.d.ts +0 -2
  324. package/dist/commands/output.test.d.ts.map +0 -1
  325. package/dist/commands/output.test.js +0 -151
  326. package/dist/commands/output.test.js.map +0 -1
  327. package/dist/commands/pipeline.d.ts +0 -19
  328. package/dist/commands/pipeline.d.ts.map +0 -1
  329. package/dist/commands/pipeline.js +0 -345
  330. package/dist/commands/pipeline.js.map +0 -1
  331. package/dist/commands/project.d.ts +0 -3
  332. package/dist/commands/project.d.ts.map +0 -1
  333. package/dist/commands/project.js +0 -181
  334. package/dist/commands/project.js.map +0 -1
  335. package/dist/commands/project.test.d.ts +0 -2
  336. package/dist/commands/project.test.d.ts.map +0 -1
  337. package/dist/commands/project.test.js +0 -105
  338. package/dist/commands/project.test.js.map +0 -1
  339. package/dist/commands/run.d.ts +0 -15
  340. package/dist/commands/run.d.ts.map +0 -1
  341. package/dist/commands/run.js +0 -204
  342. package/dist/commands/run.js.map +0 -1
  343. package/dist/commands/sanitize.d.ts +0 -21
  344. package/dist/commands/sanitize.d.ts.map +0 -1
  345. package/dist/commands/sanitize.js +0 -56
  346. package/dist/commands/sanitize.js.map +0 -1
  347. package/dist/commands/scene.d.ts +0 -86
  348. package/dist/commands/scene.d.ts.map +0 -1
  349. package/dist/commands/scene.js +0 -728
  350. package/dist/commands/scene.js.map +0 -1
  351. package/dist/commands/scene.test.d.ts +0 -2
  352. package/dist/commands/scene.test.d.ts.map +0 -1
  353. package/dist/commands/scene.test.js +0 -219
  354. package/dist/commands/scene.test.js.map +0 -1
  355. package/dist/commands/schema.d.ts +0 -13
  356. package/dist/commands/schema.d.ts.map +0 -1
  357. package/dist/commands/schema.js +0 -218
  358. package/dist/commands/schema.js.map +0 -1
  359. package/dist/commands/setup.d.ts +0 -6
  360. package/dist/commands/setup.d.ts.map +0 -1
  361. package/dist/commands/setup.js +0 -461
  362. package/dist/commands/setup.js.map +0 -1
  363. package/dist/commands/timeline.d.ts +0 -3
  364. package/dist/commands/timeline.d.ts.map +0 -1
  365. package/dist/commands/timeline.js +0 -609
  366. package/dist/commands/timeline.js.map +0 -1
  367. package/dist/commands/timeline.test.d.ts +0 -2
  368. package/dist/commands/timeline.test.d.ts.map +0 -1
  369. package/dist/commands/timeline.test.js +0 -334
  370. package/dist/commands/timeline.test.js.map +0 -1
  371. package/dist/commands/validate.d.ts +0 -34
  372. package/dist/commands/validate.d.ts.map +0 -1
  373. package/dist/commands/validate.js +0 -70
  374. package/dist/commands/validate.js.map +0 -1
  375. package/dist/config/config.test.d.ts +0 -2
  376. package/dist/config/config.test.d.ts.map +0 -1
  377. package/dist/config/config.test.js +0 -164
  378. package/dist/config/config.test.js.map +0 -1
  379. package/dist/config/index.d.ts +0 -35
  380. package/dist/config/index.d.ts.map +0 -1
  381. package/dist/config/index.js +0 -101
  382. package/dist/config/index.js.map +0 -1
  383. package/dist/config/schema.d.ts +0 -52
  384. package/dist/config/schema.d.ts.map +0 -1
  385. package/dist/config/schema.js +0 -44
  386. package/dist/config/schema.js.map +0 -1
  387. package/dist/engine/index.d.ts +0 -3
  388. package/dist/engine/index.d.ts.map +0 -1
  389. package/dist/engine/index.js +0 -2
  390. package/dist/engine/index.js.map +0 -1
  391. package/dist/engine/project.d.ts +0 -84
  392. package/dist/engine/project.d.ts.map +0 -1
  393. package/dist/engine/project.js +0 -355
  394. package/dist/engine/project.js.map +0 -1
  395. package/dist/engine/project.test.d.ts +0 -2
  396. package/dist/engine/project.test.d.ts.map +0 -1
  397. package/dist/engine/project.test.js +0 -599
  398. package/dist/engine/project.test.js.map +0 -1
  399. package/dist/index.d.ts +0 -7
  400. package/dist/index.d.ts.map +0 -1
  401. package/dist/index.js.map +0 -1
  402. package/dist/pipeline/executor.d.ts +0 -19
  403. package/dist/pipeline/executor.d.ts.map +0 -1
  404. package/dist/pipeline/executor.js +0 -397
  405. package/dist/pipeline/executor.js.map +0 -1
  406. package/dist/pipeline/index.d.ts +0 -4
  407. package/dist/pipeline/index.d.ts.map +0 -1
  408. package/dist/pipeline/index.js +0 -2
  409. package/dist/pipeline/index.js.map +0 -1
  410. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +0 -2
  411. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts.map +0 -1
  412. package/dist/pipeline/renderers/__tests__/html-template.test.js +0 -170
  413. package/dist/pipeline/renderers/__tests__/html-template.test.js.map +0 -1
  414. package/dist/pipeline/renderers/__tests__/integration.test.d.ts +0 -2
  415. package/dist/pipeline/renderers/__tests__/integration.test.d.ts.map +0 -1
  416. package/dist/pipeline/renderers/__tests__/integration.test.js +0 -175
  417. package/dist/pipeline/renderers/__tests__/integration.test.js.map +0 -1
  418. package/dist/pipeline/renderers/chrome.d.ts +0 -26
  419. package/dist/pipeline/renderers/chrome.d.ts.map +0 -1
  420. package/dist/pipeline/renderers/chrome.js +0 -48
  421. package/dist/pipeline/renderers/chrome.js.map +0 -1
  422. package/dist/pipeline/renderers/html-clips.d.ts +0 -20
  423. package/dist/pipeline/renderers/html-clips.d.ts.map +0 -1
  424. package/dist/pipeline/renderers/html-clips.js +0 -50
  425. package/dist/pipeline/renderers/html-clips.js.map +0 -1
  426. package/dist/pipeline/renderers/html-runtime.d.ts +0 -7
  427. package/dist/pipeline/renderers/html-runtime.d.ts.map +0 -1
  428. package/dist/pipeline/renderers/html-runtime.js +0 -80
  429. package/dist/pipeline/renderers/html-runtime.js.map +0 -1
  430. package/dist/pipeline/renderers/html-template.d.ts +0 -3
  431. package/dist/pipeline/renderers/html-template.d.ts.map +0 -1
  432. package/dist/pipeline/renderers/html-template.js +0 -36
  433. package/dist/pipeline/renderers/html-template.js.map +0 -1
  434. package/dist/pipeline/renderers/hyperframes.d.ts +0 -8
  435. package/dist/pipeline/renderers/hyperframes.d.ts.map +0 -1
  436. package/dist/pipeline/renderers/hyperframes.js +0 -63
  437. package/dist/pipeline/renderers/hyperframes.js.map +0 -1
  438. package/dist/pipeline/renderers/project-builder.d.ts +0 -8
  439. package/dist/pipeline/renderers/project-builder.d.ts.map +0 -1
  440. package/dist/pipeline/renderers/project-builder.js +0 -65
  441. package/dist/pipeline/renderers/project-builder.js.map +0 -1
  442. package/dist/pipeline/renderers/types.d.ts +0 -41
  443. package/dist/pipeline/renderers/types.d.ts.map +0 -1
  444. package/dist/pipeline/renderers/types.js +0 -11
  445. package/dist/pipeline/renderers/types.js.map +0 -1
  446. package/dist/pipeline/resolver.d.ts +0 -20
  447. package/dist/pipeline/resolver.d.ts.map +0 -1
  448. package/dist/pipeline/resolver.js +0 -74
  449. package/dist/pipeline/resolver.js.map +0 -1
  450. package/dist/pipeline/types.d.ts +0 -82
  451. package/dist/pipeline/types.d.ts.map +0 -1
  452. package/dist/pipeline/types.js +0 -8
  453. package/dist/pipeline/types.js.map +0 -1
  454. package/dist/utils/api-key.d.ts +0 -33
  455. package/dist/utils/api-key.d.ts.map +0 -1
  456. package/dist/utils/api-key.js +0 -228
  457. package/dist/utils/api-key.js.map +0 -1
  458. package/dist/utils/api-key.test.d.ts +0 -2
  459. package/dist/utils/api-key.test.d.ts.map +0 -1
  460. package/dist/utils/api-key.test.js +0 -35
  461. package/dist/utils/api-key.test.js.map +0 -1
  462. package/dist/utils/audio.d.ts +0 -23
  463. package/dist/utils/audio.d.ts.map +0 -1
  464. package/dist/utils/audio.js +0 -79
  465. package/dist/utils/audio.js.map +0 -1
  466. package/dist/utils/exec-safe.d.ts +0 -22
  467. package/dist/utils/exec-safe.d.ts.map +0 -1
  468. package/dist/utils/exec-safe.js +0 -62
  469. package/dist/utils/exec-safe.js.map +0 -1
  470. package/dist/utils/first-run.d.ts +0 -17
  471. package/dist/utils/first-run.d.ts.map +0 -1
  472. package/dist/utils/first-run.js +0 -73
  473. package/dist/utils/first-run.js.map +0 -1
  474. package/dist/utils/input-validation.d.ts +0 -27
  475. package/dist/utils/input-validation.d.ts.map +0 -1
  476. package/dist/utils/input-validation.js +0 -67
  477. package/dist/utils/input-validation.js.map +0 -1
  478. package/dist/utils/provider-resolver.d.ts +0 -19
  479. package/dist/utils/provider-resolver.d.ts.map +0 -1
  480. package/dist/utils/provider-resolver.js +0 -75
  481. package/dist/utils/provider-resolver.js.map +0 -1
  482. package/dist/utils/remotion.d.ts +0 -231
  483. package/dist/utils/remotion.d.ts.map +0 -1
  484. package/dist/utils/remotion.js +0 -879
  485. package/dist/utils/remotion.js.map +0 -1
  486. package/dist/utils/subtitle.d.ts +0 -65
  487. package/dist/utils/subtitle.d.ts.map +0 -1
  488. package/dist/utils/subtitle.js +0 -135
  489. package/dist/utils/subtitle.js.map +0 -1
  490. package/dist/utils/subtitle.test.d.ts +0 -2
  491. package/dist/utils/subtitle.test.d.ts.map +0 -1
  492. package/dist/utils/subtitle.test.js +0 -175
  493. package/dist/utils/subtitle.test.js.map +0 -1
  494. package/dist/utils/tty.d.ts +0 -45
  495. package/dist/utils/tty.d.ts.map +0 -1
  496. package/dist/utils/tty.js +0 -231
  497. package/dist/utils/tty.js.map +0 -1
@@ -1,178 +0,0 @@
1
- /**
2
- * @module _shared/scene-render
3
- *
4
- * Render a VibeFrame scene project to MP4/WebM/MOV using the Hyperframes
5
- * producer directly. Unlike the FFmpeg-bridge backend in
6
- * `pipeline/renderers/hyperframes.ts` which has to convert a `TimelineState`
7
- * into a temp Hyperframes project, scene projects already ARE Hyperframes
8
- * projects — so we hand the producer the user's project dir and entry file
9
- * verbatim.
10
- *
11
- * `executeSceneRender()` is decoupled from CLI flags so that the C6 agent
12
- * tool and the C5 `--format scenes` pipeline can call it the same way. It
13
- * returns a structured result instead of throwing or exiting.
14
- */
15
- import { mkdir, readFile, stat } from "node:fs/promises";
16
- import { existsSync } from "node:fs";
17
- import { resolve, relative, dirname, basename } from "node:path";
18
- import { parse as yamlParse } from "yaml";
19
- import { createRenderJob, executeRenderJob, } from "@hyperframes/producer";
20
- import { preflightChrome } from "../../pipeline/renderers/chrome.js";
21
- import { rootExists } from "./scene-lint.js";
22
- import { scanSceneAudio } from "./scene-audio-scan.js";
23
- import { muxAudioIntoVideo } from "./scene-audio-mux.js";
24
- /** Map a quality preset to an x264 CRF (lower = higher quality). */
25
- export function qualityToCrf(quality = "standard") {
26
- return quality === "draft" ? 28 : quality === "high" ? 18 : 23;
27
- }
28
- /**
29
- * Compute the default output path for a render. Pure — does no I/O. Returns
30
- * an absolute path under `<projectDir>/renders/`.
31
- *
32
- * `now` is injectable so tests get deterministic output.
33
- */
34
- export function defaultOutputPath(opts) {
35
- const fmt = opts.format ?? "mp4";
36
- const now = opts.now ?? new Date();
37
- const stamp = now
38
- .toISOString()
39
- .replace(/[:T]/g, "-")
40
- .replace(/\..+$/, "");
41
- const name = (opts.projectName ?? basename(resolve(opts.projectDir))) || "scene";
42
- return resolve(opts.projectDir, "renders", `${name}-${stamp}.${fmt}`);
43
- }
44
- async function readProjectName(projectDir) {
45
- const cfgPath = resolve(projectDir, "vibe.project.yaml");
46
- if (!existsSync(cfgPath))
47
- return undefined;
48
- try {
49
- const raw = await (await import("node:fs/promises")).readFile(cfgPath, "utf-8");
50
- const parsed = yamlParse(raw);
51
- return parsed?.name ?? undefined;
52
- }
53
- catch {
54
- return undefined;
55
- }
56
- }
57
- /**
58
- * Build the producer's `RenderConfig` from caller options. Pure — useful for
59
- * unit tests that want to assert defaults without touching Chrome.
60
- */
61
- export function buildRenderConfig(opts) {
62
- const quality = opts.quality ?? "standard";
63
- return {
64
- fps: opts.fps ?? 30,
65
- quality,
66
- format: opts.format ?? "mp4",
67
- entryFile: opts.entryFile ?? "index.html",
68
- crf: qualityToCrf(quality),
69
- workers: opts.workers ?? 1,
70
- };
71
- }
72
- /**
73
- * Render a scene project. Mirrors the contract of the existing Hyperframes
74
- * backend (preflight → execute → structured result), but skips the
75
- * `TimelineState` → temp project conversion because the user's project is
76
- * already a valid Hyperframes project.
77
- */
78
- export async function executeSceneRender(opts = {}) {
79
- const projectDir = resolve(opts.projectDir ?? ".");
80
- const root = opts.root ?? "index.html";
81
- // -- Preflight: project + Chrome ---------------------------------------
82
- const projectStat = await safeStat(projectDir);
83
- if (!projectStat || !projectStat.isDirectory()) {
84
- return { success: false, error: `Project directory not found: ${projectDir}` };
85
- }
86
- if (!(await rootExists(projectDir, root))) {
87
- return {
88
- success: false,
89
- error: `Root composition not found: ${resolve(projectDir, root)}. Run \`vibe scene init\` first.`,
90
- };
91
- }
92
- const chrome = await preflightChrome();
93
- if (!chrome.ok) {
94
- return { success: false, error: chrome.reason };
95
- }
96
- // -- Resolve output path -----------------------------------------------
97
- const projectName = await readProjectName(projectDir);
98
- const outputPath = opts.output
99
- ? resolve(projectDir, opts.output)
100
- : defaultOutputPath({ projectDir, projectName, format: opts.format });
101
- await mkdir(dirname(outputPath), { recursive: true });
102
- // -- Execute render ----------------------------------------------------
103
- const config = buildRenderConfig({
104
- fps: opts.fps,
105
- quality: opts.quality,
106
- format: opts.format,
107
- workers: opts.workers,
108
- entryFile: root,
109
- });
110
- const job = createRenderJob(config);
111
- const start = Date.now();
112
- try {
113
- await executeRenderJob(job, projectDir, outputPath, (j, msg) => opts.onProgress?.(j.progress, j.currentStage ?? msg), opts.signal);
114
- }
115
- catch (err) {
116
- return {
117
- success: false,
118
- error: err instanceof Error ? err.message : String(err),
119
- };
120
- }
121
- // -- Audio mux pass (post-producer) ------------------------------------
122
- // The producer emits silent video — sub-composition <audio> elements are
123
- // not picked up. We scan the project ourselves and lay them onto the
124
- // video in one ffmpeg pass with -c:v copy (no re-encode).
125
- let audioCount = 0;
126
- let audioMuxApplied = false;
127
- let audioMuxWarning;
128
- try {
129
- opts.onProgress?.(0.95, "Mixing audio");
130
- const rootHtml = await readFile(resolve(projectDir, root), "utf-8");
131
- const audios = await scanSceneAudio({ projectDir, rootHtml });
132
- audioCount = audios.length;
133
- if (audios.length > 0) {
134
- const videoDuration = job.totalFrames && config.fps ? job.totalFrames / config.fps : undefined;
135
- const mux = await muxAudioIntoVideo({
136
- videoPath: outputPath,
137
- audios,
138
- format: config.format ?? "mp4",
139
- videoDuration,
140
- onProgress: (line) => {
141
- if (line)
142
- opts.onProgress?.(0.97, line);
143
- },
144
- });
145
- if (mux.success) {
146
- audioMuxApplied = true;
147
- }
148
- else {
149
- audioMuxWarning = mux.error;
150
- }
151
- }
152
- }
153
- catch (err) {
154
- audioMuxWarning = err instanceof Error ? err.message : String(err);
155
- }
156
- return {
157
- success: true,
158
- outputPath: relative(process.cwd(), outputPath) || outputPath,
159
- durationMs: Date.now() - start,
160
- framesRendered: job.framesRendered,
161
- totalFrames: job.totalFrames,
162
- fps: config.fps,
163
- quality: config.quality,
164
- format: config.format,
165
- audioCount,
166
- audioMuxApplied,
167
- audioMuxWarning,
168
- };
169
- }
170
- async function safeStat(p) {
171
- try {
172
- return await stat(p);
173
- }
174
- catch {
175
- return null;
176
- }
177
- }
178
- //# sourceMappingURL=scene-render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-render.js","sourceRoot":"","sources":["../../../src/commands/_shared/scene-render.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scene-render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-render.test.d.ts","sourceRoot":"","sources":["../../../src/commands/_shared/scene-render.test.ts"],"names":[],"mappings":""}
@@ -1,145 +0,0 @@
1
- import { describe, expect, it, beforeAll } from "vitest";
2
- import { mkdtemp, readFile, writeFile } from "node:fs/promises";
3
- import { existsSync } from "node:fs";
4
- import { tmpdir } from "node:os";
5
- import { join, resolve } from "node:path";
6
- import { buildRenderConfig, defaultOutputPath, executeSceneRender, qualityToCrf, } from "./scene-render.js";
7
- import { scaffoldSceneProject } from "./scene-project.js";
8
- import { emitSceneHtml, insertClipIntoRoot } from "./scene-html-emit.js";
9
- import { preflightChrome } from "../../pipeline/renderers/chrome.js";
10
- async function makeTmp(label = "vibe-scene-render-") {
11
- return mkdtemp(join(tmpdir(), label));
12
- }
13
- // ── qualityToCrf ────────────────────────────────────────────────────────────
14
- describe("qualityToCrf", () => {
15
- it.each([
16
- ["draft", 28],
17
- ["standard", 23],
18
- ["high", 18],
19
- ])("%s → %d", (q, expected) => {
20
- expect(qualityToCrf(q)).toBe(expected);
21
- });
22
- it("defaults to standard when no preset is given", () => {
23
- expect(qualityToCrf()).toBe(23);
24
- });
25
- });
26
- // ── buildRenderConfig ───────────────────────────────────────────────────────
27
- describe("buildRenderConfig", () => {
28
- it("supplies producer-compatible defaults", () => {
29
- const cfg = buildRenderConfig({});
30
- expect(cfg).toEqual({
31
- fps: 30,
32
- quality: "standard",
33
- format: "mp4",
34
- entryFile: "index.html",
35
- crf: 23,
36
- workers: 1,
37
- });
38
- });
39
- it("propagates overrides and recomputes crf from quality", () => {
40
- const cfg = buildRenderConfig({ fps: 60, quality: "high", format: "webm", workers: 4, entryFile: "alt.html" });
41
- expect(cfg).toEqual({
42
- fps: 60,
43
- quality: "high",
44
- format: "webm",
45
- entryFile: "alt.html",
46
- crf: 18,
47
- workers: 4,
48
- });
49
- });
50
- });
51
- // ── defaultOutputPath ───────────────────────────────────────────────────────
52
- describe("defaultOutputPath", () => {
53
- it("places output under <projectDir>/renders with project name + iso stamp", () => {
54
- const out = defaultOutputPath({
55
- projectDir: "/tmp/proj",
56
- projectName: "promo",
57
- format: "mp4",
58
- now: new Date("2026-04-25T12:34:56Z"),
59
- });
60
- expect(out).toBe("/tmp/proj/renders/promo-2026-04-25-12-34-56.mp4");
61
- });
62
- it("falls back to projectDir basename when no name is given", () => {
63
- const out = defaultOutputPath({
64
- projectDir: "/tmp/my-video",
65
- format: "webm",
66
- now: new Date("2026-04-25T00:00:00Z"),
67
- });
68
- expect(out).toBe("/tmp/my-video/renders/my-video-2026-04-25-00-00-00.webm");
69
- });
70
- it("defaults to mp4 when no format is given", () => {
71
- const out = defaultOutputPath({
72
- projectDir: "/tmp/p",
73
- projectName: "n",
74
- now: new Date("2026-04-25T00:00:00Z"),
75
- });
76
- expect(out.endsWith(".mp4")).toBe(true);
77
- });
78
- });
79
- // ── executeSceneRender — pre-Chrome failure paths ───────────────────────────
80
- //
81
- // These tests exercise the validation surface (project dir, root file, Chrome
82
- // preflight) WITHOUT requiring Chrome to be installed.
83
- describe("executeSceneRender — validation", () => {
84
- it("returns a structured error when the project directory doesn't exist", async () => {
85
- const r = await executeSceneRender({ projectDir: "/tmp/__vibe_does_not_exist__" });
86
- expect(r.success).toBe(false);
87
- expect(r.error).toMatch(/Project directory not found/);
88
- });
89
- it("returns a structured error when index.html is missing", async () => {
90
- const dir = await makeTmp();
91
- const r = await executeSceneRender({ projectDir: dir });
92
- expect(r.success).toBe(false);
93
- expect(r.error).toMatch(/Root composition not found/);
94
- });
95
- it("(without Chrome) returns the Chrome preflight reason", async () => {
96
- const pre = await preflightChrome();
97
- if (pre.ok)
98
- return; // Chrome present — Chrome-gated integration test covers the success path.
99
- const dir = await makeTmp();
100
- await scaffoldSceneProject({ dir, name: "fixture", aspect: "16:9", duration: 4 });
101
- const r = await executeSceneRender({ projectDir: dir });
102
- expect(r.success).toBe(false);
103
- expect(r.error).toMatch(/Chrome not found/);
104
- });
105
- });
106
- // ── executeSceneRender — Chrome-gated integration ───────────────────────────
107
- describe("executeSceneRender — Chrome-gated render", () => {
108
- let chromeAvailable = false;
109
- beforeAll(async () => {
110
- chromeAvailable = (await preflightChrome()).ok;
111
- if (!chromeAvailable) {
112
- console.warn("[scene-render] Chrome not found — skipping render integration test");
113
- }
114
- });
115
- it("renders a 1-scene project to MP4 (requires Chrome, skipped in CI)", async () => {
116
- if (!chromeAvailable || process.env.CI)
117
- return;
118
- // Build a minimal scene project: root + one announcement scene.
119
- const dir = await makeTmp("vibe-scene-render-int-");
120
- await scaffoldSceneProject({ dir, name: "fixture", aspect: "16:9", duration: 2 });
121
- let root = await readFile(resolve(dir, "index.html"), "utf-8");
122
- const intro = emitSceneHtml({
123
- id: "intro", preset: "announcement", width: 1920, height: 1080,
124
- duration: 1.5, headline: "Render OK",
125
- });
126
- await writeFile(resolve(dir, "compositions/scene-intro.html"), intro, "utf-8");
127
- root = insertClipIntoRoot(root, { id: "intro", start: 0, duration: 1.5 });
128
- await writeFile(resolve(dir, "index.html"), root, "utf-8");
129
- const out = resolve(dir, "renders", "out.mp4");
130
- const result = await executeSceneRender({
131
- projectDir: dir,
132
- output: "renders/out.mp4",
133
- fps: 30,
134
- quality: "draft",
135
- format: "mp4",
136
- });
137
- expect(result.success).toBe(true);
138
- expect(existsSync(out)).toBe(true);
139
- expect(result.fps).toBe(30);
140
- expect(result.quality).toBe("draft");
141
- expect(result.format).toBe("mp4");
142
- expect((result.framesRendered ?? 0)).toBeGreaterThan(0);
143
- }, 90_000);
144
- });
145
- //# sourceMappingURL=scene-render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-render.test.js","sourceRoot":"","sources":["../../../src/commands/_shared/scene-render.test.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * @module _shared/segments-to-scenes
3
- *
4
- * Branch of the script-to-video pipeline that materialises a Hyperframes-style
5
- * scene project (HTML compositions + GSAP timelines) instead of an opaque MP4.
6
- * Triggered by `vibe pipeline script-to-video --format scenes`.
7
- *
8
- * **Scope (MVP 1 c5):** template-based scene HTML using the C2 emitters.
9
- * Claude-authored per-scene HTML with a lint-feedback retry loop is
10
- * intentionally deferred — the bet that matters ("expensive opaque MP4 → cheap
11
- * editable HTML") is delivered with templates alone, and the user can hand-
12
- * edit any scene afterwards via `vibe scene add --force` or by editing the
13
- * file directly.
14
- *
15
- * Inputs: storyboard segments, narration audio paths, image paths (any of
16
- * which may be missing). Outputs: a fully scaffolded scene project at
17
- * `outputDir`, ready for `vibe scene lint` / `vibe scene render`.
18
- */
19
- import { type SceneAspect } from "./scene-project.js";
20
- import { type ScenePreset } from "./scene-html-emit.js";
21
- import { type ProjectLintResult } from "./scene-lint.js";
22
- import type { StoryboardSegment, NarrationEntry } from "../ai-script-pipeline.js";
23
- export interface SegmentsToScenesOptions {
24
- segments: StoryboardSegment[];
25
- /** Index-aligned with `segments`. Missing/failed entries → no narration audio. */
26
- narrationEntries?: NarrationEntry[];
27
- /** Index-aligned with `segments`. Empty string → image generation failed. */
28
- imagePaths?: string[];
29
- /** Absolute output directory (will be scaffolded as a scene project). */
30
- outputDir: string;
31
- /** Aspect ratio (drives canvas dims for both root + sub-comps). */
32
- aspectRatio?: SceneAspect;
33
- /** Project name (defaults to dir basename). */
34
- projectName?: string;
35
- /** Style preset applied to every scene (default `explainer`). */
36
- scenePreset?: ScenePreset;
37
- /** Optional progress sink — wired to `executeScriptToVideo`'s onProgress. */
38
- onProgress?: (msg: string) => void;
39
- /** When true (default), runs lint after emit and returns the result for
40
- * visibility. Lint warnings/errors do NOT cause this function to fail. */
41
- lintAfter?: boolean;
42
- }
43
- export interface SegmentsToScenesResult {
44
- success: boolean;
45
- outputDir: string;
46
- scenesEmitted: number;
47
- /** Project-relative paths of every scene HTML written. */
48
- scenePaths: string[];
49
- /** Project-relative path of the root composition. */
50
- rootPath: string;
51
- /** Lint result when `lintAfter` is set. Surfaces warnings/errors but does
52
- * not change `success`. */
53
- lintResult?: ProjectLintResult;
54
- /** 1-indexed scene numbers whose narration audio was missing. */
55
- missingNarration: number[];
56
- /** 1-indexed scene numbers whose image was missing. */
57
- missingImage: number[];
58
- error?: string;
59
- }
60
- /**
61
- * Pad an integer with leading zeros to a fixed width. `zeroPad(3, 2)` → "03".
62
- * Pure helper exposed for tests so the scene-id convention is locked in.
63
- */
64
- export declare function zeroPad(n: number, width?: number): string;
65
- /**
66
- * Build the canonical scene id for the i-th storyboard segment (1-indexed).
67
- * Used in both `compositions/scene-NN.html` and `data-composition-id`.
68
- */
69
- export declare function sceneIdFromIndex(oneIndexedIndex: number): string;
70
- /**
71
- * Materialise a scene project from script-to-video pipeline outputs.
72
- *
73
- * Steps:
74
- * 1. Scaffold the bilingual scene project (vibe.project.yaml + index.html
75
- * + hyperframes.json + compositions/ + assets/ + CLAUDE.md + .gitignore).
76
- * 2. Move narration `.mp3` and image `.png` files from the pipeline's flat
77
- * output layout into `assets/`.
78
- * 3. For each segment, emit `compositions/scene-NN.html` via the C2
79
- * `emitSceneHtml` template (default preset: `explainer`).
80
- * 4. Splice each scene into the root via `insertClipIntoRoot` so root
81
- * `data-duration` grows to fit and clip start times stack correctly.
82
- * 5. Run `runProjectLint` (info only — does not fail the call).
83
- */
84
- export declare function executeSegmentsToScenes(opts: SegmentsToScenesOptions): Promise<SegmentsToScenesResult>;
85
- //# sourceMappingURL=segments-to-scenes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segments-to-scenes.d.ts","sourceRoot":"","sources":["../../../src/commands/_shared/segments-to-scenes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAElF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;+EAC2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB;gCAC4B;IAC5B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEhE;AA0BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CA6HjC"}
@@ -1,202 +0,0 @@
1
- /**
2
- * @module _shared/segments-to-scenes
3
- *
4
- * Branch of the script-to-video pipeline that materialises a Hyperframes-style
5
- * scene project (HTML compositions + GSAP timelines) instead of an opaque MP4.
6
- * Triggered by `vibe pipeline script-to-video --format scenes`.
7
- *
8
- * **Scope (MVP 1 c5):** template-based scene HTML using the C2 emitters.
9
- * Claude-authored per-scene HTML with a lint-feedback retry loop is
10
- * intentionally deferred — the bet that matters ("expensive opaque MP4 → cheap
11
- * editable HTML") is delivered with templates alone, and the user can hand-
12
- * edit any scene afterwards via `vibe scene add --force` or by editing the
13
- * file directly.
14
- *
15
- * Inputs: storyboard segments, narration audio paths, image paths (any of
16
- * which may be missing). Outputs: a fully scaffolded scene project at
17
- * `outputDir`, ready for `vibe scene lint` / `vibe scene render`.
18
- */
19
- import { rename, writeFile, readFile, mkdir } from "node:fs/promises";
20
- import { existsSync } from "node:fs";
21
- import { resolve, basename, dirname, relative } from "node:path";
22
- import { scaffoldSceneProject, aspectToDims, } from "./scene-project.js";
23
- import { emitSceneHtml, insertClipIntoRoot, } from "./scene-html-emit.js";
24
- import { runProjectLint } from "./scene-lint.js";
25
- const DEFAULT_PRESET = "explainer";
26
- /**
27
- * Pad an integer with leading zeros to a fixed width. `zeroPad(3, 2)` → "03".
28
- * Pure helper exposed for tests so the scene-id convention is locked in.
29
- */
30
- export function zeroPad(n, width = 2) {
31
- return String(n).padStart(width, "0");
32
- }
33
- /**
34
- * Build the canonical scene id for the i-th storyboard segment (1-indexed).
35
- * Used in both `compositions/scene-NN.html` and `data-composition-id`.
36
- */
37
- export function sceneIdFromIndex(oneIndexedIndex) {
38
- return `scene-${zeroPad(oneIndexedIndex)}`;
39
- }
40
- /**
41
- * Move a generated asset into the project's `assets/` directory, returning
42
- * the project-relative path the scene HTML should reference. If the asset is
43
- * already inside `assets/`, it's left alone. Missing files become `undefined`.
44
- */
45
- async function relocateAsset(opts) {
46
- if (!opts.absSource || !existsSync(opts.absSource))
47
- return undefined;
48
- const assetsDir = resolve(opts.outputDir, "assets");
49
- await mkdir(assetsDir, { recursive: true });
50
- const dest = resolve(assetsDir, opts.destBasename);
51
- if (resolve(opts.absSource) !== dest) {
52
- if (existsSync(dest)) {
53
- // The destination already has the asset (idempotent re-run). Leave it.
54
- }
55
- else {
56
- await rename(opts.absSource, dest);
57
- }
58
- }
59
- return relative(opts.outputDir, dest);
60
- }
61
- /**
62
- * Materialise a scene project from script-to-video pipeline outputs.
63
- *
64
- * Steps:
65
- * 1. Scaffold the bilingual scene project (vibe.project.yaml + index.html
66
- * + hyperframes.json + compositions/ + assets/ + CLAUDE.md + .gitignore).
67
- * 2. Move narration `.mp3` and image `.png` files from the pipeline's flat
68
- * output layout into `assets/`.
69
- * 3. For each segment, emit `compositions/scene-NN.html` via the C2
70
- * `emitSceneHtml` template (default preset: `explainer`).
71
- * 4. Splice each scene into the root via `insertClipIntoRoot` so root
72
- * `data-duration` grows to fit and clip start times stack correctly.
73
- * 5. Run `runProjectLint` (info only — does not fail the call).
74
- */
75
- export async function executeSegmentsToScenes(opts) {
76
- const outputDir = resolve(opts.outputDir);
77
- const aspect = opts.aspectRatio ?? "16:9";
78
- const dims = aspectToDims(aspect);
79
- const preset = opts.scenePreset ?? DEFAULT_PRESET;
80
- const projectName = opts.projectName ?? basename(outputDir);
81
- const totalDuration = opts.segments.reduce((sum, s) => sum + (s.duration || 0), 0) || 10;
82
- const baseError = (error) => ({
83
- success: false,
84
- outputDir,
85
- scenesEmitted: 0,
86
- scenePaths: [],
87
- rootPath: resolve(outputDir, "index.html"),
88
- missingNarration: [],
89
- missingImage: [],
90
- error,
91
- });
92
- if (opts.segments.length === 0) {
93
- return baseError("No storyboard segments to convert.");
94
- }
95
- // Step 1: scaffold scene project (idempotent).
96
- opts.onProgress?.(`Scaffolding scene project at ${outputDir}...`);
97
- await scaffoldSceneProject({
98
- dir: outputDir,
99
- name: projectName,
100
- aspect,
101
- duration: totalDuration,
102
- });
103
- // Step 2-4: per-segment relocate + emit + insert.
104
- const scenePaths = [];
105
- const missingNarration = [];
106
- const missingImage = [];
107
- // Re-read the scaffolded root (we mutate sequentially via insertClipIntoRoot).
108
- const rootAbs = resolve(outputDir, "index.html");
109
- let rootHtml = await readFile(rootAbs, "utf-8");
110
- for (let i = 0; i < opts.segments.length; i++) {
111
- const segment = opts.segments[i];
112
- const oneIndexed = i + 1;
113
- const id = sceneIdFromIndex(oneIndexed);
114
- const narrationEntry = opts.narrationEntries?.[i];
115
- const imageAbsPath = opts.imagePaths?.[i];
116
- const audioRelPath = await relocateAsset({
117
- absSource: narrationEntry && !narrationEntry.failed ? (narrationEntry.path ?? undefined) : undefined,
118
- outputDir,
119
- destBasename: `narration-${zeroPad(oneIndexed)}.mp3`,
120
- });
121
- const imageRelPath = await relocateAsset({
122
- absSource: imageAbsPath && imageAbsPath.length > 0 ? imageAbsPath : undefined,
123
- outputDir,
124
- destBasename: `scene-${zeroPad(oneIndexed)}.png`,
125
- });
126
- if (!audioRelPath)
127
- missingNarration.push(oneIndexed);
128
- if (!imageRelPath)
129
- missingImage.push(oneIndexed);
130
- const headline = pickHeadline(segment, oneIndexed);
131
- const subhead = (segment.narration ?? "").trim() || segment.description.trim();
132
- const duration = segment.duration > 0 ? segment.duration : 5;
133
- const html = emitSceneHtml({
134
- id,
135
- preset,
136
- width: dims.width,
137
- height: dims.height,
138
- duration,
139
- headline,
140
- subhead,
141
- audioPath: audioRelPath,
142
- imagePath: imageRelPath,
143
- });
144
- const scenePath = resolve(outputDir, "compositions", `${id}.html`);
145
- await mkdir(dirname(scenePath), { recursive: true });
146
- await writeFile(scenePath, html, "utf-8");
147
- scenePaths.push(relative(outputDir, scenePath));
148
- opts.onProgress?.(`Scene ${oneIndexed}/${opts.segments.length}: emitted ${id} (preset=${preset})`);
149
- }
150
- // Step 4 (continued): build the running clip-stack into the root in order.
151
- let clipStart = 0;
152
- for (let i = 0; i < opts.segments.length; i++) {
153
- const segment = opts.segments[i];
154
- const id = sceneIdFromIndex(i + 1);
155
- const duration = segment.duration > 0 ? segment.duration : 5;
156
- // Explicit src — `id` already starts with "scene-", and the default src
157
- // derivation in buildClipReference would otherwise yield "scene-scene-NN".
158
- rootHtml = insertClipIntoRoot(rootHtml, {
159
- id,
160
- start: clipStart,
161
- duration,
162
- src: `compositions/${id}.html`,
163
- });
164
- clipStart += duration;
165
- }
166
- await writeFile(rootAbs, rootHtml, "utf-8");
167
- // Step 5: lint pass (advisory).
168
- let lintResult;
169
- if (opts.lintAfter !== false) {
170
- opts.onProgress?.("Running scene lint...");
171
- try {
172
- lintResult = await runProjectLint({ projectDir: outputDir });
173
- }
174
- catch {
175
- // Surface lint failures as undefined — never fail the conversion itself.
176
- }
177
- }
178
- return {
179
- success: true,
180
- outputDir,
181
- scenesEmitted: opts.segments.length,
182
- scenePaths,
183
- rootPath: relative(outputDir, rootAbs) || rootAbs,
184
- lintResult,
185
- missingNarration,
186
- missingImage,
187
- };
188
- }
189
- /**
190
- * Heuristic for the visible scene headline. Storyboards rarely include an
191
- * explicit "title" field, so we derive one from the description's first
192
- * clause, falling back to a generic "Scene N" label.
193
- */
194
- function pickHeadline(segment, oneIndexed) {
195
- const desc = (segment.description ?? "").trim();
196
- if (!desc)
197
- return `Scene ${oneIndexed}`;
198
- // First sentence (up to . ! ? or newline). Cap at 70 chars to avoid huge h1s.
199
- const sentence = desc.split(/[.!?\n]/).map((s) => s.trim()).find(Boolean) ?? desc;
200
- return sentence.length > 70 ? `${sentence.slice(0, 67)}…` : sentence;
201
- }
202
- //# sourceMappingURL=segments-to-scenes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segments-to-scenes.js","sourceRoot":"","sources":["../../../src/commands/_shared/segments-to-scenes.ts"],"names":[],"mappings":"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"}