framefields 2.4.0 → 2.4.1

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 (424) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-DXwNhi1z.mjs → audio-CPApYcWF.mjs} +4 -4
  4. package/dist/{audio-DXwNhi1z.mjs.map → audio-CPApYcWF.mjs.map} +1 -1
  5. package/dist/{audio-C6toT7F3.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
  6. package/dist/{audio-C6toT7F3.d.mts.map → audio-DHuEMOtQ.d.mts.map} +1 -1
  7. package/dist/{dist-fjKpBYkc.mjs → dist-ClyC_d66.mjs} +9 -2
  8. package/dist/dist-ClyC_d66.mjs.map +1 -0
  9. package/dist/{dist-Cl0mvShy.mjs → dist-CrK3rmyN.mjs} +180 -58
  10. package/dist/dist-CrK3rmyN.mjs.map +1 -0
  11. package/dist/{dist-DRB6Vg5u.mjs → dist-CspOG4V1.mjs} +25 -8
  12. package/dist/dist-CspOG4V1.mjs.map +1 -0
  13. package/dist/{dist-BY0bIWgr.mjs → dist-SB9qfAko.mjs} +2 -2
  14. package/dist/{dist-BY0bIWgr.mjs.map → dist-SB9qfAko.mjs.map} +1 -1
  15. package/dist/effects/index.d.mts +4 -4
  16. package/dist/effects/index.mjs +35 -35
  17. package/dist/{effects-lBqG-vd1.mjs → effects-DxylPSuI.mjs} +3 -3
  18. package/dist/{effects-lBqG-vd1.mjs.map → effects-DxylPSuI.mjs.map} +1 -1
  19. package/dist/fonts/index.mjs +2 -2
  20. package/dist/{fonts-DlRJD6NS.mjs → fonts-CsMDfqv9.mjs} +2 -2
  21. package/dist/{fonts-DlRJD6NS.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
  22. package/dist/{gpu-DOQX1W2q.mjs → gpu-DtT5I4ME.mjs} +2 -2
  23. package/dist/{gpu-DOQX1W2q.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
  24. package/dist/{index-CaiZ5p6q.d.mts → index-B1XcyMm8.d.mts} +2 -2
  25. package/dist/{index-CaiZ5p6q.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
  26. package/dist/{index-Cf1pVxn0.d.mts → index-B2Xesdug.d.mts} +4 -4
  27. package/dist/{index-Cf1pVxn0.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
  28. package/dist/{index-BHqdtJbN.d.mts → index-BxARm93R.d.mts} +2 -2
  29. package/dist/{index-BHqdtJbN.d.mts.map → index-BxARm93R.d.mts.map} +1 -1
  30. package/dist/{index-BONyHjZX.d.mts → index-C0o3lLyA.d.mts} +3 -3
  31. package/dist/{index-BONyHjZX.d.mts.map → index-C0o3lLyA.d.mts.map} +1 -1
  32. package/dist/{index-DN9oXO-X.d.mts → index-D-l-yCv6.d.mts} +3 -3
  33. package/dist/{index-DN9oXO-X.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
  34. package/dist/{index-DEODKaL6.d.mts → index-DujpgUUq.d.mts} +7 -2
  35. package/dist/index-DujpgUUq.d.mts.map +1 -0
  36. package/dist/index.d.mts +10 -10
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +52 -52
  39. package/dist/preview/index.d.mts +2 -2
  40. package/dist/preview/index.mjs +10 -10
  41. package/dist/{preview-Ca4tF5Ro.mjs → preview-D2dMmokw.mjs} +2 -2
  42. package/dist/{preview-Ca4tF5Ro.mjs.map → preview-D2dMmokw.mjs.map} +1 -1
  43. package/dist/preview-engine/audio.mjs +1 -1
  44. package/dist/preview-engine/chunk-266DECPQ.mjs +1 -0
  45. package/dist/preview-engine/{chunk-SZW5J72T.mjs → chunk-2DDBSI75.mjs} +1 -1
  46. package/dist/preview-engine/{chunk-QXCY2ATH.mjs → chunk-2GIWWDE4.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-34ACEGNW.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-3ACCCPBN.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-VK2CVMWJ.mjs → chunk-5E5J4KT4.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-PXT52LEH.mjs → chunk-C6Z7H2RZ.mjs} +1 -1
  56. package/dist/preview-engine/chunk-CPFPY35C.mjs +1 -0
  57. package/dist/preview-engine/{chunk-7EPIRODI.mjs → chunk-DOCSX45C.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-GSFN4WCH.mjs → chunk-FFGBUS76.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-FFMPC7QA.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-IUPDOATX.mjs → chunk-FHKBALVI.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-G4J662EL.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-5W4AFQP7.mjs → chunk-GNG4YH2W.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-GQLZXCW3.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-HDGFNBYK.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-HNNIVJ2K.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-FU7AIAMM.mjs → chunk-HUKAC5MJ.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-JX22B2FS.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-KAQUNOVB.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-KT35IPCF.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-VXS5SIEC.mjs → chunk-LIQA5OOU.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-SGPRLTNF.mjs → chunk-LK3T65RB.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-YQZOGEPZ.mjs → chunk-LLDIDE5Q.mjs} +1 -1
  73. package/dist/preview-engine/chunk-NNQUIVTE.mjs +5 -0
  74. package/dist/preview-engine/{chunk-5AUB4Y3L.mjs → chunk-NRAZV5OA.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-NTVDL3RS.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-J2R5R7YY.mjs → chunk-RKVB47IA.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-PAQNDZQB.mjs → chunk-SWXVITCQ.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-KERW7QJ4.mjs → chunk-UZBVCYRY.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-WACWOKEP.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-AXHB4J37.mjs → chunk-WCZ5DKZ4.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-WH5Q2NFN.mjs → chunk-WJJIISQJ.mjs} +1 -1
  87. package/dist/preview-engine/chunk-XDMZP3E2.mjs +1 -0
  88. package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-Z6UKUHPU.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-WUKH7BD7.mjs → chunk-ZKPQGQE3.mjs} +1 -1
  90. package/dist/preview-engine/effects.mjs +1 -1
  91. package/dist/preview-engine/framefields.mjs +4 -4
  92. package/dist/preview-engine/player.mjs +1 -1
  93. package/dist/preview-engine/{renderers-2P6KXWEZ.mjs → renderers-3CXFGRE7.mjs} +1 -1
  94. package/dist/preview-engine/{renderers-KZWGSKRF.mjs → renderers-3FC3WCJN.mjs} +1 -1
  95. package/dist/preview-engine/renderers-3S2FM33K.mjs +1 -0
  96. package/dist/preview-engine/{renderers-5FQA2DP4.mjs → renderers-4AJWVIJG.mjs} +1 -1
  97. package/dist/preview-engine/renderers-53ZTBI3C.mjs +1 -0
  98. package/dist/preview-engine/renderers-5USBVCMQ.mjs +1 -0
  99. package/dist/preview-engine/renderers-65G6BLEA.mjs +1 -0
  100. package/dist/preview-engine/{renderers-PYWXELLG.mjs → renderers-6JZ4HYIU.mjs} +1 -1
  101. package/dist/preview-engine/{renderers-3GHEWWVX.mjs → renderers-75TL7RLS.mjs} +1 -1
  102. package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-7CPYTCNW.mjs} +1 -1
  103. package/dist/preview-engine/renderers-7XU7BXE7.mjs +1 -0
  104. package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-AZYJFJLO.mjs} +1 -1
  105. package/dist/preview-engine/{renderers-TR2V2HZ2.mjs → renderers-BDWVXYTW.mjs} +1 -1
  106. package/dist/preview-engine/renderers-BFXM32BC.mjs +1 -0
  107. package/dist/preview-engine/renderers-CDXHCWWK.mjs +1 -0
  108. package/dist/preview-engine/{renderers-N7FR54V2.mjs → renderers-CK3ZL3GM.mjs} +1 -1
  109. package/dist/preview-engine/renderers-CLUN7WU6.mjs +1 -0
  110. package/dist/preview-engine/renderers-DTB4HEXU.mjs +1 -0
  111. package/dist/preview-engine/renderers-EFKNRLYF.mjs +1 -0
  112. package/dist/preview-engine/{renderers-UPTJJE5F.mjs → renderers-FADYGSLK.mjs} +1 -1
  113. package/dist/preview-engine/{renderers-I5E2RSV4.mjs → renderers-FKH5S64C.mjs} +1 -1
  114. package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-FM6A5YR4.mjs} +1 -1
  115. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +1 -0
  116. package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-GAIUTII6.mjs} +1 -1
  117. package/dist/preview-engine/renderers-GTUO5LIV.mjs +1 -0
  118. package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-GUPEJK3O.mjs} +1 -1
  119. package/dist/preview-engine/{renderers-IWQ3V6AJ.mjs → renderers-HSJIVP57.mjs} +1 -1
  120. package/dist/preview-engine/{renderers-4GRVAW2W.mjs → renderers-HZHEGONW.mjs} +1 -1
  121. package/dist/preview-engine/{renderers-NWHS7N2L.mjs → renderers-IHACBWXI.mjs} +1 -1
  122. package/dist/preview-engine/{renderers-3YCJOINH.mjs → renderers-IHRFEZNP.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-A7VH3ON5.mjs → renderers-IJDQJEE5.mjs} +1 -1
  124. package/dist/preview-engine/{renderers-OT7D3BUA.mjs → renderers-IO3BVVJ7.mjs} +1 -1
  125. package/dist/preview-engine/renderers-IR772VSN.mjs +1 -0
  126. package/dist/preview-engine/{renderers-EJWPVVQR.mjs → renderers-K7B5PQBT.mjs} +1 -1
  127. package/dist/preview-engine/renderers-L6TRJOXA.mjs +1 -0
  128. package/dist/preview-engine/{renderers-N7TS5562.mjs → renderers-LVLVJHOL.mjs} +1 -1
  129. package/dist/preview-engine/{renderers-FK72LKQC.mjs → renderers-MBSOKWKB.mjs} +1 -1
  130. package/dist/preview-engine/{renderers-NC64EQDE.mjs → renderers-N6H6RSF2.mjs} +1 -1
  131. package/dist/preview-engine/{renderers-ZHZMGMLN.mjs → renderers-NJLGPPX7.mjs} +1 -1
  132. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +1 -0
  133. package/dist/preview-engine/renderers-O6V3OEKX.mjs +1 -0
  134. package/dist/preview-engine/renderers-OODA27UH.mjs +1 -0
  135. package/dist/preview-engine/{renderers-6CG7DBTB.mjs → renderers-R4WMM6IX.mjs} +1 -1
  136. package/dist/preview-engine/renderers-RIGW33ZI.mjs +1 -0
  137. package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-RKZGYWDG.mjs} +1 -1
  138. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +1 -0
  139. package/dist/preview-engine/renderers-SKB2GGKS.mjs +1 -0
  140. package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-SW7FIEKO.mjs} +1 -1
  141. package/dist/preview-engine/renderers-T4D2TASM.mjs +1 -0
  142. package/dist/preview-engine/renderers-T74XV36Q.mjs +1 -0
  143. package/dist/preview-engine/{renderers-F55XFVMP.mjs → renderers-TCNPEANL.mjs} +1 -1
  144. package/dist/preview-engine/renderers-TOPW2UM3.mjs +1 -0
  145. package/dist/preview-engine/{renderers-5YEIUTVN.mjs → renderers-TY7DVI7E.mjs} +1 -1
  146. package/dist/preview-engine/{renderers-HQEKSUNR.mjs → renderers-U55KRIOV.mjs} +1 -1
  147. package/dist/preview-engine/{renderers-YMPXGYRU.mjs → renderers-UDOBX433.mjs} +1 -1
  148. package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-UMPOVFRA.mjs} +1 -1
  149. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +1 -0
  150. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +1 -0
  151. package/dist/preview-engine/{renderers-MON4QFRF.mjs → renderers-UWKSTSTA.mjs} +1 -1
  152. package/dist/preview-engine/renderers-VHPAOUTA.mjs +1 -0
  153. package/dist/preview-engine/{renderers-E76OKK66.mjs → renderers-WR6MKT5S.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-MCECHPCL.mjs → renderers-XKHNBARD.mjs} +1 -1
  155. package/dist/preview-engine/renderers-YEQRQJFC.mjs +1 -0
  156. package/dist/preview-engine/{renderers-RJO6H4FC.mjs → renderers-YRZ3WODX.mjs} +1 -1
  157. package/dist/preview-engine/renderers-YUTFGVRY.mjs +1 -0
  158. package/dist/preview-engine/{renderers-3SRG77SC.mjs → renderers-YXOTRKPA.mjs} +1 -1
  159. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +1 -0
  160. package/dist/preview-engine/renderers-ZW75LQTR.mjs +1 -0
  161. package/dist/preview-engine/signals.mjs +1 -1
  162. package/dist/{program-CJEg2wMa.mjs → program-C2cJayA1.mjs} +4 -4
  163. package/dist/{program-CJEg2wMa.mjs.map → program-C2cJayA1.mjs.map} +1 -1
  164. package/dist/renderer/index.d.mts +2 -2
  165. package/dist/renderer/index.mjs +2 -2
  166. package/dist/{renderer-CCu1Q8ib.mjs → renderer--ruTGlPo.mjs} +3 -3
  167. package/dist/{renderer-CCu1Q8ib.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
  168. package/dist/{renderer-D-IcBLT0.mjs → renderer-7y5Cj8rV.mjs} +3 -3
  169. package/dist/{renderer-D-IcBLT0.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
  170. package/dist/{renderer-Dg5yLAM9.mjs → renderer-92eLJg24.mjs} +4 -4
  171. package/dist/{renderer-Dg5yLAM9.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
  172. package/dist/{renderer-CduDa1qf.mjs → renderer-B0gPTXhe.mjs} +3 -3
  173. package/dist/{renderer-CduDa1qf.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
  174. package/dist/{renderer-CjTxu89O.mjs → renderer-B1QREs7J.mjs} +3 -3
  175. package/dist/{renderer-CjTxu89O.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
  176. package/dist/{renderer-DVaVVz-D.mjs → renderer-B3e4LSE6.mjs} +3 -3
  177. package/dist/{renderer-DVaVVz-D.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
  178. package/dist/{renderer-CxSH3F_n.mjs → renderer-B4RpSd4A.mjs} +2 -2
  179. package/dist/{renderer-CxSH3F_n.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
  180. package/dist/renderer-BAhZeUUn.mjs +5 -0
  181. package/dist/{renderer-BZCLdb8F.mjs → renderer-BBAbZfBl.mjs} +4 -4
  182. package/dist/{renderer-BZCLdb8F.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
  183. package/dist/{renderer-DZndEvZN.mjs → renderer-BDCy8NgT.mjs} +3 -3
  184. package/dist/{renderer-DZndEvZN.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
  185. package/dist/renderer-BHAE_dKq.mjs +5 -0
  186. package/dist/{renderer-i4RJ-_sx.mjs → renderer-BMKFzfSQ.mjs} +3 -3
  187. package/dist/{renderer-i4RJ-_sx.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
  188. package/dist/renderer-BNYZY3FE.mjs +5 -0
  189. package/dist/{renderer-BtJ6XYN7.mjs → renderer-BPixWnmY.mjs} +3 -3
  190. package/dist/{renderer-BtJ6XYN7.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
  191. package/dist/renderer-BSvubMvI.mjs +5 -0
  192. package/dist/{renderer-CoN2JgLO.mjs → renderer-BTd2sWDC.mjs} +3 -3
  193. package/dist/{renderer-CoN2JgLO.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
  194. package/dist/{renderer-DautVsW4.mjs → renderer-BTigwMQp.mjs} +3 -3
  195. package/dist/{renderer-DautVsW4.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
  196. package/dist/renderer-B_M_yhTc.mjs +5 -0
  197. package/dist/renderer-B_xSsTuy.mjs +5 -0
  198. package/dist/renderer-BePHurAU.mjs +5 -0
  199. package/dist/renderer-BfZquJrW.mjs +5 -0
  200. package/dist/{renderer-DAFi5TC_.mjs → renderer-Bi6W4RSn.mjs} +2 -2
  201. package/dist/{renderer-DAFi5TC_.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
  202. package/dist/{renderer-Edn9xltT.mjs → renderer-BjCHW9Jp.mjs} +2 -2
  203. package/dist/{renderer-CJmZURPQ.mjs → renderer-BjvNEbML.mjs} +2 -2
  204. package/dist/{renderer-CJmZURPQ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
  205. package/dist/{renderer-C2ZIAhdJ.mjs → renderer-BkWd4-YO.mjs} +2 -2
  206. package/dist/{renderer-C2ZIAhdJ.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
  207. package/dist/{renderer-Cfto0m0-.mjs → renderer-Bkrk0M0r.mjs} +3 -3
  208. package/dist/{renderer-Cfto0m0-.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
  209. package/dist/{renderer-h9sJnoxw.mjs → renderer-BljMOvry.mjs} +3 -3
  210. package/dist/{renderer-h9sJnoxw.mjs.map → renderer-BljMOvry.mjs.map} +1 -1
  211. package/dist/renderer-BuY5ypB2.mjs +5 -0
  212. package/dist/renderer-BvOQgFHo.mjs +5 -0
  213. package/dist/{renderer-DqgduGiO.mjs → renderer-BwpgDLYO.mjs} +3 -3
  214. package/dist/{renderer-DqgduGiO.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
  215. package/dist/{renderer-DaV95CAd.mjs → renderer-BwwZB2mt.mjs} +4 -4
  216. package/dist/{renderer-DaV95CAd.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
  217. package/dist/{renderer-DA1brg35.mjs → renderer-ByCX4JYg.mjs} +3 -3
  218. package/dist/{renderer-DA1brg35.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
  219. package/dist/{renderer-Tf1AS1aO.mjs → renderer-C1E5Rt5q.mjs} +3 -3
  220. package/dist/{renderer-Tf1AS1aO.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
  221. package/dist/renderer-C7NkSvUz.mjs +5 -0
  222. package/dist/{renderer-CG4TmDWH.mjs → renderer-CCGzT6bX.mjs} +2 -2
  223. package/dist/{renderer-wFyrVuuj.mjs → renderer-CDOobs18.mjs} +3 -3
  224. package/dist/{renderer-wFyrVuuj.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
  225. package/dist/{renderer-BaHEN_Kv.mjs → renderer-CDUxAtsk.mjs} +4 -4
  226. package/dist/{renderer-BaHEN_Kv.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
  227. package/dist/renderer-CIuxV2q1.mjs +5 -0
  228. package/dist/{renderer-DY8fPeH3.mjs → renderer-CJ4bxCld.mjs} +2 -2
  229. package/dist/renderer-CKp97tSQ.mjs +5 -0
  230. package/dist/{renderer-TyZu7nQ2.mjs → renderer-CNb-DG00.mjs} +71 -71
  231. package/dist/{renderer-TyZu7nQ2.mjs.map → renderer-CNb-DG00.mjs.map} +1 -1
  232. package/dist/{renderer-BTJyO6ov.mjs → renderer-CNuVJ4nG.mjs} +2 -2
  233. package/dist/{renderer-BTJyO6ov.mjs.map → renderer-CNuVJ4nG.mjs.map} +1 -1
  234. package/dist/renderer-CY89dTFR.mjs +5 -0
  235. package/dist/renderer-C_B_4Bl0.mjs +5 -0
  236. package/dist/{renderer-Dk0dnuHr.mjs → renderer-Cbsnj9vV.mjs} +3 -3
  237. package/dist/{renderer-Dk0dnuHr.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
  238. package/dist/{renderer-B6UqWjtH.mjs → renderer-CcoUNzlQ.mjs} +3 -3
  239. package/dist/{renderer-B6UqWjtH.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
  240. package/dist/renderer-Cd87JOjP.mjs +5 -0
  241. package/dist/{renderer-BZF48o1T.mjs → renderer-CeiCJCg4.mjs} +3 -3
  242. package/dist/{renderer-BZF48o1T.mjs.map → renderer-CeiCJCg4.mjs.map} +1 -1
  243. package/dist/renderer-Cev6orIK.mjs +6 -0
  244. package/dist/renderer-Cewf6UPh.mjs +5 -0
  245. package/dist/renderer-CnHsMLIv.mjs +5 -0
  246. package/dist/renderer-CoxuAr7b.mjs +5 -0
  247. package/dist/{renderer-D4E8Yf61.mjs → renderer-CqtIbe5n.mjs} +2 -2
  248. package/dist/{renderer-D4E8Yf61.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
  249. package/dist/renderer-CrdG7trA.mjs +5 -0
  250. package/dist/{renderer-C-La-IAt.mjs → renderer-Csss5GFQ.mjs} +2 -2
  251. package/dist/{renderer-C-La-IAt.mjs.map → renderer-Csss5GFQ.mjs.map} +1 -1
  252. package/dist/renderer-Cu5MFgbk.mjs +5 -0
  253. package/dist/renderer-CuOjhtoo.mjs +5 -0
  254. package/dist/{renderer-BhZutM8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
  255. package/dist/{renderer-BhZutM8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
  256. package/dist/{renderer-CgZ1G37H.mjs → renderer-Cw6Sagih.mjs} +3 -3
  257. package/dist/{renderer-CgZ1G37H.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
  258. package/dist/{renderer-Dim2ZlfK.d.mts → renderer-CxqPeATd.d.mts} +2 -2
  259. package/dist/{renderer-Dim2ZlfK.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
  260. package/dist/{renderer-yGARXwV0.mjs → renderer-CzRqzp8P.mjs} +3 -3
  261. package/dist/{renderer-yGARXwV0.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
  262. package/dist/{renderer-B8v8iEkB.mjs → renderer-Czxgaygb.mjs} +6 -6
  263. package/dist/{renderer-B8v8iEkB.mjs.map → renderer-Czxgaygb.mjs.map} +1 -1
  264. package/dist/{renderer-eWBBsCv2.mjs → renderer-D0vom99O.mjs} +2 -2
  265. package/dist/{renderer-eWBBsCv2.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
  266. package/dist/{renderer-C9pl21Zb.mjs → renderer-D2-V9nQq.mjs} +3 -3
  267. package/dist/{renderer-C9pl21Zb.mjs.map → renderer-D2-V9nQq.mjs.map} +1 -1
  268. package/dist/renderer-D2_0g6Oi.mjs +5 -0
  269. package/dist/renderer-D62FwolD.mjs +5 -0
  270. package/dist/{renderer-445i0uxs.mjs → renderer-D6BXR7P4.mjs} +2 -2
  271. package/dist/{renderer-445i0uxs.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
  272. package/dist/renderer-DDNY9N7I.mjs +5 -0
  273. package/dist/{renderer-5tQ7ImPk.mjs → renderer-DFJQ6v0F.mjs} +2 -2
  274. package/dist/{renderer-5tQ7ImPk.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
  275. package/dist/renderer-DF_ONJ3v.mjs +5 -0
  276. package/dist/{renderer-CoO2j8AC.mjs → renderer-DILUmb-e.mjs} +3 -3
  277. package/dist/{renderer-CoO2j8AC.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
  278. package/dist/{renderer-CduL1AOK.mjs → renderer-DKfwlE4e.mjs} +3 -3
  279. package/dist/{renderer-CduL1AOK.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
  280. package/dist/{renderer-DFX2V9Dp.mjs → renderer-DScyMHpJ.mjs} +2 -2
  281. package/dist/{renderer-DFX2V9Dp.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
  282. package/dist/{renderer-BZvWlGsa.mjs → renderer-DTw-W0Yz.mjs} +3 -3
  283. package/dist/{renderer-BZvWlGsa.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
  284. package/dist/{renderer-BFWRUTov.mjs → renderer-DZJJHCtm.mjs} +3 -3
  285. package/dist/{renderer-BFWRUTov.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
  286. package/dist/{renderer-Cz9fzS11.mjs → renderer-DaSxr9fM.mjs} +3 -3
  287. package/dist/{renderer-Cz9fzS11.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
  288. package/dist/{renderer-CoX23zo_.mjs → renderer-DaqWTx7s.mjs} +3 -3
  289. package/dist/{renderer-CoX23zo_.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
  290. package/dist/renderer-DbzrVHEE.mjs +5 -0
  291. package/dist/{renderer-CN3iCli4.mjs → renderer-DcBGYN3V.mjs} +3 -3
  292. package/dist/{renderer-CN3iCli4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
  293. package/dist/{renderer-CCCitH4J.mjs → renderer-DjBCWxYy.mjs} +3 -3
  294. package/dist/{renderer-CCCitH4J.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
  295. package/dist/{renderer-gbBgGPNL.mjs → renderer-DjwITRvg.mjs} +2 -2
  296. package/dist/renderer-DlYchp1v.mjs +5 -0
  297. package/dist/renderer-DqcUNP8J.mjs +5 -0
  298. package/dist/renderer-DqvFhEQj.mjs +5 -0
  299. package/dist/{renderer-B4JmNa_T.mjs → renderer-DwVOxdzC.mjs} +3 -3
  300. package/dist/{renderer-B4JmNa_T.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
  301. package/dist/{renderer-BZWiY6Jw.mjs → renderer-Dwu_zfdL.mjs} +3 -3
  302. package/dist/{renderer-BZWiY6Jw.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
  303. package/dist/renderer-DxBav2bE.mjs +5 -0
  304. package/dist/{renderer-DkYiOWPJ.mjs → renderer-DyyIXLQK.mjs} +3 -3
  305. package/dist/{renderer-DkYiOWPJ.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
  306. package/dist/{renderer-D-e3vDnO.mjs → renderer-DzSMeQBC.mjs} +3 -3
  307. package/dist/{renderer-D-e3vDnO.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
  308. package/dist/{renderer-DOZJeWM4.mjs → renderer-EZp_IIPK.mjs} +3 -3
  309. package/dist/{renderer-DOZJeWM4.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
  310. package/dist/{renderer-DkM_wN8j.mjs → renderer-G1pMJH5C.mjs} +2 -2
  311. package/dist/{renderer-DkM_wN8j.mjs.map → renderer-G1pMJH5C.mjs.map} +1 -1
  312. package/dist/renderer-GvSRoQje.mjs +5 -0
  313. package/dist/{renderer-DQtk282o.mjs → renderer-If8JOkBi.mjs} +2 -2
  314. package/dist/{renderer-DQtk282o.mjs.map → renderer-If8JOkBi.mjs.map} +1 -1
  315. package/dist/{renderer-BL36f2IQ.mjs → renderer-JvcR1vYI.mjs} +2 -2
  316. package/dist/{renderer-BL36f2IQ.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
  317. package/dist/renderer-KP7Ita9g.mjs +5 -0
  318. package/dist/{renderer-DOkEalxy.mjs → renderer-NizuhHsH.mjs} +3 -3
  319. package/dist/{renderer-DOkEalxy.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
  320. package/dist/renderer-Pc8dyNXt.mjs +5 -0
  321. package/dist/{renderer-fXRwAdO2.mjs → renderer-RDCax5CK.mjs} +3 -3
  322. package/dist/{renderer-fXRwAdO2.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
  323. package/dist/{renderer-BOvCstdU.mjs → renderer-UcdqCarR.mjs} +3 -3
  324. package/dist/{renderer-BOvCstdU.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
  325. package/dist/{renderer-BaBluD-r.mjs → renderer-V5uEyDFz.mjs} +3 -3
  326. package/dist/{renderer-BaBluD-r.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
  327. package/dist/{renderer-BzgnTEvf.mjs → renderer-X0eKSD7v.mjs} +3 -3
  328. package/dist/{renderer-BzgnTEvf.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
  329. package/dist/{renderer-Ai5nZsof.mjs → renderer-Za4D9hej.mjs} +3 -3
  330. package/dist/{renderer-Ai5nZsof.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
  331. package/dist/{renderer-q971j1BW.mjs → renderer-apeDrNXM.mjs} +3 -3
  332. package/dist/{renderer-q971j1BW.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
  333. package/dist/renderer-ezRCmU09.mjs +3 -0
  334. package/dist/{renderer-CNS8LA2_.mjs → renderer-gRMkQabv.mjs} +3 -3
  335. package/dist/{renderer-CNS8LA2_.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
  336. package/dist/renderer-h6ev1ogx.mjs +5 -0
  337. package/dist/{renderer-nMnE_T2y.mjs → renderer-rXgqgAjw.mjs} +3 -3
  338. package/dist/{renderer-nMnE_T2y.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
  339. package/dist/{renderer-BPsi7Q7Z.mjs → renderer-ut1GqW89.mjs} +3 -3
  340. package/dist/{renderer-BPsi7Q7Z.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
  341. package/dist/{renderer-DH0wkQkR.mjs → renderer-yyUpCeWb.mjs} +2 -2
  342. package/dist/{renderer-DH0wkQkR.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
  343. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
  344. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs.map → renderers-CP8CFWDs-DzGXDs5p.mjs.map} +1 -1
  345. package/dist/signals/index.d.mts +5 -5
  346. package/dist/signals/index.mjs +6 -6
  347. package/dist/{signals-DGRs6ddH.mjs → signals-C5nOrRmn.mjs} +3 -3
  348. package/dist/{signals-DGRs6ddH.mjs.map → signals-C5nOrRmn.mjs.map} +1 -1
  349. package/package.json +57 -57
  350. package/dist/dist-Cl0mvShy.mjs.map +0 -1
  351. package/dist/dist-DRB6Vg5u.mjs.map +0 -1
  352. package/dist/dist-fjKpBYkc.mjs.map +0 -1
  353. package/dist/index-DEODKaL6.d.mts.map +0 -1
  354. package/dist/preview-engine/chunk-63SFBHEH.mjs +0 -1
  355. package/dist/preview-engine/chunk-7J2FWGVD.mjs +0 -1
  356. package/dist/preview-engine/chunk-M5HZPZHQ.mjs +0 -1
  357. package/dist/preview-engine/chunk-OG62XGCT.mjs +0 -5
  358. package/dist/preview-engine/renderers-2H7YEUTD.mjs +0 -1
  359. package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
  360. package/dist/preview-engine/renderers-3RC5FDWX.mjs +0 -1
  361. package/dist/preview-engine/renderers-6WH7NZCC.mjs +0 -1
  362. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +0 -1
  363. package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
  364. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
  365. package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
  366. package/dist/preview-engine/renderers-DXHJAMZR.mjs +0 -1
  367. package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
  368. package/dist/preview-engine/renderers-FWGMNPYB.mjs +0 -1
  369. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +0 -1
  370. package/dist/preview-engine/renderers-HXFRTIJD.mjs +0 -1
  371. package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
  372. package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
  373. package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
  374. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +0 -1
  375. package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
  376. package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
  377. package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
  378. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +0 -1
  379. package/dist/preview-engine/renderers-UHTO6BQA.mjs +0 -1
  380. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
  381. package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
  382. package/dist/preview-engine/renderers-XHTMRXC5.mjs +0 -1
  383. package/dist/preview-engine/renderers-YECY2YFT.mjs +0 -1
  384. package/dist/preview-engine/renderers-YMN6QXK7.mjs +0 -1
  385. package/dist/preview-engine/renderers-ZANPE3OK.mjs +0 -1
  386. package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
  387. package/dist/preview-engine/renderers-ZJTRANIX.mjs +0 -1
  388. package/dist/renderer--IHe-yqK.mjs +0 -5
  389. package/dist/renderer-B16iwR0_.mjs +0 -5
  390. package/dist/renderer-B3EEYpx6.mjs +0 -5
  391. package/dist/renderer-B3Si5IB4.mjs +0 -5
  392. package/dist/renderer-BARst3ZD.mjs +0 -3
  393. package/dist/renderer-BH8vZKmX.mjs +0 -5
  394. package/dist/renderer-BHZie6Pa.mjs +0 -5
  395. package/dist/renderer-BHpJ1e15.mjs +0 -5
  396. package/dist/renderer-BPJ79b47.mjs +0 -5
  397. package/dist/renderer-BPbM_6WR.mjs +0 -5
  398. package/dist/renderer-Bn-WnRh9.mjs +0 -5
  399. package/dist/renderer-BqHvDAUe.mjs +0 -5
  400. package/dist/renderer-CAtXDNsh.mjs +0 -5
  401. package/dist/renderer-C_5nfVce.mjs +0 -5
  402. package/dist/renderer-Cie7KKeQ.mjs +0 -5
  403. package/dist/renderer-CuoxvPsX.mjs +0 -5
  404. package/dist/renderer-Cvd3oIJQ.mjs +0 -5
  405. package/dist/renderer-CxAgpBrJ.mjs +0 -5
  406. package/dist/renderer-D-cWBX0r.mjs +0 -5
  407. package/dist/renderer-D0q2VyJR.mjs +0 -5
  408. package/dist/renderer-D6NXn3Ky.mjs +0 -5
  409. package/dist/renderer-D9bp2jor.mjs +0 -5
  410. package/dist/renderer-DEzIOIB7.mjs +0 -5
  411. package/dist/renderer-DSSTVulw.mjs +0 -5
  412. package/dist/renderer-DUmTURPu.mjs +0 -5
  413. package/dist/renderer-DXCAgI9m.mjs +0 -5
  414. package/dist/renderer-DZ9j3fQj.mjs +0 -5
  415. package/dist/renderer-Dd1G_VKM.mjs +0 -5
  416. package/dist/renderer-Dee8079X.mjs +0 -5
  417. package/dist/renderer-DgWh5noB.mjs +0 -5
  418. package/dist/renderer-DuD9QRix.mjs +0 -5
  419. package/dist/renderer-KtG5p44R.mjs +0 -5
  420. package/dist/renderer-fdVdNIhL.mjs +0 -5
  421. package/dist/renderer-gBKWL0_E.mjs +0 -5
  422. package/dist/renderer-hmWhsR6C.mjs +0 -5
  423. package/dist/renderer-jkL9FU2W.mjs +0 -6
  424. 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,6 +1253,46 @@ 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
+ };
1198
1296
  /**
1199
1297
  * Recursively parses the VirtualMediaData tree and mixes all active audio tracks
1200
1298
  * into a single unified stereo PCM stream (Float32Array channels).
@@ -1207,12 +1305,44 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1207
1305
  const totalDurationSec = durationMs / 1e3;
1208
1306
  const totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);
1209
1307
  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
1308
  const decodedCache = /* @__PURE__ */ new Map();
1309
+ const undecodable = /* @__PURE__ */ new Set();
1310
+ async function getDecodedRange(url, startSec, endSec) {
1311
+ if (undecodable.has(url)) return null;
1312
+ let ranges = decodedCache.get(url);
1313
+ const hit = ranges?.find((r) => r.validFromSec <= startSec && r.validToSec >= endSec);
1314
+ if (hit) return hit;
1315
+ const decoded = await decodeAudioRange(url, {
1316
+ startSec,
1317
+ endSec
1318
+ });
1319
+ if (!decoded) {
1320
+ undecodable.add(url);
1321
+ return null;
1322
+ }
1323
+ if (!ranges) {
1324
+ ranges = [];
1325
+ decodedCache.set(url, ranges);
1326
+ }
1327
+ ranges.push(decoded);
1328
+ return decoded;
1329
+ }
1330
+ const audibleCache = /* @__PURE__ */ new WeakMap();
1331
+ function isAudible(node) {
1332
+ const cached = audibleCache.get(node);
1333
+ if (cached !== void 0) return cached;
1334
+ const op = node.operation;
1335
+ let audible = false;
1336
+ if (op?.op === "source") {
1337
+ const mediaType = getMediaType(node);
1338
+ audible = mediaType === "Audio" || mediaType === "Video";
1339
+ } else if (op?.op && !GAIN_ONLY_PROCESSORS.has(op.op) && audioRegistry.get(op.op)) audible = true;
1340
+ if (!audible && node.children) audible = node.children.some((child) => child && isAudible(child));
1341
+ audibleCache.set(node, audible);
1342
+ return audible;
1343
+ }
1214
1344
  async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {
1215
- if (!node) return null;
1345
+ if (!node || !isAudible(node)) return null;
1216
1346
  const op = node.operation;
1217
1347
  if (!op) {
1218
1348
  const durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;
@@ -1220,22 +1350,17 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1220
1350
  const actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;
1221
1351
  const localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);
1222
1352
  if (localSamplesCount$1 <= 0) return null;
1223
- const localChannels$1 = [new Float32Array(localSamplesCount$1), new Float32Array(localSamplesCount$1)];
1353
+ const bus$1 = new MixBus(localSamplesCount$1);
1224
1354
  for (const child of node.children) {
1225
1355
  const childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);
1226
1356
  if (childChannels) {
1227
1357
  const childOp = child.operation;
1228
1358
  const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
1229
1359
  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
- }
1360
+ bus$1.add(childChannels, childStartSample);
1236
1361
  }
1237
1362
  }
1238
- return localChannels$1;
1363
+ return bus$1.channels;
1239
1364
  }
1240
1365
  const volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);
1241
1366
  const speedMultiplier = inheritedSpeed;
@@ -1248,9 +1373,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1248
1373
  const nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;
1249
1374
  const localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);
1250
1375
  if (localSamplesCount <= 0) return null;
1251
- const localLeft = new Float32Array(localSamplesCount);
1252
- const localRight = new Float32Array(localSamplesCount);
1253
- const localChannels = [localLeft, localRight];
1376
+ const bus = new MixBus(localSamplesCount);
1254
1377
  const processSegment = async (seg, windowStartFrameOffset) => {
1255
1378
  const segSeekSec = seg ? seg.startSec : 0;
1256
1379
  const totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;
@@ -1266,20 +1389,22 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1266
1389
  if (params.sourceUrl && (mediaType === "Audio" || mediaType === "Video") && volume > 0) {
1267
1390
  const finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));
1268
1391
  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
- }
1392
+ const clipDurationSec = actualDurationFrames / fps;
1393
+ const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
1394
+ const decoded = clipSamplesCount > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec, effectiveTrimSec + clipSamplesCount / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;
1274
1395
  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);
1396
+ const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
1397
+ const stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex);
1398
+ const stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex) : stretchedLeft;
1399
+ const stretched = [stretchedLeft, stretchedRight];
1400
+ if (bus.canAdopt(stretched, segmentStartSample)) {
1401
+ if (volume !== 1) {
1402
+ for (let i = 0; i < clipSamplesCount; i++) stretchedLeft[i] *= volume;
1403
+ if (stretchedRight !== stretchedLeft) for (let i = 0; i < clipSamplesCount; i++) stretchedRight[i] *= volume;
1404
+ }
1405
+ bus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];
1406
+ } else {
1407
+ const [localLeft, localRight] = bus.get();
1283
1408
  for (let i = 0; i < clipSamplesCount; i++) {
1284
1409
  const outIndex = segmentStartSample + i;
1285
1410
  localLeft[outIndex] += stretchedLeft[i] * volume;
@@ -1295,20 +1420,15 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1295
1420
  if (childChannels) {
1296
1421
  const childOp = child.operation;
1297
1422
  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
- }
1423
+ const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
1424
+ bus.add(childChannels, segmentStartSample + childStartSample);
1305
1425
  }
1306
1426
  }
1307
1427
  const pluginProcessor = audioRegistry.get(op.op);
1308
1428
  if (pluginProcessor) try {
1309
1429
  const clipDurationSec = actualDurationFrames / fps;
1310
1430
  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, {
1431
+ if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(bus.get().map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {
1312
1432
  device,
1313
1433
  frame: totalClockFrames,
1314
1434
  fps,
@@ -1329,10 +1449,12 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1329
1449
  currentStart += durFrames;
1330
1450
  }
1331
1451
  } else await processSegment(null, 0);
1332
- return localChannels;
1452
+ return bus.channels;
1333
1453
  }
1334
1454
  const rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);
1335
- if (rootChannels) for (let c = 0; c < 2; c++) {
1455
+ const mixedChannels = rootChannels?.every((ch) => ch.length === totalTargetSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(totalTargetSamples), new Float32Array(totalTargetSamples)];
1456
+ const [outputLeft, outputRight] = mixedChannels;
1457
+ if (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {
1336
1458
  const dest = mixedChannels[c];
1337
1459
  const src = rootChannels[c];
1338
1460
  const len = Math.min(src.length, dest.length);
@@ -1361,4 +1483,4 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1361
1483
 
1362
1484
  //#endregion
1363
1485
  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
1486
+ //# sourceMappingURL=dist-CrK3rmyN.mjs.map