@higgsfield/video-editor-mcp 1.0.7 → 1.1.1-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/THIRD_PARTY_NOTICES.md +24 -24
  2. package/dist/cli.mjs +134 -125
  3. package/dist/index.html +136 -133
  4. package/dist/launcher.mjs +90 -90
  5. package/dist/server.mjs +1553 -1389
  6. package/node_modules/@higgsfield/higgsedit/README.md +181 -1
  7. package/node_modules/@higgsfield/higgsedit/dist/capture-page.js +902 -314
  8. package/node_modules/@higgsfield/higgsedit/dist/chunk-2JYLVSVV.mjs +1594 -0
  9. package/node_modules/@higgsfield/higgsedit/dist/chunk-2WKNH7OL.mjs +16 -0
  10. package/node_modules/@higgsfield/higgsedit/dist/{chunk-OMKZ5BXM.mjs → chunk-5LTTL3Q3.mjs} +1 -1
  11. package/node_modules/@higgsfield/higgsedit/dist/chunk-7PYXSJS7.mjs +717 -0
  12. package/node_modules/@higgsfield/higgsedit/dist/{chunk-MLJAIZGP.mjs → chunk-BH2QF635.mjs} +33 -326
  13. package/node_modules/@higgsfield/higgsedit/dist/{chunk-WZR5PZM7.mjs → chunk-BV5COOQZ.mjs} +250 -161
  14. package/node_modules/@higgsfield/higgsedit/dist/{chunk-HTCYVKFX.mjs → chunk-C3GSB3XZ.mjs} +8 -7
  15. package/node_modules/@higgsfield/higgsedit/dist/{chunk-CYH2EUQV.mjs → chunk-DVN4LUXV.mjs} +13 -4
  16. package/node_modules/@higgsfield/higgsedit/dist/chunk-F4CMIG5G.mjs +36 -0
  17. package/node_modules/@higgsfield/higgsedit/dist/chunk-IEPPEDEU.mjs +33 -0
  18. package/node_modules/@higgsfield/higgsedit/dist/{chunk-UVAZ6I6U.mjs → chunk-KIWGVAPJ.mjs} +16 -12
  19. package/node_modules/@higgsfield/higgsedit/dist/{chunk-L6QDNSL3.mjs → chunk-L5LWBA6A.mjs} +5 -5
  20. package/node_modules/@higgsfield/higgsedit/dist/chunk-LMQR3DHT.mjs +37 -0
  21. package/node_modules/@higgsfield/higgsedit/dist/chunk-LTKMGZ6T.mjs +58 -0
  22. package/node_modules/@higgsfield/higgsedit/dist/{chunk-VI6IV6JP.mjs → chunk-MV2JTTBQ.mjs} +65 -47
  23. package/node_modules/@higgsfield/higgsedit/dist/{chunk-4D6AXU4B.mjs → chunk-NARTAWRN.mjs} +50 -30
  24. package/node_modules/@higgsfield/higgsedit/dist/{chunk-27NBQ5FA.mjs → chunk-NUXTKQNM.mjs} +33 -21
  25. package/node_modules/@higgsfield/higgsedit/dist/chunk-OCIZ36XD.mjs +40 -0
  26. package/node_modules/@higgsfield/higgsedit/dist/{chunk-MK6PL7N4.mjs → chunk-OF6RMSM2.mjs} +19 -17
  27. package/node_modules/@higgsfield/higgsedit/dist/{chunk-6BETMESC.mjs → chunk-P2BGHTRR.mjs} +2 -2
  28. package/node_modules/@higgsfield/higgsedit/dist/{chunk-EKFC4S4M.mjs → chunk-PAHMD6SU.mjs} +5 -0
  29. package/node_modules/@higgsfield/higgsedit/dist/{chunk-QVLAEV3U.mjs → chunk-PFQYUJQL.mjs} +3 -4
  30. package/node_modules/@higgsfield/higgsedit/dist/chunk-QJTILFBS.mjs +335 -0
  31. package/node_modules/@higgsfield/higgsedit/dist/chunk-QQ3GGKDN.mjs +21 -0
  32. package/node_modules/@higgsfield/higgsedit/dist/chunk-TH7TK67K.mjs +23 -0
  33. package/node_modules/@higgsfield/higgsedit/dist/{chunk-SIMO6I3D.mjs → chunk-UDL5AHKO.mjs} +163 -158
  34. package/node_modules/@higgsfield/higgsedit/dist/chunk-UMWOUQN3.mjs +60 -0
  35. package/node_modules/@higgsfield/higgsedit/dist/{chunk-3AIM3THH.mjs → chunk-VLM5EOWJ.mjs} +4 -4
  36. package/node_modules/@higgsfield/higgsedit/dist/chunk-WENFTPXQ.mjs +403 -0
  37. package/node_modules/@higgsfield/higgsedit/dist/chunk-YLVXQIPX.mjs +464 -0
  38. package/node_modules/@higgsfield/higgsedit/dist/editor/.vite/manifest.json +559 -506
  39. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/agent-corner-bottom-q4hZltI-.svg +431 -0
  40. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/agent-corner-top-BJYI-I24.svg +431 -0
  41. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/confirmation-BTnwl3LS.css +1 -0
  42. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/drag-Bt_t4HZO.css +1 -0
  43. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/local-B3OTAV_A.css +1 -0
  44. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/menubar-2Y1Y2XJt.css +1 -0
  45. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/model-DdE4hCgf.css +1 -0
  46. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/{IconText1-CzbCrP7v.css → notifications-B08L1jSe.css} +1 -1
  47. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/{panel-g852pZf_.css → panel-BRN_AbBM.css} +1 -1
  48. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-CYELNqrv.css +1 -0
  49. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-DYLpT6oA.css +1 -0
  50. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-v84HaGTZ.css +1 -0
  51. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconChainLink1-Bxb1Or0F.js +1 -0
  52. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconCheckmark2Medium-daaES9uF.js → IconCheckmark2Medium-hegaz9mQ.js} +1 -1
  53. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconChevronDownSmall-BhTBJk26.js → IconChevronDownSmall-DaruzJwU.js} +1 -1
  54. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconClosedCaptioning-BPqcqKsD.js +1 -0
  55. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconCrossMedium-acfnCXOM.js → IconCrossMedium-BsPFJzc6.js} +1 -1
  56. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconOpenaiFilled-D1fzthmi.js +1 -0
  57. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconPause-pTeVSvUe.js → IconPause-ClNg8pao.js} +1 -1
  58. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconPlayFilled-CwdgIuDG.js → IconPlayFilled-CHb-7GSx.js} +1 -1
  59. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconSparklesSoftFilled-o7o33KRn.js +1 -0
  60. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ai-composer-B9h-eaki.js +567 -0
  61. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/auto-layout-BO20Tg4B.js +1 -0
  62. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{button-CjG6GcgF.js → button-Cg0U0zpV.js} +1 -1
  63. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/canvas-Bw4CVzfw.js +1 -0
  64. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/capabilities-BCd4-zPF.js +1 -0
  65. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/commands-QeSqAbCt.js +1 -0
  66. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/components-tXMtIZNL.js +51 -0
  67. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/confirmation-CO2PHR_z.js +1 -0
  68. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/dom-6aoQn29n.js +1 -0
  69. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/drag-Dw8b_vO2.js +1 -0
  70. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{editing-CjWbiCxv.js → editing-Cy-SaOyB.js} +1 -1
  71. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edits-CqLBqir0.js +1 -0
  72. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/export-dialog-BjBskOe3.js +2 -0
  73. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/factories-Bw_iQrUL.js +1 -0
  74. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/id3-CSR0NCRI.js +2 -0
  75. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-DP49i4ke.js +1 -0
  76. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-error-CMz9sLPe.js +1 -0
  77. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ingest-DsmIc415.js +1 -0
  78. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/jsx-runtime-B5yqYJvp.js +1 -0
  79. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{media-Bwjxu-0U.js → media-DQw6vU_T.js} +1 -1
  80. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/menubar-D31srALX.js +1 -0
  81. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/meters-D0nZVEJs.js +1 -0
  82. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/mode-DEG6doKF.js +1 -0
  83. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/model-Duf9fszJ.js +2 -0
  84. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/model-DyAkLA69.js +1 -0
  85. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/notifications-DqWZNIrK.js +9 -0
  86. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/palette-HT83gWgL.js +1 -0
  87. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-B5Mvm6dg.js +7 -0
  88. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-BC90wyvd.js +1 -0
  89. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Bw_ZJ2JI.js +3 -0
  90. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DNS060Nt.js +3 -0
  91. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DSgxIrEq.js +2 -0
  92. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DgBttE5O.js +1 -0
  93. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-assets-_T2bHsHW.js +771 -0
  94. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-inspector-DfHvAt5X.js +2 -0
  95. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-nBZvHlkA.js +1 -0
  96. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-timeline-DsCpJVSt.js +327 -0
  97. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-viewport-CEhZwZ67.js +280 -0
  98. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/projects-2_tW9Do7.js +1 -0
  99. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/react-dom-1uB7Vbbb.js +1 -0
  100. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/schemas-CddYAOcj.js +64 -0
  101. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/session-BpFeKAI2.js +1 -0
  102. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/src-BLG3tYBa.js +2 -0
  103. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/styles-e2n2A_JN.js +284 -0
  104. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/supercomputer-CuV0zYKd.js +24 -0
  105. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/tabs-XeAgs9cs.js +1 -0
  106. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/toggle-DbNEaSIl.js +1 -0
  107. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-C8Ll3qFl.js +69 -0
  108. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-bar-Dv1LPFbu.js +1 -0
  109. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useOpenInteractionType-HWSfSsp2.js +1 -0
  110. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useRenderElement-D4SOg3N_.js +1 -0
  111. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/value-EB7YmAdS.js +1 -0
  112. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/writeback-support-fj5rA9k3.js +1 -0
  113. package/node_modules/@higgsfield/higgsedit/dist/editor/editor-B-WAkLt7.js +372 -0
  114. package/node_modules/@higgsfield/higgsedit/dist/higgsedit.mjs +39 -24
  115. package/node_modules/@higgsfield/higgsedit/dist/jsx/hooks.d.ts +26 -0
  116. package/node_modules/@higgsfield/higgsedit/dist/jsx/index.d.ts +17 -0
  117. package/node_modules/@higgsfield/higgsedit/dist/jsx/inspect.d.ts +42 -0
  118. package/node_modules/@higgsfield/higgsedit/dist/jsx/jsx-runtime.d.ts +28 -0
  119. package/node_modules/@higgsfield/higgsedit/dist/jsx/svg.d.ts +9 -0
  120. package/node_modules/@higgsfield/higgsedit/dist/jsx/time.d.ts +6 -0
  121. package/node_modules/@higgsfield/higgsedit/dist/jsx/types.d.ts +420 -0
  122. package/node_modules/@higgsfield/higgsedit/package.json +28 -20
  123. package/package.json +4 -3
  124. package/plugin/.codex-plugin/plugin.json +1 -1
  125. package/plugin/plugin.json +1 -1
  126. package/plugin/skills/video-editing/references/caption-titling.md +1 -1
  127. package/plugin/skills/video-editing/references/local-setup.md +3 -3
  128. package/node_modules/@higgsfield/higgsedit/dist/chunk-C6SASQHE.mjs +0 -424
  129. package/node_modules/@higgsfield/higgsedit/dist/chunk-FZ5U36SQ.mjs +0 -83
  130. package/node_modules/@higgsfield/higgsedit/dist/chunk-QLPCYN6K.mjs +0 -292
  131. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/edit-drag-D2EV5ddd.css +0 -1
  132. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/editor-CuRHT75g.css +0 -1
  133. package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-DnuQD7ja.css +0 -1
  134. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/FieldControl-B0fenhBJ.js +0 -2
  135. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconChainLink1-Cwv1X7hi.js +0 -1
  136. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconEyeOpen-BqTT9_VV.js +0 -1
  137. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconEyeSlash-Whv58c1m.js +0 -1
  138. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPencil-Dr17k_7e.js +0 -1
  139. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPlay-BroH3ziH.js +0 -1
  140. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPlusSmall-43T9aE3d.js +0 -1
  141. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconText1-BaP_p9DW.js +0 -1
  142. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconTrashCan-DX2w2AIC.js +0 -1
  143. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ai-composer-C-l0eIdP.js +0 -560
  144. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/captions-Cd-bDG3G.js +0 -1
  145. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/clip-highlight-DpAvcA4x.js +0 -1
  146. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/components-e3ZbUVns.js +0 -1
  147. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/disposables-CwUPjcuA.js +0 -1
  148. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/drag-HLBkto5o.js +0 -1
  149. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/dropdown-BJ04G_X3.js +0 -1
  150. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edit-drag-Bg6LggKC.js +0 -1
  151. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edits-a2IixhrN.js +0 -1
  152. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/export-dialog-4I4gqI5V.js +0 -2
  153. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/face-tracker-DzVfjVOO.js +0 -1
  154. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/fit-imported-media-CaCB0x0b.js +0 -1
  155. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/generation-queue-DuL2F4-_.js +0 -1
  156. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-error-CMARA0Hy.js +0 -1
  157. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/jsx-runtime-B-hcVAMW.js +0 -1
  158. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/menubar-Bs26OdwP.js +0 -1
  159. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/meters-YEr9OQjq.js +0 -1
  160. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/paints-DS2Msf91.js +0 -67
  161. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/palette-CcS9IcAC.js +0 -1
  162. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-7M3uQokX.js +0 -1
  163. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-BBK1NyG-.js +0 -1
  164. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-CHZTs7By.js +0 -4
  165. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DaSOa3MP.js +0 -2
  166. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DlK3RYVo.js +0 -1
  167. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Dst5OKWu.js +0 -2
  168. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-H_ZoDiKK.js +0 -2
  169. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Rn9Z7Eek.js +0 -3
  170. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-assets-FAghGFG3.js +0 -678
  171. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-inspector-DEqULBNF.js +0 -260
  172. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-timeline-0GYNz1uc.js +0 -333
  173. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-viewport-DOWjJi5-.js +0 -317
  174. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/projects-BBJc7h5_.js +0 -2
  175. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/session-B9sZaFKC.js +0 -1
  176. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/supercomputer-CX-LCL6Y.js +0 -24
  177. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/tabs-CvKQ-eas.js +0 -1
  178. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/toggle-CrzrwiDZ.js +0 -1
  179. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-BgRfk-Qq.js +0 -69
  180. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-bar-C9nqAfE2.js +0 -1
  181. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/typography-C5-w9LOu-kD3uLKkf.js +0 -1
  182. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useOpenInteractionType-DbrQ6Ehu.js +0 -1
  183. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useRenderElement-bbxXdYq0.js +0 -1
  184. package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/writeback-support-BZfNpkmB.js +0 -1
  185. package/node_modules/@higgsfield/higgsedit/dist/editor/editor-Csn2_T_e.js +0 -293
  186. package/node_modules/@higgsfield/higgsedit/dist/export-settings.mjs +0 -75
  187. package/node_modules/@higgsfield/higgsedit/dist/history.mjs +0 -295
  188. package/node_modules/@higgsfield/higgsedit/dist/media-upload.mjs +0 -381
  189. package/node_modules/@higgsfield/higgsedit/dist/proxy.mjs +0 -170
