@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.
- package/THIRD_PARTY_NOTICES.md +24 -24
- package/dist/cli.mjs +134 -125
- package/dist/index.html +136 -133
- package/dist/launcher.mjs +90 -90
- package/dist/server.mjs +1553 -1389
- package/node_modules/@higgsfield/higgsedit/README.md +181 -1
- package/node_modules/@higgsfield/higgsedit/dist/capture-page.js +902 -314
- package/node_modules/@higgsfield/higgsedit/dist/chunk-2JYLVSVV.mjs +1594 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-2WKNH7OL.mjs +16 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-OMKZ5BXM.mjs → chunk-5LTTL3Q3.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/chunk-7PYXSJS7.mjs +717 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-MLJAIZGP.mjs → chunk-BH2QF635.mjs} +33 -326
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-WZR5PZM7.mjs → chunk-BV5COOQZ.mjs} +250 -161
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-HTCYVKFX.mjs → chunk-C3GSB3XZ.mjs} +8 -7
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-CYH2EUQV.mjs → chunk-DVN4LUXV.mjs} +13 -4
- package/node_modules/@higgsfield/higgsedit/dist/chunk-F4CMIG5G.mjs +36 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-IEPPEDEU.mjs +33 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-UVAZ6I6U.mjs → chunk-KIWGVAPJ.mjs} +16 -12
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-L6QDNSL3.mjs → chunk-L5LWBA6A.mjs} +5 -5
- package/node_modules/@higgsfield/higgsedit/dist/chunk-LMQR3DHT.mjs +37 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-LTKMGZ6T.mjs +58 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-VI6IV6JP.mjs → chunk-MV2JTTBQ.mjs} +65 -47
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-4D6AXU4B.mjs → chunk-NARTAWRN.mjs} +50 -30
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-27NBQ5FA.mjs → chunk-NUXTKQNM.mjs} +33 -21
- package/node_modules/@higgsfield/higgsedit/dist/chunk-OCIZ36XD.mjs +40 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-MK6PL7N4.mjs → chunk-OF6RMSM2.mjs} +19 -17
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-6BETMESC.mjs → chunk-P2BGHTRR.mjs} +2 -2
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-EKFC4S4M.mjs → chunk-PAHMD6SU.mjs} +5 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-QVLAEV3U.mjs → chunk-PFQYUJQL.mjs} +3 -4
- package/node_modules/@higgsfield/higgsedit/dist/chunk-QJTILFBS.mjs +335 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-QQ3GGKDN.mjs +21 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-TH7TK67K.mjs +23 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-SIMO6I3D.mjs → chunk-UDL5AHKO.mjs} +163 -158
- package/node_modules/@higgsfield/higgsedit/dist/chunk-UMWOUQN3.mjs +60 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-3AIM3THH.mjs → chunk-VLM5EOWJ.mjs} +4 -4
- package/node_modules/@higgsfield/higgsedit/dist/chunk-WENFTPXQ.mjs +403 -0
- package/node_modules/@higgsfield/higgsedit/dist/chunk-YLVXQIPX.mjs +464 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/.vite/manifest.json +559 -506
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/agent-corner-bottom-q4hZltI-.svg +431 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/agent-corner-top-BJYI-I24.svg +431 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/confirmation-BTnwl3LS.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/drag-Bt_t4HZO.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/local-B3OTAV_A.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/menubar-2Y1Y2XJt.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/model-DdE4hCgf.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/{IconText1-CzbCrP7v.css → notifications-B08L1jSe.css} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/{panel-g852pZf_.css → panel-BRN_AbBM.css} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-CYELNqrv.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-DYLpT6oA.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-v84HaGTZ.css +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconChainLink1-Bxb1Or0F.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconCheckmark2Medium-daaES9uF.js → IconCheckmark2Medium-hegaz9mQ.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconChevronDownSmall-BhTBJk26.js → IconChevronDownSmall-DaruzJwU.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconClosedCaptioning-BPqcqKsD.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconCrossMedium-acfnCXOM.js → IconCrossMedium-BsPFJzc6.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconOpenaiFilled-D1fzthmi.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconPause-pTeVSvUe.js → IconPause-ClNg8pao.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{IconPlayFilled-CwdgIuDG.js → IconPlayFilled-CHb-7GSx.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconSparklesSoftFilled-o7o33KRn.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ai-composer-B9h-eaki.js +567 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/auto-layout-BO20Tg4B.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{button-CjG6GcgF.js → button-Cg0U0zpV.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/canvas-Bw4CVzfw.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/capabilities-BCd4-zPF.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/commands-QeSqAbCt.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/components-tXMtIZNL.js +51 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/confirmation-CO2PHR_z.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/dom-6aoQn29n.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/drag-Dw8b_vO2.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{editing-CjWbiCxv.js → editing-Cy-SaOyB.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edits-CqLBqir0.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/export-dialog-BjBskOe3.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/factories-Bw_iQrUL.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/id3-CSR0NCRI.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-DP49i4ke.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-error-CMz9sLPe.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ingest-DsmIc415.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/jsx-runtime-B5yqYJvp.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/{media-Bwjxu-0U.js → media-DQw6vU_T.js} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/menubar-D31srALX.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/meters-D0nZVEJs.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/mode-DEG6doKF.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/model-Duf9fszJ.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/model-DyAkLA69.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/notifications-DqWZNIrK.js +9 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/palette-HT83gWgL.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-B5Mvm6dg.js +7 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-BC90wyvd.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Bw_ZJ2JI.js +3 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DNS060Nt.js +3 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DSgxIrEq.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DgBttE5O.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-assets-_T2bHsHW.js +771 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-inspector-DfHvAt5X.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-nBZvHlkA.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-timeline-DsCpJVSt.js +327 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-viewport-CEhZwZ67.js +280 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/projects-2_tW9Do7.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/react-dom-1uB7Vbbb.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/schemas-CddYAOcj.js +64 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/session-BpFeKAI2.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/src-BLG3tYBa.js +2 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/styles-e2n2A_JN.js +284 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/supercomputer-CuV0zYKd.js +24 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/tabs-XeAgs9cs.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/toggle-DbNEaSIl.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-C8Ll3qFl.js +69 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-bar-Dv1LPFbu.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useOpenInteractionType-HWSfSsp2.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useRenderElement-D4SOg3N_.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/value-EB7YmAdS.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/writeback-support-fj5rA9k3.js +1 -0
- package/node_modules/@higgsfield/higgsedit/dist/editor/editor-B-WAkLt7.js +372 -0
- package/node_modules/@higgsfield/higgsedit/dist/higgsedit.mjs +39 -24
- package/node_modules/@higgsfield/higgsedit/dist/jsx/hooks.d.ts +26 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/index.d.ts +17 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/inspect.d.ts +42 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/jsx-runtime.d.ts +28 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/svg.d.ts +9 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/time.d.ts +6 -0
- package/node_modules/@higgsfield/higgsedit/dist/jsx/types.d.ts +420 -0
- package/node_modules/@higgsfield/higgsedit/package.json +28 -20
- package/package.json +4 -3
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/plugin.json +1 -1
- package/plugin/skills/video-editing/references/caption-titling.md +1 -1
- package/plugin/skills/video-editing/references/local-setup.md +3 -3
- package/node_modules/@higgsfield/higgsedit/dist/chunk-C6SASQHE.mjs +0 -424
- package/node_modules/@higgsfield/higgsedit/dist/chunk-FZ5U36SQ.mjs +0 -83
- package/node_modules/@higgsfield/higgsedit/dist/chunk-QLPCYN6K.mjs +0 -292
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/edit-drag-D2EV5ddd.css +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/editor-CuRHT75g.css +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/assets/panel-DnuQD7ja.css +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/FieldControl-B0fenhBJ.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconChainLink1-Cwv1X7hi.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconEyeOpen-BqTT9_VV.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconEyeSlash-Whv58c1m.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPencil-Dr17k_7e.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPlay-BroH3ziH.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconPlusSmall-43T9aE3d.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconText1-BaP_p9DW.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/IconTrashCan-DX2w2AIC.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/ai-composer-C-l0eIdP.js +0 -560
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/captions-Cd-bDG3G.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/clip-highlight-DpAvcA4x.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/components-e3ZbUVns.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/disposables-CwUPjcuA.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/drag-HLBkto5o.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/dropdown-BJ04G_X3.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edit-drag-Bg6LggKC.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/edits-a2IixhrN.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/export-dialog-4I4gqI5V.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/face-tracker-DzVfjVOO.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/fit-imported-media-CaCB0x0b.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/generation-queue-DuL2F4-_.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/import-error-CMARA0Hy.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/jsx-runtime-B-hcVAMW.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/menubar-Bs26OdwP.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/meters-YEr9OQjq.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/paints-DS2Msf91.js +0 -67
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/palette-CcS9IcAC.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-7M3uQokX.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-BBK1NyG-.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-CHZTs7By.js +0 -4
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DaSOa3MP.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-DlK3RYVo.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Dst5OKWu.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-H_ZoDiKK.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-Rn9Z7Eek.js +0 -3
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-assets-FAghGFG3.js +0 -678
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-inspector-DEqULBNF.js +0 -260
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-timeline-0GYNz1uc.js +0 -333
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/panel-viewport-DOWjJi5-.js +0 -317
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/projects-BBJc7h5_.js +0 -2
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/session-B9sZaFKC.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/supercomputer-CX-LCL6Y.js +0 -24
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/tabs-CvKQ-eas.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/toggle-CrzrwiDZ.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-BgRfk-Qq.js +0 -69
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/transport-bar-C9nqAfE2.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/typography-C5-w9LOu-kD3uLKkf.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useOpenInteractionType-DbrQ6Ehu.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/useRenderElement-bbxXdYq0.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/chunks/writeback-support-BZfNpkmB.js +0 -1
- package/node_modules/@higgsfield/higgsedit/dist/editor/editor-Csn2_T_e.js +0 -293
- package/node_modules/@higgsfield/higgsedit/dist/export-settings.mjs +0 -75
- package/node_modules/@higgsfield/higgsedit/dist/history.mjs +0 -295
- package/node_modules/@higgsfield/higgsedit/dist/media-upload.mjs +0 -381
- 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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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
|
|
342
|
-
const f = frame %
|
|
343
|
-
const total = Math.floor(frame /
|
|
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
|
|
418
|
-
import { join
|
|
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 =
|
|
488
|
-
|
|
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 =
|
|
512
|
-
|
|
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,
|
|
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");
|