hyperframes 0.8.191 → 0.8.192

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 (211) hide show
  1. package/dist/{add-S2ZQYG52.js → add-TZU2UW7A.js} +17 -17
  2. package/dist/{animatedGifPrep-3JA2CQ3U.js → animatedGifPrep-NLAXC3VV.js} +11 -10
  3. package/dist/api.js +24 -23
  4. package/dist/{appHistory-TH3TL6N6.js → appHistory-QVCSAOI4.js} +1 -1
  5. package/dist/{asset-2CNTAPOC.js → asset-JAJXA6LB.js} +2 -2
  6. package/dist/{assetCataloger-5HXLXL7C.js → assetCataloger-4WTX3J4I.js} +13 -12
  7. package/dist/{audio-DZTSYHXS.js → audio-XLWC7JKS.js} +22 -21
  8. package/dist/{auth-GX3M6TJ4.js → auth-5K6X3NPJ.js} +4 -4
  9. package/dist/{autoUpdate-EDIWE4Z5.js → autoUpdate-RNV7SKGB.js} +4 -4
  10. package/dist/{backgroundChecks-VPUPJ7UI.js → backgroundChecks-QXLVZVGX.js} +5 -5
  11. package/dist/backgroundChecksWorker.js +5 -5
  12. package/dist/{batchRender-JHIIDBJR.js → batchRender-THKSPDZR.js} +14 -7
  13. package/dist/{beats-PZRVTRYW.js → beats-K7CGCFVL.js} +53 -15
  14. package/dist/{benchmark-22UFDW2N.js → benchmark-PHRDIXNL.js} +18 -14
  15. package/dist/{browser-VRDWYIUM.js → browser-GN6R5ZSK.js} +7 -7
  16. package/dist/{bundleWithLocalizedFonts-23QDKFSN.js → bundleWithLocalizedFonts-C325UNR4.js} +3 -3
  17. package/dist/{capture-TOCLXYMJ.js → capture-6UBQFHZQ.js} +76 -68
  18. package/dist/{capture-NFCBXHDE.js → capture-BZ7APOGQ.js} +3 -3
  19. package/dist/{captureCompositionFrame-BEM6MF7F.js → captureCompositionFrame-VORSCTWC.js} +17 -16
  20. package/dist/{catalog-NXS35KM7.js → catalog-PHU2RUZ3.js} +18 -18
  21. package/dist/{catch-up-6WJBUI2C.js → catch-up-HCNRM46J.js} +7 -7
  22. package/dist/{check-WVEBMWN5.js → check-TJ5ZLB4I.js} +43 -42
  23. package/dist/{checkBrowser-RT45HJ36.js → checkBrowser-DWP7ZXJ7.js} +38 -37
  24. package/dist/{chunk-KAC2WR7P.js → chunk-2HP5GIQ3.js} +3 -3
  25. package/dist/{chunk-2WNVHZHA.js → chunk-2J3NA3OB.js} +13 -13
  26. package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
  27. package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
  28. package/dist/{chunk-3NRB7YXW.js → chunk-2VXY3PEF.js} +96 -67
  29. package/dist/{chunk-LBNEH6IQ.js → chunk-32NB4VMH.js} +1 -1
  30. package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
  31. package/dist/{chunk-JTPHFYZI.js → chunk-3CXIX6XS.js} +68 -7
  32. package/dist/{chunk-MSM6VRQ4.js → chunk-3FV5BVWS.js} +2 -2
  33. package/dist/{chunk-7ZJEQY7Q.js → chunk-4E75LHAL.js} +23 -3
  34. package/dist/{chunk-TMBUBLZB.js → chunk-4HCJOFMB.js} +166 -46
  35. package/dist/{chunk-JJJCFKMF.js → chunk-5IPKQHOL.js} +17 -6
  36. package/dist/{chunk-WQ3X5OH4.js → chunk-5TRFLZ5Z.js} +2 -2
  37. package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
  38. package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
  39. package/dist/{chunk-RE3EEBWC.js → chunk-6WNLQI63.js} +4 -4
  40. package/dist/{chunk-7FF36MAD.js → chunk-6XVKMBUA.js} +9 -6
  41. package/dist/{chunk-7NKJS5KM.js → chunk-7JJMT6LN.js} +1 -1
  42. package/dist/{chunk-JOLZ3BSL.js → chunk-7LLRMYP6.js} +2 -2
  43. package/dist/{chunk-COETAXRN.js → chunk-7RSY7SZN.js} +2 -2
  44. package/dist/{chunk-JGTRVG32.js → chunk-7UZC4N62.js} +1 -1
  45. package/dist/{chunk-XWOCXIKR.js → chunk-A4OI5ZNX.js} +1 -1
  46. package/dist/{chunk-VYQYVYQ5.js → chunk-AEXVVABM.js} +83 -45
  47. package/dist/{chunk-DOOSC34Z.js → chunk-AMZJFCOX.js} +8 -8
  48. package/dist/{chunk-OV6KHXLX.js → chunk-AR46ND2Q.js} +1 -1
  49. package/dist/chunk-B2XLXD7V.js +3897 -0
  50. package/dist/{chunk-XMSQRDAK.js → chunk-BEOK6F26.js} +2 -2
  51. package/dist/{chunk-U5GTDAQL.js → chunk-BPKLUHFT.js} +7 -7
  52. package/dist/{chunk-TFGO5YMI.js → chunk-BV6YE455.js} +2 -2
  53. package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
  54. package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
  55. package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
  56. package/dist/{chunk-KV72BP7O.js → chunk-CXRZBWSH.js} +11 -11
  57. package/dist/chunk-CZGHFATT.js +31 -0
  58. package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
  59. package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
  60. package/dist/{chunk-JYSSPQDT.js → chunk-E5V6WEMK.js} +11 -11
  61. package/dist/{chunk-T5YF32WV.js → chunk-EKGGSAWR.js} +6 -5
  62. package/dist/{chunk-7KVVNF7B.js → chunk-ELP5QZWL.js} +1 -1
  63. package/dist/{chunk-QH3T4WI2.js → chunk-EXAX37XR.js} +8 -2
  64. package/dist/{chunk-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
  65. package/dist/{chunk-W3CS2KFV.js → chunk-GANST5K3.js} +2 -2
  66. package/dist/{chunk-3WJT2JCX.js → chunk-IMSI7IFW.js} +52 -23
  67. package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
  68. package/dist/{chunk-RWYUK7LM.js → chunk-J2ASTCU6.js} +2 -2
  69. package/dist/{chunk-3XI7MIZB.js → chunk-J2BSUF6X.js} +1 -1
  70. package/dist/{chunk-WY3TQ2PT.js → chunk-JCDYDF54.js} +2 -2
  71. package/dist/{chunk-ALEF2F5N.js → chunk-K2AKVYNR.js} +2 -2
  72. package/dist/{chunk-TADJOIFW.js → chunk-KZOZN4PI.js} +4 -4
  73. package/dist/{chunk-CINKQY6M.js → chunk-L2YGSAOL.js} +3 -3
  74. package/dist/{chunk-AQB5M53R.js → chunk-LOKCBZYF.js} +3 -3
  75. package/dist/{chunk-7A65UCMI.js → chunk-MEE4NTPZ.js} +2 -2
  76. package/dist/{chunk-GM3WIOO6.js → chunk-MGBUWPXX.js} +2 -2
  77. package/dist/{chunk-ZHKUIC7X.js → chunk-MVIJTXN5.js} +21 -14
  78. package/dist/{chunk-SMEF3TRJ.js → chunk-ODBYZIOH.js} +15 -15
  79. package/dist/{chunk-NJGTNWQY.js → chunk-OQL4AJ4X.js} +6 -6
  80. package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
  81. package/dist/{chunk-7LUJE3II.js → chunk-PFRG5P32.js} +1 -1
  82. package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
  83. package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
  84. package/dist/{chunk-TJKE4EYX.js → chunk-QWLES6YV.js} +3 -3
  85. package/dist/{chunk-NMDUSCCE.js → chunk-QX4TB4NH.js} +160 -56
  86. package/dist/{chunk-CXMXJEVY.js → chunk-R2U2G4OS.js} +1 -1
  87. package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
  88. package/dist/{chunk-KGMHMYWI.js → chunk-RHYOWDI6.js} +2 -2
  89. package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
  90. package/dist/chunk-RXATE6FZ.js +385 -0
  91. package/dist/{chunk-EFCKV7MY.js → chunk-SBBQFPCJ.js} +1 -1
  92. package/dist/{chunk-KHCTBZGJ.js → chunk-SK7TR7BL.js} +4 -4
  93. package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
  94. package/dist/{chunk-TRZVS6TL.js → chunk-T6O5OLN2.js} +3 -3
  95. package/dist/{chunk-TFMZ4RKM.js → chunk-ULTKB5FC.js} +23 -12
  96. package/dist/{chunk-UNR3P7IF.js → chunk-VNPADTDD.js} +3 -3
  97. package/dist/{chunk-BFFLKQVB.js → chunk-VOM2HLUI.js} +4 -4
  98. package/dist/{chunk-GLG5JWLI.js → chunk-VRAXIQ6I.js} +2 -2
  99. package/dist/{chunk-NAUKCKCJ.js → chunk-W24SZ5FL.js} +4 -4
  100. package/dist/{chunk-COWQITWP.js → chunk-WOKVXK4J.js} +1 -1
  101. package/dist/{chunk-WJEVUPVD.js → chunk-XF77MK3J.js} +1 -1
  102. package/dist/{chunk-HYW6HTAK.js → chunk-XX2PA4L3.js} +2 -2
  103. package/dist/{chunk-RQBB7PYT.js → chunk-YMQQXPD5.js} +2 -2
  104. package/dist/{chunk-WHAEJX26.js → chunk-YWRQHRDY.js} +17 -12
  105. package/dist/{chunk-FBDOHH3Q.js → chunk-ZEMDV6W2.js} +29 -59
  106. package/dist/{clean-3VIU2BSK.js → clean-2RNCTDBT.js} +40 -27
  107. package/dist/cli.js +69 -67
  108. package/dist/{cloud-NA3J4XW2.js → cloud-NFIKESNZ.js} +4 -4
  109. package/dist/{cloudrun-4MHOF7UT.js → cloudrun-7224BCX3.js} +9 -9
  110. package/dist/commands/contrast-audit.browser.js +1 -1
  111. package/dist/{compare-ZR7XRPPT.js → compare-HL44MXVX.js} +76 -47
  112. package/dist/{compiler-MA2ELZPG.js → compiler-WF5QTXV7.js} +8 -7
  113. package/dist/{component-ZJSOPUAM.js → component-ZBZXSJBR.js} +3 -3
  114. package/dist/{compositions-WA5V2SHF.js → compositions-76P7LDDX.js} +19 -17
  115. package/dist/{contactSheet-CAGMKI3E.js → contactSheet-43ISAESM.js} +2 -2
  116. package/dist/{delete-UC427UEA.js → delete-4YZBYOHJ.js} +7 -7
  117. package/dist/{deploy-B5UO4UIK.js → deploy-UGUUGYLF.js} +1 -1
  118. package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
  119. package/dist/{dist-BPK37SAB.js → dist-5KKCRFPT.js} +5 -5
  120. package/dist/{dist-XGPSPKKP.js → dist-QQ26RUDV.js} +5 -4
  121. package/dist/{doctor-ZERCTKEK.js → doctor-GGVUK4NB.js} +20 -19
  122. package/dist/{events-DCOZQERS.js → events-OXPTHVDB.js} +4 -4
  123. package/dist/{events-CNIXB2QK.js → events-V2VU4J3B.js} +5 -5
  124. package/dist/{feedback-YBD5ITTY.js → feedback-HFZ5SCUK.js} +16 -16
  125. package/dist/{ffmpeg-V4BBFDTG.js → ffmpeg-3VHY7GO3.js} +13 -12
  126. package/dist/{figma-Z45ZYVGE.js → figma-7SEZTLBJ.js} +3 -3
  127. package/dist/fontLocalizeCli.js +14 -13
  128. package/dist/{get-23NXQWCD.js → get-Y2S2PXCM.js} +7 -7
  129. package/dist/{gpuPolicy-H6ABHVEB.js → gpuPolicy-UHPOWRV5.js} +11 -10
  130. package/dist/{grade-compare-ZPX2G3UV.js → grade-compare-4VTXSQM5.js} +38 -37
  131. package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
  132. package/dist/{help-EP4CDPLO.js → help-HXNOACHI.js} +1 -1
  133. package/dist/{history-E5OSXO74.js → history-XDJUI4LC.js} +39 -16
  134. package/dist/hyperframe.manifest.json +1 -1
  135. package/dist/hyperframe.runtime.iife.js +59 -59
  136. package/dist/hyperframes-player.global.js +3 -3
  137. package/dist/hyperframes-slideshow.global.js +1 -1
  138. package/dist/{info-2HHGSW5H.js → info-KYRI3EZV.js} +56 -22
  139. package/dist/{init-ENEG6RZT.js → init-IL7EWMT5.js} +38 -45
  140. package/dist/{inspect-PVQK4E2A.js → inspect-TBNH23UC.js} +36 -35
  141. package/dist/{installer-YGGLEOSF.js → installer-O2YMFSI4.js} +8 -8
  142. package/dist/{keyframes-UWSYS2SL.js → keyframes-4GF62KAJ.js} +13 -14
  143. package/dist/{lambda-L3LPXC2M.js → lambda-JFL6M4XZ.js} +11 -11
  144. package/dist/{layout-JVL4QREC.js → layout-7MAEFR65.js} +36 -35
  145. package/dist/{lint-JXQ72DDB.js → lint-4AYHKYAM.js} +23 -16
  146. package/dist/{lintProject-F7IC7WY4.js → lintProject-52SLJPRC.js} +5 -4
  147. package/dist/{list-UFMLM3VV.js → list-3DP3D3MW.js} +7 -7
  148. package/dist/{login-CKGMWQJN.js → login-T54WQYRQ.js} +7 -7
  149. package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
  150. package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
  151. package/dist/{manager-U6OP3EXB.js → manager-QROK2IH3.js} +14 -13
  152. package/dist/{media-treatment-MFMEWCDY.js → media-treatment-4CXF7MSG.js} +20 -19
  153. package/dist/{models-QA3TJ75Y.js → models-IS3I6JKU.js} +18 -17
  154. package/dist/{motionShot-NV2OPJHD.js → motionShot-DVYJZOTQ.js} +21 -20
  155. package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
  156. package/dist/{normalize-audio-JWJRUKK2.js → normalize-audio-4527JIK4.js} +12 -8
  157. package/dist/{open-PTJNDRER.js → open-5JE46SAX.js} +18 -18
  158. package/dist/{parakeetRunner-B5FCWWOO.js → parakeetRunner-7JIJGJJ7.js} +20 -19
  159. package/dist/{pipeline-N26NA6ZG.js → pipeline-YEN3WFD2.js} +15 -14
  160. package/dist/{play-45D6X6TV.js → play-WFX67I7M.js} +27 -26
  161. package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
  162. package/dist/{preflight-MFOHPUOI.js → preflight-D377HVUZ.js} +15 -14
  163. package/dist/{present-IFBUDI4D.js → present-XTSEKAC7.js} +24 -23
  164. package/dist/{preview-MQRLXQOV.js → preview-5XH7EK6O.js} +27 -26
  165. package/dist/{producer-2QG7HLAW.js → producer-TFFYF4ZM.js} +1 -1
  166. package/dist/{projectConfig-I4FTZXHB.js → projectConfig-6YUJHMCL.js} +10 -10
  167. package/dist/{publication-3GOFXCGU.js → publication-JK33Y55E.js} +5 -5
  168. package/dist/{publish-3B2TZCFH.js → publish-JHDGXWXU.js} +18 -17
  169. package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
  170. package/dist/{remove-background-RK4BJDBF.js → remove-background-P44MYAPJ.js} +16 -15
  171. package/dist/{render-BV6FWFX3.js → render-HJ34EGMN.js} +8 -8
  172. package/dist/{render-PW3XGS7B.js → render-RBINWWP5.js} +42 -41
  173. package/dist/{render-SJ4HFPFU.js → render-RJ3I4E3A.js} +26 -25
  174. package/dist/{render-batch-GKX54O6N.js → render-batch-3D6XQYUC.js} +9 -9
  175. package/dist/renderSetupWorker.js +9 -8
  176. package/dist/{resolver-RQJ7CNXD.js → resolver-HCLTFZUW.js} +7 -7
  177. package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
  178. package/dist/{sherpa-XZPG7QFF.js → sherpa-IPOUJM6Q.js} +19 -18
  179. package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
  180. package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
  181. package/dist/{skills-EYLB2V6F.js → skills-P67QEERC.js} +13 -75
  182. package/dist/{skillsUpdateCheck-TE6K5ROM.js → skillsUpdateCheck-IFMLRVIF.js} +5 -5
  183. package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
  184. package/dist/{snapshot-FE4T3SCN.js → snapshot-4YM4NNWJ.js} +48 -45
  185. package/dist/{src-SEJ7LNNB.js → src-DCD3YMXX.js} +13 -12
  186. package/dist/{src-ZOXSEJCD.js → src-SSV66L3F.js} +14 -9
  187. package/dist/{staticProjectServer-LSVIRDRO.js → staticProjectServer-C7PPGLEQ.js} +22 -21
  188. package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
  189. package/dist/studio/assets/{hyperframes-player-Bv9hQ3v7.js → hyperframes-player-ChN3cOr0.js} +3 -3
  190. package/dist/studio/assets/{index-Df14bh-L.js → index-BYbFcRR0.js} +1 -1
  191. package/dist/studio/assets/{index-D_QqfWhx.js → index-CHu83hHM.js} +122 -122
  192. package/dist/studio/assets/{index-CBO8uz7-.css → index-CYbvOVp-.css} +1 -1
  193. package/dist/studio/index.html +2 -2
  194. package/dist/{studio-api-SL2Z76NU.js → studio-api-6YZ7PIQR.js} +17 -14
  195. package/dist/{studioServer-BADWVIHU.js → studioServer-EWHSE4GC.js} +60 -59
  196. package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
  197. package/dist/{telemetry-RN6VYEID.js → telemetry-GGLBHZRZ.js} +5 -5
  198. package/dist/{timeline-JBTCIPLU.js → timeline-NKHQJXJ2.js} +65 -43
  199. package/dist/{tokens-A7V7UHNK.js → tokens-FWNNDJ6R.js} +2 -2
  200. package/dist/{transcribe-NTUCJGFI.js → transcribe-TRPKXZ7L.js} +26 -25
  201. package/dist/{transcribe-E4BOSNM4.js → transcribe-VD2TMMC2.js} +17 -16
  202. package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
  203. package/dist/{updateCheck-M7UAYLUR.js → updateCheck-CUPS6LU3.js} +4 -4
  204. package/dist/{upgrade-A2COSIMB.js → upgrade-23XO6MEX.js} +4 -4
  205. package/dist/{urlDownloader-MBSQYART.js → urlDownloader-YOAOONCK.js} +10 -9
  206. package/dist/{validate-NODZYBHY.js → validate-BWIW24G5.js} +30 -29
  207. package/dist/{video-LBCUUYK7.js → video-XRXJS4GC.js} +12 -11
  208. package/dist/warmCheck.js +43 -42
  209. package/package.json +2 -1
  210. package/dist/chunk-I5JRXMCV.js +0 -6077
  211. package/dist/chunk-LM265QNK.js +0 -3896
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  readCompositionFps
9
- } from "./chunk-7FF36MAD.js";
9
+ } from "./chunk-6XVKMBUA.js";
10
10
  import {
11
11
  errorBox
12
12
  } from "./chunk-K2FLNJVB.js";