@@ -5,330 +5,37 @@ const require = __higgseditRequire(import.meta.url);
5
5
  const __filename = __higgseditPath(import.meta.url);
6
6
  const __dirname = __filename.slice(0, __filename.lastIndexOf("/"));
7
7
  import {
8
- transcribe
9
- } from "./chunk-L6QDNSL3.mjs";
8
+ Bitmap,
9
+ decodeAudio,
10
+ decodeFrame,
11
+ frameAt,
12
+ frameTime,
13
+ gridFrame,
14
+ outputDir,
15
+ pool,
16
+ probeMedia,
17
+ resolveMediaPath,
18
+ textHeight,
19
+ textWidth,
20
+ videoSource,
21
+ writeOutput
22
+ } from "./chunk-QJTILFBS.mjs";
10
23
  import {
11
- flag,
12
- parseArgs
13
- } from "./chunk-MCVD2ZQV.mjs";
14
- import {
15
- frameIndexAt
16
- } from "./chunk-WZR5PZM7.mjs";
24
+ transcribe
25
+ } from "./chunk-L5LWBA6A.mjs";
26
+ import "./chunk-PAHMD6SU.mjs";
27
+ import "./chunk-BV5COOQZ.mjs";
17
28
  import {
18
29
  parseTime
19
30
  } from "./chunk-F7YUKEI5.mjs";
