@vibeframe/cli 0.54.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 (481) 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-html-emit.d.ts +0 -120
  112. package/dist/commands/_shared/scene-html-emit.d.ts.map +0 -1
  113. package/dist/commands/_shared/scene-html-emit.js +0 -422
  114. package/dist/commands/_shared/scene-html-emit.js.map +0 -1
  115. package/dist/commands/_shared/scene-html-emit.test.d.ts +0 -2
  116. package/dist/commands/_shared/scene-html-emit.test.d.ts.map +0 -1
  117. package/dist/commands/_shared/scene-html-emit.test.js +0 -396
  118. package/dist/commands/_shared/scene-html-emit.test.js.map +0 -1
  119. package/dist/commands/_shared/scene-lint.d.ts +0 -110
  120. package/dist/commands/_shared/scene-lint.d.ts.map +0 -1
  121. package/dist/commands/_shared/scene-lint.js +0 -207
  122. package/dist/commands/_shared/scene-lint.js.map +0 -1
  123. package/dist/commands/_shared/scene-lint.test.d.ts +0 -2
  124. package/dist/commands/_shared/scene-lint.test.d.ts.map +0 -1
  125. package/dist/commands/_shared/scene-lint.test.js +0 -208
  126. package/dist/commands/_shared/scene-lint.test.js.map +0 -1
  127. package/dist/commands/_shared/scene-project.d.ts +0 -101
  128. package/dist/commands/_shared/scene-project.d.ts.map +0 -1
  129. package/dist/commands/_shared/scene-project.js +0 -281
  130. package/dist/commands/_shared/scene-project.js.map +0 -1
  131. package/dist/commands/_shared/scene-project.test.d.ts +0 -2
  132. package/dist/commands/_shared/scene-project.test.d.ts.map +0 -1
  133. package/dist/commands/_shared/scene-project.test.js +0 -203
  134. package/dist/commands/_shared/scene-project.test.js.map +0 -1
  135. package/dist/commands/_shared/scene-render.d.ts +0 -79
  136. package/dist/commands/_shared/scene-render.d.ts.map +0 -1
  137. package/dist/commands/_shared/scene-render.js +0 -138
  138. package/dist/commands/_shared/scene-render.js.map +0 -1
  139. package/dist/commands/_shared/scene-render.test.d.ts +0 -2
  140. package/dist/commands/_shared/scene-render.test.d.ts.map +0 -1
  141. package/dist/commands/_shared/scene-render.test.js +0 -145
  142. package/dist/commands/_shared/scene-render.test.js.map +0 -1
  143. package/dist/commands/_shared/segments-to-scenes.d.ts +0 -85
  144. package/dist/commands/_shared/segments-to-scenes.d.ts.map +0 -1
  145. package/dist/commands/_shared/segments-to-scenes.js +0 -202
  146. package/dist/commands/_shared/segments-to-scenes.js.map +0 -1
  147. package/dist/commands/_shared/segments-to-scenes.test.d.ts +0 -2
  148. package/dist/commands/_shared/segments-to-scenes.test.d.ts.map +0 -1
  149. package/dist/commands/_shared/segments-to-scenes.test.js +0 -219
  150. package/dist/commands/_shared/segments-to-scenes.test.js.map +0 -1
  151. package/dist/commands/_shared/tts-resolve.d.ts +0 -75
  152. package/dist/commands/_shared/tts-resolve.d.ts.map +0 -1
  153. package/dist/commands/_shared/tts-resolve.js +0 -89
  154. package/dist/commands/_shared/tts-resolve.js.map +0 -1
  155. package/dist/commands/_shared/tts-resolve.test.d.ts +0 -6
  156. package/dist/commands/_shared/tts-resolve.test.d.ts.map +0 -1
  157. package/dist/commands/_shared/tts-resolve.test.js +0 -147
  158. package/dist/commands/_shared/tts-resolve.test.js.map +0 -1
  159. package/dist/commands/agent.d.ts +0 -21
  160. package/dist/commands/agent.d.ts.map +0 -1
  161. package/dist/commands/agent.js +0 -285
  162. package/dist/commands/agent.js.map +0 -1
  163. package/dist/commands/ai-analyze.d.ts +0 -106
  164. package/dist/commands/ai-analyze.d.ts.map +0 -1
  165. package/dist/commands/ai-analyze.js +0 -320
  166. package/dist/commands/ai-analyze.js.map +0 -1
  167. package/dist/commands/ai-animated-caption.d.ts +0 -64
  168. package/dist/commands/ai-animated-caption.d.ts.map +0 -1
  169. package/dist/commands/ai-animated-caption.js +0 -272
  170. package/dist/commands/ai-animated-caption.js.map +0 -1
  171. package/dist/commands/ai-audio.d.ts +0 -98
  172. package/dist/commands/ai-audio.d.ts.map +0 -1
  173. package/dist/commands/ai-audio.js +0 -1059
  174. package/dist/commands/ai-audio.js.map +0 -1
  175. package/dist/commands/ai-broll.d.ts +0 -15
  176. package/dist/commands/ai-broll.d.ts.map +0 -1
  177. package/dist/commands/ai-broll.js +0 -421
  178. package/dist/commands/ai-broll.js.map +0 -1
  179. package/dist/commands/ai-edit-cli.d.ts +0 -14
  180. package/dist/commands/ai-edit-cli.d.ts.map +0 -1
  181. package/dist/commands/ai-edit-cli.js +0 -585
  182. package/dist/commands/ai-edit-cli.js.map +0 -1
  183. package/dist/commands/ai-edit.d.ts +0 -398
  184. package/dist/commands/ai-edit.d.ts.map +0 -1
  185. package/dist/commands/ai-edit.js +0 -1060
  186. package/dist/commands/ai-edit.js.map +0 -1
  187. package/dist/commands/ai-fill-gaps.d.ts +0 -14
  188. package/dist/commands/ai-fill-gaps.d.ts.map +0 -1
  189. package/dist/commands/ai-fill-gaps.js +0 -447
  190. package/dist/commands/ai-fill-gaps.js.map +0 -1
  191. package/dist/commands/ai-helpers.d.ts +0 -20
  192. package/dist/commands/ai-helpers.d.ts.map +0 -1
  193. package/dist/commands/ai-helpers.js +0 -59
  194. package/dist/commands/ai-helpers.js.map +0 -1
  195. package/dist/commands/ai-highlights.d.ts +0 -127
  196. package/dist/commands/ai-highlights.d.ts.map +0 -1
  197. package/dist/commands/ai-highlights.js +0 -1053
  198. package/dist/commands/ai-highlights.js.map +0 -1
  199. package/dist/commands/ai-image.d.ts +0 -76
  200. package/dist/commands/ai-image.d.ts.map +0 -1
  201. package/dist/commands/ai-image.js +0 -858
  202. package/dist/commands/ai-image.js.map +0 -1
  203. package/dist/commands/ai-motion.d.ts +0 -50
  204. package/dist/commands/ai-motion.d.ts.map +0 -1
  205. package/dist/commands/ai-motion.js +0 -297
  206. package/dist/commands/ai-motion.js.map +0 -1
  207. package/dist/commands/ai-narrate.d.ts +0 -66
  208. package/dist/commands/ai-narrate.d.ts.map +0 -1
  209. package/dist/commands/ai-narrate.js +0 -332
  210. package/dist/commands/ai-narrate.js.map +0 -1
  211. package/dist/commands/ai-review.d.ts +0 -57
  212. package/dist/commands/ai-review.d.ts.map +0 -1
  213. package/dist/commands/ai-review.js +0 -270
  214. package/dist/commands/ai-review.js.map +0 -1
  215. package/dist/commands/ai-script-pipeline-cli.d.ts +0 -9
  216. package/dist/commands/ai-script-pipeline-cli.d.ts.map +0 -1
  217. package/dist/commands/ai-script-pipeline-cli.js +0 -502
  218. package/dist/commands/ai-script-pipeline-cli.js.map +0 -1
  219. package/dist/commands/ai-script-pipeline.d.ts +0 -305
  220. package/dist/commands/ai-script-pipeline.d.ts.map +0 -1
  221. package/dist/commands/ai-script-pipeline.js +0 -1546
  222. package/dist/commands/ai-script-pipeline.js.map +0 -1
  223. package/dist/commands/ai-suggest-edit.d.ts +0 -14
  224. package/dist/commands/ai-suggest-edit.d.ts.map +0 -1
  225. package/dist/commands/ai-suggest-edit.js +0 -215
  226. package/dist/commands/ai-suggest-edit.js.map +0 -1
  227. package/dist/commands/ai-video-fx.d.ts +0 -14
  228. package/dist/commands/ai-video-fx.d.ts.map +0 -1
  229. package/dist/commands/ai-video-fx.js +0 -396
  230. package/dist/commands/ai-video-fx.js.map +0 -1
  231. package/dist/commands/ai-video.d.ts +0 -91
  232. package/dist/commands/ai-video.d.ts.map +0 -1
  233. package/dist/commands/ai-video.js +0 -1055
  234. package/dist/commands/ai-video.js.map +0 -1
  235. package/dist/commands/ai-viral.d.ts +0 -15
  236. package/dist/commands/ai-viral.d.ts.map +0 -1
  237. package/dist/commands/ai-viral.js +0 -507
  238. package/dist/commands/ai-viral.js.map +0 -1
  239. package/dist/commands/ai-visual-fx.d.ts +0 -14
  240. package/dist/commands/ai-visual-fx.d.ts.map +0 -1
  241. package/dist/commands/ai-visual-fx.js +0 -521
  242. package/dist/commands/ai-visual-fx.js.map +0 -1
  243. package/dist/commands/ai.d.ts +0 -38
  244. package/dist/commands/ai.d.ts.map +0 -1
  245. package/dist/commands/ai.js +0 -225
  246. package/dist/commands/ai.js.map +0 -1
  247. package/dist/commands/ai.test.d.ts +0 -2
  248. package/dist/commands/ai.test.d.ts.map +0 -1
  249. package/dist/commands/ai.test.js +0 -557
  250. package/dist/commands/ai.test.js.map +0 -1
  251. package/dist/commands/analyze.d.ts +0 -16
  252. package/dist/commands/analyze.d.ts.map +0 -1
  253. package/dist/commands/analyze.js +0 -247
  254. package/dist/commands/analyze.js.map +0 -1
  255. package/dist/commands/audio.d.ts +0 -18
  256. package/dist/commands/audio.d.ts.map +0 -1
  257. package/dist/commands/audio.js +0 -539
  258. package/dist/commands/audio.js.map +0 -1
  259. package/dist/commands/batch.d.ts +0 -3
  260. package/dist/commands/batch.d.ts.map +0 -1
  261. package/dist/commands/batch.js +0 -419
  262. package/dist/commands/batch.js.map +0 -1
  263. package/dist/commands/batch.test.d.ts +0 -2
  264. package/dist/commands/batch.test.d.ts.map +0 -1
  265. package/dist/commands/batch.test.js +0 -203
  266. package/dist/commands/batch.test.js.map +0 -1
  267. package/dist/commands/context.d.ts +0 -7
  268. package/dist/commands/context.d.ts.map +0 -1
  269. package/dist/commands/context.js +0 -66
  270. package/dist/commands/context.js.map +0 -1
  271. package/dist/commands/demo.d.ts +0 -7
  272. package/dist/commands/demo.d.ts.map +0 -1
  273. package/dist/commands/demo.js +0 -192
  274. package/dist/commands/demo.js.map +0 -1
  275. package/dist/commands/detect.d.ts +0 -56
  276. package/dist/commands/detect.d.ts.map +0 -1
  277. package/dist/commands/detect.js +0 -464
  278. package/dist/commands/detect.js.map +0 -1
  279. package/dist/commands/doctor.d.ts +0 -6
  280. package/dist/commands/doctor.d.ts.map +0 -1
  281. package/dist/commands/doctor.js +0 -322
  282. package/dist/commands/doctor.js.map +0 -1
  283. package/dist/commands/edit-cmd.d.ts +0 -112
  284. package/dist/commands/edit-cmd.d.ts.map +0 -1
  285. package/dist/commands/edit-cmd.js +0 -1041
  286. package/dist/commands/edit-cmd.js.map +0 -1
  287. package/dist/commands/export.d.ts +0 -61
  288. package/dist/commands/export.d.ts.map +0 -1
  289. package/dist/commands/export.js +0 -980
  290. package/dist/commands/export.js.map +0 -1
  291. package/dist/commands/export.test.d.ts +0 -2
  292. package/dist/commands/export.test.d.ts.map +0 -1
  293. package/dist/commands/export.test.js +0 -107
  294. package/dist/commands/export.test.js.map +0 -1
  295. package/dist/commands/generate.d.ts +0 -84
  296. package/dist/commands/generate.d.ts.map +0 -1
  297. package/dist/commands/generate.js +0 -2030
  298. package/dist/commands/generate.js.map +0 -1
  299. package/dist/commands/media.d.ts +0 -3
  300. package/dist/commands/media.d.ts.map +0 -1
  301. package/dist/commands/media.js +0 -163
  302. package/dist/commands/media.js.map +0 -1
  303. package/dist/commands/output.d.ts +0 -51
  304. package/dist/commands/output.d.ts.map +0 -1
  305. package/dist/commands/output.js +0 -219
  306. package/dist/commands/output.js.map +0 -1
  307. package/dist/commands/output.test.d.ts +0 -2
  308. package/dist/commands/output.test.d.ts.map +0 -1
  309. package/dist/commands/output.test.js +0 -151
  310. package/dist/commands/output.test.js.map +0 -1
  311. package/dist/commands/pipeline.d.ts +0 -19
  312. package/dist/commands/pipeline.d.ts.map +0 -1
  313. package/dist/commands/pipeline.js +0 -345
  314. package/dist/commands/pipeline.js.map +0 -1
  315. package/dist/commands/project.d.ts +0 -3
  316. package/dist/commands/project.d.ts.map +0 -1
  317. package/dist/commands/project.js +0 -181
  318. package/dist/commands/project.js.map +0 -1
  319. package/dist/commands/project.test.d.ts +0 -2
  320. package/dist/commands/project.test.d.ts.map +0 -1
  321. package/dist/commands/project.test.js +0 -105
  322. package/dist/commands/project.test.js.map +0 -1
  323. package/dist/commands/run.d.ts +0 -15
  324. package/dist/commands/run.d.ts.map +0 -1
  325. package/dist/commands/run.js +0 -204
  326. package/dist/commands/run.js.map +0 -1
  327. package/dist/commands/sanitize.d.ts +0 -21
  328. package/dist/commands/sanitize.d.ts.map +0 -1
  329. package/dist/commands/sanitize.js +0 -56
  330. package/dist/commands/sanitize.js.map +0 -1
  331. package/dist/commands/scene.d.ts +0 -86
  332. package/dist/commands/scene.d.ts.map +0 -1
  333. package/dist/commands/scene.js +0 -719
  334. package/dist/commands/scene.js.map +0 -1
  335. package/dist/commands/scene.test.d.ts +0 -2
  336. package/dist/commands/scene.test.d.ts.map +0 -1
  337. package/dist/commands/scene.test.js +0 -219
  338. package/dist/commands/scene.test.js.map +0 -1
  339. package/dist/commands/schema.d.ts +0 -13
  340. package/dist/commands/schema.d.ts.map +0 -1
  341. package/dist/commands/schema.js +0 -218
  342. package/dist/commands/schema.js.map +0 -1
  343. package/dist/commands/setup.d.ts +0 -6
  344. package/dist/commands/setup.d.ts.map +0 -1
  345. package/dist/commands/setup.js +0 -461
  346. package/dist/commands/setup.js.map +0 -1
  347. package/dist/commands/timeline.d.ts +0 -3
  348. package/dist/commands/timeline.d.ts.map +0 -1
  349. package/dist/commands/timeline.js +0 -609
  350. package/dist/commands/timeline.js.map +0 -1
  351. package/dist/commands/timeline.test.d.ts +0 -2
  352. package/dist/commands/timeline.test.d.ts.map +0 -1
  353. package/dist/commands/timeline.test.js +0 -334
  354. package/dist/commands/timeline.test.js.map +0 -1
  355. package/dist/commands/validate.d.ts +0 -34
  356. package/dist/commands/validate.d.ts.map +0 -1
  357. package/dist/commands/validate.js +0 -70
  358. package/dist/commands/validate.js.map +0 -1
  359. package/dist/config/config.test.d.ts +0 -2
  360. package/dist/config/config.test.d.ts.map +0 -1
  361. package/dist/config/config.test.js +0 -164
  362. package/dist/config/config.test.js.map +0 -1
  363. package/dist/config/index.d.ts +0 -35
  364. package/dist/config/index.d.ts.map +0 -1
  365. package/dist/config/index.js +0 -101
  366. package/dist/config/index.js.map +0 -1
  367. package/dist/config/schema.d.ts +0 -52
  368. package/dist/config/schema.d.ts.map +0 -1
  369. package/dist/config/schema.js +0 -44
  370. package/dist/config/schema.js.map +0 -1
  371. package/dist/engine/index.d.ts +0 -3
  372. package/dist/engine/index.d.ts.map +0 -1
  373. package/dist/engine/index.js +0 -2
  374. package/dist/engine/index.js.map +0 -1
  375. package/dist/engine/project.d.ts +0 -84
  376. package/dist/engine/project.d.ts.map +0 -1
  377. package/dist/engine/project.js +0 -355
  378. package/dist/engine/project.js.map +0 -1
  379. package/dist/engine/project.test.d.ts +0 -2
  380. package/dist/engine/project.test.d.ts.map +0 -1
  381. package/dist/engine/project.test.js +0 -599
  382. package/dist/engine/project.test.js.map +0 -1
  383. package/dist/index.d.ts +0 -7
  384. package/dist/index.d.ts.map +0 -1
  385. package/dist/index.js.map +0 -1
  386. package/dist/pipeline/executor.d.ts +0 -19
  387. package/dist/pipeline/executor.d.ts.map +0 -1
  388. package/dist/pipeline/executor.js +0 -397
  389. package/dist/pipeline/executor.js.map +0 -1
  390. package/dist/pipeline/index.d.ts +0 -4
  391. package/dist/pipeline/index.d.ts.map +0 -1
  392. package/dist/pipeline/index.js +0 -2
  393. package/dist/pipeline/index.js.map +0 -1
  394. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +0 -2
  395. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts.map +0 -1
  396. package/dist/pipeline/renderers/__tests__/html-template.test.js +0 -170
  397. package/dist/pipeline/renderers/__tests__/html-template.test.js.map +0 -1
  398. package/dist/pipeline/renderers/__tests__/integration.test.d.ts +0 -2
  399. package/dist/pipeline/renderers/__tests__/integration.test.d.ts.map +0 -1
  400. package/dist/pipeline/renderers/__tests__/integration.test.js +0 -175
  401. package/dist/pipeline/renderers/__tests__/integration.test.js.map +0 -1
  402. package/dist/pipeline/renderers/chrome.d.ts +0 -26
  403. package/dist/pipeline/renderers/chrome.d.ts.map +0 -1
  404. package/dist/pipeline/renderers/chrome.js +0 -48
  405. package/dist/pipeline/renderers/chrome.js.map +0 -1
  406. package/dist/pipeline/renderers/html-clips.d.ts +0 -20
  407. package/dist/pipeline/renderers/html-clips.d.ts.map +0 -1
  408. package/dist/pipeline/renderers/html-clips.js +0 -50
  409. package/dist/pipeline/renderers/html-clips.js.map +0 -1
  410. package/dist/pipeline/renderers/html-runtime.d.ts +0 -7
  411. package/dist/pipeline/renderers/html-runtime.d.ts.map +0 -1
  412. package/dist/pipeline/renderers/html-runtime.js +0 -80
  413. package/dist/pipeline/renderers/html-runtime.js.map +0 -1
  414. package/dist/pipeline/renderers/html-template.d.ts +0 -3
  415. package/dist/pipeline/renderers/html-template.d.ts.map +0 -1
  416. package/dist/pipeline/renderers/html-template.js +0 -36
  417. package/dist/pipeline/renderers/html-template.js.map +0 -1
  418. package/dist/pipeline/renderers/hyperframes.d.ts +0 -8
  419. package/dist/pipeline/renderers/hyperframes.d.ts.map +0 -1
  420. package/dist/pipeline/renderers/hyperframes.js +0 -63
  421. package/dist/pipeline/renderers/hyperframes.js.map +0 -1
  422. package/dist/pipeline/renderers/project-builder.d.ts +0 -8
  423. package/dist/pipeline/renderers/project-builder.d.ts.map +0 -1
  424. package/dist/pipeline/renderers/project-builder.js +0 -65
  425. package/dist/pipeline/renderers/project-builder.js.map +0 -1
  426. package/dist/pipeline/renderers/types.d.ts +0 -41
  427. package/dist/pipeline/renderers/types.d.ts.map +0 -1
  428. package/dist/pipeline/renderers/types.js +0 -11
  429. package/dist/pipeline/renderers/types.js.map +0 -1
  430. package/dist/pipeline/resolver.d.ts +0 -20
  431. package/dist/pipeline/resolver.d.ts.map +0 -1
  432. package/dist/pipeline/resolver.js +0 -74
  433. package/dist/pipeline/resolver.js.map +0 -1
  434. package/dist/pipeline/types.d.ts +0 -82
  435. package/dist/pipeline/types.d.ts.map +0 -1
  436. package/dist/pipeline/types.js +0 -8
  437. package/dist/pipeline/types.js.map +0 -1
  438. package/dist/utils/api-key.d.ts +0 -33
  439. package/dist/utils/api-key.d.ts.map +0 -1
  440. package/dist/utils/api-key.js +0 -228
  441. package/dist/utils/api-key.js.map +0 -1
  442. package/dist/utils/api-key.test.d.ts +0 -2
  443. package/dist/utils/api-key.test.d.ts.map +0 -1
  444. package/dist/utils/api-key.test.js +0 -35
  445. package/dist/utils/api-key.test.js.map +0 -1
  446. package/dist/utils/audio.d.ts +0 -23
  447. package/dist/utils/audio.d.ts.map +0 -1
  448. package/dist/utils/audio.js +0 -79
  449. package/dist/utils/audio.js.map +0 -1
  450. package/dist/utils/exec-safe.d.ts +0 -22
  451. package/dist/utils/exec-safe.d.ts.map +0 -1
  452. package/dist/utils/exec-safe.js +0 -62
  453. package/dist/utils/exec-safe.js.map +0 -1
  454. package/dist/utils/first-run.d.ts +0 -17
  455. package/dist/utils/first-run.d.ts.map +0 -1
  456. package/dist/utils/first-run.js +0 -73
  457. package/dist/utils/first-run.js.map +0 -1
  458. package/dist/utils/input-validation.d.ts +0 -27
  459. package/dist/utils/input-validation.d.ts.map +0 -1
  460. package/dist/utils/input-validation.js +0 -67
  461. package/dist/utils/input-validation.js.map +0 -1
  462. package/dist/utils/provider-resolver.d.ts +0 -19
  463. package/dist/utils/provider-resolver.d.ts.map +0 -1
  464. package/dist/utils/provider-resolver.js +0 -75
  465. package/dist/utils/provider-resolver.js.map +0 -1
  466. package/dist/utils/remotion.d.ts +0 -231
  467. package/dist/utils/remotion.d.ts.map +0 -1
  468. package/dist/utils/remotion.js +0 -879
  469. package/dist/utils/remotion.js.map +0 -1
  470. package/dist/utils/subtitle.d.ts +0 -65
  471. package/dist/utils/subtitle.d.ts.map +0 -1
  472. package/dist/utils/subtitle.js +0 -135
  473. package/dist/utils/subtitle.js.map +0 -1
  474. package/dist/utils/subtitle.test.d.ts +0 -2
  475. package/dist/utils/subtitle.test.d.ts.map +0 -1
  476. package/dist/utils/subtitle.test.js +0 -175
  477. package/dist/utils/subtitle.test.js.map +0 -1
  478. package/dist/utils/tty.d.ts +0 -45
  479. package/dist/utils/tty.d.ts.map +0 -1
  480. package/dist/utils/tty.js +0 -231
  481. package/dist/utils/tty.js.map +0 -1
