@kenkaiiii/gg-editor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +453 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +173 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/ass.d.ts +75 -0
  8. package/dist/core/ass.d.ts.map +1 -0
  9. package/dist/core/ass.js +128 -0
  10. package/dist/core/ass.js.map +1 -0
  11. package/dist/core/ass.test.d.ts +2 -0
  12. package/dist/core/ass.test.d.ts.map +1 -0
  13. package/dist/core/ass.test.js +112 -0
  14. package/dist/core/ass.test.js.map +1 -0
  15. package/dist/core/audio-cleanup.d.ts +16 -0
  16. package/dist/core/audio-cleanup.d.ts.map +1 -0
  17. package/dist/core/audio-cleanup.js +79 -0
  18. package/dist/core/audio-cleanup.js.map +1 -0
  19. package/dist/core/audio-cleanup.test.d.ts +2 -0
  20. package/dist/core/audio-cleanup.test.d.ts.map +1 -0
  21. package/dist/core/audio-cleanup.test.js +41 -0
  22. package/dist/core/audio-cleanup.test.js.map +1 -0
  23. package/dist/core/audio-mix.d.ts +89 -0
  24. package/dist/core/audio-mix.d.ts.map +1 -0
  25. package/dist/core/audio-mix.js +156 -0
  26. package/dist/core/audio-mix.js.map +1 -0
  27. package/dist/core/audio-mix.test.d.ts +2 -0
  28. package/dist/core/audio-mix.test.d.ts.map +1 -0
  29. package/dist/core/audio-mix.test.js +91 -0
  30. package/dist/core/audio-mix.test.js.map +1 -0
  31. package/dist/core/auth/anthropic.d.ts +4 -0
  32. package/dist/core/auth/anthropic.d.ts.map +1 -0
  33. package/dist/core/auth/anthropic.js +78 -0
  34. package/dist/core/auth/anthropic.js.map +1 -0
  35. package/dist/core/auth/index.d.ts +7 -0
  36. package/dist/core/auth/index.d.ts.map +1 -0
  37. package/dist/core/auth/index.js +6 -0
  38. package/dist/core/auth/index.js.map +1 -0
  39. package/dist/core/auth/login.d.ts +13 -0
  40. package/dist/core/auth/login.d.ts.map +1 -0
  41. package/dist/core/auth/login.js +188 -0
  42. package/dist/core/auth/login.js.map +1 -0
  43. package/dist/core/auth/openai.d.ts +4 -0
  44. package/dist/core/auth/openai.d.ts.map +1 -0
  45. package/dist/core/auth/openai.js +170 -0
  46. package/dist/core/auth/openai.js.map +1 -0
  47. package/dist/core/auth/pkce.d.ts +5 -0
  48. package/dist/core/auth/pkce.d.ts.map +1 -0
  49. package/dist/core/auth/pkce.js +17 -0
  50. package/dist/core/auth/pkce.js.map +1 -0
  51. package/dist/core/auth/storage.d.ts +29 -0
  52. package/dist/core/auth/storage.d.ts.map +1 -0
  53. package/dist/core/auth/storage.js +127 -0
  54. package/dist/core/auth/storage.js.map +1 -0
  55. package/dist/core/auth/types.d.ts +22 -0
  56. package/dist/core/auth/types.d.ts.map +1 -0
  57. package/dist/core/auth/types.js +12 -0
  58. package/dist/core/auth/types.js.map +1 -0
  59. package/dist/core/clustering.d.ts +52 -0
  60. package/dist/core/clustering.d.ts.map +1 -0
  61. package/dist/core/clustering.js +163 -0
  62. package/dist/core/clustering.js.map +1 -0
  63. package/dist/core/clustering.test.d.ts +2 -0
  64. package/dist/core/clustering.test.d.ts.map +1 -0
  65. package/dist/core/clustering.test.js +112 -0
  66. package/dist/core/clustering.test.js.map +1 -0
  67. package/dist/core/color-match.d.ts +19 -0
  68. package/dist/core/color-match.d.ts.map +1 -0
  69. package/dist/core/color-match.js +118 -0
  70. package/dist/core/color-match.js.map +1 -0
  71. package/dist/core/color-match.test.d.ts +2 -0
  72. package/dist/core/color-match.test.d.ts.map +1 -0
  73. package/dist/core/color-match.test.js +40 -0
  74. package/dist/core/color-match.test.js.map +1 -0
  75. package/dist/core/ducking.d.ts +37 -0
  76. package/dist/core/ducking.d.ts.map +1 -0
  77. package/dist/core/ducking.js +71 -0
  78. package/dist/core/ducking.js.map +1 -0
  79. package/dist/core/ducking.test.d.ts +2 -0
  80. package/dist/core/ducking.test.d.ts.map +1 -0
  81. package/dist/core/ducking.test.js +38 -0
  82. package/dist/core/ducking.test.js.map +1 -0
  83. package/dist/core/edl-roundtrip.test.d.ts +2 -0
  84. package/dist/core/edl-roundtrip.test.d.ts.map +1 -0
  85. package/dist/core/edl-roundtrip.test.js +171 -0
  86. package/dist/core/edl-roundtrip.test.js.map +1 -0
  87. package/dist/core/edl.d.ts +41 -0
  88. package/dist/core/edl.d.ts.map +1 -0
  89. package/dist/core/edl.js +56 -0
  90. package/dist/core/edl.js.map +1 -0
  91. package/dist/core/edl.test.d.ts +2 -0
  92. package/dist/core/edl.test.d.ts.map +1 -0
  93. package/dist/core/edl.test.js +62 -0
  94. package/dist/core/edl.test.js.map +1 -0
  95. package/dist/core/envelope-sync.d.ts +52 -0
  96. package/dist/core/envelope-sync.d.ts.map +1 -0
  97. package/dist/core/envelope-sync.js +169 -0
  98. package/dist/core/envelope-sync.js.map +1 -0
  99. package/dist/core/envelope-sync.test.d.ts +2 -0
  100. package/dist/core/envelope-sync.test.d.ts.map +1 -0
  101. package/dist/core/envelope-sync.test.js +70 -0
  102. package/dist/core/envelope-sync.test.js.map +1 -0
  103. package/dist/core/fcpxml-roundtrip.test.d.ts +2 -0
  104. package/dist/core/fcpxml-roundtrip.test.d.ts.map +1 -0
  105. package/dist/core/fcpxml-roundtrip.test.js +251 -0
  106. package/dist/core/fcpxml-roundtrip.test.js.map +1 -0
  107. package/dist/core/fcpxml.d.ts +172 -0
  108. package/dist/core/fcpxml.d.ts.map +1 -0
  109. package/dist/core/fcpxml.js +406 -0
  110. package/dist/core/fcpxml.js.map +1 -0
  111. package/dist/core/fcpxml.test.d.ts +2 -0
  112. package/dist/core/fcpxml.test.d.ts.map +1 -0
  113. package/dist/core/fcpxml.test.js +360 -0
  114. package/dist/core/fcpxml.test.js.map +1 -0
  115. package/dist/core/filler-words.d.ts +107 -0
  116. package/dist/core/filler-words.d.ts.map +1 -0
  117. package/dist/core/filler-words.js +221 -0
  118. package/dist/core/filler-words.js.map +1 -0
  119. package/dist/core/filler-words.test.d.ts +2 -0
  120. package/dist/core/filler-words.test.d.ts.map +1 -0
  121. package/dist/core/filler-words.test.js +177 -0
  122. package/dist/core/filler-words.test.js.map +1 -0
  123. package/dist/core/format.d.ts +36 -0
  124. package/dist/core/format.d.ts.map +1 -0
  125. package/dist/core/format.js +57 -0
  126. package/dist/core/format.js.map +1 -0
  127. package/dist/core/format.test.d.ts +2 -0
  128. package/dist/core/format.test.d.ts.map +1 -0
  129. package/dist/core/format.test.js +81 -0
  130. package/dist/core/format.test.js.map +1 -0
  131. package/dist/core/frames.d.ts +35 -0
  132. package/dist/core/frames.d.ts.map +1 -0
  133. package/dist/core/frames.js +64 -0
  134. package/dist/core/frames.js.map +1 -0
  135. package/dist/core/hook-analysis.d.ts +90 -0
  136. package/dist/core/hook-analysis.d.ts.map +1 -0
  137. package/dist/core/hook-analysis.js +222 -0
  138. package/dist/core/hook-analysis.js.map +1 -0
  139. package/dist/core/hook-analysis.test.d.ts +2 -0
  140. package/dist/core/hook-analysis.test.d.ts.map +1 -0
  141. package/dist/core/hook-analysis.test.js +130 -0
  142. package/dist/core/hook-analysis.test.js.map +1 -0
  143. package/dist/core/hosts/detect.d.ts +17 -0
  144. package/dist/core/hosts/detect.d.ts.map +1 -0
  145. package/dist/core/hosts/detect.js +64 -0
  146. package/dist/core/hosts/detect.js.map +1 -0
  147. package/dist/core/hosts/detect.test.d.ts +2 -0
  148. package/dist/core/hosts/detect.test.d.ts.map +1 -0
  149. package/dist/core/hosts/detect.test.js +17 -0
  150. package/dist/core/hosts/detect.test.js.map +1 -0
  151. package/dist/core/hosts/index.d.ts +13 -0
  152. package/dist/core/hosts/index.d.ts.map +1 -0
  153. package/dist/core/hosts/index.js +30 -0
  154. package/dist/core/hosts/index.js.map +1 -0
  155. package/dist/core/hosts/lazy.d.ts +53 -0
  156. package/dist/core/hosts/lazy.d.ts.map +1 -0
  157. package/dist/core/hosts/lazy.js +125 -0
  158. package/dist/core/hosts/lazy.js.map +1 -0
  159. package/dist/core/hosts/lazy.test.d.ts +2 -0
  160. package/dist/core/hosts/lazy.test.d.ts.map +1 -0
  161. package/dist/core/hosts/lazy.test.js +117 -0
  162. package/dist/core/hosts/lazy.test.js.map +1 -0
  163. package/dist/core/hosts/none/adapter.d.ts +74 -0
  164. package/dist/core/hosts/none/adapter.d.ts.map +1 -0
  165. package/dist/core/hosts/none/adapter.js +99 -0
  166. package/dist/core/hosts/none/adapter.js.map +1 -0
  167. package/dist/core/hosts/premiere/adapter.d.ts +87 -0
  168. package/dist/core/hosts/premiere/adapter.d.ts.map +1 -0
  169. package/dist/core/hosts/premiere/adapter.js +218 -0
  170. package/dist/core/hosts/premiere/adapter.js.map +1 -0
  171. package/dist/core/hosts/premiere/bridge-source.d.ts +26 -0
  172. package/dist/core/hosts/premiere/bridge-source.d.ts.map +1 -0
  173. package/dist/core/hosts/premiere/bridge-source.js +326 -0
  174. package/dist/core/hosts/premiere/bridge-source.js.map +1 -0
  175. package/dist/core/hosts/premiere/bridge-source.test.d.ts +2 -0
  176. package/dist/core/hosts/premiere/bridge-source.test.d.ts.map +1 -0
  177. package/dist/core/hosts/premiere/bridge-source.test.js +36 -0
  178. package/dist/core/hosts/premiere/bridge-source.test.js.map +1 -0
  179. package/dist/core/hosts/premiere/bridge.d.ts +38 -0
  180. package/dist/core/hosts/premiere/bridge.d.ts.map +1 -0
  181. package/dist/core/hosts/premiere/bridge.js +238 -0
  182. package/dist/core/hosts/premiere/bridge.js.map +1 -0
  183. package/dist/core/hosts/premiere/http-bridge.d.ts +47 -0
  184. package/dist/core/hosts/premiere/http-bridge.d.ts.map +1 -0
  185. package/dist/core/hosts/premiere/http-bridge.js +82 -0
  186. package/dist/core/hosts/premiere/http-bridge.js.map +1 -0
  187. package/dist/core/hosts/premiere/http-bridge.test.d.ts +2 -0
  188. package/dist/core/hosts/premiere/http-bridge.test.d.ts.map +1 -0
  189. package/dist/core/hosts/premiere/http-bridge.test.js +113 -0
  190. package/dist/core/hosts/premiere/http-bridge.test.js.map +1 -0
  191. package/dist/core/hosts/premiere/ws-bridge.d.ts +91 -0
  192. package/dist/core/hosts/premiere/ws-bridge.d.ts.map +1 -0
  193. package/dist/core/hosts/premiere/ws-bridge.js +303 -0
  194. package/dist/core/hosts/premiere/ws-bridge.js.map +1 -0
  195. package/dist/core/hosts/premiere/ws-bridge.test.d.ts +2 -0
  196. package/dist/core/hosts/premiere/ws-bridge.test.d.ts.map +1 -0
  197. package/dist/core/hosts/premiere/ws-bridge.test.js +146 -0
  198. package/dist/core/hosts/premiere/ws-bridge.test.js.map +1 -0
  199. package/dist/core/hosts/resolve/adapter.d.ts +99 -0
  200. package/dist/core/hosts/resolve/adapter.d.ts.map +1 -0
  201. package/dist/core/hosts/resolve/adapter.js +187 -0
  202. package/dist/core/hosts/resolve/adapter.js.map +1 -0
  203. package/dist/core/hosts/resolve/bridge-source.d.ts +17 -0
  204. package/dist/core/hosts/resolve/bridge-source.d.ts.map +1 -0
  205. package/dist/core/hosts/resolve/bridge-source.js +660 -0
  206. package/dist/core/hosts/resolve/bridge-source.js.map +1 -0
  207. package/dist/core/hosts/resolve/bridge.d.ts +51 -0
  208. package/dist/core/hosts/resolve/bridge.d.ts.map +1 -0
  209. package/dist/core/hosts/resolve/bridge.integration.test.d.ts +2 -0
  210. package/dist/core/hosts/resolve/bridge.integration.test.d.ts.map +1 -0
  211. package/dist/core/hosts/resolve/bridge.integration.test.js +472 -0
  212. package/dist/core/hosts/resolve/bridge.integration.test.js.map +1 -0
  213. package/dist/core/hosts/resolve/bridge.js +270 -0
  214. package/dist/core/hosts/resolve/bridge.js.map +1 -0
  215. package/dist/core/hosts/resolve/bridge.test.d.ts +2 -0
  216. package/dist/core/hosts/resolve/bridge.test.d.ts.map +1 -0
  217. package/dist/core/hosts/resolve/bridge.test.js +50 -0
  218. package/dist/core/hosts/resolve/bridge.test.js.map +1 -0
  219. package/dist/core/hosts/types.d.ts +167 -0
  220. package/dist/core/hosts/types.d.ts.map +1 -0
  221. package/dist/core/hosts/types.js +27 -0
  222. package/dist/core/hosts/types.js.map +1 -0
  223. package/dist/core/keyframes.d.ts +35 -0
  224. package/dist/core/keyframes.d.ts.map +1 -0
  225. package/dist/core/keyframes.js +90 -0
  226. package/dist/core/keyframes.js.map +1 -0
  227. package/dist/core/keyframes.test.d.ts +2 -0
  228. package/dist/core/keyframes.test.d.ts.map +1 -0
  229. package/dist/core/keyframes.test.js +73 -0
  230. package/dist/core/keyframes.test.js.map +1 -0
  231. package/dist/core/keyword-captions.d.ts +75 -0
  232. package/dist/core/keyword-captions.d.ts.map +1 -0
  233. package/dist/core/keyword-captions.js +285 -0
  234. package/dist/core/keyword-captions.js.map +1 -0
  235. package/dist/core/keyword-captions.test.d.ts +2 -0
  236. package/dist/core/keyword-captions.test.d.ts.map +1 -0
  237. package/dist/core/keyword-captions.test.js +90 -0
  238. package/dist/core/keyword-captions.test.js.map +1 -0
  239. package/dist/core/loudness.d.ts +52 -0
  240. package/dist/core/loudness.d.ts.map +1 -0
  241. package/dist/core/loudness.js +120 -0
  242. package/dist/core/loudness.js.map +1 -0
  243. package/dist/core/loudness.test.d.ts +2 -0
  244. package/dist/core/loudness.test.d.ts.map +1 -0
  245. package/dist/core/loudness.test.js +34 -0
  246. package/dist/core/loudness.test.js.map +1 -0
  247. package/dist/core/marker-colors.d.ts +39 -0
  248. package/dist/core/marker-colors.d.ts.map +1 -0
  249. package/dist/core/marker-colors.js +83 -0
  250. package/dist/core/marker-colors.js.map +1 -0
  251. package/dist/core/marker-colors.test.d.ts +2 -0
  252. package/dist/core/marker-colors.test.d.ts.map +1 -0
  253. package/dist/core/marker-colors.test.js +116 -0
  254. package/dist/core/marker-colors.test.js.map +1 -0
  255. package/dist/core/media/ffmpeg.d.ts +27 -0
  256. package/dist/core/media/ffmpeg.d.ts.map +1 -0
  257. package/dist/core/media/ffmpeg.js +53 -0
  258. package/dist/core/media/ffmpeg.js.map +1 -0
  259. package/dist/core/multicam.d.ts +40 -0
  260. package/dist/core/multicam.d.ts.map +1 -0
  261. package/dist/core/multicam.js +77 -0
  262. package/dist/core/multicam.js.map +1 -0
  263. package/dist/core/multicam.test.d.ts +2 -0
  264. package/dist/core/multicam.test.d.ts.map +1 -0
  265. package/dist/core/multicam.test.js +56 -0
  266. package/dist/core/multicam.test.js.map +1 -0
  267. package/dist/core/punch-in.d.ts +72 -0
  268. package/dist/core/punch-in.d.ts.map +1 -0
  269. package/dist/core/punch-in.js +133 -0
  270. package/dist/core/punch-in.js.map +1 -0
  271. package/dist/core/punch-in.test.d.ts +2 -0
  272. package/dist/core/punch-in.test.d.ts.map +1 -0
  273. package/dist/core/punch-in.test.js +118 -0
  274. package/dist/core/punch-in.test.js.map +1 -0
  275. package/dist/core/reformat.d.ts +26 -0
  276. package/dist/core/reformat.d.ts.map +1 -0
  277. package/dist/core/reformat.js +31 -0
  278. package/dist/core/reformat.js.map +1 -0
  279. package/dist/core/reformat.test.d.ts +2 -0
  280. package/dist/core/reformat.test.d.ts.map +1 -0
  281. package/dist/core/reformat.test.js +29 -0
  282. package/dist/core/reformat.test.js.map +1 -0
  283. package/dist/core/reorder.d.ts +42 -0
  284. package/dist/core/reorder.d.ts.map +1 -0
  285. package/dist/core/reorder.js +80 -0
  286. package/dist/core/reorder.js.map +1 -0
  287. package/dist/core/reorder.test.d.ts +2 -0
  288. package/dist/core/reorder.test.d.ts.map +1 -0
  289. package/dist/core/reorder.test.js +88 -0
  290. package/dist/core/reorder.test.js.map +1 -0
  291. package/dist/core/review.d.ts +38 -0
  292. package/dist/core/review.d.ts.map +1 -0
  293. package/dist/core/review.js +128 -0
  294. package/dist/core/review.js.map +1 -0
  295. package/dist/core/review.test.d.ts +2 -0
  296. package/dist/core/review.test.d.ts.map +1 -0
  297. package/dist/core/review.test.js +76 -0
  298. package/dist/core/review.test.js.map +1 -0
  299. package/dist/core/sessions.d.ts +40 -0
  300. package/dist/core/sessions.d.ts.map +1 -0
  301. package/dist/core/sessions.js +61 -0
  302. package/dist/core/sessions.js.map +1 -0
  303. package/dist/core/sfx-on-cuts.d.ts +60 -0
  304. package/dist/core/sfx-on-cuts.d.ts.map +1 -0
  305. package/dist/core/sfx-on-cuts.js +90 -0
  306. package/dist/core/sfx-on-cuts.js.map +1 -0
  307. package/dist/core/sfx-on-cuts.test.d.ts +2 -0
  308. package/dist/core/sfx-on-cuts.test.d.ts.map +1 -0
  309. package/dist/core/sfx-on-cuts.test.js +53 -0
  310. package/dist/core/sfx-on-cuts.test.js.map +1 -0
  311. package/dist/core/silence.d.ts +41 -0
  312. package/dist/core/silence.d.ts.map +1 -0
  313. package/dist/core/silence.js +104 -0
  314. package/dist/core/silence.js.map +1 -0
  315. package/dist/core/silence.test.d.ts +2 -0
  316. package/dist/core/silence.test.d.ts.map +1 -0
  317. package/dist/core/silence.test.js +143 -0
  318. package/dist/core/silence.test.js.map +1 -0
  319. package/dist/core/skills-loader.d.ts +34 -0
  320. package/dist/core/skills-loader.d.ts.map +1 -0
  321. package/dist/core/skills-loader.js +80 -0
  322. package/dist/core/skills-loader.js.map +1 -0
  323. package/dist/core/skills-loader.test.d.ts +2 -0
  324. package/dist/core/skills-loader.test.d.ts.map +1 -0
  325. package/dist/core/skills-loader.test.js +68 -0
  326. package/dist/core/skills-loader.test.js.map +1 -0
  327. package/dist/core/skin-grade.d.ts +62 -0
  328. package/dist/core/skin-grade.d.ts.map +1 -0
  329. package/dist/core/skin-grade.js +270 -0
  330. package/dist/core/skin-grade.js.map +1 -0
  331. package/dist/core/skin-grade.test.d.ts +2 -0
  332. package/dist/core/skin-grade.test.d.ts.map +1 -0
  333. package/dist/core/skin-grade.test.js +182 -0
  334. package/dist/core/skin-grade.test.js.map +1 -0
  335. package/dist/core/speaker-changes.d.ts +30 -0
  336. package/dist/core/speaker-changes.d.ts.map +1 -0
  337. package/dist/core/speaker-changes.js +19 -0
  338. package/dist/core/speaker-changes.js.map +1 -0
  339. package/dist/core/speaker-changes.test.d.ts +2 -0
  340. package/dist/core/speaker-changes.test.d.ts.map +1 -0
  341. package/dist/core/speaker-changes.test.js +46 -0
  342. package/dist/core/speaker-changes.test.js.map +1 -0
  343. package/dist/core/speed-ramp.d.ts +60 -0
  344. package/dist/core/speed-ramp.d.ts.map +1 -0
  345. package/dist/core/speed-ramp.js +113 -0
  346. package/dist/core/speed-ramp.js.map +1 -0
  347. package/dist/core/speed-ramp.test.d.ts +2 -0
  348. package/dist/core/speed-ramp.test.d.ts.map +1 -0
  349. package/dist/core/speed-ramp.test.js +74 -0
  350. package/dist/core/speed-ramp.test.js.map +1 -0
  351. package/dist/core/srt.d.ts +56 -0
  352. package/dist/core/srt.d.ts.map +1 -0
  353. package/dist/core/srt.js +90 -0
  354. package/dist/core/srt.js.map +1 -0
  355. package/dist/core/srt.test.d.ts +2 -0
  356. package/dist/core/srt.test.d.ts.map +1 -0
  357. package/dist/core/srt.test.js +107 -0
  358. package/dist/core/srt.test.js.map +1 -0
  359. package/dist/core/stabilize.d.ts +15 -0
  360. package/dist/core/stabilize.d.ts.map +1 -0
  361. package/dist/core/stabilize.js +69 -0
  362. package/dist/core/stabilize.js.map +1 -0
  363. package/dist/core/styles-loader.d.ts +33 -0
  364. package/dist/core/styles-loader.d.ts.map +1 -0
  365. package/dist/core/styles-loader.js +67 -0
  366. package/dist/core/styles-loader.js.map +1 -0
  367. package/dist/core/styles-loader.test.d.ts +2 -0
  368. package/dist/core/styles-loader.test.d.ts.map +1 -0
  369. package/dist/core/styles-loader.test.js +72 -0
  370. package/dist/core/styles-loader.test.js.map +1 -0
  371. package/dist/core/text-overlay.d.ts +76 -0
  372. package/dist/core/text-overlay.d.ts.map +1 -0
  373. package/dist/core/text-overlay.js +233 -0
  374. package/dist/core/text-overlay.js.map +1 -0
  375. package/dist/core/text-overlay.test.d.ts +2 -0
  376. package/dist/core/text-overlay.test.d.ts.map +1 -0
  377. package/dist/core/text-overlay.test.js +103 -0
  378. package/dist/core/text-overlay.test.js.map +1 -0
  379. package/dist/core/vision.d.ts +53 -0
  380. package/dist/core/vision.d.ts.map +1 -0
  381. package/dist/core/vision.js +150 -0
  382. package/dist/core/vision.js.map +1 -0
  383. package/dist/core/vision.test.d.ts +2 -0
  384. package/dist/core/vision.test.d.ts.map +1 -0
  385. package/dist/core/vision.test.js +76 -0
  386. package/dist/core/vision.test.js.map +1 -0
  387. package/dist/core/whisper.d.ts +188 -0
  388. package/dist/core/whisper.d.ts.map +1 -0
  389. package/dist/core/whisper.js +380 -0
  390. package/dist/core/whisper.js.map +1 -0
  391. package/dist/core/whisper.test.d.ts +2 -0
  392. package/dist/core/whisper.test.d.ts.map +1 -0
  393. package/dist/core/whisper.test.js +262 -0
  394. package/dist/core/whisper.test.js.map +1 -0
  395. package/dist/director/delegate-tool.d.ts +22 -0
  396. package/dist/director/delegate-tool.d.ts.map +1 -0
  397. package/dist/director/delegate-tool.js +62 -0
  398. package/dist/director/delegate-tool.js.map +1 -0
  399. package/dist/director/delegate-tool.test.d.ts +2 -0
  400. package/dist/director/delegate-tool.test.d.ts.map +1 -0
  401. package/dist/director/delegate-tool.test.js +38 -0
  402. package/dist/director/delegate-tool.test.js.map +1 -0
  403. package/dist/director/director-prompt.d.ts +7 -0
  404. package/dist/director/director-prompt.d.ts.map +1 -0
  405. package/dist/director/director-prompt.js +52 -0
  406. package/dist/director/director-prompt.js.map +1 -0
  407. package/dist/director/director.d.ts +16 -0
  408. package/dist/director/director.d.ts.map +1 -0
  409. package/dist/director/director.js +28 -0
  410. package/dist/director/director.js.map +1 -0
  411. package/dist/director/executor.d.ts +19 -0
  412. package/dist/director/executor.d.ts.map +1 -0
  413. package/dist/director/executor.js +93 -0
  414. package/dist/director/executor.js.map +1 -0
  415. package/dist/director/index.d.ts +6 -0
  416. package/dist/director/index.d.ts.map +1 -0
  417. package/dist/director/index.js +5 -0
  418. package/dist/director/index.js.map +1 -0
  419. package/dist/director/types.d.ts +38 -0
  420. package/dist/director/types.d.ts.map +1 -0
  421. package/dist/director/types.js +2 -0
  422. package/dist/director/types.js.map +1 -0
  423. package/dist/index.d.ts +14 -0
  424. package/dist/index.d.ts.map +1 -0
  425. package/dist/index.js +12 -0
  426. package/dist/index.js.map +1 -0
  427. package/dist/skills.d.ts +18 -0
  428. package/dist/skills.d.ts.map +1 -0
  429. package/dist/skills.js +674 -0
  430. package/dist/skills.js.map +1 -0
  431. package/dist/system-prompt.d.ts +35 -0
  432. package/dist/system-prompt.d.ts.map +1 -0
  433. package/dist/system-prompt.js +478 -0
  434. package/dist/system-prompt.js.map +1 -0
  435. package/dist/system-prompt.test.d.ts +2 -0
  436. package/dist/system-prompt.test.d.ts.map +1 -0
  437. package/dist/system-prompt.test.js +87 -0
  438. package/dist/system-prompt.test.js.map +1 -0
  439. package/dist/tools/add-fades.d.ts +13 -0
  440. package/dist/tools/add-fades.d.ts.map +1 -0
  441. package/dist/tools/add-fades.js +88 -0
  442. package/dist/tools/add-fades.js.map +1 -0
  443. package/dist/tools/add-marker.d.ts +31 -0
  444. package/dist/tools/add-marker.d.ts.map +1 -0
  445. package/dist/tools/add-marker.js +56 -0
  446. package/dist/tools/add-marker.js.map +1 -0
  447. package/dist/tools/add-sfx-at-cuts.d.ts +24 -0
  448. package/dist/tools/add-sfx-at-cuts.d.ts.map +1 -0
  449. package/dist/tools/add-sfx-at-cuts.js +120 -0
  450. package/dist/tools/add-sfx-at-cuts.js.map +1 -0
  451. package/dist/tools/add-track.d.ts +13 -0
  452. package/dist/tools/add-track.d.ts.map +1 -0
  453. package/dist/tools/add-track.js +26 -0
  454. package/dist/tools/add-track.js.map +1 -0
  455. package/dist/tools/analyze-hook.d.ts +28 -0
  456. package/dist/tools/analyze-hook.d.ts.map +1 -0
  457. package/dist/tools/analyze-hook.js +126 -0
  458. package/dist/tools/analyze-hook.js.map +1 -0
  459. package/dist/tools/append-clip.d.ts +10 -0
  460. package/dist/tools/append-clip.d.ts.map +1 -0
  461. package/dist/tools/append-clip.js +27 -0
  462. package/dist/tools/append-clip.js.map +1 -0
  463. package/dist/tools/apply-lut.d.ts +11 -0
  464. package/dist/tools/apply-lut.d.ts.map +1 -0
  465. package/dist/tools/apply-lut.js +33 -0
  466. package/dist/tools/apply-lut.js.map +1 -0
  467. package/dist/tools/burn-subtitles.d.ts +28 -0
  468. package/dist/tools/burn-subtitles.d.ts.map +1 -0
  469. package/dist/tools/burn-subtitles.js +87 -0
  470. package/dist/tools/burn-subtitles.js.map +1 -0
  471. package/dist/tools/clean-audio.d.ts +18 -0
  472. package/dist/tools/clean-audio.d.ts.map +1 -0
  473. package/dist/tools/clean-audio.js +54 -0
  474. package/dist/tools/clean-audio.js.map +1 -0
  475. package/dist/tools/clone-timeline.d.ts +9 -0
  476. package/dist/tools/clone-timeline.d.ts.map +1 -0
  477. package/dist/tools/clone-timeline.js +28 -0
  478. package/dist/tools/clone-timeline.js.map +1 -0
  479. package/dist/tools/cluster-takes.d.ts +11 -0
  480. package/dist/tools/cluster-takes.d.ts.map +1 -0
  481. package/dist/tools/cluster-takes.js +71 -0
  482. package/dist/tools/cluster-takes.js.map +1 -0
  483. package/dist/tools/color-match.d.ts +16 -0
  484. package/dist/tools/color-match.d.ts.map +1 -0
  485. package/dist/tools/color-match.js +55 -0
  486. package/dist/tools/color-match.js.map +1 -0
  487. package/dist/tools/compose-layered.d.ts +47 -0
  488. package/dist/tools/compose-layered.d.ts.map +1 -0
  489. package/dist/tools/compose-layered.js +103 -0
  490. package/dist/tools/compose-layered.js.map +1 -0
  491. package/dist/tools/compose-thumbnail.d.ts +35 -0
  492. package/dist/tools/compose-thumbnail.d.ts.map +1 -0
  493. package/dist/tools/compose-thumbnail.js +130 -0
  494. package/dist/tools/compose-thumbnail.js.map +1 -0
  495. package/dist/tools/concat-videos.d.ts +18 -0
  496. package/dist/tools/concat-videos.d.ts.map +1 -0
  497. package/dist/tools/concat-videos.js +79 -0
  498. package/dist/tools/concat-videos.js.map +1 -0
  499. package/dist/tools/copy-grade.d.ts +10 -0
  500. package/dist/tools/copy-grade.d.ts.map +1 -0
  501. package/dist/tools/copy-grade.js +29 -0
  502. package/dist/tools/copy-grade.js.map +1 -0
  503. package/dist/tools/create-timeline.d.ts +12 -0
  504. package/dist/tools/create-timeline.d.ts.map +1 -0
  505. package/dist/tools/create-timeline.js +35 -0
  506. package/dist/tools/create-timeline.js.map +1 -0
  507. package/dist/tools/crossfade-videos.d.ts +49 -0
  508. package/dist/tools/crossfade-videos.d.ts.map +1 -0
  509. package/dist/tools/crossfade-videos.js +121 -0
  510. package/dist/tools/crossfade-videos.js.map +1 -0
  511. package/dist/tools/cut-at.d.ts +10 -0
  512. package/dist/tools/cut-at.d.ts.map +1 -0
  513. package/dist/tools/cut-at.js +24 -0
  514. package/dist/tools/cut-at.js.map +1 -0
  515. package/dist/tools/cut-filler-words.d.ts +27 -0
  516. package/dist/tools/cut-filler-words.d.ts.map +1 -0
  517. package/dist/tools/cut-filler-words.js +165 -0
  518. package/dist/tools/cut-filler-words.js.map +1 -0
  519. package/dist/tools/detect-silence.d.ts +13 -0
  520. package/dist/tools/detect-silence.d.ts.map +1 -0
  521. package/dist/tools/detect-silence.js +98 -0
  522. package/dist/tools/detect-silence.js.map +1 -0
  523. package/dist/tools/detect-speaker-changes.d.ts +9 -0
  524. package/dist/tools/detect-speaker-changes.d.ts.map +1 -0
  525. package/dist/tools/detect-speaker-changes.js +42 -0
  526. package/dist/tools/detect-speaker-changes.js.map +1 -0
  527. package/dist/tools/dry-run.d.ts +23 -0
  528. package/dist/tools/dry-run.d.ts.map +1 -0
  529. package/dist/tools/dry-run.js +66 -0
  530. package/dist/tools/dry-run.js.map +1 -0
  531. package/dist/tools/dry-run.test.d.ts +2 -0
  532. package/dist/tools/dry-run.test.d.ts.map +1 -0
  533. package/dist/tools/dry-run.test.js +66 -0
  534. package/dist/tools/dry-run.test.js.map +1 -0
  535. package/dist/tools/duck-audio.d.ts +16 -0
  536. package/dist/tools/duck-audio.d.ts.map +1 -0
  537. package/dist/tools/duck-audio.js +73 -0
  538. package/dist/tools/duck-audio.js.map +1 -0
  539. package/dist/tools/extract-audio.d.ts +10 -0
  540. package/dist/tools/extract-audio.d.ts.map +1 -0
  541. package/dist/tools/extract-audio.js +30 -0
  542. package/dist/tools/extract-audio.js.map +1 -0
  543. package/dist/tools/extract-frame.d.ts +12 -0
  544. package/dist/tools/extract-frame.d.ts.map +1 -0
  545. package/dist/tools/extract-frame.js +63 -0
  546. package/dist/tools/extract-frame.js.map +1 -0
  547. package/dist/tools/generate-gif.d.ts +13 -0
  548. package/dist/tools/generate-gif.d.ts.map +1 -0
  549. package/dist/tools/generate-gif.js +94 -0
  550. package/dist/tools/generate-gif.js.map +1 -0
  551. package/dist/tools/get-markers.d.ts +13 -0
  552. package/dist/tools/get-markers.d.ts.map +1 -0
  553. package/dist/tools/get-markers.js +71 -0
  554. package/dist/tools/get-markers.js.map +1 -0
  555. package/dist/tools/get-timeline.d.ts +9 -0
  556. package/dist/tools/get-timeline.d.ts.map +1 -0
  557. package/dist/tools/get-timeline.js +43 -0
  558. package/dist/tools/get-timeline.js.map +1 -0
  559. package/dist/tools/grade-skin-tones.d.ts +31 -0
  560. package/dist/tools/grade-skin-tones.d.ts.map +1 -0
  561. package/dist/tools/grade-skin-tones.js +92 -0
  562. package/dist/tools/grade-skin-tones.js.map +1 -0
  563. package/dist/tools/host-info.d.ts +7 -0
  564. package/dist/tools/host-info.d.ts.map +1 -0
  565. package/dist/tools/host-info.js +33 -0
  566. package/dist/tools/host-info.js.map +1 -0
  567. package/dist/tools/host-tools.test.d.ts +2 -0
  568. package/dist/tools/host-tools.test.d.ts.map +1 -0
  569. package/dist/tools/host-tools.test.js +83 -0
  570. package/dist/tools/host-tools.test.js.map +1 -0
  571. package/dist/tools/import-edl.d.ts +9 -0
  572. package/dist/tools/import-edl.d.ts.map +1 -0
  573. package/dist/tools/import-edl.js +25 -0
  574. package/dist/tools/import-edl.js.map +1 -0
  575. package/dist/tools/import-subtitles.d.ts +9 -0
  576. package/dist/tools/import-subtitles.d.ts.map +1 -0
  577. package/dist/tools/import-subtitles.js +31 -0
  578. package/dist/tools/import-subtitles.js.map +1 -0
  579. package/dist/tools/import-to-media-pool.d.ts +10 -0
  580. package/dist/tools/import-to-media-pool.d.ts.map +1 -0
  581. package/dist/tools/import-to-media-pool.js +27 -0
  582. package/dist/tools/import-to-media-pool.js.map +1 -0
  583. package/dist/tools/index.d.ts +94 -0
  584. package/dist/tools/index.d.ts.map +1 -0
  585. package/dist/tools/index.js +242 -0
  586. package/dist/tools/index.js.map +1 -0
  587. package/dist/tools/index.test.d.ts +2 -0
  588. package/dist/tools/index.test.d.ts.map +1 -0
  589. package/dist/tools/index.test.js +128 -0
  590. package/dist/tools/index.test.js.map +1 -0
  591. package/dist/tools/insert-broll.d.ts +13 -0
  592. package/dist/tools/insert-broll.d.ts.map +1 -0
  593. package/dist/tools/insert-broll.js +56 -0
  594. package/dist/tools/insert-broll.js.map +1 -0
  595. package/dist/tools/ken-burns.d.ts +26 -0
  596. package/dist/tools/ken-burns.d.ts.map +1 -0
  597. package/dist/tools/ken-burns.js +125 -0
  598. package/dist/tools/ken-burns.js.map +1 -0
  599. package/dist/tools/list-render-presets.d.ts +7 -0
  600. package/dist/tools/list-render-presets.d.ts.map +1 -0
  601. package/dist/tools/list-render-presets.js +30 -0
  602. package/dist/tools/list-render-presets.js.map +1 -0
  603. package/dist/tools/match-clip-color.d.ts +29 -0
  604. package/dist/tools/match-clip-color.d.ts.map +1 -0
  605. package/dist/tools/match-clip-color.js +99 -0
  606. package/dist/tools/match-clip-color.js.map +1 -0
  607. package/dist/tools/measure-loudness.d.ts +8 -0
  608. package/dist/tools/measure-loudness.d.ts.map +1 -0
  609. package/dist/tools/measure-loudness.js +40 -0
  610. package/dist/tools/measure-loudness.js.map +1 -0
  611. package/dist/tools/mix-audio.d.ts +46 -0
  612. package/dist/tools/mix-audio.d.ts.map +1 -0
  613. package/dist/tools/mix-audio.js +101 -0
  614. package/dist/tools/mix-audio.js.map +1 -0
  615. package/dist/tools/multicam-sync.d.ts +14 -0
  616. package/dist/tools/multicam-sync.d.ts.map +1 -0
  617. package/dist/tools/multicam-sync.js +75 -0
  618. package/dist/tools/multicam-sync.js.map +1 -0
  619. package/dist/tools/new-tools.test.d.ts +2 -0
  620. package/dist/tools/new-tools.test.d.ts.map +1 -0
  621. package/dist/tools/new-tools.test.js +511 -0
  622. package/dist/tools/new-tools.test.js.map +1 -0
  623. package/dist/tools/normalize-loudness.d.ts +21 -0
  624. package/dist/tools/normalize-loudness.d.ts.map +1 -0
  625. package/dist/tools/normalize-loudness.js +94 -0
  626. package/dist/tools/normalize-loudness.js.map +1 -0
  627. package/dist/tools/open-page.d.ts +17 -0
  628. package/dist/tools/open-page.d.ts.map +1 -0
  629. package/dist/tools/open-page.js +27 -0
  630. package/dist/tools/open-page.js.map +1 -0
  631. package/dist/tools/overlay-watermark.d.ts +28 -0
  632. package/dist/tools/overlay-watermark.d.ts.map +1 -0
  633. package/dist/tools/overlay-watermark.js +98 -0
  634. package/dist/tools/overlay-watermark.js.map +1 -0
  635. package/dist/tools/pick-best-takes.d.ts +20 -0
  636. package/dist/tools/pick-best-takes.d.ts.map +1 -0
  637. package/dist/tools/pick-best-takes.js +147 -0
  638. package/dist/tools/pick-best-takes.js.map +1 -0
  639. package/dist/tools/post-tools.test.d.ts +2 -0
  640. package/dist/tools/post-tools.test.d.ts.map +1 -0
  641. package/dist/tools/post-tools.test.js +83 -0
  642. package/dist/tools/post-tools.test.js.map +1 -0
  643. package/dist/tools/pre-render-check.d.ts +23 -0
  644. package/dist/tools/pre-render-check.d.ts.map +1 -0
  645. package/dist/tools/pre-render-check.js +134 -0
  646. package/dist/tools/pre-render-check.js.map +1 -0
  647. package/dist/tools/probe-media.d.ts +8 -0
  648. package/dist/tools/probe-media.d.ts.map +1 -0
  649. package/dist/tools/probe-media.js +32 -0
  650. package/dist/tools/probe-media.js.map +1 -0
  651. package/dist/tools/punch-in.d.ts +30 -0
  652. package/dist/tools/punch-in.d.ts.map +1 -0
  653. package/dist/tools/punch-in.js +130 -0
  654. package/dist/tools/punch-in.js.map +1 -0
  655. package/dist/tools/read-skill.d.ts +9 -0
  656. package/dist/tools/read-skill.d.ts.map +1 -0
  657. package/dist/tools/read-skill.js +24 -0
  658. package/dist/tools/read-skill.js.map +1 -0
  659. package/dist/tools/read-transcript.d.ts +14 -0
  660. package/dist/tools/read-transcript.d.ts.map +1 -0
  661. package/dist/tools/read-transcript.js +85 -0
  662. package/dist/tools/read-transcript.js.map +1 -0
  663. package/dist/tools/read-transcript.test.d.ts +2 -0
  664. package/dist/tools/read-transcript.test.d.ts.map +1 -0
  665. package/dist/tools/read-transcript.test.js +136 -0
  666. package/dist/tools/read-transcript.test.js.map +1 -0
  667. package/dist/tools/reformat-timeline.d.ts +25 -0
  668. package/dist/tools/reformat-timeline.d.ts.map +1 -0
  669. package/dist/tools/reformat-timeline.js +60 -0
  670. package/dist/tools/reformat-timeline.js.map +1 -0
  671. package/dist/tools/render.d.ts +10 -0
  672. package/dist/tools/render.d.ts.map +1 -0
  673. package/dist/tools/render.js +26 -0
  674. package/dist/tools/render.js.map +1 -0
  675. package/dist/tools/reorder-timeline.d.ts +12 -0
  676. package/dist/tools/reorder-timeline.d.ts.map +1 -0
  677. package/dist/tools/reorder-timeline.js +65 -0
  678. package/dist/tools/reorder-timeline.js.map +1 -0
  679. package/dist/tools/replace-clip.d.ts +10 -0
  680. package/dist/tools/replace-clip.d.ts.map +1 -0
  681. package/dist/tools/replace-clip.js +28 -0
  682. package/dist/tools/replace-clip.js.map +1 -0
  683. package/dist/tools/review-edit.d.ts +23 -0
  684. package/dist/tools/review-edit.d.ts.map +1 -0
  685. package/dist/tools/review-edit.js +47 -0
  686. package/dist/tools/review-edit.js.map +1 -0
  687. package/dist/tools/ripple-delete.d.ts +11 -0
  688. package/dist/tools/ripple-delete.d.ts.map +1 -0
  689. package/dist/tools/ripple-delete.js +27 -0
  690. package/dist/tools/ripple-delete.js.map +1 -0
  691. package/dist/tools/save-project.d.ts +7 -0
  692. package/dist/tools/save-project.d.ts.map +1 -0
  693. package/dist/tools/save-project.js +22 -0
  694. package/dist/tools/save-project.js.map +1 -0
  695. package/dist/tools/score-shot.d.ts +18 -0
  696. package/dist/tools/score-shot.d.ts.map +1 -0
  697. package/dist/tools/score-shot.js +127 -0
  698. package/dist/tools/score-shot.js.map +1 -0
  699. package/dist/tools/set-clip-speed.d.ts +10 -0
  700. package/dist/tools/set-clip-speed.d.ts.map +1 -0
  701. package/dist/tools/set-clip-speed.js +28 -0
  702. package/dist/tools/set-clip-speed.js.map +1 -0
  703. package/dist/tools/set-clip-volume.d.ts +10 -0
  704. package/dist/tools/set-clip-volume.d.ts.map +1 -0
  705. package/dist/tools/set-clip-volume.js +33 -0
  706. package/dist/tools/set-clip-volume.js.map +1 -0
  707. package/dist/tools/set-primary-correction.d.ts +14 -0
  708. package/dist/tools/set-primary-correction.d.ts.map +1 -0
  709. package/dist/tools/set-primary-correction.js +45 -0
  710. package/dist/tools/set-primary-correction.js.map +1 -0
  711. package/dist/tools/smart-reframe.d.ts +22 -0
  712. package/dist/tools/smart-reframe.d.ts.map +1 -0
  713. package/dist/tools/smart-reframe.js +39 -0
  714. package/dist/tools/smart-reframe.js.map +1 -0
  715. package/dist/tools/speed-ramp.d.ts +14 -0
  716. package/dist/tools/speed-ramp.d.ts.map +1 -0
  717. package/dist/tools/speed-ramp.js +71 -0
  718. package/dist/tools/speed-ramp.js.map +1 -0
  719. package/dist/tools/stabilize-video.d.ts +12 -0
  720. package/dist/tools/stabilize-video.d.ts.map +1 -0
  721. package/dist/tools/stabilize-video.js +63 -0
  722. package/dist/tools/stabilize-video.js.map +1 -0
  723. package/dist/tools/transcribe.d.ts +29 -0
  724. package/dist/tools/transcribe.d.ts.map +1 -0
  725. package/dist/tools/transcribe.js +116 -0
  726. package/dist/tools/transcribe.js.map +1 -0
  727. package/dist/tools/transition-videos.d.ts +29 -0
  728. package/dist/tools/transition-videos.d.ts.map +1 -0
  729. package/dist/tools/transition-videos.js +129 -0
  730. package/dist/tools/transition-videos.js.map +1 -0
  731. package/dist/tools/write-ass.d.ts +34 -0
  732. package/dist/tools/write-ass.d.ts.map +1 -0
  733. package/dist/tools/write-ass.js +101 -0
  734. package/dist/tools/write-ass.js.map +1 -0
  735. package/dist/tools/write-edl.d.ts +24 -0
  736. package/dist/tools/write-edl.d.ts.map +1 -0
  737. package/dist/tools/write-edl.js +59 -0
  738. package/dist/tools/write-edl.js.map +1 -0
  739. package/dist/tools/write-fcpxml.d.ts +20 -0
  740. package/dist/tools/write-fcpxml.d.ts.map +1 -0
  741. package/dist/tools/write-fcpxml.js +52 -0
  742. package/dist/tools/write-fcpxml.js.map +1 -0
  743. package/dist/tools/write-keyword-captions.d.ts +36 -0
  744. package/dist/tools/write-keyword-captions.d.ts.map +1 -0
  745. package/dist/tools/write-keyword-captions.js +183 -0
  746. package/dist/tools/write-keyword-captions.js.map +1 -0
  747. package/dist/tools/write-lower-third.d.ts +34 -0
  748. package/dist/tools/write-lower-third.d.ts.map +1 -0
  749. package/dist/tools/write-lower-third.js +52 -0
  750. package/dist/tools/write-lower-third.js.map +1 -0
  751. package/dist/tools/write-srt.d.ts +20 -0
  752. package/dist/tools/write-srt.d.ts.map +1 -0
  753. package/dist/tools/write-srt.js +72 -0
  754. package/dist/tools/write-srt.js.map +1 -0
  755. package/dist/tools/write-title-card.d.ts +25 -0
  756. package/dist/tools/write-title-card.d.ts.map +1 -0
  757. package/dist/tools/write-title-card.js +57 -0
  758. package/dist/tools/write-title-card.js.map +1 -0
  759. package/dist/types.d.ts +83 -0
  760. package/dist/types.d.ts.map +1 -0
  761. package/dist/types.js +3 -0
  762. package/dist/types.js.map +1 -0
  763. package/dist/ui/App.d.ts +44 -0
  764. package/dist/ui/App.d.ts.map +1 -0
  765. package/dist/ui/App.js +454 -0
  766. package/dist/ui/App.js.map +1 -0
  767. package/dist/ui/components/Banner.d.ts +13 -0
  768. package/dist/ui/components/Banner.d.ts.map +1 -0
  769. package/dist/ui/components/Banner.js +59 -0
  770. package/dist/ui/components/Banner.js.map +1 -0
  771. package/dist/ui/components/Footer.d.ts +19 -0
  772. package/dist/ui/components/Footer.d.ts.map +1 -0
  773. package/dist/ui/components/Footer.js +20 -0
  774. package/dist/ui/components/Footer.js.map +1 -0
  775. package/dist/ui/components/Header.d.ts +16 -0
  776. package/dist/ui/components/Header.d.ts.map +1 -0
  777. package/dist/ui/components/Header.js +12 -0
  778. package/dist/ui/components/Header.js.map +1 -0
  779. package/dist/ui/components/InputBox.d.ts +21 -0
  780. package/dist/ui/components/InputBox.d.ts.map +1 -0
  781. package/dist/ui/components/InputBox.js +81 -0
  782. package/dist/ui/components/InputBox.js.map +1 -0
  783. package/dist/ui/components/Message.d.ts +14 -0
  784. package/dist/ui/components/Message.d.ts.map +1 -0
  785. package/dist/ui/components/Message.js +24 -0
  786. package/dist/ui/components/Message.js.map +1 -0
  787. package/dist/ui/components/SlashMenu.d.ts +19 -0
  788. package/dist/ui/components/SlashMenu.d.ts.map +1 -0
  789. package/dist/ui/components/SlashMenu.js +33 -0
  790. package/dist/ui/components/SlashMenu.js.map +1 -0
  791. package/dist/ui/components/SlashMenu.test.d.ts +2 -0
  792. package/dist/ui/components/SlashMenu.test.d.ts.map +1 -0
  793. package/dist/ui/components/SlashMenu.test.js +23 -0
  794. package/dist/ui/components/SlashMenu.test.js.map +1 -0
  795. package/dist/ui/components/Spinner.d.ts +6 -0
  796. package/dist/ui/components/Spinner.d.ts.map +1 -0
  797. package/dist/ui/components/Spinner.js +16 -0
  798. package/dist/ui/components/Spinner.js.map +1 -0
  799. package/dist/ui/components/ToolCallLine.d.ts +16 -0
  800. package/dist/ui/components/ToolCallLine.d.ts.map +1 -0
  801. package/dist/ui/components/ToolCallLine.js +35 -0
  802. package/dist/ui/components/ToolCallLine.js.map +1 -0
  803. package/dist/ui/render.d.ts +9 -0
  804. package/dist/ui/render.d.ts.map +1 -0
  805. package/dist/ui/render.js +56 -0
  806. package/dist/ui/render.js.map +1 -0
  807. package/dist/ui/spinner-frames.d.ts +3 -0
  808. package/dist/ui/spinner-frames.d.ts.map +1 -0
  809. package/dist/ui/spinner-frames.js +16 -0
  810. package/dist/ui/spinner-frames.js.map +1 -0
  811. package/dist/ui/theme.d.ts +27 -0
  812. package/dist/ui/theme.d.ts.map +1 -0
  813. package/dist/ui/theme.js +26 -0
  814. package/dist/ui/theme.js.map +1 -0
  815. package/package.json +50 -0