20
31
  import {
21
- ffmpeg,
22
- matrixOf,
23
- probe,
24
- requireTool
25
- } from "./chunk-EKFC4S4M.mjs";
32
+ flag,
33
+ parseArgs
34
+ } from "./chunk-MCVD2ZQV.mjs";
26
35
  import "./chunk-75WO2NOF.mjs";
27
36
 
28
37
  // src/media/cli.ts
29
- import { resolve as resolve2 } from "node:path";
30
-
31
- // src/media/image.ts
32
- import { crc32, deflateSync } from "node:zlib";
33
- var GLYPHS = {
34
- "0": [".###.", "#...#", "#..##", "#.#.#", "##..#", "#...#", ".###."],
35
- "1": ["..#..", ".##..", "..#..", "..#..", "..#..", "..#..", ".###."],
36
- "2": [".###.", "#...#", "....#", "...#.", "..#..", ".#...", "#####"],
37
- "3": ["####.", "....#", "....#", ".###.", "....#", "....#", "####."],
38
- "4": ["...#.", "..##.", ".#.#.", "#..#.", "#####", "...#.", "...#."],
39
- "5": ["#####", "#....", "####.", "....#", "....#", "#...#", ".###."],
40
- "6": ["..##.", ".#...", "#....", "####.", "#...#", "#...#", ".###."],
41
- "7": ["#####", "....#", "...#.", "..#..", ".#...", ".#...", ".#..."],
42
- "8": [".###.", "#...#", "#...#", ".###.", "#...#", "#...#", ".###."],
43
- "9": [".###.", "#...#", "#...#", ".####", "....#", "...#.", ".##.."],
44
- ":": [".....", "..#..", "..#..", ".....", "..#..", "..#..", "....."],
45
- "-": [".....", ".....", ".....", ".###.", ".....", ".....", "....."],
46
- ".": [".....", ".....", ".....", ".....", ".....", ".##..", ".##.."],
47
- h: ["#....", "#....", "#.##.", "##..#", "#...#", "#...#", "#...#"],
48
- m: [".....", ".....", "##.#.", "#.#.#", "#.#.#", "#.#.#", "#.#.#"],
49
- s: [".....", ".....", ".####", "#....", ".###.", "....#", "####."],
50
- f: ["..##.", ".#..#", ".#...", "###..", ".#...", ".#...", ".#..."],
51
- " ": [".....", ".....", ".....", ".....", ".....", ".....", "....."]
52
- };
53
- var GLYPH_W = 5;
54
- var GLYPH_H = 7;
55
- var Bitmap = class {
56
- constructor(width, height, background = [0, 0, 0, 255]) {
57
- this.width = width;
58
- this.height = height;
59
- this.data = new Uint8Array(width * height * 4);
60
- this.fill(0, 0, width, height, background);
61
- }
62
- width;
63
- height;
64
- data;
65
- /** Fills a rectangle, alpha-blending over what is there. */
66
- fill(x, y, w, h, [r, g, b, a]) {
67
- const x0 = Math.max(0, Math.round(x));
68
- const y0 = Math.max(0, Math.round(y));
69
- const x1 = Math.min(this.width, Math.round(x + w));
70
- const y1 = Math.min(this.height, Math.round(y + h));
71
- const k = a / 255;
72
- for (let yy = y0; yy < y1; yy++) {
73
- for (let xx = x0; xx < x1; xx++) {
74
- const i = (yy * this.width + xx) * 4;
75
- const d = this.data;
76
- d[i] = Math.round(r * k + d[i] * (1 - k));
77
- d[i + 1] = Math.round(g * k + d[i + 1] * (1 - k));
78
- d[i + 2] = Math.round(b * k + d[i + 2] * (1 - k));
79
- d[i + 3] = 255;
80
- }
81
- }
82
- }
83
- /** Copies an opaque RGBA8 image of `w`x`h` to (`x`, `y`). */
84
- blit(rgba, w, h, x, y) {
85
- for (let row = 0; row < h; row++) {
86
- const yy = y + row;
87
- if (yy < 0 || yy >= this.height) continue;
88
- const from = Math.max(0, -x);
89
- const to = Math.min(w, this.width - x);
90
- if (to <= from) continue;
91
- this.data.set(rgba.subarray((row * w + from) * 4, (row * w + to) * 4), (yy * this.width + x + from) * 4);
92
- }
93
- }
94
- /** Draws `text` with its top-left at (`x`, `y`), each font pixel `px` screen pixels square. */
95
- text(text, x, y, px, color) {
96
- let cx = x;
97
- for (const ch of text) {
98
- const glyph = GLYPHS[ch] ?? GLYPHS[" "];
99
- for (let gy = 0; gy < GLYPH_H; gy++) for (let gx = 0; gx < GLYPH_W; gx++) if (glyph[gy][gx] === "#") this.fill(cx + gx * px, y + gy * px, px, px, color);
100
- cx += (GLYPH_W + 1) * px;
101
- }
102
- }
103
- png() {
104
- return encodePng(this.data, this.width, this.height);
105
- }
106
- };
107
- var textWidth = (text, px) => Math.max(0, [...text].length * (GLYPH_W + 1) * px - px);
108
- var textHeight = (px) => GLYPH_H * px;
109
- var chunk = (type, body) => {
110
- const head = Buffer.alloc(8);
111
- head.writeUInt32BE(body.length, 0);
112
- head.write(type, 4, "latin1");
113
- const crc = Buffer.alloc(4);
114
- crc.writeUInt32BE(crc32(Buffer.concat([head.subarray(4), body])) >>> 0, 0);
115
- return Buffer.concat([head, body, crc]);
116
- };
117
- var FILTER_TYPES = [0, 1, 2, 4];
118
- var paeth = (a, b, c) => {
119
- const p = a + b - c;
120
- const pa = Math.abs(p - a);
121
- const pb = Math.abs(p - b);
122
- const pc = Math.abs(p - c);
123
- return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
124
- };
125
- function encodePng(rgba, width, height) {
126
- const stride = width * 4;
127
- const raw = Buffer.alloc((stride + 1) * height);
128
- const candidates = Array.from({ length: 4 }, () => new Uint8Array(stride));
129
- for (let y = 0; y < height; y++) {
130
- const row = rgba.subarray(y * stride, (y + 1) * stride);
131
- const up = y > 0 ? rgba.subarray((y - 1) * stride, y * stride) : void 0;
132
- const [none, sub, upF, pa] = candidates;
133
- for (let i = 0; i < stride; i++) {
134
- const x = row[i];
135
- const a = i >= 4 ? row[i - 4] : 0;
136
- const b = up ? up[i] : 0;
137
- const c = up && i >= 4 ? up[i - 4] : 0;
138
- none[i] = x;
139
- sub[i] = x - a & 255;
140
- upF[i] = x - b & 255;
141
- pa[i] = x - paeth(a, b, c) & 255;
142
- }
143
- let best = 0;
144
- let bestCost = Infinity;
145
- candidates.forEach((cand, k) => {
146
- let cost = 0;
147
- for (let i = 0; i < stride; i++) cost += cand[i] < 128 ? cand[i] : 256 - cand[i];
148
- if (cost < bestCost) {
149
- bestCost = cost;
150
- best = k;
151
- }
152
- });
153
- raw[y * (stride + 1)] = FILTER_TYPES[best];
154
- raw.set(candidates[best], y * (stride + 1) + 1);
155
- }
156
- const ihdr = Buffer.alloc(13);
157
- ihdr.writeUInt32BE(width, 0);
158
- ihdr.writeUInt32BE(height, 4);
159
- ihdr[8] = 8;
160
- ihdr[9] = 6;
161
- return Buffer.concat([Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]), chunk("IHDR", ihdr), chunk("IDAT", deflateSync(raw, { level: 6 })), chunk("IEND", new Uint8Array(0))]);
162
- }
163
-
164
- // src/media/source.ts
165
- import { execFile } from "node:child_process";
166
- import { randomUUID } from "node:crypto";
167
- import { existsSync, mkdirSync, mkdtempSync, statSync, writeFileSync } from "node:fs";
168
- import { homedir, tmpdir } from "node:os";
169
- import { basename, dirname, isAbsolute, join, resolve } from "node:path";
170
- import { promisify } from "node:util";
171
- var run = promisify(execFile);
172
- function resolveMediaPath(path, base) {
173
- if (path === "~" || path.startsWith("~/")) return join(homedir(), path.slice(1));
174
- if (isAbsolute(path)) return resolve(path);
175
- if (!base) throw new Error(`"${path}" is a relative path: open a project first or pass an absolute path`);
176
- return resolve(base, path);
177
- }
178
- function assertFile(file) {
179
- if (!existsSync(file)) throw new Error(`No such file: ${file}`);
180
- const st = statSync(file);
181
- if (!st.isFile()) throw new Error(`Not a file: ${file}`);
182
- return st.size;
183
- }
184
- var num = (v) => {
185
- if (v === void 0 || v === null || v === "" || v === "N/A") return void 0;
186
- const n = Number(v);
187
- return Number.isFinite(n) ? n : void 0;
188
- };
189
- var str = (v) => typeof v === "string" && v !== "" && v !== "unknown" ? v : void 0;
190
- var rate = (v) => {
191
- const [n, d] = String(v ?? "").split("/").map(Number);
192
- if (!n || !d) return void 0;
193
- return Math.round(n / d * 1e3) / 1e3;
194
- };
195
- var defined = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== void 0));
196
- var IMAGE_FORMATS = /^(image2|.*_pipe|gif|webp|png|apng)$/;
197
- async function probeMedia(file) {
198
- const size = assertFile(file);
199
- const ffprobe = requireTool("ffprobe");
200
- let info;
201
- try {
202
- const { stdout } = await run(ffprobe, ["-v", "error", "-show_format", "-show_streams", "-of", "json", file], { maxBuffer: 1 << 24 });
203
- info = JSON.parse(stdout);
204
- } catch {
205
- return { path: file, name: basename(file), type: "other", size, format: null, tracks: [] };
206
- }
207
- const format = info.format ?? {};
208
- const tracks = (info.streams ?? []).map((s) => {
209
- const tags = s.tags ?? {};
210
- const side = s.side_data_list ?? [];
211
- const video = s.codec_type === "video";
212
- const audio = s.codec_type === "audio";
213
- return defined({
214
- id: Number(s.index),
215
- type: String(s.codec_type ?? "unknown"),
216
- codec: str(s.codec_name) ?? null,
217
- codecLongName: str(s.codec_long_name),
218
- profile: str(s.profile),
219
- language: tags.language ?? "und",
220
- firstTimestamp: num(s.start_time) ?? 0,
221
- duration: num(s.duration) ?? num(format.duration) ?? 0,
222
- bitRate: num(s.bit_rate),
223
- frames: num(s.nb_frames),
224
- ...video ? {
225
- width: num(s.width),
226
- height: num(s.height),
227
- fps: rate(s.avg_frame_rate) ?? rate(s.r_frame_rate),
228
- pixFmt: str(s.pix_fmt),
229
- colorSpace: str(s.color_space),
230
- colorRange: str(s.color_range),
231
- colorTransfer: str(s.color_transfer),
232
- colorPrimaries: str(s.color_primaries),
233
- rotation: num(side.find((d) => d.rotation !== void 0)?.rotation)
234
- } : {},
235
- ...audio ? { sampleRate: num(s.sample_rate), channels: num(s.channels), channelLayout: str(s.channel_layout) } : {}
236
- });
237
- });
238
- const formatName = str(format.format_name) ?? null;
239
- const visual = tracks.find((t) => t.type === "video");
240
- const still = formatName !== null && IMAGE_FORMATS.test(formatName);
241
- const type = visual ? still ? "image" : "video" : tracks.some((t) => t.type === "audio") ? "audio" : "other";
242
- return defined({
243
- path: file,
244
- name: basename(file),
245
- type,
246
- size,
247
- format: formatName,
248
- formatLongName: str(format.format_long_name),
249
- duration: still ? void 0 : num(format.duration),
250
- bitRate: num(format.bit_rate),
251
- width: visual?.width,
252
- height: visual?.height,
253
- tags: format.tags && Object.keys(format.tags).length ? format.tags : void 0,
254
- tracks
255
- });
256
- }
257
- async function videoSource(file) {
258
- assertFile(file);
259
- const p = await probe(file).catch((error) => {
260
- if (error instanceof Error && /no video stream/.test(error.message)) throw new Error(`${file} has no video track`);
261
- throw error;
262
- });
263
- if (!p.timestamps.length) throw new Error(`${file} has no video frames`);
264
- return {
265
- file,
266
- width: p.width,
267
- height: p.height,
268
- fps: p.fps,
269
- duration: p.duration,
270
- origin: Math.max(0, p.timestamps[0]),
271
- timestamps: p.timestamps,
272
- matrix: matrixOf(p),
273
- range: p.colorRange === "pc" ? "full" : "limited"
274
- };
275
- }
276
- var frameAt = (src, t) => frameIndexAt(src.timestamps, src.origin + t, src.fps);
277
- var frameTime = (src, index) => src.timestamps[index] - src.origin;
278
- var gridFrame = (src, index) => Math.round(frameTime(src, index) * src.fps);
279
- var collect = (proc, what) => new Promise((done, failed) => {
280
- const out = [];
281
- const err = [];
282
- proc.stdout.on("data", (b) => out.push(b));
283
- proc.stderr.on("data", (b) => err.push(b));
284
- proc.on("error", failed);
285
- proc.on("close", (code) => code === 0 ? done(Buffer.concat(out)) : failed(new Error(`ffmpeg failed to decode ${what}: ${Buffer.concat(err).toString().trim() || `exit ${code}`}`)));
286
- });
287
- async function decodeFrame(src, index, width, height) {
288
- const pts = src.timestamps[index];
289
- const half = 0.25 / src.fps;
290
- const seek = Math.max(0, pts - src.origin - 2);
291
- const scale = `scale=w=${width}:h=${height}:flags=area:in_color_matrix=${src.matrix}:in_range=${src.range}:out_range=full,format=rgba`;
292
- const proc = ffmpeg(["-copyts", "-ss", seek.toFixed(6), "-noaccurate_seek", "-i", src.file, "-map", "0:v:0", "-vf", `select=gte(t\\,${(pts - half).toFixed(6)}),${scale}`, "-frames:v", "1", "-f", "rawvideo", "-"]);
293
- const bytes = await collect(proc, `frame ${index} of ${src.file}`);
294
- if (bytes.length !== width * height * 4) throw new Error(`could not decode frame ${index} of ${src.file}`);
295
- return new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.length);
296
- }
297
- async function decodeAudio(file, start, end, rate2) {
298
- const proc = ffmpeg(["-ss", start.toFixed(6), "-t", (end - start).toFixed(6), "-i", file, "-map", "0:a:0", "-ac", "1", "-ar", String(rate2), "-f", "f32le", "-"]);
299
- const bytes = await collect(proc, `audio of ${file}`);
300
- const copy = new Uint8Array(bytes.length - bytes.length % 4);
301
- copy.set(bytes.subarray(0, copy.length));
302
- return new Float32Array(copy.buffer);
303
- }
304
- async function pool(items, limit, job) {
305
- const out = [];
306
- let next = 0;
307
- const worker = async () => {
308
- while (next < items.length) {
309
- const i = next++;
310
- out[i] = await job(items[i]);
311
- }
312
- };
313
- await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
314
- return out;
315
- }
316
- function outputDir(dir, prefix) {
317
- if (!dir) return mkdtempSync(join(tmpdir(), `${prefix}-`));
318
- const abs = resolve(dir);
319
- mkdirSync(abs, { recursive: true });
320
- return abs;
321
- }
322
- function writeOutput(data, output, prefix, ext = "png") {
323
- const fresh = `${prefix}-${randomUUID()}.${ext}`;
324
- let file;
325
- if (!output) file = join(tmpdir(), fresh);
326
- else if (existsSync(output) && statSync(output).isDirectory()) file = join(resolve(output), fresh);
327
- else file = resolve(output);
328
- mkdirSync(dirname(file), { recursive: true });
329
- writeFileSync(file, data);
330
- return file;
331
- }
38
+ import { resolve } from "node:path";
332
39
 