@@ -1,419 +0,0 @@
1
- import { Command } from "commander";
2
- import { readFile, writeFile, readdir } from "node:fs/promises";
3
- import { resolve, basename, extname, join } from "node:path";
4
- import chalk from "chalk";
5
- import ora from "ora";
6
- import { Project } from "../engine/index.js";
7
- import { exitWithError, generalError, outputResult, usageError } from "./output.js";
8
- export const batchCommand = new Command("batch")
9
- .description("Batch operations for processing multiple items");
10
- /**
11
- * Detect media type from file extension
12
- */
13
- function detectMediaType(filePath) {
14
- const ext = extname(filePath).toLowerCase();
15
- const videoExts = [".mp4", ".mov", ".avi", ".mkv", ".webm", ".m4v"];
16
- const audioExts = [".mp3", ".wav", ".aac", ".flac", ".ogg", ".m4a"];
17
- const imageExts = [".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"];
18
- if (videoExts.includes(ext))
19
- return "video";
20
- if (audioExts.includes(ext))
21
- return "audio";
22
- if (imageExts.includes(ext))
23
- return "image";
24
- return "video"; // Default to video
25
- }
26
- /**
27
- * Check if file is a media file
28
- */
29
- function isMediaFile(filePath) {
30
- const ext = extname(filePath).toLowerCase();
31
- const mediaExts = [
32
- ".mp4", ".mov", ".avi", ".mkv", ".webm", ".m4v",
33
- ".mp3", ".wav", ".aac", ".flac", ".ogg", ".m4a",
34
- ".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp",
35
- ];
36
- return mediaExts.includes(ext);
37
- }
38
- // ============ batch import ============
39
- batchCommand
40
- .command("import")
41
- .description("Import multiple media files from a directory")
42
- .argument("<project>", "Project file path")
43
- .argument("<directory>", "Directory containing media files")
44
- .option("-r, --recursive", "Search subdirectories", false)
45
- .option("-d, --duration <seconds>", "Default duration for images", "5")
46
- .option("--filter <pattern>", "Filter files by extension (e.g., '.mp4,.mov')")
47
- .option("--dry-run", "Preview parameters without executing")
48
- .action(async (projectPath, directory, options) => {
49
- const spinner = ora("Scanning directory...").start();
50
- try {
51
- if (options.dryRun) {
52
- outputResult({
53
- dryRun: true,
54
- command: "batch import",
55
- params: {
56
- project: projectPath,
57
- directory,
58
- recursive: options.recursive,
59
- duration: options.duration,
60
- filter: options.filter || null,
61
- },
62
- });
63
- return;
64
- }
65
- const filePath = resolve(process.cwd(), projectPath);
66
- const content = await readFile(filePath, "utf-8");
67
- const data = JSON.parse(content);
68
- const project = Project.fromJSON(data);
69
- const dirPath = resolve(process.cwd(), directory);
70
- const filterExts = options.filter
71
- ? options.filter.split(",").map((e) => e.trim().toLowerCase())
72
- : null;
73
- // Collect media files
74
- const mediaFiles = [];
75
- const scanDir = async (dir) => {
76
- const entries = await readdir(dir, { withFileTypes: true });
77
- for (const entry of entries) {
78
- const entryPath = join(dir, entry.name);
79
- if (entry.isDirectory() && options.recursive) {
80
- await scanDir(entryPath);
81
- }
82
- else if (entry.isFile()) {
83
- const ext = extname(entry.name).toLowerCase();
84
- const matchesFilter = !filterExts || filterExts.includes(ext);
85
- if (matchesFilter && isMediaFile(entryPath)) {
86
- mediaFiles.push(entryPath);
87
- }
88
- }
89
- }
90
- };
91
- await scanDir(dirPath);
92
- if (mediaFiles.length === 0) {
93
- spinner.fail("No media files found in directory");
94
- exitWithError(usageError("No media files found in directory"));
95
- }
96
- // Sort files alphabetically
97
- mediaFiles.sort();
98
- spinner.text = `Importing ${mediaFiles.length} files...`;
99
- const addedSources = [];
100
- const defaultDuration = parseFloat(options.duration);
101
- for (const mediaFile of mediaFiles) {
102
- const mediaName = basename(mediaFile);
103
- const mediaType = detectMediaType(mediaFile);
104
- const duration = mediaType === "image" ? defaultDuration : 0;
105
- const source = project.addSource({
106
- name: mediaName,
107
- type: mediaType,
108
- url: mediaFile,
109
- duration,
110
- });
111
- addedSources.push(source.id);
112
- }
113
- await writeFile(filePath, JSON.stringify(project.toJSON(), null, 2), "utf-8");
114
- spinner.succeed(chalk.green(`Imported ${addedSources.length} media files`));
115
- console.log();
116
- for (const file of mediaFiles) {
117
- console.log(chalk.dim(" +"), basename(file));
118
- }
119
- console.log();
120
- }
121
- catch (error) {
122
- spinner.fail("Import failed");
123
- const msg = error instanceof Error ? error.message : String(error);
124
- exitWithError(generalError(`Import failed: ${msg}`));
125
- }
126
- });
127
- // ============ batch concat ============
128
- batchCommand
129
- .command("concat")
130
- .description("Concatenate multiple sources into sequential clips")
131
- .argument("<project>", "Project file path")
132
- .argument("[source-ids...]", "Source IDs to concatenate (or --all)")
133
- .option("--all", "Concatenate all sources in order", false)
134
- .option("--track <track-id>", "Track to place clips on")
135
- .option("--start <seconds>", "Starting time", "0")
136
- .option("--gap <seconds>", "Gap between clips", "0")
137
- .option("--dry-run", "Preview parameters without executing")
138
- .action(async (projectPath, sourceIds, options) => {
139
- const spinner = ora("Creating clips...").start();
140
- try {
141
- if (options.dryRun) {
142
- outputResult({
143
- dryRun: true,
144
- command: "batch concat",
145
- params: {
146
- project: projectPath,
147
- sourceIds,
148
- all: options.all,
149
- track: options.track || null,
150
- start: options.start,
151
- gap: options.gap,
152
- },
153
- });
154
- return;
155
- }
156
- const filePath = resolve(process.cwd(), projectPath);
157
- const content = await readFile(filePath, "utf-8");
158
- const data = JSON.parse(content);
159
- const project = Project.fromJSON(data);
160
- const sources = project.getSources();
161
- if (sources.length === 0) {
162
- spinner.fail("No sources in project");
163
- exitWithError(usageError("No sources in project"));
164
- }
165
- // Get sources to concatenate
166
- let selectedSources = sources;
167
- if (!options.all && sourceIds.length > 0) {
168
- selectedSources = sourceIds
169
- .map((id) => sources.find((s) => s.id === id))
170
- .filter((s) => s !== undefined);
171
- if (selectedSources.length === 0) {
172
- spinner.fail("No matching sources found");
173
- exitWithError(usageError("No matching sources found"));
174
- }
175
- }
176
- // Determine track
177
- const tracks = project.getTracks();
178
- let trackId = options.track;
179
- if (!trackId) {
180
- // Use first video track for video, first audio track for audio
181
- const firstSource = selectedSources[0];
182
- const matchingTrack = tracks.find((t) => t.type === firstSource.type);
183
- trackId = matchingTrack?.id || tracks[0].id;
184
- }
185
- const startTime = parseFloat(options.start);
186
- const gap = parseFloat(options.gap);
187
- let currentTime = startTime;
188
- const addedClips = [];
189
- for (const source of selectedSources) {
190
- const clip = project.addClip({
191
- sourceId: source.id,
192
- trackId,
193
- startTime: currentTime,
194
- duration: source.duration,
195
- sourceStartOffset: 0,
196
- sourceEndOffset: source.duration,
197
- });
198
- addedClips.push(clip.id);
199
- currentTime += source.duration + gap;
200
- }
201
- await writeFile(filePath, JSON.stringify(project.toJSON(), null, 2), "utf-8");
202
- spinner.succeed(chalk.green(`Created ${addedClips.length} clips`));
203
- console.log();
204
- console.log(chalk.dim(" Total duration:"), `${currentTime - gap}s`);
205
- console.log(chalk.dim(" Track:"), trackId);
206
- for (let i = 0; i < selectedSources.length; i++) {
207
- console.log(chalk.dim(` ${i + 1}.`), selectedSources[i].name);
208
- }
209
- console.log();
210
- }
211
- catch (error) {
212
- spinner.fail("Concat failed");
213
- const msg = error instanceof Error ? error.message : String(error);
214
- exitWithError(generalError(`Concat failed: ${msg}`));
215
- }
216
- });
217
- // ============ batch apply-effect ============
218
- batchCommand
219
- .command("apply-effect")
220
- .description("Apply an effect to multiple clips")
221
- .argument("<project>", "Project file path")
222
- .argument("<effect-type>", "Effect type (fadeIn, fadeOut, blur, etc.)")
223
- .argument("[clip-ids...]", "Clip IDs to apply effect to (or --all)")
224
- .option("--all", "Apply to all clips", false)
225
- .option("-d, --duration <seconds>", "Effect duration", "1")
226
- .option("-s, --start <seconds>", "Effect start time (relative to clip)", "0")
227
- .option("--intensity <value>", "Effect intensity (0-1)", "1")
228
- .option("--dry-run", "Preview parameters without executing")
229
- .action(async (projectPath, effectType, clipIds, options) => {
230
- const spinner = ora("Applying effects...").start();
231
- try {
232
- if (options.dryRun) {
233
- outputResult({
234
- dryRun: true,
235
- command: "batch apply-effect",
236
- params: {
237
- project: projectPath,
238
- effectType,
239
- clipIds,
240
- all: options.all,
241
- duration: options.duration,
242
- start: options.start,
243
- intensity: options.intensity,
244
- },
245
- });
246
- return;
247
- }
248
- const filePath = resolve(process.cwd(), projectPath);
249
- const content = await readFile(filePath, "utf-8");
250
- const data = JSON.parse(content);
251
- const project = Project.fromJSON(data);
252
- const clips = project.getClips();
253
- if (clips.length === 0) {
254
- spinner.fail("No clips in project");
255
- exitWithError(usageError("No clips in project"));
256
- }
257
- // Get clips to apply effect to
258
- let selectedClips = clips;
259
- if (!options.all && clipIds.length > 0) {
260
- selectedClips = clipIds
261
- .map((id) => clips.find((c) => c.id === id))
262
- .filter((c) => c !== undefined);
263
- if (selectedClips.length === 0) {
264
- spinner.fail("No matching clips found");
265
- exitWithError(usageError("No matching clips found"));
266
- }
267
- }
268
- const duration = parseFloat(options.duration);
269
- const startTime = parseFloat(options.start);
270
- const intensity = parseFloat(options.intensity);
271
- let appliedCount = 0;
272
- for (const clip of selectedClips) {
273
- const effect = project.addEffect(clip.id, {
274
- type: effectType,
275
- startTime,
276
- duration,
277
- params: { intensity },
278
- });
279
- if (effect) {
280
- appliedCount++;
281
- }
282
- }
283
- await writeFile(filePath, JSON.stringify(project.toJSON(), null, 2), "utf-8");
284
- spinner.succeed(chalk.green(`Applied ${effectType} to ${appliedCount} clips`));
285
- console.log();
286
- console.log(chalk.dim(" Effect:"), effectType);
287
- console.log(chalk.dim(" Duration:"), `${duration}s`);
288
- console.log(chalk.dim(" Intensity:"), intensity);
289
- console.log();
290
- }
291
- catch (error) {
292
- spinner.fail("Apply effect failed");
293
- const msg = error instanceof Error ? error.message : String(error);
294
- exitWithError(generalError(`Apply effect failed: ${msg}`));
295
- }
296
- });
297
- // ============ batch remove-clips ============
298
- batchCommand
299
- .command("remove-clips")
300
- .description("Remove multiple clips from the timeline")
301
- .argument("<project>", "Project file path")
302
- .argument("[clip-ids...]", "Clip IDs to remove")
303
- .option("--all", "Remove all clips", false)
304
- .option("--track <track-id>", "Remove clips from specific track only")
305
- .option("--dry-run", "Preview parameters without executing")
306
- .action(async (projectPath, clipIds, options) => {
307
- const spinner = ora("Removing clips...").start();
308
- try {
309
- if (options.dryRun) {
310
- outputResult({
311
- dryRun: true,
312
- command: "batch remove-clips",
313
- params: {
314
- project: projectPath,
315
- clipIds,
316
- all: options.all,
317
- track: options.track || null,
318
- },
319
- });
320
- return;
321
- }
322
- const filePath = resolve(process.cwd(), projectPath);
323
- const content = await readFile(filePath, "utf-8");
324
- const data = JSON.parse(content);
325
- const project = Project.fromJSON(data);
326
- const clips = project.getClips();
327
- if (clips.length === 0) {
328
- spinner.fail("No clips in project");
329
- exitWithError(usageError("No clips in project"));
330
- }
331
- // Get clips to remove
332
- let clipsToRemove = clips;
333
- if (options.track) {
334
- clipsToRemove = clips.filter((c) => c.trackId === options.track);
335
- }
336
- if (!options.all && clipIds.length > 0) {
337
- clipsToRemove = clipIds
338
- .map((id) => clips.find((c) => c.id === id))
339
- .filter((c) => c !== undefined);
340
- }
341
- if (clipsToRemove.length === 0) {
342
- spinner.fail("No matching clips found");
343
- exitWithError(usageError("No matching clips found"));
344
- }
345
- let removedCount = 0;
346
- for (const clip of clipsToRemove) {
347
- if (project.removeClip(clip.id)) {
348
- removedCount++;
349
- }
350
- }
351
- await writeFile(filePath, JSON.stringify(project.toJSON(), null, 2), "utf-8");
352
- spinner.succeed(chalk.green(`Removed ${removedCount} clips`));
353
- console.log();
354
- }
355
- catch (error) {
356
- spinner.fail("Remove clips failed");
357
- const msg = error instanceof Error ? error.message : String(error);
358
- exitWithError(generalError(`Remove clips failed: ${msg}`));
359
- }
360
- });
361
- // ============ batch info ============
362
- batchCommand
363
- .command("info")
364
- .description("Show batch processing statistics")
365
- .argument("<project>", "Project file path")
366
- .action(async (projectPath) => {
367
- const spinner = ora("Loading project...").start();
368
- try {
369
- const filePath = resolve(process.cwd(), projectPath);
370
- const content = await readFile(filePath, "utf-8");
371
- const data = JSON.parse(content);
372
- const project = Project.fromJSON(data);
373
- const sources = project.getSources();
374
- const clips = project.getClips();
375
- const tracks = project.getTracks();
376
- const summary = project.getSummary();
377
- spinner.stop();
378
- console.log(chalk.bold("\nProject Statistics\n"));
379
- // Sources breakdown
380
- const videoSources = sources.filter((s) => s.type === "video").length;
381
- const audioSources = sources.filter((s) => s.type === "audio").length;
382
- const imageSources = sources.filter((s) => s.type === "image").length;
383
- console.log(chalk.cyan("Sources:"), sources.length);
384
- if (videoSources > 0)
385
- console.log(chalk.dim(" Video:"), videoSources);
386
- if (audioSources > 0)
387
- console.log(chalk.dim(" Audio:"), audioSources);
388
- if (imageSources > 0)
389
- console.log(chalk.dim(" Image:"), imageSources);
390
- // Clips breakdown
391
- const clipsPerTrack = tracks.map((t) => ({
392
- track: t.name,
393
- count: clips.filter((c) => c.trackId === t.id).length,
394
- }));
395
- console.log(chalk.cyan("\nClips:"), clips.length);
396
- for (const { track, count } of clipsPerTrack) {
397
- if (count > 0)
398
- console.log(chalk.dim(` ${track}:`), count);
399
- }
400
- // Effects count
401
- const totalEffects = clips.reduce((sum, c) => sum + c.effects.length, 0);
402
- if (totalEffects > 0) {
403
- console.log(chalk.cyan("\nEffects:"), totalEffects);
404
- }
405
- // Timeline info
406
- console.log(chalk.cyan("\nTimeline:"));
407
- console.log(chalk.dim(" Duration:"), `${summary.duration.toFixed(1)}s`);
408
- console.log(chalk.dim(" Tracks:"), tracks.length);
409
- console.log(chalk.dim(" Frame rate:"), `${summary.frameRate} fps`);
410
- console.log(chalk.dim(" Aspect ratio:"), summary.aspectRatio);
411
- console.log();
412
- }
413
- catch (error) {
414
- spinner.fail("Failed to load project");
415
- const msg = error instanceof Error ? error.message : String(error);
416
- exitWithError(generalError(`Failed to load project: ${msg}`));
417
- }
418
- });
419
- //# sourceMappingURL=batch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/commands/batch.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=batch.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.test.d.ts","sourceRoot":"","sources":["../../src/commands/batch.test.ts"],"names":[],"mappings":""}
@@ -1,203 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import { execSync } from "child_process";
3
- import { readFileSync, writeFileSync, mkdtempSync, mkdirSync, rmSync, } from "fs";
4
- import { join, resolve } from "path";
5
- import { tmpdir } from "os";
6
- const CLI = `npx tsx ${resolve(__dirname, "../index.ts")}`;
7
- describe("batch commands", () => {
8
- let tempDir;
9
- let projectFile;
10
- let mediaDir;
11
- beforeEach(() => {
12
- tempDir = mkdtempSync(join(tmpdir(), "vibe-batch-test-"));
13
- projectFile = join(tempDir, "test.vibe.json");
14
- mediaDir = join(tempDir, "media");
15
- mkdirSync(mediaDir);
16
- // Create project
17
- execSync(`${CLI} project create "Batch Test" -o "${projectFile}"`, {
18
- cwd: process.cwd(),
19
- encoding: "utf-8",
20
- });
21
- // Create dummy media files
22
- writeFileSync(join(mediaDir, "clip1.mp4"), "dummy video 1");
23
- writeFileSync(join(mediaDir, "clip2.mp4"), "dummy video 2");
24
- writeFileSync(join(mediaDir, "clip3.mp4"), "dummy video 3");
25
- writeFileSync(join(mediaDir, "audio.mp3"), "dummy audio");
26
- writeFileSync(join(mediaDir, "image.jpg"), "dummy image");
27
- });
28
- afterEach(() => {
29
- rmSync(tempDir, { recursive: true, force: true });
30
- });
31
- describe("batch import", () => {
32
- it("imports all media files from directory", () => {
33
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}"`, {
34
- cwd: process.cwd(),
35
- encoding: "utf-8",
36
- });
37
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
38
- expect(content.state.sources).toHaveLength(5);
39
- });
40
- it("filters files by extension", () => {
41
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" --filter ".mp4"`, { cwd: process.cwd(), encoding: "utf-8" });
42
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
43
- expect(content.state.sources).toHaveLength(3);
44
- expect(content.state.sources.every((s) => s.name.endsWith(".mp4"))).toBe(true);
45
- });
46
- it("imports recursively", () => {
47
- // Create subdirectory with media
48
- const subDir = join(mediaDir, "subdir");
49
- mkdirSync(subDir);
50
- writeFileSync(join(subDir, "nested.mp4"), "nested video");
51
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" -r`, {
52
- cwd: process.cwd(),
53
- encoding: "utf-8",
54
- });
55
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
56
- expect(content.state.sources).toHaveLength(6);
57
- });
58
- });
59
- describe("batch concat", () => {
60
- beforeEach(() => {
61
- // Import media first
62
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" --filter ".mp4"`, { cwd: process.cwd(), encoding: "utf-8" });
63
- // Set durations for sources
64
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
65
- content.state.sources.forEach((s, i) => {
66
- s.duration = 5 + i; // 5, 6, 7 seconds
67
- });
68
- writeFileSync(projectFile, JSON.stringify(content, null, 2), "utf-8");
69
- });
70
- it("concatenates all sources", () => {
71
- execSync(`${CLI} batch concat "${projectFile}" --all`, {
72
- cwd: process.cwd(),
73
- encoding: "utf-8",
74
- });
75
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
76
- expect(content.state.clips).toHaveLength(3);
77
- // Check sequential positioning
78
- const clips = content.state.clips;
79
- expect(clips[0].startTime).toBe(0);
80
- expect(clips[1].startTime).toBe(clips[0].duration);
81
- expect(clips[2].startTime).toBe(clips[0].duration + clips[1].duration);
82
- });
83
- it("concatenates with gap between clips", () => {
84
- execSync(`${CLI} batch concat "${projectFile}" --all --gap 2`, {
85
- cwd: process.cwd(),
86
- encoding: "utf-8",
87
- });
88
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
89
- const clips = content.state.clips;
90
- expect(clips[1].startTime).toBe(clips[0].duration + 2);
91
- });
92
- it("concatenates from specific start time", () => {
93
- execSync(`${CLI} batch concat "${projectFile}" --all --start 10`, {
94
- cwd: process.cwd(),
95
- encoding: "utf-8",
96
- });
97
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
98
- expect(content.state.clips[0].startTime).toBe(10);
99
- });
100
- });
101
- describe("batch apply-effect", () => {
102
- let clipIds;
103
- beforeEach(() => {
104
- // Import and concat
105
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" --filter ".mp4"`, { cwd: process.cwd(), encoding: "utf-8" });
106
- let content = JSON.parse(readFileSync(projectFile, "utf-8"));
107
- content.state.sources.forEach((s) => {
108
- s.duration = 5;
109
- });
110
- writeFileSync(projectFile, JSON.stringify(content, null, 2), "utf-8");
111
- execSync(`${CLI} batch concat "${projectFile}" --all`, {
112
- cwd: process.cwd(),
113
- encoding: "utf-8",
114
- });
115
- content = JSON.parse(readFileSync(projectFile, "utf-8"));
116
- clipIds = content.state.clips.map((c) => c.id);
117
- });
118
- it("applies effect to all clips", () => {
119
- execSync(`${CLI} batch apply-effect "${projectFile}" fadeIn --all`, {
120
- cwd: process.cwd(),
121
- encoding: "utf-8",
122
- });
123
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
124
- expect(content.state.clips[0].effects).toHaveLength(1);
125
- expect(content.state.clips[1].effects).toHaveLength(1);
126
- expect(content.state.clips[2].effects).toHaveLength(1);
127
- expect(content.state.clips[0].effects[0].type).toBe("fadeIn");
128
- });
129
- it("applies effect with custom duration", () => {
130
- execSync(`${CLI} batch apply-effect "${projectFile}" fadeOut --all -d 2`, { cwd: process.cwd(), encoding: "utf-8" });
131
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
132
- expect(content.state.clips[0].effects[0].duration).toBe(2);
133
- });
134
- it("applies effect to specific clips", () => {
135
- execSync(`${CLI} batch apply-effect "${projectFile}" blur ${clipIds[0]} ${clipIds[2]}`, { cwd: process.cwd(), encoding: "utf-8" });
136
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
137
- expect(content.state.clips[0].effects).toHaveLength(1);
138
- expect(content.state.clips[1].effects).toHaveLength(0);
139
- expect(content.state.clips[2].effects).toHaveLength(1);
140
- });
141
- });
142
- describe("batch remove-clips", () => {
143
- beforeEach(() => {
144
- // Import and concat
145
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" --filter ".mp4"`, { cwd: process.cwd(), encoding: "utf-8" });
146
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
147
- content.state.sources.forEach((s) => {
148
- s.duration = 5;
149
- });
150
- writeFileSync(projectFile, JSON.stringify(content, null, 2), "utf-8");
151
- execSync(`${CLI} batch concat "${projectFile}" --all`, {
152
- cwd: process.cwd(),
153
- encoding: "utf-8",
154
- });
155
- });
156
- it("removes all clips", () => {
157
- const before = JSON.parse(readFileSync(projectFile, "utf-8"));
158
- expect(before.state.clips).toHaveLength(3);
159
- execSync(`${CLI} batch remove-clips "${projectFile}" --all`, {
160
- cwd: process.cwd(),
161
- encoding: "utf-8",
162
- });
163
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
164
- expect(content.state.clips).toHaveLength(0);
165
- });
166
- it("removes specific clips", () => {
167
- const before = JSON.parse(readFileSync(projectFile, "utf-8"));
168
- const clipId = before.state.clips[0].id;
169
- execSync(`${CLI} batch remove-clips "${projectFile}" ${clipId}`, {
170
- cwd: process.cwd(),
171
- encoding: "utf-8",
172
- });
173
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
174
- expect(content.state.clips).toHaveLength(2);
175
- });
176
- });
177
- describe("batch info", () => {
178
- beforeEach(() => {
179
- // Import and concat
180
- execSync(`${CLI} batch import "${projectFile}" "${mediaDir}" --filter ".mp4"`, { cwd: process.cwd(), encoding: "utf-8" });
181
- const content = JSON.parse(readFileSync(projectFile, "utf-8"));
182
- content.state.sources.forEach((s) => {
183
- s.duration = 5;
184
- });
185
- writeFileSync(projectFile, JSON.stringify(content, null, 2), "utf-8");
186
- execSync(`${CLI} batch concat "${projectFile}" --all`, {
187
- cwd: process.cwd(),
188
- encoding: "utf-8",
189
- });
190
- });
191
- it("shows project statistics", () => {
192
- const output = execSync(`${CLI} batch info "${projectFile}"`, {
193
- cwd: process.cwd(),
194
- encoding: "utf-8",
195
- });
196
- expect(output).toContain("Sources:");
197
- expect(output).toContain("Clips:");
198
- expect(output).toContain("Timeline:");
199
- expect(output).toContain("3"); // 3 sources/clips
200
- });
201
- });
202
- });
203
- //# sourceMappingURL=batch.test.js.map