@@ -16,10 +16,10 @@ import {
16
16
  import {
17
17
  DEFAULT_CONFIG,
18
18
  resolvePageNavigationTimeout
19
- } from "./chunk-NMDUSCCE.js";
19
+ } from "./chunk-QX4TB4NH.js";
20
20
  import {
21
21
  parseFps
22
- } from "./chunk-GM3WIOO6.js";
22
+ } from "./chunk-MGBUWPXX.js";
23
23
 
24
24
  // src/browser/windowsCrash.ts
25
25
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -26,7 +26,7 @@ import {
26
26
  renderFrameIdForRenderId,
27
27
  resolveAuthoredTimingWindow,
28
28
  toFps
29
- } from "./chunk-GM3WIOO6.js";
29
+ } from "./chunk-MGBUWPXX.js";
30
30
  import {
31
31
  AUDIO_GROUP_RENDER_ID_ATTR,
32
32
  COLOR_GRADING_SOURCE_HIDDEN_ATTR,
@@ -63,7 +63,7 @@ import {
63
63
  sourceTimeAt,
64
64
  timeAtSourceTime,
65
65
  volumeSegmentSampleCount
66
- } from "./chunk-LM265QNK.js";
66
+ } from "./chunk-B2XLXD7V.js";
67
67
  import {
68
68
  clampAudioGain,
69
69
  clipGain,
@@ -83,7 +83,7 @@ import {
83
83
  } from "./chunk-4UMPIPCQ.js";
84
84
  import {
85
85
  resolveReferencedStart
86
- } from "./chunk-3NRB7YXW.js";
86
+ } from "./chunk-2VXY3PEF.js";
87
87
  import {
88
88
  FFMPEG_PATH_ENV,
89
89
  FFPROBE_PATH_ENV,
@@ -4778,8 +4778,11 @@ async function sampleProcessRss(pids, exec = defaultExec(), platform = process.p
4778
4778
  if (platform === "win32") {
4779
4779
  const results = [];
4780
4780
  for (const pid of unique) {
4781
- const { stdout: stdout2 } = await exec("tasklist", ["/FO", "CSV", "/NH", "/FI", `PID eq ${pid}`]);
4782
- results.push(...parseTasklistCsv(pid, stdout2));
4781
+ try {
4782
+ const { stdout: stdout2 } = await exec("tasklist", ["/FO", "CSV", "/NH", "/FI", `PID eq ${pid}`]);
4783
+ results.push(...parseTasklistCsv(pid, stdout2));
4784
+ } catch {
4785
+ }
4783
4786
  }
4784
4787
  return results;
4785
4788
  }
@@ -8544,6 +8547,7 @@ var videoMetadataCache = /* @__PURE__ */ new Map();
8544
8547
  var finalVideoFrameTimestampCache = /* @__PURE__ */ new Map();
8545
8548
  var finalVideoFrameTimestampSignalCaches = /* @__PURE__ */ new WeakMap();
8546
8549
  var audioMetadataCache = /* @__PURE__ */ new Map();
8550
+ var audioMetadataSignalCaches = /* @__PURE__ */ new WeakMap();
8547
8551
  var mediaProbeOutputCache = /* @__PURE__ */ new Map();
8548
8552
  var mediaProbeOutputSignalCaches = /* @__PURE__ */ new WeakMap();
8549
8553
  var MEDIA_PROBE_OUTPUT_CACHE_MAX_ENTRIES = 128;
@@ -8599,7 +8603,16 @@ function isPngImageProbe(output) {
8599
8603
  (stream) => stream.codec_type === "video" && stream.codec_name?.toLowerCase() === "png"
8600
8604
  );
8601
8605
  }
8606
+ var contentAddressedUrls = /* @__PURE__ */ new Map();
8607
+ var withoutQuery = (url) => url.split(/[?#]/, 1)[0] ?? url;
8608
+ function declareContentAddressedUrl(url, sha256) {
8609
+ contentAddressedUrls.set(withoutQuery(url), sha256);
8610
+ }
8602
8611
  function mediaFileIdentity(filePath) {
8612
+ if (/^https?:\/\//i.test(filePath)) {
8613
+ const sha256 = contentAddressedUrls.get(withoutQuery(filePath));
8614
+ return sha256 ? `sha256:${sha256}` : null;
8615
+ }
8603
8616
  try {
8604
8617
  const stat = statSync2(filePath, { bigint: true });
8605
8618
  return [stat.dev, stat.ino, stat.size, stat.mtimeNs, stat.ctimeNs].join(":");
@@ -8951,44 +8964,51 @@ async function extractFinalVideoFrameTimestamp(filePath, metadata, signal) {
8951
8964
  var extractVideoMetadata = extractMediaMetadata;
8952
8965
  async function extractAudioMetadata(filePath, options) {
8953
8966
  const identity = mediaFileIdentity(filePath);
8954
- const cached = options?.signal ? void 0 : readMetadataCache(audioMetadataCache, filePath, identity);
8967
+ const signal = options?.signal;
8968
+ if (signal && identity === null) return probeAudioMetadata(filePath, signal);
8969
+ let cache = audioMetadataCache;
8970
+ if (signal) {
8971
+ cache = audioMetadataSignalCaches.get(signal) ?? /* @__PURE__ */ new Map();
8972
+ audioMetadataSignalCaches.set(signal, cache);
8973
+ }
8974
+ const cached = readMetadataCache(cache, filePath, identity);
8955
8975
  if (cached) return cached;
8956
- const probePromise = (async () => {
8957
- const output = await probeMediaOutput(filePath, options?.signal);
8958
- const audioStream = output.streams.find((s) => s.codec_type === "audio");
8959
- if (!audioStream) throw new Error("[FFmpeg] No audio stream found");
8960
- let durationSeconds = output.format.duration ? parseFloat(output.format.duration) : 0;
8961
- const streamDuration = audioStream.duration ? parseFloat(audioStream.duration) : void 0;
8962
- const sampleRate = audioStream.sample_rate ? parseInt(audioStream.sample_rate) : 44100;
8963
- const audioCodec = audioStream.codec_name || "unknown";
8964
- if (sampleRate > 0) {
8965
- const decoded = await probeDecodedAudioDuration(
8966
- filePath,
8967
- sampleRate,
8968
- audioStartSeconds(audioStream, output.format),
8969
- durationSeconds,
8970
- options?.signal
8971
- );
8972
- if (decoded !== null) {
8973
- durationSeconds = reconcileAudioDuration(durationSeconds, decoded, output.format);
8974
- }
8975
- }
8976
- return {
8977
- durationSeconds,
8978
- streamDurationSeconds: streamDuration && streamDuration > 0 ? streamDuration : void 0,
8979
- sampleRate,
8980
- channels: audioStream.channels || 2,
8981
- audioCodec,
8982
- bitrate: output.format.bit_rate ? parseInt(output.format.bit_rate) : void 0,
8983
- latestStreamLeadSeconds: latestStreamLeadSeconds(output),
8984
- audioStreamLeadSeconds: streamLeadSeconds(output, audioStream),
8985
- audioStreamCount: output.streams.filter((s) => s.codec_type === "audio").length
8986
- };
8987
- })();
8988
- if (options?.signal) return probePromise;
8989
- writeMetadataCache(audioMetadataCache, filePath, identity, probePromise);
8976
+ const probePromise = probeAudioMetadata(filePath, signal);
8977
+ writeMetadataCache(cache, filePath, identity, probePromise);
8990
8978
  return probePromise;
8991
8979
  }
8980
+ async function probeAudioMetadata(filePath, signal) {
8981
+ const output = await probeMediaOutput(filePath, signal);
8982
+ const audioStream = output.streams.find((s) => s.codec_type === "audio");
8983
+ if (!audioStream) throw new Error("[FFmpeg] No audio stream found");
8984
+ let durationSeconds = output.format.duration ? parseFloat(output.format.duration) : 0;
8985
+ const streamDuration = audioStream.duration ? parseFloat(audioStream.duration) : void 0;
8986
+ const sampleRate = audioStream.sample_rate ? parseInt(audioStream.sample_rate) : 44100;
8987
+ const audioCodec = audioStream.codec_name || "unknown";
8988
+ if (sampleRate > 0) {
8989
+ const decoded = await probeDecodedAudioDuration(
8990
+ filePath,
8991
+ sampleRate,
8992
+ audioStartSeconds(audioStream, output.format),
8993
+ durationSeconds,
8994
+ signal
8995
+ );
8996
+ if (decoded !== null) {
8997
+ durationSeconds = reconcileAudioDuration(durationSeconds, decoded, output.format);
8998
+ }
8999
+ }
9000
+ return {
9001
+ durationSeconds,
9002
+ streamDurationSeconds: streamDuration && streamDuration > 0 ? streamDuration : void 0,
9003
+ sampleRate,
9004
+ channels: audioStream.channels || 2,
9005
+ audioCodec,
9006
+ bitrate: output.format.bit_rate ? parseInt(output.format.bit_rate) : void 0,
9007
+ latestStreamLeadSeconds: latestStreamLeadSeconds(output),
9008
+ audioStreamLeadSeconds: streamLeadSeconds(output, audioStream),
9009
+ audioStreamCount: output.streams.filter((s) => s.codec_type === "audio").length
9010
+ };
9011
+ }
8992
9012
  function audioVideoStreamStarts(output) {
8993
9013
  return (output?.streams ?? []).filter(
8994
9014
  (s) => (s.codec_type === "audio" || s.codec_type === "video") && s.disposition?.attached_pic !== 1
@@ -9124,8 +9144,10 @@ async function analyzeKeyframeIntervalsUncached(filePath, videoStreamStartSecond
9124
9144
 
9125
9145
  // ../engine/src/services/softwareEncoderThreads.ts
9126
9146
  import { availableParallelism } from "os";
9127
- function appendSoftwareEncoderThreadsArg(args, parallelism = availableParallelism()) {
9128
- args.push("-threads", String(Math.max(1, Math.floor(parallelism))));
9147
+ var X265_MAX_THREADS = 16;
9148
+ function appendSoftwareEncoderThreadsArg(args, encoder, parallelism = availableParallelism()) {
9149
+ const cap = encoder === "libx265" ? X265_MAX_THREADS : Infinity;
9150
+ args.push("-threads", String(Math.min(cap, Math.max(1, Math.floor(parallelism)))));
9129
9151
  }
9130
9152
 
9131
9153
  // ../engine/src/utils/renderProvenance.ts
@@ -9352,7 +9374,7 @@ function buildEncoderArgs(options, inputArgs, outputPath, gpuEncoder = null) {
9352
9374
  } else {
9353
9375
  const encoderName = codec === "h264" ? "libx264" : "libx265";
9354
9376
  args.push("-c:v", encoderName, "-preset", preset);
9355
- appendSoftwareEncoderThreadsArg(args);
9377
+ appendSoftwareEncoderThreadsArg(args, encoderName);
9356
9378
  if (bitrate) args.push("-b:v", bitrate);
9357
9379
  else args.push("-crf", String(quality));
9358
9380
  const gop = resolveLockedGopSize(options);
@@ -10057,7 +10079,7 @@ function buildStreamingArgs(options, outputPath, gpuEncoder = null) {
10057
10079
  } else {
10058
10080
  const encoderName = codec === "h264" ? "libx264" : "libx265";
10059
10081
  args.push("-c:v", encoderName, "-preset", preset);
10060
- appendSoftwareEncoderThreadsArg(args);
10082
+ appendSoftwareEncoderThreadsArg(args, encoderName);
10061
10083
  if (bitrate) args.push("-b:v", bitrate);
10062
10084
  else args.push("-crf", String(quality));
10063
10085
  const lockedGop = resolveLockedGopSize(options);
@@ -11481,7 +11503,7 @@ function getSingleMeaningfulChild(container) {
11481
11503
  }
11482
11504
  function unwrapTemplate(html) {
11483
11505
  const lowered = html.toLowerCase();
11484
- if (!lowered.includes("<template") || !lowered.includes("</template>")) {
11506
+ if (!lowered.includes("<template") || !/<\/template[ \t\n\r\f]*>/.test(lowered)) {
11485
11507
  return html;
11486
11508
  }
11487
11509
  const { body } = parseHTMLContent(html);
@@ -11575,7 +11597,7 @@ function isTargetExistsRenameError(err) {
11575
11597
  return code === "EEXIST" || code === "ENOTEMPTY" || code === "EPERM";
11576
11598
  }
11577
11599
  function adoptPublishedWinner(entry, partialDir) {
11578
- if (!existsSync8(join9(entry.dir, COMPLETE_SENTINEL))) return null;
11600
+ if (!existsSync8(join9(entry.dir, COMPLETE_SENTINEL)) || !hasFrameFiles(entry.dir)) return null;
11579
11601
  removeDir(partialDir);
11580
11602
  return { dir: entry.dir, published: true };
11581
11603
  }
@@ -15269,6 +15291,7 @@ function legacyFilterScriptOptionIsUnsupported(stderr) {
15269
15291
  return /filter_complex_script/i.test(stderr) && /(?:unrecognized option|option (?:was )?not found)/i.test(stderr);
15270
15292
  }
15271
15293
  var inPrepareSlot = createConcurrencyLimit(Math.max(2, Math.floor(cpus2().length / 2)));
15294
+ var inRemotePrepareSlot = createConcurrencyLimit(16);
15272
15295
  var MAX_VOLUME_SEGMENTS = 32;
15273
15296
  var VOLUME_SIMPLIFY_EPSILON = 5e-3;
15274
15297
  var STEREO_CHANNEL_FILTER = "pan=stereo|FL=FL+FC|FR=FR+FC";
@@ -15485,8 +15508,11 @@ function parseAudioElements(html) {
15485
15508
  const startCache = /* @__PURE__ */ new Map();
15486
15509
  const visiting = /* @__PURE__ */ new Set();
15487
15510
  const resolveStart = (el) => el.getAttribute("data-start") ? resolveReferencedStart(document2, el, startCache, visiting) : 0;
15488
- const parseEnd = (raw) => {
15489
- return parseStrictFiniteTimingNumber(raw) ?? 0;
15511
+ const resolveEnd = (el) => {
15512
+ const end = parseStrictFiniteTimingNumber(el.getAttribute("data-end"));
15513
+ if (end != null) return end;
15514
+ const duration = parseStrictFiniteTimingNumber(el.getAttribute("data-duration"));
15515
+ return duration != null && duration > 0 ? resolveStart(el) + duration : 0;
15490
15516
  };
15491
15517
  const isHidden = isSelfOrAncestorHidden;
15492
15518
  const groupsById = new Map(
@@ -15505,9 +15531,10 @@ function parseAudioElements(html) {
15505
15531
  id,
15506
15532
  src,
15507
15533
  start: resolveStart(el),
15508
- end: parseEnd(el.getAttribute("data-end")),
15534
+ end: resolveEnd(el),
15509
15535
  mediaStart: readMediaStart(el),
15510
15536
  playbackRate: readElementRateSpec(el),
15537
+ loop: el.getAttribute("loop") !== null,
15511
15538
  layer: layerAttr ? parseInt(layerAttr) : 0,
15512
15539
  volume: volumeAttr ? parseFloat(volumeAttr) : 1,
15513
15540
  ...fades.fadeIn > 0 ? { fadeIn: fades.fadeIn } : {},
@@ -15543,7 +15570,7 @@ function parseAudioElements(html) {
15543
15570
  }
15544
15571
  var FAIL_ON_READ_ERROR_INSTEAD_OF_ENDING_THERE = ["-xerror"];
15545
15572
  var SIDECAR_WARM_UP_SECONDS = 1;
15546
- async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, duration, playbackRate = 1, signal, config, audioSidecarUrl) {
15573
+ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, duration, playbackRate = 1, signal, config, audioSidecarUrl, options) {
15547
15574
  const ffmpegProcessTimeout = config?.ffmpegProcessTimeout ?? DEFAULT_CONFIG.ffmpegProcessTimeout;
15548
15575
  const outputDir = dirname7(outputPath);
15549
15576
  if (!existsSync11(outputDir)) mkdirSync7(outputDir, { recursive: true });
@@ -15553,7 +15580,62 @@ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, durat
15553
15580
  const metadata = readsUrl ? await extractAudioMetadata(srcPath, { signal }).catch((error) => {
15554
15581
  if (signal?.aborted) throw error;
15555
15582
  return extractAudioMetadata(srcPath, { signal });
15556
- }) : await extractAudioMetadata(srcPath).catch(() => null);
15583
+ }) : await extractAudioMetadata(srcPath).catch((error) => {
15584
+ if (options?.loop) throw error;
15585
+ return null;
15586
+ });
15587
+ const loopDuration = (metadata?.durationSeconds ?? 0) - mediaStart;
15588
+ if (options?.loop && loopDuration > 0 && sourceDuration > loopDuration) {
15589
+ const cycleDir = mkdtempSync7(join14(outputDir, ".audio-loop-"));
15590
+ const cyclePath = join14(cycleDir, "cycle.wav");
15591
+ try {
15592
+ const cycle = await extractAudioSegment(
15593
+ srcPath,
15594
+ cyclePath,
15595
+ stage,
15596
+ mediaStart,
15597
+ loopDuration,
15598
+ 1,
15599
+ signal,
15600
+ config,
15601
+ audioSidecarUrl,
15602
+ { padToDuration: true }
15603
+ );
15604
+ if (!cycle.success) return { ...cycle, outputPath };
15605
+ const outputArgs2 = preparedAudioOutputArgs(metadata, normalizedPlaybackRate, duration, null);
15606
+ const result2 = await runFfmpeg(
15607
+ [
15608
+ "-stream_loop",
15609
+ "-1",
15610
+ "-t",
15611
+ String(sourceDuration),
15612
+ "-i",
15613
+ cyclePath,
15614
+ "-vn",
15615
+ "-acodec",
15616
+ "pcm_s16le",
15617
+ "-ar",
15618
+ "48000",
15619
+ ...outputArgs2,
15620
+ "-t",
15621
+ String(duration),
15622
+ "-y",
15623
+ outputPath
15624
+ ],
15625
+ { signal, timeout: ffmpegProcessTimeout }
15626
+ );
15627
+ const failure2 = result2.success ? void 0 : ffmpegFailure(stage, result2, ffmpegProcessTimeout);
15628
+ return {
15629
+ success: result2.success,
15630
+ outputPath,
15631
+ durationMs: cycle.durationMs + result2.durationMs,
15632
+ error: failure2?.detail,
15633
+ failure: failure2
15634
+ };
15635
+ } finally {
15636
+ rmSync8(cycleDir, { recursive: true, force: true });
15637
+ }
15638
+ }
15557
15639
  const inputSeek = mediaStart >= (metadata?.latestStreamLeadSeconds ?? 0);
15558
15640
  const start = formatFilterNumber(mediaStart);
15559
15641
  const timestampTrim = inputSeek ? null : `atrim=start=${start}:end=${formatFilterNumber(mediaStart + sourceDuration)},asetpts=PTS-${start}/TB,aresample=async=1:first_pts=0`;
@@ -15563,7 +15645,10 @@ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, durat
15563
15645
  metadata,
15564
15646
  normalizedPlaybackRate,
15565
15647
  duration,
15566
- warmUp > 0 ? `atrim=start=${warmUp},asetpts=PTS-STARTPTS` : timestampTrim
15648
+ [
15649
+ warmUp > 0 ? `atrim=start=${warmUp},asetpts=PTS-STARTPTS` : timestampTrim,
15650
+ ...options?.padToDuration ? ["apad"] : []
15651
+ ].filter(Boolean).join(",") || null
15567
15652
  );
15568
15653
  const readFrom = fromSidecar ? audioSidecarUrl : srcPath;
15569
15654
  const args = [
@@ -15574,7 +15659,7 @@ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, durat
15574
15659
  readFrom
15575
15660
  ];
15576
15661
  args.push("-vn", "-acodec", "pcm_s16le", "-ar", "48000", ...outputArgs);
15577
- if (normalizedPlaybackRate !== 1) args.push("-t", String(duration));
15662
+ if (normalizedPlaybackRate !== 1 || options?.padToDuration) args.push("-t", String(duration));
15578
15663
  args.push("-y", outputPath);
15579
15664
  const result = await runFfmpeg(args, { signal, timeout: ffmpegProcessTimeout });
15580
15665
  if (signal?.aborted) {
@@ -15606,6 +15691,17 @@ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, durat
15606
15691
  failure
15607
15692
  };
15608
15693
  }
15694
+ function isRemoteElement(element, baseDir, compiledDir, config) {
15695
+ if (isHttpUrl(element.src)) return true;
15696
+ if (!config?.urlByAbsentLocalPath?.size) return false;
15697
+ try {
15698
+ return config.urlByAbsentLocalPath.has(
15699
+ resolveProjectRelativeSrc(element.src, baseDir, compiledDir)
15700
+ );
15701
+ } catch {
15702
+ return false;
15703
+ }
15704
+ }
15609
15705
  async function generateSilence(outputPath, duration, signal, config) {
15610
15706
  const ffmpegProcessTimeout = config?.ffmpegProcessTimeout ?? DEFAULT_CONFIG.ffmpegProcessTimeout;
15611
15707
  const outputDir = dirname7(outputPath);
@@ -16000,7 +16096,7 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
16000
16096
  }
16001
16097
  await Promise.all(
16002
16098
  elements.map(
16003
- (element, index) => inPrepareSlot(async () => {
16099
+ (element, index) => (isRemoteElement(element, baseDir, compiledDir, config) ? inRemotePrepareSlot : inPrepareSlot)(async () => {
16004
16100
  if (effectiveSignal.aborted) {
16005
16101
  failures.push({
16006
16102
  stage: "cancelled",
@@ -16069,6 +16165,9 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
16069
16165
  return;
16070
16166
  }
16071
16167
  if (element.end - element.start <= 0) {
16168
+ console.warn(
16169
+ `[audioMixer] ${element.id} has no data-duration or data-end; its length is unknown, so it plays to the end of its source`
16170
+ );
16072
16171
  let metadata;
16073
16172
  try {
16074
16173
  metadata = await extractAudioMetadata(
@@ -16099,7 +16198,8 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
16099
16198
  element.playbackRate,
16100
16199
  effectiveSignal,
16101
16200
  config,
16102
- audioSidecarUrl
16201
+ audioSidecarUrl,
16202
+ { loop: element.loop }
16103
16203
  );
16104
16204
  if (!extractResult.success) {
16105
16205
  failures.push(
@@ -16125,7 +16225,9 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
16125
16225
  element.end - element.start,
16126
16226
  element.playbackRate,
16127
16227
  effectiveSignal,
16128
- config
16228
+ config,
16229
+ void 0,
16230
+ { loop: element.loop }
16129
16231
  );
16130
16232
  if (!prepResult.success) {
16131
16233
  failures.push(
@@ -17644,6 +17746,7 @@ export {
17644
17746
  formatFfmpegError,
17645
17747
  describeFfmpegFailure,
17646
17748
  runFfmpeg,
17749
+ declareContentAddressedUrl,
17647
17750
  probeMediaProfile,
17648
17751
  extractMediaMetadata,
17649
17752
  extractFinalVideoFrameTimestamp,
@@ -17698,6 +17801,7 @@ export {
17698
17801
  extractVideoFramesRange,
17699
17802
  resolvePlayableVideoDuration,
17700
17803
  isVideoPastTimelineEnd,
17804
+ rebaseVideoToWindow,
17701
17805
  resolveTimelineExtractionWindow,
17702
17806
  resolveFinalFrameExtractionWindow,
17703
17807
  resolveVideoExtractionWindow,
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  findCompositionDimensions
9
- } from "./chunk-COWQITWP.js";
9
+ } from "./chunk-WOKVXK4J.js";
10
10
  import {
11
11
  c
12
12
  } from "./chunk-ZTZA4UWZ.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VALID_CANVAS_RESOLUTIONS,
9
9
  resolveResolutionFlagPair
10
- } from "./chunk-B2A56S5C.js";
10
+ } from "./chunk-2MCXIY4B.js";
11
11
 
12
12
  // src/utils/parseOutputResolution.ts
13
13
  function parseOutputResolutionFlag(raw, options) {
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-XWOCXIKR.js";
23
+ } from "./chunk-A4OI5ZNX.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -229,7 +229,7 @@ var asset_default = defineCommand({
229
229
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
230
230
  );
231
231
  }
232
- const { trackFigmaImport } = await import("./telemetry-RN6VYEID.js");
232
+ const { trackFigmaImport } = await import("./telemetry-GGLBHZRZ.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  normalizeErrorMessage
9
- } from "./chunk-KNU5COPB.js";
9
+ } from "./chunk-T2EUWCJE.js";
10
10
  import {
11
11
  terminateProcessTree
12
12
  } from "./chunk-KGPLIH7B.js";