333
40
  // src/media/time.ts
334
41
  function seconds(value, fps, duration) {
@@ -338,9 +45,9 @@ function seconds(value, fps, duration) {
338
45
  }
339
46
  var pad = (n) => String(n).padStart(2, "0");
340
47
  var split = (frame, fps) => {
341
- const rate2 = Math.max(1, Math.round(fps));
342
- const f = frame % rate2;
343
- const total = Math.floor(frame / rate2);
48
+ const rate = Math.max(1, Math.round(fps));
49
+ const f = frame % rate;
50
+ const total = Math.floor(frame / rate);
344
51
  return { h: Math.floor(total / 3600), m: Math.floor(total / 60) % 60, s: total % 60, f };
345
52
  };
346
53
  function stamp(frame, fps) {
@@ -414,8 +121,8 @@ async function filmstrip(file, options = {}) {
414
121
  }
415
122
 
416
123
  // src/media/grab.ts
417
- import { writeFileSync as writeFileSync2 } from "node:fs";
418
- import { join as join2 } from "node:path";
124
+ import { writeFileSync } from "node:fs";
125
+ import { join } from "node:path";
419
126
  var FRAME_CAP = 100;
420
127
  var MAX_PER_SHEET = 12;
421
128
  var SHEET_MAX = { width: 2576, height: 1456 };
@@ -484,8 +191,8 @@ async function grab(file, options = {}) {
484
191
  const rgba = await decodeFrame(src, index, size.width, size.height);
485
192
  const sheet = new Bitmap(size.width, size.height);
486
193
  sheet.blit(rgba, size.width, size.height, 0, 0);
487
- const path = join2(dir, `${name(index)}.png`);
488
- writeFileSync2(path, sheet.png());
194
+ const path = join(dir, `${name(index)}.png`);
195
+ writeFileSync(path, sheet.png());
489
196
  return { timecode: name(index), path };
490
197
  })
491
198
  };
