framefields 2.4.0 → 2.4.2

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 (429) hide show
  1. package/README.md +11 -33
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DXwNhi1z.mjs → audio-Bb31xJuX.mjs} +4 -4
  5. package/dist/{audio-DXwNhi1z.mjs.map → audio-Bb31xJuX.mjs.map} +1 -1
  6. package/dist/{audio-C6toT7F3.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
  7. package/dist/{audio-C6toT7F3.d.mts.map → audio-DHuEMOtQ.d.mts.map} +1 -1
  8. package/dist/{dist-fjKpBYkc.mjs → dist-ClyC_d66.mjs} +9 -2
  9. package/dist/dist-ClyC_d66.mjs.map +1 -0
  10. package/dist/{dist-DRB6Vg5u.mjs → dist-CspOG4V1.mjs} +25 -8
  11. package/dist/dist-CspOG4V1.mjs.map +1 -0
  12. package/dist/{dist-Cl0mvShy.mjs → dist-CxGfrigI.mjs} +222 -60
  13. package/dist/dist-CxGfrigI.mjs.map +1 -0
  14. package/dist/{dist-BY0bIWgr.mjs → dist-SB9qfAko.mjs} +2 -2
  15. package/dist/{dist-BY0bIWgr.mjs.map → dist-SB9qfAko.mjs.map} +1 -1
  16. package/dist/effects/index.d.mts +4 -4
  17. package/dist/effects/index.mjs +35 -35
  18. package/dist/{effects-lBqG-vd1.mjs → effects-BOk_2kzM.mjs} +3 -3
  19. package/dist/{effects-lBqG-vd1.mjs.map → effects-BOk_2kzM.mjs.map} +1 -1
  20. package/dist/fonts/index.mjs +2 -2
  21. package/dist/{fonts-DlRJD6NS.mjs → fonts-CsMDfqv9.mjs} +2 -2
  22. package/dist/{fonts-DlRJD6NS.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
  23. package/dist/{gpu-DOQX1W2q.mjs → gpu-DtT5I4ME.mjs} +2 -2
  24. package/dist/{gpu-DOQX1W2q.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
  25. package/dist/{index-CaiZ5p6q.d.mts → index-B1XcyMm8.d.mts} +2 -2
  26. package/dist/{index-CaiZ5p6q.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
  27. package/dist/{index-Cf1pVxn0.d.mts → index-B2Xesdug.d.mts} +4 -4
  28. package/dist/{index-Cf1pVxn0.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
  29. package/dist/{index-BONyHjZX.d.mts → index-B3-gwjK6.d.mts} +16 -4
  30. package/dist/index-B3-gwjK6.d.mts.map +1 -0
  31. package/dist/{index-BHqdtJbN.d.mts → index-BTPLbjt4.d.mts} +41 -12
  32. package/dist/index-BTPLbjt4.d.mts.map +1 -0
  33. package/dist/{index-DN9oXO-X.d.mts → index-D-l-yCv6.d.mts} +3 -3
  34. package/dist/{index-DN9oXO-X.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
  35. package/dist/{index-DEODKaL6.d.mts → index-DujpgUUq.d.mts} +7 -2
  36. package/dist/index-DujpgUUq.d.mts.map +1 -0
  37. package/dist/index.d.mts +15 -11
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +52 -52
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/preview/index.d.mts +2 -2
  42. package/dist/preview/index.mjs +10 -10
  43. package/dist/{preview-Ca4tF5Ro.mjs → preview-DyGw2b3_.mjs} +2 -2
  44. package/dist/{preview-Ca4tF5Ro.mjs.map → preview-DyGw2b3_.mjs.map} +1 -1
  45. package/dist/preview-engine/audio.mjs +1 -1
  46. package/dist/preview-engine/{chunk-SZW5J72T.mjs → chunk-2DDBSI75.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-QXCY2ATH.mjs → chunk-2GIWWDE4.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-34ACEGNW.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-3ACCCPBN.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-5RQHNB6Y.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-67SSYK7D.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-PL4IH5V4.mjs → chunk-6K7US2WD.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-PEWYB6WP.mjs → chunk-7LVOSEGN.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-A5OVKZ52.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-AQNTIWTK.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-PXT52LEH.mjs → chunk-C6Z7H2RZ.mjs} +1 -1
  57. package/dist/preview-engine/chunk-CPFPY35C.mjs +1 -0
  58. package/dist/preview-engine/{chunk-7EPIRODI.mjs → chunk-DOCSX45C.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-GSFN4WCH.mjs → chunk-FFGBUS76.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-FFMPC7QA.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-IUPDOATX.mjs → chunk-FHKBALVI.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-G4J662EL.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-5W4AFQP7.mjs → chunk-GNG4YH2W.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-GQLZXCW3.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-HDGFNBYK.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-HNNIVJ2K.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-FU7AIAMM.mjs → chunk-HUKAC5MJ.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-JX22B2FS.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-KAQUNOVB.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-KT35IPCF.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-VXS5SIEC.mjs → chunk-LIQA5OOU.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-SGPRLTNF.mjs → chunk-LK3T65RB.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-YQZOGEPZ.mjs → chunk-LLDIDE5Q.mjs} +1 -1
  74. package/dist/preview-engine/chunk-NNQUIVTE.mjs +5 -0
  75. package/dist/preview-engine/{chunk-5AUB4Y3L.mjs → chunk-NRAZV5OA.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-BSOJR4JU.mjs → chunk-O6NRIXS5.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-OKH2VU2U.mjs → chunk-PZF6T7DM.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-OJ2PKBXE.mjs → chunk-QJZKIY4H.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-WFGJXCZT.mjs → chunk-R26SY5D4.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-RDP6QROU.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-VK2CVMWJ.mjs → chunk-RHRMEBNK.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-J2R5R7YY.mjs → chunk-RKVB47IA.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-PAQNDZQB.mjs → chunk-SWXVITCQ.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-KERW7QJ4.mjs → chunk-UZBVCYRY.mjs} +1 -1
  85. package/dist/preview-engine/chunk-VONDRBA2.mjs +1 -0
  86. package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-WACWOKEP.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-AXHB4J37.mjs → chunk-WCZ5DKZ4.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-WH5Q2NFN.mjs → chunk-WJJIISQJ.mjs} +1 -1
  89. package/dist/preview-engine/chunk-XDMZP3E2.mjs +1 -0
  90. package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-Z6UKUHPU.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-WUKH7BD7.mjs → chunk-ZKPQGQE3.mjs} +1 -1
  92. package/dist/preview-engine/effects.mjs +1 -1
  93. package/dist/preview-engine/framefields.mjs +4 -4
  94. package/dist/preview-engine/player.mjs +1 -1
  95. package/dist/preview-engine/{renderers-2P6KXWEZ.mjs → renderers-3CXFGRE7.mjs} +1 -1
  96. package/dist/preview-engine/{renderers-KZWGSKRF.mjs → renderers-3FC3WCJN.mjs} +1 -1
  97. package/dist/preview-engine/renderers-3S2FM33K.mjs +1 -0
  98. package/dist/preview-engine/{renderers-5FQA2DP4.mjs → renderers-4AJWVIJG.mjs} +1 -1
  99. package/dist/preview-engine/renderers-53ZTBI3C.mjs +1 -0
  100. package/dist/preview-engine/renderers-5USBVCMQ.mjs +1 -0
  101. package/dist/preview-engine/renderers-65G6BLEA.mjs +1 -0
  102. package/dist/preview-engine/{renderers-PYWXELLG.mjs → renderers-6JZ4HYIU.mjs} +1 -1
  103. package/dist/preview-engine/{renderers-3GHEWWVX.mjs → renderers-75TL7RLS.mjs} +1 -1
  104. package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-7CPYTCNW.mjs} +1 -1
  105. package/dist/preview-engine/renderers-7XU7BXE7.mjs +1 -0
  106. package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-AZYJFJLO.mjs} +1 -1
  107. package/dist/preview-engine/{renderers-TR2V2HZ2.mjs → renderers-BDWVXYTW.mjs} +1 -1
  108. package/dist/preview-engine/renderers-BFXM32BC.mjs +1 -0
  109. package/dist/preview-engine/renderers-CDXHCWWK.mjs +1 -0
  110. package/dist/preview-engine/{renderers-N7FR54V2.mjs → renderers-CK3ZL3GM.mjs} +1 -1
  111. package/dist/preview-engine/renderers-CLUN7WU6.mjs +1 -0
  112. package/dist/preview-engine/renderers-DTB4HEXU.mjs +1 -0
  113. package/dist/preview-engine/renderers-EFKNRLYF.mjs +1 -0
  114. package/dist/preview-engine/{renderers-HQEKSUNR.mjs → renderers-EI6MQ2EL.mjs} +1 -1
  115. package/dist/preview-engine/{renderers-UPTJJE5F.mjs → renderers-FADYGSLK.mjs} +1 -1
  116. package/dist/preview-engine/{renderers-I5E2RSV4.mjs → renderers-FKH5S64C.mjs} +1 -1
  117. package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-FM6A5YR4.mjs} +1 -1
  118. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +1 -0
  119. package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-GAIUTII6.mjs} +1 -1
  120. package/dist/preview-engine/renderers-GTUO5LIV.mjs +1 -0
  121. package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-GUPEJK3O.mjs} +1 -1
  122. package/dist/preview-engine/{renderers-IWQ3V6AJ.mjs → renderers-HSJIVP57.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-4GRVAW2W.mjs → renderers-HZHEGONW.mjs} +1 -1
  124. package/dist/preview-engine/{renderers-NWHS7N2L.mjs → renderers-IHACBWXI.mjs} +1 -1
  125. package/dist/preview-engine/{renderers-3YCJOINH.mjs → renderers-IHRFEZNP.mjs} +1 -1
  126. package/dist/preview-engine/{renderers-A7VH3ON5.mjs → renderers-IJDQJEE5.mjs} +1 -1
  127. package/dist/preview-engine/{renderers-OT7D3BUA.mjs → renderers-IO3BVVJ7.mjs} +1 -1
  128. package/dist/preview-engine/renderers-IR772VSN.mjs +1 -0
  129. package/dist/preview-engine/{renderers-EJWPVVQR.mjs → renderers-K7B5PQBT.mjs} +1 -1
  130. package/dist/preview-engine/renderers-L6TRJOXA.mjs +1 -0
  131. package/dist/preview-engine/{renderers-N7TS5562.mjs → renderers-LVLVJHOL.mjs} +1 -1
  132. package/dist/preview-engine/{renderers-FK72LKQC.mjs → renderers-MBSOKWKB.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-NC64EQDE.mjs → renderers-N6H6RSF2.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-ZHZMGMLN.mjs → renderers-NJLGPPX7.mjs} +1 -1
  135. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +1 -0
  136. package/dist/preview-engine/renderers-O6V3OEKX.mjs +1 -0
  137. package/dist/preview-engine/renderers-OODA27UH.mjs +1 -0
  138. package/dist/preview-engine/{renderers-6CG7DBTB.mjs → renderers-R4WMM6IX.mjs} +1 -1
  139. package/dist/preview-engine/renderers-RIGW33ZI.mjs +1 -0
  140. package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-RKZGYWDG.mjs} +1 -1
  141. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +1 -0
  142. package/dist/preview-engine/renderers-SKB2GGKS.mjs +1 -0
  143. package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-SW7FIEKO.mjs} +1 -1
  144. package/dist/preview-engine/renderers-T4D2TASM.mjs +1 -0
  145. package/dist/preview-engine/renderers-T74XV36Q.mjs +1 -0
  146. package/dist/preview-engine/{renderers-F55XFVMP.mjs → renderers-TCNPEANL.mjs} +1 -1
  147. package/dist/preview-engine/renderers-TOPW2UM3.mjs +1 -0
  148. package/dist/preview-engine/{renderers-5YEIUTVN.mjs → renderers-TY7DVI7E.mjs} +1 -1
  149. package/dist/preview-engine/{renderers-YMPXGYRU.mjs → renderers-UDOBX433.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-UMPOVFRA.mjs} +1 -1
  151. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +1 -0
  152. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +1 -0
  153. package/dist/preview-engine/{renderers-MON4QFRF.mjs → renderers-UWKSTSTA.mjs} +1 -1
  154. package/dist/preview-engine/renderers-VHPAOUTA.mjs +1 -0
  155. package/dist/preview-engine/{renderers-E76OKK66.mjs → renderers-WR6MKT5S.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-MCECHPCL.mjs → renderers-XKHNBARD.mjs} +1 -1
  157. package/dist/preview-engine/renderers-YEQRQJFC.mjs +1 -0
  158. package/dist/preview-engine/{renderers-RJO6H4FC.mjs → renderers-YRZ3WODX.mjs} +1 -1
  159. package/dist/preview-engine/renderers-YUTFGVRY.mjs +1 -0
  160. package/dist/preview-engine/{renderers-3SRG77SC.mjs → renderers-YXOTRKPA.mjs} +1 -1
  161. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +1 -0
  162. package/dist/preview-engine/renderers-ZW75LQTR.mjs +1 -0
  163. package/dist/preview-engine/signals.mjs +1 -1
  164. package/dist/{program-CJEg2wMa.mjs → program-C2cJayA1.mjs} +4 -4
  165. package/dist/{program-CJEg2wMa.mjs.map → program-C2cJayA1.mjs.map} +1 -1
  166. package/dist/renderer/index.d.mts +2 -2
  167. package/dist/renderer/index.mjs +2 -2
  168. package/dist/{renderer-CCu1Q8ib.mjs → renderer--ruTGlPo.mjs} +3 -3
  169. package/dist/{renderer-CCu1Q8ib.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
  170. package/dist/{renderer-D-IcBLT0.mjs → renderer-7y5Cj8rV.mjs} +3 -3
  171. package/dist/{renderer-D-IcBLT0.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
  172. package/dist/{renderer-Dg5yLAM9.mjs → renderer-92eLJg24.mjs} +4 -4
  173. package/dist/{renderer-Dg5yLAM9.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
  174. package/dist/{renderer-CduDa1qf.mjs → renderer-B0gPTXhe.mjs} +3 -3
  175. package/dist/{renderer-CduDa1qf.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
  176. package/dist/{renderer-CjTxu89O.mjs → renderer-B1QREs7J.mjs} +3 -3
  177. package/dist/{renderer-CjTxu89O.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
  178. package/dist/{renderer-DVaVVz-D.mjs → renderer-B3e4LSE6.mjs} +3 -3
  179. package/dist/{renderer-DVaVVz-D.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
  180. package/dist/{renderer-CxSH3F_n.mjs → renderer-B4RpSd4A.mjs} +2 -2
  181. package/dist/{renderer-CxSH3F_n.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
  182. package/dist/renderer-BAhZeUUn.mjs +5 -0
  183. package/dist/{renderer-BZCLdb8F.mjs → renderer-BBAbZfBl.mjs} +4 -4
  184. package/dist/{renderer-BZCLdb8F.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
  185. package/dist/{renderer-DZndEvZN.mjs → renderer-BDCy8NgT.mjs} +3 -3
  186. package/dist/{renderer-DZndEvZN.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
  187. package/dist/renderer-BHAE_dKq.mjs +5 -0
  188. package/dist/{renderer-i4RJ-_sx.mjs → renderer-BMKFzfSQ.mjs} +3 -3
  189. package/dist/{renderer-i4RJ-_sx.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
  190. package/dist/renderer-BNYZY3FE.mjs +5 -0
  191. package/dist/{renderer-BtJ6XYN7.mjs → renderer-BPixWnmY.mjs} +3 -3
  192. package/dist/{renderer-BtJ6XYN7.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
  193. package/dist/renderer-BSvubMvI.mjs +5 -0
  194. package/dist/{renderer-CoN2JgLO.mjs → renderer-BTd2sWDC.mjs} +3 -3
  195. package/dist/{renderer-CoN2JgLO.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
  196. package/dist/{renderer-DautVsW4.mjs → renderer-BTigwMQp.mjs} +3 -3
  197. package/dist/{renderer-DautVsW4.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
  198. package/dist/{renderer-B8v8iEkB.mjs → renderer-BV48PFjX.mjs} +6 -6
  199. package/dist/{renderer-B8v8iEkB.mjs.map → renderer-BV48PFjX.mjs.map} +1 -1
  200. package/dist/renderer-B_M_yhTc.mjs +5 -0
  201. package/dist/renderer-B_xSsTuy.mjs +5 -0
  202. package/dist/renderer-BePHurAU.mjs +5 -0
  203. package/dist/renderer-BfZquJrW.mjs +5 -0
  204. package/dist/{renderer-DAFi5TC_.mjs → renderer-Bi6W4RSn.mjs} +2 -2
  205. package/dist/{renderer-DAFi5TC_.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
  206. package/dist/{renderer-Edn9xltT.mjs → renderer-BjCHW9Jp.mjs} +2 -2
  207. package/dist/{renderer-CJmZURPQ.mjs → renderer-BjvNEbML.mjs} +2 -2
  208. package/dist/{renderer-CJmZURPQ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
  209. package/dist/{renderer-C2ZIAhdJ.mjs → renderer-BkWd4-YO.mjs} +2 -2
  210. package/dist/{renderer-C2ZIAhdJ.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
  211. package/dist/{renderer-Cfto0m0-.mjs → renderer-Bkrk0M0r.mjs} +3 -3
  212. package/dist/{renderer-Cfto0m0-.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
  213. package/dist/{renderer-h9sJnoxw.mjs → renderer-BljMOvry.mjs} +3 -3
  214. package/dist/{renderer-h9sJnoxw.mjs.map → renderer-BljMOvry.mjs.map} +1 -1
  215. package/dist/renderer-BuY5ypB2.mjs +5 -0
  216. package/dist/renderer-BvOQgFHo.mjs +5 -0
  217. package/dist/{renderer-DqgduGiO.mjs → renderer-BwpgDLYO.mjs} +3 -3
  218. package/dist/{renderer-DqgduGiO.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
  219. package/dist/{renderer-DaV95CAd.mjs → renderer-BwwZB2mt.mjs} +4 -4
  220. package/dist/{renderer-DaV95CAd.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
  221. package/dist/{renderer-DA1brg35.mjs → renderer-ByCX4JYg.mjs} +3 -3
  222. package/dist/{renderer-DA1brg35.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
  223. package/dist/{renderer-Tf1AS1aO.mjs → renderer-C1E5Rt5q.mjs} +3 -3
  224. package/dist/{renderer-Tf1AS1aO.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
  225. package/dist/renderer-C7NkSvUz.mjs +5 -0
  226. package/dist/{renderer-CG4TmDWH.mjs → renderer-CCGzT6bX.mjs} +2 -2
  227. package/dist/{renderer-wFyrVuuj.mjs → renderer-CDOobs18.mjs} +3 -3
  228. package/dist/{renderer-wFyrVuuj.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
  229. package/dist/{renderer-BaHEN_Kv.mjs → renderer-CDUxAtsk.mjs} +4 -4
  230. package/dist/{renderer-BaHEN_Kv.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
  231. package/dist/renderer-CIuxV2q1.mjs +5 -0
  232. package/dist/{renderer-DY8fPeH3.mjs → renderer-CJ4bxCld.mjs} +2 -2
  233. package/dist/renderer-CKp97tSQ.mjs +5 -0
  234. package/dist/{renderer-BTJyO6ov.mjs → renderer-CNuVJ4nG.mjs} +2 -2
  235. package/dist/{renderer-BTJyO6ov.mjs.map → renderer-CNuVJ4nG.mjs.map} +1 -1
  236. package/dist/renderer-CY89dTFR.mjs +5 -0
  237. package/dist/renderer-C_B_4Bl0.mjs +5 -0
  238. package/dist/{renderer-Dk0dnuHr.mjs → renderer-Cbsnj9vV.mjs} +3 -3
  239. package/dist/{renderer-Dk0dnuHr.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
  240. package/dist/{renderer-B6UqWjtH.mjs → renderer-CcoUNzlQ.mjs} +3 -3
  241. package/dist/{renderer-B6UqWjtH.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
  242. package/dist/renderer-Cd87JOjP.mjs +5 -0
  243. package/dist/{renderer-BZF48o1T.mjs → renderer-CeiCJCg4.mjs} +3 -3
  244. package/dist/{renderer-BZF48o1T.mjs.map → renderer-CeiCJCg4.mjs.map} +1 -1
  245. package/dist/renderer-Cev6orIK.mjs +6 -0
  246. package/dist/renderer-Cewf6UPh.mjs +5 -0
  247. package/dist/renderer-CnHsMLIv.mjs +5 -0
  248. package/dist/{renderer-TyZu7nQ2.mjs → renderer-CoWfz-9p.mjs} +441 -177
  249. package/dist/renderer-CoWfz-9p.mjs.map +1 -0
  250. package/dist/renderer-CoxuAr7b.mjs +5 -0
  251. package/dist/{renderer-D4E8Yf61.mjs → renderer-CqtIbe5n.mjs} +2 -2
  252. package/dist/{renderer-D4E8Yf61.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
  253. package/dist/renderer-CrdG7trA.mjs +5 -0
  254. package/dist/{renderer-C-La-IAt.mjs → renderer-Csss5GFQ.mjs} +2 -2
  255. package/dist/{renderer-C-La-IAt.mjs.map → renderer-Csss5GFQ.mjs.map} +1 -1
  256. package/dist/renderer-Cu5MFgbk.mjs +5 -0
  257. package/dist/renderer-CuOjhtoo.mjs +5 -0
  258. package/dist/{renderer-BhZutM8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
  259. package/dist/{renderer-BhZutM8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
  260. package/dist/{renderer-CgZ1G37H.mjs → renderer-Cw6Sagih.mjs} +3 -3
  261. package/dist/{renderer-CgZ1G37H.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
  262. package/dist/{renderer-Dim2ZlfK.d.mts → renderer-CxqPeATd.d.mts} +2 -2
  263. package/dist/{renderer-Dim2ZlfK.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
  264. package/dist/{renderer-yGARXwV0.mjs → renderer-CzRqzp8P.mjs} +3 -3
  265. package/dist/{renderer-yGARXwV0.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
  266. package/dist/{renderer-eWBBsCv2.mjs → renderer-D0vom99O.mjs} +2 -2
  267. package/dist/{renderer-eWBBsCv2.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
  268. package/dist/{renderer-C9pl21Zb.mjs → renderer-D2-V9nQq.mjs} +3 -3
  269. package/dist/{renderer-C9pl21Zb.mjs.map → renderer-D2-V9nQq.mjs.map} +1 -1
  270. package/dist/renderer-D2_0g6Oi.mjs +5 -0
  271. package/dist/renderer-D62FwolD.mjs +5 -0
  272. package/dist/{renderer-445i0uxs.mjs → renderer-D6BXR7P4.mjs} +2 -2
  273. package/dist/{renderer-445i0uxs.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
  274. package/dist/renderer-DDNY9N7I.mjs +5 -0
  275. package/dist/{renderer-5tQ7ImPk.mjs → renderer-DFJQ6v0F.mjs} +2 -2
  276. package/dist/{renderer-5tQ7ImPk.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
  277. package/dist/renderer-DF_ONJ3v.mjs +5 -0
  278. package/dist/{renderer-CoO2j8AC.mjs → renderer-DILUmb-e.mjs} +3 -3
  279. package/dist/{renderer-CoO2j8AC.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
  280. package/dist/{renderer-CduL1AOK.mjs → renderer-DKfwlE4e.mjs} +3 -3
  281. package/dist/{renderer-CduL1AOK.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
  282. package/dist/{renderer-DFX2V9Dp.mjs → renderer-DScyMHpJ.mjs} +2 -2
  283. package/dist/{renderer-DFX2V9Dp.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
  284. package/dist/{renderer-BZvWlGsa.mjs → renderer-DTw-W0Yz.mjs} +3 -3
  285. package/dist/{renderer-BZvWlGsa.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
  286. package/dist/{renderer-BFWRUTov.mjs → renderer-DZJJHCtm.mjs} +3 -3
  287. package/dist/{renderer-BFWRUTov.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
  288. package/dist/{renderer-Cz9fzS11.mjs → renderer-DaSxr9fM.mjs} +3 -3
  289. package/dist/{renderer-Cz9fzS11.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
  290. package/dist/{renderer-CoX23zo_.mjs → renderer-DaqWTx7s.mjs} +3 -3
  291. package/dist/{renderer-CoX23zo_.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
  292. package/dist/renderer-DbzrVHEE.mjs +5 -0
  293. package/dist/{renderer-CN3iCli4.mjs → renderer-DcBGYN3V.mjs} +3 -3
  294. package/dist/{renderer-CN3iCli4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
  295. package/dist/{renderer-CCCitH4J.mjs → renderer-DjBCWxYy.mjs} +3 -3
  296. package/dist/{renderer-CCCitH4J.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
  297. package/dist/{renderer-gbBgGPNL.mjs → renderer-DjwITRvg.mjs} +2 -2
  298. package/dist/renderer-DlYchp1v.mjs +5 -0
  299. package/dist/renderer-DqcUNP8J.mjs +5 -0
  300. package/dist/renderer-DqvFhEQj.mjs +5 -0
  301. package/dist/{renderer-B4JmNa_T.mjs → renderer-DwVOxdzC.mjs} +3 -3
  302. package/dist/{renderer-B4JmNa_T.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
  303. package/dist/{renderer-BZWiY6Jw.mjs → renderer-Dwu_zfdL.mjs} +3 -3
  304. package/dist/{renderer-BZWiY6Jw.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
  305. package/dist/renderer-DxBav2bE.mjs +5 -0
  306. package/dist/{renderer-DkYiOWPJ.mjs → renderer-DyyIXLQK.mjs} +3 -3
  307. package/dist/{renderer-DkYiOWPJ.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
  308. package/dist/{renderer-D-e3vDnO.mjs → renderer-DzSMeQBC.mjs} +3 -3
  309. package/dist/{renderer-D-e3vDnO.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
  310. package/dist/{renderer-DOZJeWM4.mjs → renderer-EZp_IIPK.mjs} +3 -3
  311. package/dist/{renderer-DOZJeWM4.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
  312. package/dist/{renderer-DkM_wN8j.mjs → renderer-G1pMJH5C.mjs} +2 -2
  313. package/dist/{renderer-DkM_wN8j.mjs.map → renderer-G1pMJH5C.mjs.map} +1 -1
  314. package/dist/renderer-GvSRoQje.mjs +5 -0
  315. package/dist/{renderer-DQtk282o.mjs → renderer-If8JOkBi.mjs} +2 -2
  316. package/dist/{renderer-DQtk282o.mjs.map → renderer-If8JOkBi.mjs.map} +1 -1
  317. package/dist/{renderer-BL36f2IQ.mjs → renderer-JvcR1vYI.mjs} +2 -2
  318. package/dist/{renderer-BL36f2IQ.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
  319. package/dist/renderer-KP7Ita9g.mjs +5 -0
  320. package/dist/{renderer-DOkEalxy.mjs → renderer-NizuhHsH.mjs} +3 -3
  321. package/dist/{renderer-DOkEalxy.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
  322. package/dist/renderer-Pc8dyNXt.mjs +5 -0
  323. package/dist/{renderer-fXRwAdO2.mjs → renderer-RDCax5CK.mjs} +3 -3
  324. package/dist/{renderer-fXRwAdO2.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
  325. package/dist/{renderer-BOvCstdU.mjs → renderer-UcdqCarR.mjs} +3 -3
  326. package/dist/{renderer-BOvCstdU.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
  327. package/dist/{renderer-BaBluD-r.mjs → renderer-V5uEyDFz.mjs} +3 -3
  328. package/dist/{renderer-BaBluD-r.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
  329. package/dist/{renderer-BzgnTEvf.mjs → renderer-X0eKSD7v.mjs} +3 -3
  330. package/dist/{renderer-BzgnTEvf.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
  331. package/dist/{renderer-Ai5nZsof.mjs → renderer-Za4D9hej.mjs} +3 -3
  332. package/dist/{renderer-Ai5nZsof.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
  333. package/dist/{renderer-q971j1BW.mjs → renderer-apeDrNXM.mjs} +3 -3
  334. package/dist/{renderer-q971j1BW.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
  335. package/dist/renderer-ezRCmU09.mjs +3 -0
  336. package/dist/{renderer-CNS8LA2_.mjs → renderer-gRMkQabv.mjs} +3 -3
  337. package/dist/{renderer-CNS8LA2_.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
  338. package/dist/renderer-h6ev1ogx.mjs +5 -0
  339. package/dist/{renderer-nMnE_T2y.mjs → renderer-rXgqgAjw.mjs} +3 -3
  340. package/dist/{renderer-nMnE_T2y.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
  341. package/dist/{renderer-BPsi7Q7Z.mjs → renderer-ut1GqW89.mjs} +3 -3
  342. package/dist/{renderer-BPsi7Q7Z.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
  343. package/dist/{renderer-DH0wkQkR.mjs → renderer-yyUpCeWb.mjs} +2 -2
  344. package/dist/{renderer-DH0wkQkR.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
  345. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
  346. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs.map → renderers-CP8CFWDs-DzGXDs5p.mjs.map} +1 -1
  347. package/dist/signals/index.d.mts +5 -5
  348. package/dist/signals/index.mjs +6 -6
  349. package/dist/{signals-DGRs6ddH.mjs → signals-C5nOrRmn.mjs} +3 -3
  350. package/dist/{signals-DGRs6ddH.mjs.map → signals-C5nOrRmn.mjs.map} +1 -1
  351. package/package.json +57 -57
  352. package/dist/dist-Cl0mvShy.mjs.map +0 -1
  353. package/dist/dist-DRB6Vg5u.mjs.map +0 -1
  354. package/dist/dist-fjKpBYkc.mjs.map +0 -1
  355. package/dist/index-BHqdtJbN.d.mts.map +0 -1
  356. package/dist/index-BONyHjZX.d.mts.map +0 -1
  357. package/dist/index-DEODKaL6.d.mts.map +0 -1
  358. package/dist/preview-engine/chunk-63SFBHEH.mjs +0 -1
  359. package/dist/preview-engine/chunk-7J2FWGVD.mjs +0 -1
  360. package/dist/preview-engine/chunk-M5HZPZHQ.mjs +0 -1
  361. package/dist/preview-engine/chunk-OG62XGCT.mjs +0 -5
  362. package/dist/preview-engine/renderers-2H7YEUTD.mjs +0 -1
  363. package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
  364. package/dist/preview-engine/renderers-3RC5FDWX.mjs +0 -1
  365. package/dist/preview-engine/renderers-6WH7NZCC.mjs +0 -1
  366. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +0 -1
  367. package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
  368. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
  369. package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
  370. package/dist/preview-engine/renderers-DXHJAMZR.mjs +0 -1
  371. package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
  372. package/dist/preview-engine/renderers-FWGMNPYB.mjs +0 -1
  373. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +0 -1
  374. package/dist/preview-engine/renderers-HXFRTIJD.mjs +0 -1
  375. package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
  376. package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
  377. package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
  378. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +0 -1
  379. package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
  380. package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
  381. package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
  382. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +0 -1
  383. package/dist/preview-engine/renderers-UHTO6BQA.mjs +0 -1
  384. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
  385. package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
  386. package/dist/preview-engine/renderers-XHTMRXC5.mjs +0 -1
  387. package/dist/preview-engine/renderers-YECY2YFT.mjs +0 -1
  388. package/dist/preview-engine/renderers-YMN6QXK7.mjs +0 -1
  389. package/dist/preview-engine/renderers-ZANPE3OK.mjs +0 -1
  390. package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
  391. package/dist/preview-engine/renderers-ZJTRANIX.mjs +0 -1
  392. package/dist/renderer--IHe-yqK.mjs +0 -5
  393. package/dist/renderer-B16iwR0_.mjs +0 -5
  394. package/dist/renderer-B3EEYpx6.mjs +0 -5
  395. package/dist/renderer-B3Si5IB4.mjs +0 -5
  396. package/dist/renderer-BARst3ZD.mjs +0 -3
  397. package/dist/renderer-BH8vZKmX.mjs +0 -5
  398. package/dist/renderer-BHZie6Pa.mjs +0 -5
  399. package/dist/renderer-BHpJ1e15.mjs +0 -5
  400. package/dist/renderer-BPJ79b47.mjs +0 -5
  401. package/dist/renderer-BPbM_6WR.mjs +0 -5
  402. package/dist/renderer-Bn-WnRh9.mjs +0 -5
  403. package/dist/renderer-BqHvDAUe.mjs +0 -5
  404. package/dist/renderer-CAtXDNsh.mjs +0 -5
  405. package/dist/renderer-C_5nfVce.mjs +0 -5
  406. package/dist/renderer-Cie7KKeQ.mjs +0 -5
  407. package/dist/renderer-CuoxvPsX.mjs +0 -5
  408. package/dist/renderer-Cvd3oIJQ.mjs +0 -5
  409. package/dist/renderer-CxAgpBrJ.mjs +0 -5
  410. package/dist/renderer-D-cWBX0r.mjs +0 -5
  411. package/dist/renderer-D0q2VyJR.mjs +0 -5
  412. package/dist/renderer-D6NXn3Ky.mjs +0 -5
  413. package/dist/renderer-D9bp2jor.mjs +0 -5
  414. package/dist/renderer-DEzIOIB7.mjs +0 -5
  415. package/dist/renderer-DSSTVulw.mjs +0 -5
  416. package/dist/renderer-DUmTURPu.mjs +0 -5
  417. package/dist/renderer-DXCAgI9m.mjs +0 -5
  418. package/dist/renderer-DZ9j3fQj.mjs +0 -5
  419. package/dist/renderer-Dd1G_VKM.mjs +0 -5
  420. package/dist/renderer-Dee8079X.mjs +0 -5
  421. package/dist/renderer-DgWh5noB.mjs +0 -5
  422. package/dist/renderer-DuD9QRix.mjs +0 -5
  423. package/dist/renderer-KtG5p44R.mjs +0 -5
  424. package/dist/renderer-TyZu7nQ2.mjs.map +0 -1
  425. package/dist/renderer-fdVdNIhL.mjs +0 -5
  426. package/dist/renderer-gBKWL0_E.mjs +0 -5
  427. package/dist/renderer-hmWhsR6C.mjs +0 -5
  428. package/dist/renderer-jkL9FU2W.mjs +0 -6
  429. package/dist/renderer-yAWv-daq.mjs +0 -5
@@ -1,6 +1,6 @@
1
- import { Ot as getMediaType, Pt as isSignal, on as updateClockSignals, p as DEFAULT_DURATION_MS, qt as resolveMediaMimeType, wt as getActiveMediaMetadata } from "./dist-fjKpBYkc.mjs";
1
+ import { Jt as resolveMediaMimeType, Ot as getMediaType, Pt as isSignal, p as DEFAULT_DURATION_MS, sn as updateClockSignals, wt as getActiveMediaMetadata } from "./dist-ClyC_d66.mjs";
2
2
  import { t as audioRegistry, u as webgpuRegistry } from "./renderer-BSitV56h.mjs";
3
- import { C as drawGifNode, D as drawSignalNode, E as drawParagraphNode, L as inputStore, N as getHeadlessFontPath, Nn as signalRegistry, O as drawSvgNode, Q as registerHeadlessFont, S as drawCaptionNode, T as drawLottieNode, at as resolveMediaSourceUrl, et as shaderStore, it as GetFontAssetUrl, k as drawVideoNode, m as SlugGeometry, p as SlugFontCache, w as drawImageNode } from "./dist-DRB6Vg5u.mjs";
3
+ import { C as drawGifNode, D as drawSignalNode, E as drawParagraphNode, L as inputStore, N as getHeadlessFontPath, Nn as signalRegistry, O as drawSvgNode, Q as registerHeadlessFont, S as drawCaptionNode, T as drawLottieNode, at as resolveMediaSourceUrl, et as shaderStore, it as GetFontAssetUrl, k as drawVideoNode, m as SlugGeometry, p as SlugFontCache, w as drawImageNode } from "./dist-CspOG4V1.mjs";
4
4
  import { AudioSampleSink } from "mediabunny";
5
5
 
6
6
  //#region ../renderers/dist/index.mjs
@@ -1038,6 +1038,23 @@ const waitForDelayRender = async (timeoutMs = 3e4) => {
1038
1038
  * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.
1039
1039
  */
1040
1040
  async function decodeAudioSource(url) {
1041
+ const decoded = await decodeAudioRange(url);
1042
+ return decoded ? {
1043
+ channels: decoded.channels,
1044
+ sampleRate: decoded.sampleRate
1045
+ } : null;
1046
+ }
1047
+ /**
1048
+ * Seconds decoded ahead of a requested range: a compressed stream (MP3, AAC)
1049
+ * decoded from mid-file only matches a whole-file decode once the decoder has
1050
+ * warmed up on the packets before it.
1051
+ */
1052
+ const DECODE_PREROLL_SEC = .5;
1053
+ /**
1054
+ * Decodes [range.startSec, range.endSec) of a source (the whole file without
1055
+ * a range), so a short clip from a long file decodes only what it plays.
1056
+ */
1057
+ async function decodeAudioRange(url, range) {
1041
1058
  mediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);
1042
1059
  try {
1043
1060
  if (typeof window !== "undefined" && typeof window.document !== "undefined" && !(typeof process !== "undefined" && process.versions && process.versions.node)) {
@@ -1057,7 +1074,10 @@ async function decodeAudioSource(url) {
1057
1074
  for (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));
1058
1075
  return {
1059
1076
  channels,
1060
- sampleRate: audioBuffer.sampleRate
1077
+ sampleRate: audioBuffer.sampleRate,
1078
+ startIndex: 0,
1079
+ validFromSec: 0,
1080
+ validToSec: Number.POSITIVE_INFINITY
1061
1081
  };
1062
1082
  } finally {
1063
1083
  audioCtx.close();
@@ -1075,13 +1095,17 @@ async function decodeAudioSource(url) {
1075
1095
  mediaLogger.warn(`[AudioExtractor] No primary audio track found in input for ${url}`);
1076
1096
  return null;
1077
1097
  }
1078
- const generator = new AudioSampleSink(track).samples(0);
1098
+ const sink = new AudioSampleSink(track);
1099
+ const decodeFromSec = range ? Math.max(0, range.startSec - DECODE_PREROLL_SEC) : 0;
1100
+ const generator = sink.samples(decodeFromSec, range?.endSec);
1079
1101
  const decodedPlanes = [];
1080
1102
  let totalFrames = 0;
1081
1103
  let sampleRate = 48e3;
1082
1104
  let numChannels = 1;
1105
+ let firstTimestamp = null;
1083
1106
  mediaLogger.debug(`[AudioExtractor] Starting mediabunny generator loop for ${url}...`);
1084
1107
  for await (const sample of generator) {
1108
+ if (firstTimestamp === null) firstTimestamp = sample.timestamp;
1085
1109
  sampleRate = sample.sampleRate;
1086
1110
  numChannels = sample.numberOfChannels;
1087
1111
  const sampleFrames = sample.numberOfFrames;
@@ -1127,23 +1151,51 @@ async function decodeAudioSource(url) {
1127
1151
  }
1128
1152
  mediaLogger.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${totalFrames}`);
1129
1153
  if (totalFrames === 0 || decodedPlanes.length === 0) return null;
1154
+ const channels = decodedPlanes.map((planes) => {
1155
+ const merged = new Float32Array(totalFrames);
1156
+ let offset = 0;
1157
+ for (const plane of planes) {
1158
+ merged.set(plane, offset);
1159
+ offset += plane.length;
1160
+ }
1161
+ return merged;
1162
+ });
1163
+ let startIndex = 0;
1164
+ if (decodeFromSec > 0 && firstTimestamp !== null) {
1165
+ const origin = await sink.getSample(0);
1166
+ const originTimestamp = origin?.timestamp ?? await track.getFirstTimestamp();
1167
+ origin?.close();
1168
+ startIndex = Math.round((firstTimestamp - originTimestamp) * sampleRate);
1169
+ }
1170
+ const endedEarly = !range || (startIndex + totalFrames) / sampleRate < range.endSec;
1130
1171
  return {
1131
- channels: decodedPlanes.map((planes) => {
1132
- const merged = new Float32Array(totalFrames);
1133
- let offset = 0;
1134
- for (const plane of planes) {
1135
- merged.set(plane, offset);
1136
- offset += plane.length;
1137
- }
1138
- return merged;
1139
- }),
1140
- sampleRate
1172
+ channels,
1173
+ sampleRate,
1174
+ startIndex,
1175
+ validFromSec: decodeFromSec > 0 && range ? range.startSec : 0,
1176
+ validToSec: endedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec
1141
1177
  };
1142
1178
  } catch (err) {
1143
1179
  if (err instanceof Error && err.message.includes("Cannot open local media file")) throw err;
1144
1180
  if (typeof process !== "undefined" && process.versions?.node) try {
1145
- const { execSync } = await import("node:child_process");
1146
- const stdout = execSync(`ffmpeg -v error -i "${url}" -f f32le -ar 48000 -ac 2 pipe:1`, { maxBuffer: 100 * 1024 * 1024 });
1181
+ const { execFileSync } = await import("node:child_process");
1182
+ const ffStartIndex = range ? Math.round(Math.max(0, range.startSec) * 48e3) : 0;
1183
+ const ffStartSec = ffStartIndex / 48e3;
1184
+ const stdout = execFileSync("ffmpeg", [
1185
+ "-v",
1186
+ "error",
1187
+ ...ffStartSec > 0 ? ["-ss", String(ffStartSec)] : [],
1188
+ "-i",
1189
+ url,
1190
+ ...range ? ["-t", String(range.endSec - ffStartSec)] : [],
1191
+ "-f",
1192
+ "f32le",
1193
+ "-ar",
1194
+ "48000",
1195
+ "-ac",
1196
+ "2",
1197
+ "pipe:1"
1198
+ ], { maxBuffer: Number.POSITIVE_INFINITY });
1147
1199
  const totalSamples = stdout.byteLength / 4;
1148
1200
  const numFrames = totalSamples / 2;
1149
1201
  const interleaved = new Float32Array(stdout.buffer, stdout.byteOffset, totalSamples);
@@ -1153,9 +1205,13 @@ async function decodeAudioSource(url) {
1153
1205
  left[i] = interleaved[i * 2];
1154
1206
  right[i] = interleaved[i * 2 + 1];
1155
1207
  }
1208
+ const ffEndedEarly = !range || ffStartSec + numFrames / 48e3 < range.endSec;
1156
1209
  return {
1157
1210
  channels: [left, right],
1158
- sampleRate: 48e3
1211
+ sampleRate: 48e3,
1212
+ startIndex: ffStartIndex,
1213
+ validFromSec: ffStartSec,
1214
+ validToSec: ffEndedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec
1159
1215
  };
1160
1216
  } catch (ffmpegErr) {
1161
1217
  mediaLogger.warn({ ffmpegErr }, `[AudioExtractor] ffmpeg fallback decode failed for ${url}`);
@@ -1173,14 +1229,16 @@ async function decodeAudioSource(url) {
1173
1229
  }
1174
1230
  /**
1175
1231
  * Resamples a PCM buffer using linear interpolation to target sample rate & speed.
1232
+ * `trimOffsetSamples` is a whole-file index; `inputStartIndex` is the
1233
+ * whole-file index of `inputChannel[0]` when it holds only a range.
1176
1234
  */
1177
- async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples) {
1235
+ async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples, inputStartIndex = 0) {
1178
1236
  const output = new Float32Array(outputLength);
1179
1237
  const factor = sourceSampleRate / targetSampleRate * speed;
1180
1238
  const YIELD_INTERVAL = 1e5;
1181
1239
  for (let i = 0; i < outputLength; i++) {
1182
1240
  if (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();
1183
- const srcIndex = trimOffsetSamples + i * factor;
1241
+ const srcIndex = trimOffsetSamples + i * factor - inputStartIndex;
1184
1242
  const indexFloor = Math.floor(srcIndex);
1185
1243
  const indexCeil = Math.ceil(srcIndex);
1186
1244
  if (indexFloor < 0) {
@@ -1195,11 +1253,64 @@ async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampl
1195
1253
  }
1196
1254
  return output;
1197
1255
  }
1256
+ /** Seconds decoded past a clip's last source sample, for interpolation. */
1257
+ const RANGE_MARGIN_SEC = .05;
1258
+ /** Processors that only scale what is already there, so silence stays silence. */
1259
+ const GAIN_ONLY_PROCESSORS = new Set(["Compositor", "CompositorLayer"]);
1260
+ /** Adds `src` into `dest` starting at `destStart` (which may be negative). */
1261
+ function addInto(dest, src, destStart) {
1262
+ const from = Math.max(0, -destStart);
1263
+ const to = Math.min(src.length, dest.length - destStart);
1264
+ for (let i = from; i < to; i++) dest[destStart + i] += src[i];
1265
+ }
1266
+ /**
1267
+ * A node's stereo mix, allocated on first write. A child that covers the
1268
+ * whole bus while it is still silent is taken over instead of copied (adding
1269
+ * into silence changes nothing), so a chain of single-child nodes passes one
1270
+ * buffer up instead of allocating and summing a full-length copy per level.
1271
+ */
1272
+ var MixBus = class {
1273
+ channels = null;
1274
+ constructor(length) {
1275
+ this.length = length;
1276
+ }
1277
+ /** The bus channels, allocated (silent) if nothing was written yet. */
1278
+ get() {
1279
+ this.channels ??= [new Float32Array(this.length), new Float32Array(this.length)];
1280
+ return this.channels;
1281
+ }
1282
+ /** Whether `src` written at `start` could replace the bus outright. */
1283
+ canAdopt(src, start) {
1284
+ return this.channels === null && start === 0 && src.every((ch) => ch.length === this.length);
1285
+ }
1286
+ /** Mixes `src` into the bus starting at sample `start`. */
1287
+ add(src, start) {
1288
+ if (this.canAdopt(src, start) && src[0] !== src[1]) {
1289
+ this.channels = src;
1290
+ return;
1291
+ }
1292
+ const dest = this.get();
1293
+ for (let c = 0; c < 2; c++) addInto(dest[c], src[c], start);
1294
+ }
1295
+ };
1296
+ /** A clip's file name for progress, without paths or signed-URL queries. */
1297
+ function sourceLabel(url) {
1298
+ if (url.startsWith("data:")) return "inline audio";
1299
+ const name = url.split(/[?#]/)[0].split(/[\\/]/).pop();
1300
+ return name ? decodeURIComponentSafe(name) : "audio";
1301
+ }
1302
+ function decodeURIComponentSafe(s) {
1303
+ try {
1304
+ return decodeURIComponent(s);
1305
+ } catch {
1306
+ return s;
1307
+ }
1308
+ }
1198
1309
  /**
1199
1310
  * Recursively parses the VirtualMediaData tree and mixes all active audio tracks
1200
1311
  * into a single unified stereo PCM stream (Float32Array channels).
1201
1312
  */
1202
- async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId) {
1313
+ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId, options = {}) {
1203
1314
  mediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);
1204
1315
  await waitForDelayRender();
1205
1316
  shaderStore.registerSignalsFromComposition(renderId, virtualMedia);
@@ -1207,12 +1318,44 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1207
1318
  const totalDurationSec = durationMs / 1e3;
1208
1319
  const totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);
1209
1320
  mediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);
1210
- const outputLeft = new Float32Array(totalTargetSamples);
1211
- const outputRight = new Float32Array(totalTargetSamples);
1212
- const mixedChannels = [outputLeft, outputRight];
1213
1321
  const decodedCache = /* @__PURE__ */ new Map();
1322
+ const undecodable = /* @__PURE__ */ new Set();
1323
+ async function getDecodedRange(url, startSec, endSec) {
1324
+ if (undecodable.has(url)) return null;
1325
+ let ranges = decodedCache.get(url);
1326
+ const hit = ranges?.find((r) => r.validFromSec <= startSec && r.validToSec >= endSec);
1327
+ if (hit) return hit;
1328
+ const decoded = await decodeAudioRange(url, {
1329
+ startSec,
1330
+ endSec
1331
+ });
1332
+ if (!decoded) {
1333
+ undecodable.add(url);
1334
+ return null;
1335
+ }
1336
+ if (!ranges) {
1337
+ ranges = [];
1338
+ decodedCache.set(url, ranges);
1339
+ }
1340
+ ranges.push(decoded);
1341
+ return decoded;
1342
+ }
1343
+ const audibleCache = /* @__PURE__ */ new WeakMap();
1344
+ function isAudible(node) {
1345
+ const cached = audibleCache.get(node);
1346
+ if (cached !== void 0) return cached;
1347
+ const op = node.operation;
1348
+ let audible = false;
1349
+ if (op?.op === "source") {
1350
+ const mediaType = getMediaType(node);
1351
+ audible = mediaType === "Audio" || mediaType === "Video";
1352
+ } else if (op?.op && !GAIN_ONLY_PROCESSORS.has(op.op) && audioRegistry.get(op.op)) audible = true;
1353
+ if (!audible && node.children) audible = node.children.some((child) => child && isAudible(child));
1354
+ audibleCache.set(node, audible);
1355
+ return audible;
1356
+ }
1214
1357
  async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {
1215
- if (!node) return null;
1358
+ if (!node || !isAudible(node)) return null;
1216
1359
  const op = node.operation;
1217
1360
  if (!op) {
1218
1361
  const durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;
@@ -1220,22 +1363,17 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1220
1363
  const actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;
1221
1364
  const localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);
1222
1365
  if (localSamplesCount$1 <= 0) return null;
1223
- const localChannels$1 = [new Float32Array(localSamplesCount$1), new Float32Array(localSamplesCount$1)];
1366
+ const bus$1 = new MixBus(localSamplesCount$1);
1224
1367
  for (const child of node.children) {
1225
1368
  const childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);
1226
1369
  if (childChannels) {
1227
1370
  const childOp = child.operation;
1228
1371
  const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
1229
1372
  const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
1230
- for (let c = 0; c < 2; c++) {
1231
- const dest = localChannels$1[c];
1232
- const src = childChannels[c];
1233
- const len = Math.min(src.length, dest.length - childStartSample);
1234
- for (let i = 0; i < len; i++) if (childStartSample + i >= 0) dest[childStartSample + i] += src[i];
1235
- }
1373
+ bus$1.add(childChannels, childStartSample);
1236
1374
  }
1237
1375
  }
1238
- return localChannels$1;
1376
+ return bus$1.channels;
1239
1377
  }
1240
1378
  const volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);
1241
1379
  const speedMultiplier = inheritedSpeed;
@@ -1248,9 +1386,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1248
1386
  const nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;
1249
1387
  const localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);
1250
1388
  if (localSamplesCount <= 0) return null;
1251
- const localLeft = new Float32Array(localSamplesCount);
1252
- const localRight = new Float32Array(localSamplesCount);
1253
- const localChannels = [localLeft, localRight];
1389
+ const bus = new MixBus(localSamplesCount);
1254
1390
  const processSegment = async (seg, windowStartFrameOffset) => {
1255
1391
  const segSeekSec = seg ? seg.startSec : 0;
1256
1392
  const totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;
@@ -1266,20 +1402,22 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1266
1402
  if (params.sourceUrl && (mediaType === "Audio" || mediaType === "Video") && volume > 0) {
1267
1403
  const finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));
1268
1404
  const effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);
1269
- let decoded = decodedCache.get(params.sourceUrl);
1270
- if (decoded === void 0) {
1271
- decoded = await decodeAudioSource(params.sourceUrl);
1272
- decodedCache.set(params.sourceUrl, decoded);
1273
- }
1405
+ const clipDurationSec = actualDurationFrames / fps;
1406
+ const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
1407
+ const decoded = clipSamplesCount > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec, effectiveTrimSec + clipSamplesCount / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;
1274
1408
  if (decoded) {
1275
- const clipDurationSec = actualDurationFrames / fps;
1276
- const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
1277
- if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount) {
1278
- const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
1279
- const srcLeft = decoded.channels[0];
1280
- const srcRight = decoded.channels.length > 1 ? decoded.channels[1] : decoded.channels[0];
1281
- const stretchedLeft = await resampleAndStretchPCM(srcLeft, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);
1282
- const stretchedRight = await resampleAndStretchPCM(srcRight, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);
1409
+ const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
1410
+ const stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex);
1411
+ const stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex) : stretchedLeft;
1412
+ const stretched = [stretchedLeft, stretchedRight];
1413
+ if (bus.canAdopt(stretched, segmentStartSample)) {
1414
+ if (volume !== 1) {
1415
+ for (let i = 0; i < clipSamplesCount; i++) stretchedLeft[i] *= volume;
1416
+ if (stretchedRight !== stretchedLeft) for (let i = 0; i < clipSamplesCount; i++) stretchedRight[i] *= volume;
1417
+ }
1418
+ bus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];
1419
+ } else {
1420
+ const [localLeft, localRight] = bus.get();
1283
1421
  for (let i = 0; i < clipSamplesCount; i++) {
1284
1422
  const outIndex = segmentStartSample + i;
1285
1423
  localLeft[outIndex] += stretchedLeft[i] * volume;
@@ -1289,26 +1427,29 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1289
1427
  }
1290
1428
  await yieldToMain();
1291
1429
  }
1430
+ if (mediaType === "Audio" || mediaType === "Video") {
1431
+ clipsDone++;
1432
+ options.onProgress?.({
1433
+ done: clipsDone,
1434
+ total: clipsTotal,
1435
+ ...params.sourceUrl && { source: sourceLabel(params.sourceUrl) }
1436
+ });
1437
+ }
1292
1438
  }
1293
1439
  if (node.children) for (const child of node.children) {
1294
1440
  const childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames);
1295
1441
  if (childChannels) {
1296
1442
  const childOp = child.operation;
1297
1443
  const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
1298
- const destStartSample = segmentStartSample + Math.round(childStartFrame / fps * targetSampleRate);
1299
- for (let c = 0; c < 2; c++) {
1300
- const dest = localChannels[c];
1301
- const src = childChannels[c];
1302
- const len = Math.min(src.length, dest.length - destStartSample);
1303
- for (let i = 0; i < len; i++) if (destStartSample + i >= 0) dest[destStartSample + i] += src[i];
1304
- }
1444
+ const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
1445
+ bus.add(childChannels, segmentStartSample + childStartSample);
1305
1446
  }
1306
1447
  }
1307
1448
  const pluginProcessor = audioRegistry.get(op.op);
1308
1449
  if (pluginProcessor) try {
1309
1450
  const clipDurationSec = actualDurationFrames / fps;
1310
1451
  const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
1311
- if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(localChannels.map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {
1452
+ if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(bus.get().map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {
1312
1453
  device,
1313
1454
  frame: totalClockFrames,
1314
1455
  fps,
@@ -1329,10 +1470,31 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1329
1470
  currentStart += durFrames;
1330
1471
  }
1331
1472
  } else await processSegment(null, 0);
1332
- return localChannels;
1473
+ return bus.channels;
1474
+ }
1475
+ const normalized = normalizeTimeline(virtualMedia, fps);
1476
+ let clipsTotal = 0;
1477
+ let clipsDone = 0;
1478
+ if (options.onProgress) {
1479
+ const count = (node) => {
1480
+ if (!node) return;
1481
+ const op = node.operation;
1482
+ if (op?.op === "source") {
1483
+ const mediaType = getMediaType(node);
1484
+ if (mediaType === "Audio" || mediaType === "Video") clipsTotal += Math.max(1, op.timeline?.segments?.length ?? 0);
1485
+ }
1486
+ for (const child of node.children ?? []) count(child);
1487
+ };
1488
+ count(normalized);
1489
+ options.onProgress({
1490
+ done: 0,
1491
+ total: clipsTotal
1492
+ });
1333
1493
  }
1334
- const rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);
1335
- if (rootChannels) for (let c = 0; c < 2; c++) {
1494
+ const rootChannels = await traverse(normalized, 0, 0, 1, 1, null);
1495
+ const mixedChannels = rootChannels?.every((ch) => ch.length === totalTargetSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(totalTargetSamples), new Float32Array(totalTargetSamples)];
1496
+ const [outputLeft, outputRight] = mixedChannels;
1497
+ if (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {
1336
1498
  const dest = mixedChannels[c];
1337
1499
  const src = rootChannels[c];
1338
1500
  const len = Math.min(src.length, dest.length);
@@ -1361,4 +1523,4 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1361
1523
 
1362
1524
  //#endregion
1363
1525
  export { spring as _, resolveLayerDuration as a, computeStrokeRect as c, measureSpring as d, measureText as f, requiresIsolation as g, preloadFont as h, mixAudioTracks as i, interpolate as l, preloadCompositionFonts as m, decodeAudioSource as n, Easing as o, measureTextAsync as p, drawCompositionTree as r, bezier as s, compositionStateStore as t, mapBlendModeToSkia as u, springCalculation as v };
1364
- //# sourceMappingURL=dist-Cl0mvShy.mjs.map
1526
+ //# sourceMappingURL=dist-CxGfrigI.mjs.map