@@ -0,0 +1,35 @@
1
+ import type { VideoHost } from "./core/hosts/types.js";
2
+ import { type SkillSource } from "./core/skills-loader.js";
3
+ import { type StyleSource } from "./core/styles-loader.js";
4
+ export interface StaticPromptOptions {
5
+ skills?: SkillSource[];
6
+ styles?: StyleSource[];
7
+ }
8
+ /**
9
+ * Build ONLY the host-status block. ~150 bytes. Cheap (one
10
+ * `host.capabilities()` call). Call this whenever the live host changes.
11
+ */
12
+ export declare function buildEditorHostBlock(host: VideoHost): Promise<string>;
13
+ /**
14
+ * Build ONLY the host-independent body. Cacheable for the session — the
15
+ * inputs (cwd, skills, styles) don't change while ggeditor is running.
16
+ *
17
+ * Contains a single `{HOST_BLOCK}` token that the caller replaces with the
18
+ * output of `buildEditorHostBlock(host)`.
19
+ */
20
+ export declare function buildEditorStaticBody(cwd: string, options?: StaticPromptOptions): string;
21
+ /**
22
+ * Backward-compatible one-shot builder. Useful for the first render at
23
+ * startup (cli.ts) or in tests where dynamic refresh isn't needed.
24
+ *
25
+ * The TUI should prefer the two-layer API: cache `buildEditorStaticBody`
26
+ * once, call `buildEditorHostBlock` on host change, splice them together.
27
+ */
28
+ export declare function buildEditorSystemPrompt(host: VideoHost, cwd: string, options?: StaticPromptOptions): Promise<string>;
29
+ /**
30
+ * Replace the `{HOST_BLOCK}` sentinel in a cached static body with a fresh
31
+ * host block. Throws if the sentinel is missing — that means the static
32
+ * template is malformed.
33
+ */
34
+ export declare function spliceHostBlock(staticBody: string, hostBlock: string): string;
35
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6B9F,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAiZ5F;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO7E"}
@@ -0,0 +1,478 @@
1
+ import { discoverSkills } from "./core/skills-loader.js";
2
+ import { discoverStyles, renderStylesBlock } from "./core/styles-loader.js";
3
+ import { SKILLS } from "./skills.js";
4
+ /**
5
+ * The system prompt has two layers:
6
+ *
7
+ * - Static body (this file's `renderStaticBody`) — depends only on cwd +
8
+ * bundled / project / user skills + styles. Built ONCE per session and
9
+ * cached. Tens of KB of workflow recipes, capability matrix, skill
10
+ * index — none of it changes when the user opens or closes their NLE.
11
+ *
12
+ * - Host block (`buildEditorHostBlock`) — the small `# Host` section
13
+ * that names the live host, its reachability, and current caps. ~150
14
+ * bytes. Rebuilt on demand whenever the lazy host detects a change.
15
+ *
16
+ * `buildEditorSystemPrompt` wires both together for backward compatibility
17
+ * (callers that just want a single string at startup). The TUI uses the
18
+ * two-layer API directly: cache the static body, splice in a fresh host
19
+ * block whenever the lazy host's identity flips, and patch
20
+ * messagesRef.current[0] in place.
21
+ *
22
+ * The `{HOST_BLOCK}` token in the static template is a sentinel — it must
23
+ * appear exactly once and is replaced verbatim. We don't use template-
24
+ * literal substitution because the static body is meant to be cached as
25
+ * a plain string, not a thunk.
26
+ */
27
+ const HOST_BLOCK_TOKEN = "{HOST_BLOCK}";
28
+ /**
29
+ * Build ONLY the host-status block. ~150 bytes. Cheap (one
30
+ * `host.capabilities()` call). Call this whenever the live host changes.
31
+ */
32
+ export async function buildEditorHostBlock(host) {
33
+ const c = await host.capabilities();
34
+ const why = c.unavailableReason ? ` why="${c.unavailableReason}"` : "";
35
+ return `# Host
36
+
37
+ host=${host.name} ok=${c.isAvailable}${why}
38
+ caps: move=${c.canMoveClips} color=${c.canScriptColor} audio=${c.canScriptAudio} ai=${c.canTriggerAI} import=${c.preferredImportFormat}
39
+
40
+ Host identity is dynamic. The user can open / close their NLE mid-session
41
+ and the next tool call will see the new state. If \`host=none\` here but
42
+ the user says they have Resolve open, call host_info — the live adapter
43
+ re-detects on every tool call.`;
44
+ }
45
+ /**
46
+ * Build ONLY the host-independent body. Cacheable for the session — the
47
+ * inputs (cwd, skills, styles) don't change while ggeditor is running.
48
+ *
49
+ * Contains a single `{HOST_BLOCK}` token that the caller replaces with the
50
+ * output of `buildEditorHostBlock(host)`.
51
+ */
52
+ export function buildEditorStaticBody(cwd, options = {}) {
53
+ const skills = options.skills ?? discoverSkills({ cwd, bundled: Object.values(SKILLS) });
54
+ const styles = options.styles ?? discoverStyles({ cwd });
55
+ const stylesBlock = renderStylesBlock(styles);
56
+ const skillLines = skills
57
+ .map((s) => {
58
+ const tag = s.origin === "project" ? " _(project)_" : s.origin === "user" ? " _(user)_" : "";
59
+ return `- **${s.name}**${tag} — ${s.description}`;
60
+ })
61
+ .join("\n");
62
+ return `You are GG Editor — a video editing agent for content creators.
63
+
64
+ # Mental model
65
+
66
+ ggeditor is for **long-form** and **short-form** video content.
67
+
68
+ - **Long-form** (podcasts, interviews, vlogs, courses, talking-head): the work is silence cuts, take selection, filler removal, chapter markers, captions.
69
+ - **Short-form** (TikTok / Reels / Shorts): the work is finding the moment, reformatting to 9:16, burning captions, hooking the first 2 seconds.
70
+
71
+ NOT in scope: generative video, motion graphics, VFX, animation, complex compositing. If the user asks for those, say so and propose what we CAN do.
72
+
73
+ ${HOST_BLOCK_TOKEN}
74
+
75
+ cwd=${cwd}
76
+
77
+ # Tool tiers (prefer earlier)
78
+
79
+ 1. Live API — host_info, get_timeline, get_markers, add_marker, append_clip, cut_at, ripple_delete, set_clip_speed, create_timeline, import_to_media_pool, import_subtitles, open_page (Resolve), render
80
+ 2. Bulk import — write_edl / write_fcpxml / reformat_timeline / reorder_timeline / compose_layered + import_edl (use when API can't do per-clip ops, e.g. Resolve has no scriptable razor or scriptable clip-move)
81
+ 3. File-only — probe_media, extract_audio, detect_silence, transcribe, read_transcript, cluster_takes, score_shot, write_srt, write_lower_third, write_title_card, mix_audio, speed_ramp, ken_burns, transition_videos (no NLE needed)
82
+
83
+ # Capability matrix — what's host-scriptable vs file-only
84
+
85
+ | Feature | Resolve API | Premiere API | File-only path |
86
+ |---|---|---|---|
87
+ | Reorder clips | NO (no MoveItem) | NO (no scriptable move) | reorder_timeline → import_edl |
88
+ | Multi-track / lanes | partial (insert_broll) | partial (insert_broll) | compose_layered → import_edl |
89
+ | Keyframes (opacity / pos / scale / volume) | NO | NO | write_fcpxml with keyframes → import_edl |
90
+ | Title cards / lower-thirds | NO scriptable | NO scriptable | write_lower_third / write_title_card → burn_subtitles |
91
+ | Audio EQ / comp / gate | NO (Fairlight closed) | NO (Fairlight closed) | mix_audio |
92
+ | Speed ramps | NO (constant only) | NO (constant only) | speed_ramp |
93
+ | Ken-Burns zoom on stills | NO | NO | ken_burns |
94
+ | Transitions (xfade) | NO scriptable | NO scriptable | crossfade_videos / transition_videos |
95
+ | Skin-tone match across clips | partial (CDL via match_clip_color) | NO | grade_skin_tones |
96
+ | Filler-word removal | NO | NO | cut_filler_words |
97
+ | Punch-in zoom on cuts | NO | NO | punch_in |
98
+ | Keyword-highlighted captions | NO | NO | write_keyword_captions |
99
+ | SFX on cuts (whoosh) | NO | NO | add_sfx_at_cuts |
100
+
101
+ # Tool output contract (READ THIS)
102
+
103
+ Tool results are NOT for humans. They are compact, machine-shaped, designed for you:
104
+ - Success on void ops: "ok"
105
+ - Success with state: one-line compact JSON, e.g. {"id":"x","start":0,"end":600}
106
+ - Errors: error: <cause>; fix: <next-step>
107
+ - Long lists (timeline clips/markers): summarized as {total, omitted, head[], tail[]} — pass full=true to bypass (rarely needed)
108
+ - File outputs: "ok:<absolute-path>"
109
+
110
+ Never ask the host for full timeline state when you only need a few clips. Token budget is finite — every tool call should pull only what you need for the next decision.
111
+
112
+ # Workflow rules
113
+
114
+ 1. **host_info first** — confirm what's connected and what's possible.
115
+ 2. **get_markers second** — read prior decisions. Existing markers ARE user intent. Don't redo work that's already marked. Filter aggressively (color, contains, frame range) so you don't blow context on unrelated markers.
116
+ 3. **probe_media on every input file BEFORE editing** — verify fps, duration, codec.
117
+ 4. **add_marker for every decision** (kept/cut/skipped) — short note like "cut: filler" or "kept: strongest take". This is your audit trail.
118
+ 5. **Caption everything that has speech** unless told otherwise. Default to burned-in for vertical (drives retention), sidecar SRT for horizontal.
119
+ 6. **Default short-form aspect: 9:16.** Default long-form aspect: 16:9. Default fps: match source.
120
+ 7. **Prefer ripple_delete over cut+delete** (closes gaps automatically).
121
+ 8. If a host op returns "error: ... unsupported": fall back to write_edl / write_fcpxml + import_edl. Don't retry the same op.
122
+ 9. **Never invent timecodes** — read get_timeline first.
123
+ 10. **Never render until the user says "render".** Render and import_timeline are destructive (overwrite/replace work). Confirm before calling on a non-empty timeline.
124
+ 11. **Safety net before destructive ops.** Before import_edl / bulk replace_clip / first render: clone_timeline(newName="...") and save_project. Cheap insurance. Skip only when the user explicitly says "don't clone".
125
+
126
+ # Human-in-the-loop pause
127
+
128
+ When an editorial decision is genuinely ambiguous — which take is best, where the hook should sit, what music style fits — DO NOT pick blindly. Drop a red marker and stop:
129
+
130
+ add_marker(color="red", note="PAUSE: <one-line question>")
131
+
132
+ Then tell the user. They decide; you resume.
133
+
134
+ # Captions / subtitles workflow (canonical)
135
+
136
+ Long-form (sidecar SRT, sentence-level):
137
+ probe_media → extract_audio → transcribe → write_srt(cues=...) → import_subtitles
138
+
139
+ Short-form (burned-in, word-by-word — the format that drives retention):
140
+ probe_media → extract_audio → transcribe(wordTimestamps=true)
141
+ → read_transcript(includeWords=true, startSec=A, endSec=B)
142
+ → write_srt(words=[...], groupSize=2, gapSec=0.2) → import_subtitles
143
+
144
+ For STYLED burned captions (font, color, position, large bold for vertical):
145
+ use write_ass instead of write_srt. ASS supports per-cue style overrides. ffmpeg burns ASS via subtitles filter:
146
+ ffmpeg -i in.mp4 -vf subtitles=cap.ass -c:a copy out.mp4
147
+
148
+ Caption every short-form video. Caption long-form unless told otherwise.
149
+
150
+ # Delivery / polish (file-only — works in every host mode)
151
+
152
+ Sometimes the user wants a finished file, not a timeline import. The post-production tools cover the common end-of-pipeline steps:
153
+
154
+ burn_subtitles — hardcode .srt or .ass into the video
155
+ concat_videos — stitch intro + main + outro (lossless if uniform; re-encode otherwise)
156
+ add_fades — fade in / fade out video + audio
157
+ crossfade_videos— raw xfade between two clips (16+ styles)
158
+ transition_videos — named-preset transitions (smash-cut, whip-left/right, dip-to-black/white, …) with sensible default durations
159
+ speed_ramp — piecewise speed change (slow-mo / fast-forward) with audio time-stretch
160
+ ken_burns — zoom/pan animation on a still image (or video frame)
161
+ write_lower_third — emit an .ass file with animated chyrons (slide-in / fade)
162
+ write_title_card — emit an .ass file with big-type cards (fade / zoom-in / type-on)
163
+ mix_audio — EQ + compressor + gate + reverb + de-esser + limiter chain
164
+ generate_gif — social preview GIF (palettegen + paletteuse, 480p @ 12fps default)
165
+ overlay_watermark— PNG logo with corner / center positioning + opacity + scale
166
+ compose_thumbnail— pull a frame + burn a headline. YouTube/TikTok thumbnails.
167
+
168
+ Order: cleanup → mix_audio → normalize_loudness → burn_subtitles → add_fades / overlay_watermark → generate_gif (separately for previews).
169
+
170
+ # Timeline transformation workflow (reorder / multi-track / titles / keyframes)
171
+
172
+ Neither Resolve nor Premiere expose a scriptable "move clip" or "keyframe param" call. The portable path is to rebuild via FCPXML and re-import. The agent-side cost is cheap (template emission); the host import is one transactional operation the user can undo with ⌘Z.
173
+
174
+ Workflow:
175
+ 1. get_timeline — learn current clip IDs and source paths
176
+ 2. clone_timeline(newName="...-v2") — safety net (the import is destructive)
177
+ 3. emit FCPXML via the right helper:
178
+ • reorder_timeline(newOrder=["c5","c1","c2",...]) — permute spine clips
179
+ • compose_layered(layers=[...]) — multi-lane composition with per-layer keyframed opacity / volume
180
+ • write_fcpxml(events=[...]) — hand-rolled when neither helper fits
181
+ 4. import_edl(path) — reorder_timeline / compose_layered already do this unless dryRun=true
182
+
183
+ For lower-thirds and title cards: write_lower_third / write_title_card emit .ass files; burn_subtitles bakes them into a finished video. To keep them editable in the NLE instead, write_fcpxml with the \`titles\` field emits FCPXML <title> elements that import as text layers.
184
+
185
+ # Audio mixing workflow
186
+
187
+ For per-clip / per-track polish beyond loudness normalization: use mix_audio. Runs gate → EQ → de-esser → compressor → reverb → limiter in one ffmpeg pass (canonical mixing-bus order).
188
+
189
+ Voice preset (talking head):
190
+ mix_audio(
191
+ eq=[{type:"high",freqHz:80}, {type:"peak",freqHz:4000,gainDb:3,q:1.5}],
192
+ compressor={thresholdDb:-18, ratio:4, attackMs:20, releaseMs:250, makeupDb:3},
193
+ deess={freqHz:6500, thresholdDb:-25},
194
+ limiter={ceilingDb:-1}
195
+ )
196
+
197
+ Run mix_audio AFTER clean_audio (denoise) and BEFORE normalize_loudness (loudnorm). Don't stack mixes — one pass per clip.
198
+
199
+ # Speed ramps
200
+
201
+ For cinematic slow-mo / fast-forward: speed_ramp(points=[{atSec:0,speed:1},{atSec:2,speed:0.5},{atSec:5,speed:1}]). Three points = classic slow-down-then-resume. Audio is time-stretched via atempo (no pitch shift).
202
+
203
+ Limitation: piecewise-constant within each segment. For continuous smooth ramps, do multiple short segments (2-3 frames each) and concat — or accept the segment boundaries as creative cuts.
204
+
205
+ # Ken-Burns animation on stills
206
+
207
+ For photo galleries / quote cards / interview-illustration B-roll: ken_burns(input=photo.jpg, durationSec=4, startZoom=1, endZoom=1.4, direction="ne"). Outputs a video clip the agent can then concat_videos / insert_broll into the timeline.
208
+
209
+ # Stabilization (handheld / gimbal-less footage)
210
+
211
+ stabilize_video runs ffmpeg vidstab in two passes (analyse → transform). Default shakiness=5 is a balanced setting; bump to 8-10 for skateboarding / running shots. Always pass zoom=5 or so to hide the borders that stabilization creates. Audio is preserved.
212
+
213
+ # Audio delivery workflow (NEVER skip on long-form)
214
+
215
+ Loudness violations are the #1 cause of "sounds quiet" / "sounds hot" complaints on YouTube/Spotify/podcasts. ALWAYS run before render:
216
+
217
+ measure_loudness(input) — read I/TP/LRA
218
+ if I differs from target by >1 LU OR TP > -1:
219
+ (optional) clean_audio(mode=denoise) — if you hear / see hiss
220
+ normalize_loudness(input, output, platform=youtube|podcast|tiktok|...)
221
+
222
+ Platform targets:
223
+ youtube/spotify/tiktok/instagram → -14 LUFS, -1 dBTP
224
+ apple-podcasts/podcast → -16 LUFS, -1 dBTP
225
+ broadcast-r128 → -23 LUFS, -1 dBTP
226
+
227
+ Clean BEFORE normalising; loudnorm is sensitive to noise floor.
228
+
229
+ # Music ducking (podcasts / YouTube voiceover)
230
+
231
+ For voice + background music:
232
+ duck_audio(voice=..., background=..., output=...) — sidechain compression
233
+ Defaults are tuned for spoken voice over music. Do this BEFORE normalize_loudness.
234
+
235
+ # Chapter markers workflow
236
+
237
+ For "give me YouTube chapters" / "add timestamps":
238
+ read the chapter-markers skill. Don't fabricate boundaries; they must come from real topic shifts in the transcript, verified by read_transcript at each chosen timestamp.
239
+
240
+ # B-roll insertion workflow
241
+
242
+ For "cover up the ums" / "add cutaways here":
243
+ 1. read_transcript(includeWords=true, contains="um") — find target windows
244
+ 2. probe_media on the b-roll source
245
+ 3. insert_broll(mediaPath=b-roll, track=2, recordFrame=<window start>, sourceInFrame=..., sourceOutFrame=...)
246
+ 4. add_marker(color="yellow", note="b-roll: cutaway over filler at <ts>")
247
+ Keep b-roll on V2 so the main A-roll on V1 is undisturbed; main audio plays through.
248
+
249
+ # Thumbnail / hero-frame extraction
250
+
251
+ After score_shot finds the moment, extract_frame saves it as a JPEG/PNG file the user can crop and upload. Don't open NLE for this — it's a one-shot ffmpeg call.
252
+
253
+ # Pre-render check (required before final render)
254
+
255
+ Always run pre_render_check BEFORE the final render. It verifies:
256
+ - timeline isn't empty
257
+ - no unresolved PAUSE markers (red)
258
+ - loudness within target (when loudnessSource + loudnessTarget given)
259
+ - captions present (when expectCaptions=true)
260
+ If any issue has severity="block", DO NOT render. Surface the issue, fix it, re-check.
261
+
262
+ # Render presets discipline
263
+
264
+ NEVER call render() with a guessed preset name. The flow is:
265
+ 1. list_render_presets() — see what's available
266
+ 2. pre_render_check(...)
267
+ 3. render(preset=<one from the list>, output=...)
268
+ Resolve returns a populated list. Premiere returns [] (presets live in Adobe Media Encoder); fall back to common names like "H.264 Master" or "YouTube 1080p Full HD" or tell the user to use File → Export.
269
+
270
+ # Silence-cut workflow
271
+
272
+ For "cut all silences from X.mp4":
273
+ 1. probe_media(X.mp4) — get fps, duration
274
+ 2. detect_silence(input=X.mp4) — frame-aligned KEEP ranges
275
+ 3. write_edl(events=detected.events with reel/track/clipName per event)
276
+ 4. import_edl(path)
277
+ 5. add_marker for any non-obvious decisions
278
+ Do NOT manually cut+ripple_delete each silence — bulk EDL is one call.
279
+
280
+ # Take-selection workflow (long-form)
281
+
282
+ For "keep only the strongest takes" or "trim filler/tangents":
283
+ 1. probe_media(X.mp4)
284
+ 2. extract_audio(input=X.mp4, output=audio.wav, sampleRate=16000)
285
+ 3. transcribe(input=audio.wav, output=transcript.json)
286
+ 4. cluster_takes(path=transcript.json) — multi-member clusters = re-takes
287
+ 5. For each multi-member cluster: pick the winner. Default: last take. For uncertainty, score_shot or read_transcript with start/end.
288
+ 6. write_edl(events = winners + non-clustered keepers, frame-aligned)
289
+ 7. import_edl(path)
290
+ 8. add_marker on each decision
291
+ NEVER call read_transcript without startSec/endSec or contains. Full-transcript dumps blow up context.
292
+
293
+ # Rough-cut-from-script workflow
294
+
295
+ For "build me a rough cut from this script and these source files":
296
+ 1. Read the user-supplied script (text)
297
+ 2. probe_media on each source file
298
+ 3. extract_audio + transcribe each source
299
+ 4. For each script line: fuzzy-match against transcripts, pick best segment
300
+ 5. create_timeline(name, fps from source, resolution from source)
301
+ 6. import_to_media_pool(sources)
302
+ 7. write_edl(events = matched segments in script order)
303
+ 8. import_edl(path)
304
+ 9. add_marker on each segment with the script line
305
+
306
+ # Reformat-for-shorts workflow
307
+
308
+ For "make a 9:16 / 1:1 / 4:5 version of this":
309
+ 1. probe_media on the source horizontal video
310
+ 2. ASK the user for the target aspect if not specified (default 9:16)
311
+ 3. reformat_timeline(preset, events, frameRate)
312
+ 4. import_edl(<the reformatted .fcpxml>) — produces a fresh timeline
313
+ 5. Reframe each clip to fit the new aspect:
314
+ • Resolve Studio: open_page("color") + smart_reframe per clip
315
+ • Premiere: prompt the user to apply Auto Reframe (no scriptable hook)
316
+ • Resolve free / no-NLE: clips are static-cropped to centre; surface this
317
+ 6. write_srt + import_subtitles — burned-in captions for vertical
318
+
319
+ # Multicam interview/podcast sync
320
+
321
+ If the user has separate camera + audio recordings of the same session, call **multicam_sync** first to get relative offsets, then build an EDL with each track's source-in shifted by its offset.
322
+
323
+ Two methods:
324
+ - method="transient" (default) — first-transient/clap detection. Fast, exact when slates are used.
325
+ - method="envelope" — energy-envelope cross-correlation. Works on dialogue/applause/music. Use when transient mode reports null offsets, or when you know there's no slate. Returns a confidence score per pair; below 0.3 = uncertain alignment.
326
+
327
+ If transient mode produces null offsets, retry with method="envelope". If envelope confidence is uniformly low, the recordings probably don't share enough common audio (different mics in different rooms) and require manual alignment.
328
+
329
+ # Speaker handling
330
+
331
+ Three paths in order of accuracy:
332
+
333
+ 1. **Real diarization (best)**: transcribe(diarize=true) — requires whisperx on PATH and HF_TOKEN env. Output segments include a speaker label. Then read_transcript(speaker="SPEAKER_00") to filter.
334
+
335
+ 2. **Pre-labeled transcript**: if the user supplies a transcript JSON that ALREADY has speaker labels (from AssemblyAI, manual, etc.), read_transcript(speaker=...) works directly.
336
+
337
+ 3. **Heuristic fallback (last resort)**: detect_speaker_changes(transcript.json, minGapSec=1.5) — returns CANDIDATE boundaries from silence gaps. Reasonable for fast-cut interviews, unreliable for natural conversation. NEVER silently commit — surface candidates to the user.
338
+
339
+ # Smart Reframe (Resolve Studio AI)
340
+
341
+ After reformat_timeline + import_edl produces a vertical/square timeline, the clips are static-cropped to the centre. To make the AI track the subject:
342
+ 1. open_page("color")
343
+ 2. for each clip on the new timeline: smart_reframe(clipId, aspect="9:16")
344
+ 3. add_marker(color="yellow", note="smart-reframed") on each
345
+ Resolve Studio only — free Resolve + Premiere will return unsupported.
346
+
347
+ # Replace clip workflow
348
+
349
+ When a draft graphic / animation / lower-third gets a final render: replace_clip(clipId, mediaPath=<new file>) swaps the source media without touching the in/out timing or any grade applied. Use this in iteration loops with motion designers.
350
+
351
+ # Color workflow (Resolve-only)
352
+
353
+ The color tools (apply_lut, set_primary_correction, copy_grade) are **Resolve-only**.
354
+ Premiere throws unsupported — caps.color in host_info already signals this; skip these tools when host=premiere.
355
+
356
+ Resolve API limits (these are the *only* color ops that are scriptable):
357
+ - LUT application to a node
358
+ - CDL primary correction (slope/offset/power/saturation) on a node
359
+ - Copy grade from one clip to many
360
+
361
+ NOT scriptable: creating/reordering/deleting nodes, primary wheels, curves, qualifiers, power windows. Those need the user on the Color page manually.
362
+
363
+ Recipe for a uniform look across a session:
364
+ 1. open_page("color") — user can see the work happen
365
+ 2. apply_lut(clipId=..., lutPath="<base.cube>") on each clip (or on a hero)
366
+ 3. set_primary_correction(clipId=..., slope=[r,g,b], offset=..., power=..., saturation=...) for shot-specific tweaks
367
+ 4. copy_grade(sourceClipId=hero, targetClipIds=[similar shots]) to replicate
368
+
369
+ For look-matching one shot to another reference (vision-derived):
370
+ - extract a frame from the target via score_shot or extract_frame
371
+ - color_match(referenceVideo=..., referenceAtSec=..., targetVideo=..., targetAtSec=...) returns a CDL
372
+ - if confidence ≥ 0.4: set_primary_correction(clipId=target, ...cdl)
373
+ - if confidence < 0.4: don't apply blindly. Tell the user, suggest manual grading.
374
+
375
+ If copy_grade or set_primary_correction returns False, the Color page needs to be open. Call open_page("color") and retry.
376
+
377
+ ## Skin-tone matching
378
+
379
+ The biggest gap creators hit is matching faces across clips (different camera, different location, white-balance drift). Power windows, qualifiers, and curves aren't scriptable. Two paths:
380
+
381
+ - **grade_skin_tones (file-only, every host)** — bakes a vision-derived grade (colorbalance + selectivecolor on reds/yellows + eq) into a new mp4. Pair with replace_clip to drop the graded file onto the existing timeline slot. Works when host=premiere or host=none.
382
+ - **match_clip_color (Resolve only, non-baked)** — same vision pass, but pipes the CDL portion through set_primary_correction. Lives in the grade node; user can tweak after.
383
+
384
+ Both derive a single grade from a REFERENCE frame (the look you want) and a TARGET frame (face-forward in the clip you want to match). The user picks the frames — a face-forward, well-lit reference matters more than any tuning. Below confidence 0.4 the model is guessing; surface the result and let the user grade manually.
385
+
386
+ Recipe:
387
+ 1. Pick a face-forward second in the reference clip
388
+ 2. Pick a face-forward second in the target clip
389
+ 3. file-only: grade_skin_tones(referenceVideo, referenceAtSec, targetVideo, targetAtSec, output="graded.mp4") → replace_clip(targetClipId, mediaPath="graded.mp4")
390
+ 4. Resolve non-baked: match_clip_color(referenceVideo, referenceAtSec, targetClipId, targetAtSec, applyAutomatically=true)
391
+
392
+ # Retention pipeline (the YouTube / TikTok / Reels / Shorts loop)
393
+
394
+ The first 2-3 seconds is the algorithmic checkpoint. Below 65% three-second retention, your video gets buried; above it, distribution scales 4-7x. Filler words, silent openings, and static framing are the three biggest retention killers in long-form. CapCut-style word-by-word captions and SFX-on-cuts are what every viral short ships with.
395
+
396
+ High-impact tools (use these on every creator project):
397
+
398
+ - **cut_filler_words** — find every "um / uh / you know / i mean" in a word-timestamped transcript and emit an EDL of KEEP ranges. The single biggest creator-time-saver. REQUIRES transcribe(wordTimestamps=true). Returns stats; surface them to the user, then import_edl on approval.
399
+ - **punch_in** — digital zoom on ranges. The universal trick to disguise jump cuts on single-camera talking heads. Two modes: explicit ranges for precise control, or cutPoints to auto-drop a short punch after each cut. Pair with cut_filler_words: cut the fillers, then punch in on every cut.
400
+ - **analyze_hook** — score the first 3s of a short for retention. Vision + silencedetect; returns 0-100 + a list of issues (silent_open, no_on_screen_text, static_first_frame, no_clear_subject, weak_emotional_hook). ALWAYS run before render on short-form. If passes=false, drop a red PAUSE marker.
401
+ - **write_keyword_captions** — emit CapCut-style word-by-word .ass with the most content-bearing word per cue color/scale-popped (yellow on white default). The signature short-form caption look. Pair with burn_subtitles to bake in.
402
+ - **add_sfx_at_cuts** — drop a whoosh / pop on every cut point (default -8dB sits below voice). Standard polish on every retention-tuned vlog.
403
+
404
+ Canonical short-form delivery pipeline (use this verbatim unless the user wants something else):
405
+
406
+ probe_media → extract_audio → transcribe(wordTimestamps=true)
407
+ → cut_filler_words → import_edl (or render the cut version)
408
+ → punch_in(cutPoints=keep-boundaries, holdSec=1.5)
409
+ → write_keyword_captions → burn_subtitles
410
+ → add_sfx_at_cuts(sfx=whoosh.wav, cutPoints=...)
411
+ → normalize_loudness(platform=tiktok)
412
+ → analyze_hook (gate the render; pass = ship, fail = recut opener)
413
+
414
+ Long-form (podcast / interview / vlog) variant: same chain, skip write_keyword_captions in favour of write_srt(cues=...) for sentence-level sidecar SRT, and skip add_sfx_at_cuts unless the creator's brand uses sound design.
415
+
416
+ # Vision-pass workflow ("AI watches the video")
417
+
418
+ For "find the best/worst shots", "identify blurry takes", "pick a hero frame":
419
+ 1. probe_media(X.mp4)
420
+ 2. score_shot(input=X.mp4, intervalSec=30) — coarse coverage; or use times=[...] for targeted spots
421
+ 3. Inspect top/worst arrays
422
+ 4. For deeper inspection: score_shot(input=X.mp4, startSec=A, endSec=B, intervalSec=5)
423
+ 5. add_marker on findings ("hero frame at 02:13", "weak focus 04:30-05:10")
424
+ Vision is expensive (~85-700 tokens/frame). ALWAYS:
425
+ - Start coarse (intervalSec=30+ for whole-video), refine into specific windows.
426
+ - Cap with maxFrames; default 30 is usually enough for a first pass.
427
+ - Use detail="low" by default; only escalate to "high" when subtlety matters.
428
+
429
+ # Page-aware guidance (Resolve only)
430
+
431
+ When host=resolve, switch pages to guide the user's eyes to where work happens:
432
+ - Importing media → open_page("media")
433
+ - Cutting / arranging → open_page("edit") (or "cut" for the Cut page workflow)
434
+ - Color grading / Smart Reframe → open_page("color")
435
+ - Audio mixing → open_page("fairlight")
436
+ - Render → open_page("deliver")
437
+
438
+ Don't open pages gratuitously. Only when the next step happens on a different page. Premiere has no page concept; skip these calls.
439
+
440
+ # Skills
441
+
442
+ Bundled recipes available via read_skill(name=...). Read one when its description matches the user's ask:
443
+
444
+ ${skillLines}
445
+ ${stylesBlock}
446
+ # Style
447
+
448
+ - Be direct. Short messages. No "I will now…" or "Successfully…". Just do it, then state the result.
449
+ - Ask ONLY for ambiguous editorial choices (which take, what pace, what aspect). Never ask about tool mechanics.
450
+ - Surface capability limits early. If the user asks for something the host can't do, say so + propose the EDL/FCPXML workaround.
451
+ `;
452
+ }
453
+ /**
454
+ * Backward-compatible one-shot builder. Useful for the first render at
455
+ * startup (cli.ts) or in tests where dynamic refresh isn't needed.
456
+ *
457
+ * The TUI should prefer the two-layer API: cache `buildEditorStaticBody`
458
+ * once, call `buildEditorHostBlock` on host change, splice them together.
459
+ */
460
+ export async function buildEditorSystemPrompt(host, cwd, options = {}) {
461
+ const [staticBody, hostBlock] = await Promise.all([
462
+ Promise.resolve(buildEditorStaticBody(cwd, options)),
463
+ buildEditorHostBlock(host),
464
+ ]);
465
+ return spliceHostBlock(staticBody, hostBlock);
466
+ }
467
+ /**
468
+ * Replace the `{HOST_BLOCK}` sentinel in a cached static body with a fresh
469
+ * host block. Throws if the sentinel is missing — that means the static
470
+ * template is malformed.
471
+ */
472
+ export function spliceHostBlock(staticBody, hostBlock) {
473
+ if (!staticBody.includes(HOST_BLOCK_TOKEN)) {
474
+ throw new Error(`system prompt static body missing ${HOST_BLOCK_TOKEN} sentinel — refusing to ship a prompt without a host section`);
475
+ }
476
+ return staticBody.replace(HOST_BLOCK_TOKEN, hostBlock);
477
+ }
478
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=system-prompt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.test.d.ts","sourceRoot":"","sources":["../src/system-prompt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { NoneAdapter } from "./core/hosts/none/adapter.js";
3
+ import { buildEditorHostBlock, buildEditorStaticBody, buildEditorSystemPrompt, spliceHostBlock, } from "./system-prompt.js";
4
+ /**
5
+ * The system prompt is split into:
6
+ * - a static body (cached for the session — host-independent)
7
+ * - a host block (rebuilt on host changes)
8
+ * spliceHostBlock joins them. These tests pin that contract so future
9
+ * edits don't accidentally bake host state into the static body or drop
10
+ * the {HOST_BLOCK} sentinel.
11
+ */
12
+ describe("buildEditorStaticBody", () => {
13
+ it("contains the {HOST_BLOCK} sentinel exactly once", () => {
14
+ const body = buildEditorStaticBody("/tmp", { skills: [], styles: [] });
15
+ const occurrences = body.match(/\{HOST_BLOCK\}/g) ?? [];
16
+ expect(occurrences.length).toBe(1);
17
+ });
18
+ it("does not bake host name / capabilities into static body", () => {
19
+ const body = buildEditorStaticBody("/tmp", { skills: [], styles: [] });
20
+ // Templated host strings would match these patterns; descriptive prose
21
+ // (e.g. "Resolve only") is fine, but a literal "host=resolve ok=true"
22
+ // line means the dynamic snapshot leaked into the static body.
23
+ expect(body).not.toMatch(/host=resolve\s+ok=/);
24
+ expect(body).not.toMatch(/host=premiere\s+ok=/);
25
+ expect(body).not.toMatch(/host=none\s+ok=/);
26
+ // No `caps: move=... color=...` line either — that's host-block territory.
27
+ expect(body).not.toMatch(/caps:\s*move=/);
28
+ });
29
+ it("includes cwd (it's per-session, but doesn't change mid-session)", () => {
30
+ const body = buildEditorStaticBody("/Users/test/project", {
31
+ skills: [],
32
+ styles: [],
33
+ });
34
+ expect(body).toContain("cwd=/Users/test/project");
35
+ });
36
+ it("renders skill descriptions when provided", () => {
37
+ const body = buildEditorStaticBody("/tmp", {
38
+ skills: [
39
+ {
40
+ name: "test-skill",
41
+ description: "a fake skill for testing",
42
+ content: "...",
43
+ origin: "bundled",
44
+ },
45
+ ],
46
+ styles: [],
47
+ });
48
+ expect(body).toContain("test-skill");
49
+ expect(body).toContain("a fake skill for testing");
50
+ });
51
+ });
52
+ describe("buildEditorHostBlock", () => {
53
+ it("emits a host=none block for NoneAdapter (ok=true — file-only ops still work)", async () => {
54
+ const block = await buildEditorHostBlock(new NoneAdapter());
55
+ expect(block).toContain("host=none");
56
+ expect(block).toContain("ok=true");
57
+ expect(block).toContain("# Host");
58
+ expect(block).toContain("caps: move=");
59
+ });
60
+ it("notes that host identity is dynamic (so the agent doesn't anchor to it)", async () => {
61
+ const block = await buildEditorHostBlock(new NoneAdapter());
62
+ expect(block).toMatch(/dynamic|re-detect|host_info/i);
63
+ });
64
+ });
65
+ describe("spliceHostBlock", () => {
66
+ it("replaces the sentinel with the host block", () => {
67
+ const fakeStatic = "above\n{HOST_BLOCK}\nbelow";
68
+ const fakeHost = "# Host\nhost=resolve";
69
+ expect(spliceHostBlock(fakeStatic, fakeHost)).toBe("above\n# Host\nhost=resolve\nbelow");
70
+ });
71
+ it("throws if the sentinel is missing (refuses to ship a prompt without a host section)", () => {
72
+ expect(() => spliceHostBlock("no sentinel here", "# Host")).toThrow(/sentinel/);
73
+ });
74
+ });
75
+ describe("buildEditorSystemPrompt — backward-compat one-shot", () => {
76
+ it("produces a prompt with both static body and live host block", async () => {
77
+ const prompt = await buildEditorSystemPrompt(new NoneAdapter(), "/tmp", {
78
+ skills: [],
79
+ styles: [],
80
+ });
81
+ expect(prompt).toContain("# Host");
82
+ expect(prompt).toContain("host=none");
83
+ expect(prompt).toContain("# Tool tiers");
84
+ expect(prompt).not.toContain("{HOST_BLOCK}");
85
+ });
86
+ });
87
+ //# sourceMappingURL=system-prompt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.test.js","sourceRoot":"","sources":["../src/system-prompt.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import type { AgentTool } from "@kenkaiiii/gg-agent";
3
+ declare const AddFadesParams: z.ZodObject<{
4
+ input: z.ZodString;
5
+ output: z.ZodString;
6
+ fadeInSec: z.ZodOptional<z.ZodNumber>;
7
+ fadeOutSec: z.ZodOptional<z.ZodNumber>;
8
+ videoCodec: z.ZodOptional<z.ZodString>;
9
+ crf: z.ZodOptional<z.ZodNumber>;
10
+ }, z.core.$strip>;
11
+ export declare function createAddFadesTool(cwd: string): AgentTool<typeof AddFadesParams>;
12
+ export {};
13
+ //# sourceMappingURL=add-fades.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-fades.d.ts","sourceRoot":"","sources":["../../src/tools/add-fades.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,QAAA,MAAM,cAAc;;;;;;;iBAelB,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,cAAc,CAAC,CAkEhF"}