@@ -508,8 +215,8 @@ async function grab(file, options = {}) {
508
215
  const first = Math.min(...group);
509
216
  const last = Math.max(...group);
510
217
  const timecode = first === last ? name(first) : `${name(first)}-${name(last)}`;
511
- const path = join2(dir, `${timecode}.png`);
512
- writeFileSync2(path, sheet.png());
218
+ const path = join(dir, `${timecode}.png`);
219
+ writeFileSync(path, sheet.png());
513
220
  return { first, image: { timecode, path } };
514
221
  });
515
222
  return { images: sheets.toSorted((a, b) => a.first - b.first).map((s) => s.image) };
@@ -642,7 +349,7 @@ async function runMedia(argv) {
642
349
  console.log(MEDIA_USAGE);
643
350
  return command ? 1 : 0;
644
351
  }
645
- const file = resolveMediaPath(target, resolve2(flag(args, "project") ?? process.cwd()));
352
+ const file = resolveMediaPath(target, resolve(flag(args, "project") ?? process.cwd()));
646
353
  const output = flag(args, "o", "output");
647
354
  const window2 = { ...flag(args, "s", "start") !== void 0 ? { start: flag(args, "s", "start") } : {}, ...flag(args, "e", "end") !== void 0 ? { end: flag(args, "e", "end") } : {} };
648
355
  const scale = number(flag(args, "x", "scale"), "scale");