framefields 2.1.0 → 2.1.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 (373) hide show
  1. package/README.md +3 -0
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +11 -11
  4. package/dist/{audio-C2fLC3Tx.d.mts → audio-CfBpzxn9.d.mts} +3 -3
  5. package/dist/{audio-C2fLC3Tx.d.mts.map → audio-CfBpzxn9.d.mts.map} +1 -1
  6. package/dist/{audio-D_4SeMRK.mjs → audio-GGuQ_JI0.mjs} +3 -3
  7. package/dist/{audio-D_4SeMRK.mjs.map → audio-GGuQ_JI0.mjs.map} +1 -1
  8. package/dist/{chunk-GMkBE123.mjs → chunk-GBe2k3y8.mjs} +1 -4
  9. package/dist/{dist-DlzqyRar.mjs → dist-Bb8BoMiw.mjs} +3 -10
  10. package/dist/dist-Bb8BoMiw.mjs.map +1 -0
  11. package/dist/{dist-Bun_TUvZ.mjs → dist-DkuDAIrG.mjs} +2 -2
  12. package/dist/{dist-Bun_TUvZ.mjs.map → dist-DkuDAIrG.mjs.map} +1 -1
  13. package/dist/effects/index.d.mts +4 -4
  14. package/dist/effects/index.mjs +35 -35
  15. package/dist/{effects-FTlu0dri.mjs → effects-D6wFg2FR.mjs} +2 -2
  16. package/dist/{effects-FTlu0dri.mjs.map → effects-D6wFg2FR.mjs.map} +1 -1
  17. package/dist/fonts/index.d.mts +1 -1
  18. package/dist/fonts/index.mjs +3 -3
  19. package/dist/{fonts-UM5xaBOx.mjs → fonts-CZMYtbP7.mjs} +2 -2
  20. package/dist/{fonts-UM5xaBOx.mjs.map → fonts-CZMYtbP7.mjs.map} +1 -1
  21. package/dist/{gpu-RkpiFGOA.mjs → gpu-DG3gI88-.mjs} +2 -2
  22. package/dist/{gpu-RkpiFGOA.mjs.map → gpu-DG3gI88-.mjs.map} +1 -1
  23. package/dist/{index-DsOqONsj.d.mts → index--0vVZDPM.d.mts} +3 -3
  24. package/dist/{index-DsOqONsj.d.mts.map → index--0vVZDPM.d.mts.map} +1 -1
  25. package/dist/{index-l03NV8JS.d.mts → index-BcA8rep0.d.mts} +1 -1
  26. package/dist/{index-l03NV8JS.d.mts.map → index-BcA8rep0.d.mts.map} +1 -1
  27. package/dist/{index-Db8Z3AtX.d.mts → index-BzQc812z.d.mts} +3 -3
  28. package/dist/{index-Db8Z3AtX.d.mts.map → index-BzQc812z.d.mts.map} +1 -1
  29. package/dist/{index-D67p-rHX.d.mts → index-Cpkzy5XR.d.mts} +1 -1
  30. package/dist/{index-D67p-rHX.d.mts.map → index-Cpkzy5XR.d.mts.map} +1 -1
  31. package/dist/{index-CzQseCtg.d.mts → index-D__HdInU.d.mts} +4 -4
  32. package/dist/{index-CzQseCtg.d.mts.map → index-D__HdInU.d.mts.map} +1 -1
  33. package/dist/{index-CHQ39_Oe.d.mts → index-DpWia6iH.d.mts} +4 -11
  34. package/dist/index-DpWia6iH.d.mts.map +1 -0
  35. package/dist/{index-DPicEt8H.d.mts → index-Fciq8bcC.d.mts} +2 -2
  36. package/dist/{index-DPicEt8H.d.mts.map → index-Fciq8bcC.d.mts.map} +1 -1
  37. package/dist/index.d.mts +65 -65
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +50 -51
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/preview/index.d.mts +2 -2
  42. package/dist/preview/index.mjs +11 -13
  43. package/dist/{preview-DwClLMlU.mjs → preview--rOXbBxl.mjs} +2 -3
  44. package/dist/preview--rOXbBxl.mjs.map +1 -0
  45. package/dist/preview-engine/audio.mjs +1 -1
  46. package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-2MZXSWVT.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-3UPI4EPV.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-S2CTIJSI.mjs → chunk-7EPDVSCL.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-AXQZX3TC.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-E3HC4GRQ.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-FPRXK2WD.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-K773AOF3.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-L3CHEZMZ.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-LBRVQ4GE.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-NEE3KQTX.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-O2RNIQXT.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-PFA427ZC.mjs} +1 -1
  58. package/dist/preview-engine/chunk-PNB3ERR3.mjs +1 -0
  59. package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-PR2BUYCL.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-Q2DPNVIA.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-ZDQF3OTC.mjs → chunk-QY7MHWZW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-VO2R3DWV.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-WSIURGP2.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-OG62XGCT.mjs → chunk-ZH5MZQTZ.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-ZNL4W4DK.mjs} +1 -1
  66. package/dist/preview-engine/effects.mjs +1 -1
  67. package/dist/preview-engine/framefields.mjs +2 -2
  68. package/dist/preview-engine/player.mjs +1 -1
  69. package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -1
  70. package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -1
  71. package/dist/preview-engine/renderers-2SVWAB42.mjs +1 -1
  72. package/dist/preview-engine/renderers-3T7Q4SPP.mjs +1 -0
  73. package/dist/preview-engine/renderers-4DV4REGM.mjs +1 -0
  74. package/dist/preview-engine/renderers-57WDL6XN.mjs +1 -1
  75. package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -1
  76. package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-7JTNJE7M.mjs} +1 -1
  77. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -1
  78. package/dist/preview-engine/renderers-CQXQHOW2.mjs +1 -0
  79. package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-D2EJULOJ.mjs} +1 -1
  80. package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -1
  81. package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -1
  82. package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -1
  83. package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -1
  84. package/dist/preview-engine/renderers-IXGM55XK.mjs +1 -0
  85. package/dist/preview-engine/renderers-KVHUVWSN.mjs +1 -0
  86. package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -1
  87. package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-LVDUZZ75.mjs} +1 -1
  88. package/dist/preview-engine/renderers-M7R2ZJUP.mjs +1 -0
  89. package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -1
  90. package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-O2DZPBOJ.mjs} +1 -1
  91. package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -1
  92. package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-P4S7GL64.mjs} +1 -1
  93. package/dist/preview-engine/renderers-PMOO7DLX.mjs +1 -0
  94. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -1
  95. package/dist/preview-engine/renderers-QCCPCH73.mjs +1 -0
  96. package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -1
  97. package/dist/preview-engine/renderers-RRXFJRGI.mjs +1 -0
  98. package/dist/preview-engine/renderers-T4JMJXWL.mjs +1 -1
  99. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -1
  100. package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-TFZST6WW.mjs} +1 -1
  101. package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -1
  102. package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-UPKB5OLS.mjs} +1 -1
  103. package/dist/preview-engine/renderers-VLMQR3DW.mjs +1 -0
  104. package/dist/preview-engine/renderers-WVTTRCVI.mjs +1 -0
  105. package/dist/preview-engine/renderers-X5PUIPU5.mjs +1 -0
  106. package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-XCMVZ2XG.mjs} +1 -1
  107. package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -1
  108. package/dist/preview-engine/renderers-YDCDY3BR.mjs +1 -0
  109. package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -1
  110. package/dist/preview-engine/renderers-YJNQ4B7B.mjs +1 -0
  111. package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -1
  112. package/dist/preview-engine/{renderers-H46TS3IG.mjs → renderers-YZEVPHPQ.mjs} +1 -1
  113. package/dist/preview-engine/renderers-Z7YQUFAY.mjs +1 -0
  114. package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -1
  115. package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -1
  116. package/dist/preview-engine/signals.mjs +1 -1
  117. package/dist/{program-BqFVw5Mu.mjs → program-Cc5AsBHz.mjs} +2 -2
  118. package/dist/{program-BqFVw5Mu.mjs.map → program-Cc5AsBHz.mjs.map} +1 -1
  119. package/dist/renderer/index.d.mts +2 -2
  120. package/dist/renderer/index.mjs +3 -4
  121. package/dist/renderer-1VSi7Vum.mjs +5 -0
  122. package/dist/renderer-4BlpUHQT.mjs +5 -0
  123. package/dist/{renderer-BLcu9RDt.mjs → renderer-9L0p8IT3.mjs} +3 -3
  124. package/dist/renderer-AzSX2-mZ.mjs +5 -0
  125. package/dist/renderer-B-cxK24t.mjs +5 -0
  126. package/dist/{renderer-CGldH-Zx.mjs → renderer-B1Zn91xt.mjs} +3 -3
  127. package/dist/{renderer-CGldH-Zx.mjs.map → renderer-B1Zn91xt.mjs.map} +1 -1
  128. package/dist/renderer-B5d5oM_D.mjs +5 -0
  129. package/dist/renderer-B8BdNjaN.mjs +5 -0
  130. package/dist/{renderer-BYqfkwLf.mjs → renderer-BI5rvAyo.mjs} +3 -3
  131. package/dist/{renderer-BYqfkwLf.mjs.map → renderer-BI5rvAyo.mjs.map} +1 -1
  132. package/dist/renderer-BKEfeg-4.mjs +5 -0
  133. package/dist/{renderer-BvpSIFkw.mjs → renderer-BKf1qDwL.mjs} +4 -4
  134. package/dist/{renderer-BvpSIFkw.mjs.map → renderer-BKf1qDwL.mjs.map} +1 -1
  135. package/dist/renderer-BLLOkeFB.mjs +5 -0
  136. package/dist/renderer-BTvov1NH.mjs +5 -0
  137. package/dist/renderer-BVun05IK.mjs +5 -0
  138. package/dist/{renderer-DZrQffIP.mjs → renderer-BWVsBB3t.mjs} +2 -2
  139. package/dist/{renderer-DZrQffIP.mjs.map → renderer-BWVsBB3t.mjs.map} +1 -1
  140. package/dist/{renderer-Bs4tz_pw.mjs → renderer-BXQQxeNC.mjs} +3 -3
  141. package/dist/{renderer-Bs4tz_pw.mjs.map → renderer-BXQQxeNC.mjs.map} +1 -1
  142. package/dist/renderer-B_3h5nhy.mjs +5 -0
  143. package/dist/renderer-BaZjoFYK.mjs +5 -0
  144. package/dist/{renderer-DOEsFT7Q.mjs → renderer-BaaOR3Ao.mjs} +2 -2
  145. package/dist/{renderer-DOEsFT7Q.mjs.map → renderer-BaaOR3Ao.mjs.map} +1 -1
  146. package/dist/{renderer-DRsPCkxr.mjs → renderer-Bb8T5eRX.mjs} +2 -2
  147. package/dist/{renderer-DRsPCkxr.mjs.map → renderer-Bb8T5eRX.mjs.map} +1 -1
  148. package/dist/{renderer-CRIM_XRK.mjs → renderer-Bc6J0iVG.mjs} +2 -2
  149. package/dist/{renderer-CRIM_XRK.mjs.map → renderer-Bc6J0iVG.mjs.map} +1 -1
  150. package/dist/renderer-BcApaCVe.mjs +5 -0
  151. package/dist/{renderer-DAtBnNGC.mjs → renderer-Bg7647VN.mjs} +4 -4
  152. package/dist/{renderer-DAtBnNGC.mjs.map → renderer-Bg7647VN.mjs.map} +1 -1
  153. package/dist/{renderer-CLyuu_19.mjs → renderer-BhKIZDsm.mjs} +2 -2
  154. package/dist/{renderer-CLyuu_19.mjs.map → renderer-BhKIZDsm.mjs.map} +1 -1
  155. package/dist/{renderer-BqsV75Ml.mjs → renderer-BhhSyHKF.mjs} +3 -3
  156. package/dist/{renderer-BvG1GF1c.mjs → renderer-Br9BOkQs.mjs} +2 -2
  157. package/dist/{renderer-BvG1GF1c.mjs.map → renderer-Br9BOkQs.mjs.map} +1 -1
  158. package/dist/{renderer-CTGe8SqQ.d.mts → renderer-Bs_f_App.d.mts} +2 -2
  159. package/dist/{renderer-CTGe8SqQ.d.mts.map → renderer-Bs_f_App.d.mts.map} +1 -1
  160. package/dist/{renderer-DG1NFsSV.mjs → renderer-BygIYH8s.mjs} +2 -2
  161. package/dist/{renderer-DG1NFsSV.mjs.map → renderer-BygIYH8s.mjs.map} +1 -1
  162. package/dist/{renderer-BGr_cBKV.mjs → renderer-C--Dqe-3.mjs} +3 -3
  163. package/dist/{renderer-BGr_cBKV.mjs.map → renderer-C--Dqe-3.mjs.map} +1 -1
  164. package/dist/renderer-C14mKYCw.mjs +5 -0
  165. package/dist/{renderer-2Nf9ypST.mjs → renderer-C27RfwXN.mjs} +3 -3
  166. package/dist/{renderer-2Nf9ypST.mjs.map → renderer-C27RfwXN.mjs.map} +1 -1
  167. package/dist/{renderer-CgyOylPO.mjs → renderer-C5caYAA3.mjs} +2 -2
  168. package/dist/{renderer-CgyOylPO.mjs.map → renderer-C5caYAA3.mjs.map} +1 -1
  169. package/dist/{renderer-Cwhux4VX.mjs → renderer-C5zpaQed.mjs} +2 -2
  170. package/dist/{renderer-Cwhux4VX.mjs.map → renderer-C5zpaQed.mjs.map} +1 -1
  171. package/dist/{renderer-Bq_dO0LG.mjs → renderer-C7UZLOYk.mjs} +2 -2
  172. package/dist/{renderer-Bq_dO0LG.mjs.map → renderer-C7UZLOYk.mjs.map} +1 -1
  173. package/dist/{renderer-D0nWLogn.mjs → renderer-C92mwhZz.mjs} +2 -2
  174. package/dist/{renderer-D0nWLogn.mjs.map → renderer-C92mwhZz.mjs.map} +1 -1
  175. package/dist/{renderer-v0vuUUUI.mjs → renderer-CAJe9eLS.mjs} +2 -2
  176. package/dist/{renderer-v0vuUUUI.mjs.map → renderer-CAJe9eLS.mjs.map} +1 -1
  177. package/dist/renderer-CFqhAXkH.mjs +5 -0
  178. package/dist/renderer-CK-spD4j.mjs +5 -0
  179. package/dist/renderer-CLLzQTIk.mjs +5 -0
  180. package/dist/{renderer-C3RfT8Gv.mjs → renderer-CMsjnZ0G.mjs} +3 -3
  181. package/dist/{renderer-C3RfT8Gv.mjs.map → renderer-CMsjnZ0G.mjs.map} +1 -1
  182. package/dist/renderer-COwa6xlF.mjs +5 -0
  183. package/dist/renderer-CQPuuoVf.mjs +6 -0
  184. package/dist/renderer-CRd-cDqZ.mjs +5 -0
  185. package/dist/renderer-CTVnQAUm.mjs +5 -0
  186. package/dist/renderer-CbiEBSGx.mjs +5 -0
  187. package/dist/renderer-Cl7PruQ1.mjs +5 -0
  188. package/dist/renderer-CmuGGUDR.mjs +5 -0
  189. package/dist/{renderer-D8C-pamu.mjs → renderer-CoGP4Mvf.mjs} +2 -2
  190. package/dist/{renderer-D8C-pamu.mjs.map → renderer-CoGP4Mvf.mjs.map} +1 -1
  191. package/dist/renderer-CoNRrfqx.mjs +5 -0
  192. package/dist/{renderer-2uN2cd0y.mjs → renderer-CrAqu3Rg.mjs} +2 -2
  193. package/dist/{renderer-2uN2cd0y.mjs.map → renderer-CrAqu3Rg.mjs.map} +1 -1
  194. package/dist/renderer-CvIGa0mE.mjs +5 -0
  195. package/dist/renderer-CwMDPv0p.mjs +5 -0
  196. package/dist/{renderer-Dpj68gTn.mjs → renderer-CydWqyf0.mjs} +2 -2
  197. package/dist/{renderer-Dpj68gTn.mjs.map → renderer-CydWqyf0.mjs.map} +1 -1
  198. package/dist/{renderer-B4oS8ZFO.mjs → renderer-CzBQgGD2.mjs} +4 -4
  199. package/dist/{renderer-B4oS8ZFO.mjs.map → renderer-CzBQgGD2.mjs.map} +1 -1
  200. package/dist/{renderer-Dmv_Aj6x.mjs → renderer-D0aZNkQE.mjs} +3 -3
  201. package/dist/{renderer-Dmv_Aj6x.mjs.map → renderer-D0aZNkQE.mjs.map} +1 -1
  202. package/dist/{renderer-BwAqwTQq.mjs → renderer-D2BRlqof.mjs} +2 -2
  203. package/dist/{renderer-BwAqwTQq.mjs.map → renderer-D2BRlqof.mjs.map} +1 -1
  204. package/dist/{renderer-D4sYVV-I.mjs → renderer-D2FFvxsq.mjs} +3 -3
  205. package/dist/{renderer-D4sYVV-I.mjs.map → renderer-D2FFvxsq.mjs.map} +1 -1
  206. package/dist/{renderer-DPYB6ZcB.mjs → renderer-D8-zNjyz.mjs} +2 -2
  207. package/dist/{renderer-DPYB6ZcB.mjs.map → renderer-D8-zNjyz.mjs.map} +1 -1
  208. package/dist/{renderer-DhEyjn6Q.mjs → renderer-DDqwds9R.mjs} +2 -2
  209. package/dist/{renderer-DhEyjn6Q.mjs.map → renderer-DDqwds9R.mjs.map} +1 -1
  210. package/dist/{renderer-CpKNqciR.mjs → renderer-DGtBOdst.mjs} +3 -3
  211. package/dist/{renderer-BwVfhrEx.mjs → renderer-DKqG9Lek.mjs} +2 -2
  212. package/dist/{renderer-BwVfhrEx.mjs.map → renderer-DKqG9Lek.mjs.map} +1 -1
  213. package/dist/renderer-DOHbhGPu.mjs +5 -0
  214. package/dist/renderer-DOmA6IKc.mjs +5 -0
  215. package/dist/{renderer-BgnJUx24.mjs → renderer-DUhXH5Tz.mjs} +3 -3
  216. package/dist/{renderer-BgnJUx24.mjs.map → renderer-DUhXH5Tz.mjs.map} +1 -1
  217. package/dist/{renderer-CH9Qtpy7.mjs → renderer-DVnVnS3c.mjs} +2 -2
  218. package/dist/{renderer-CH9Qtpy7.mjs.map → renderer-DVnVnS3c.mjs.map} +1 -1
  219. package/dist/{renderer-DZLJnnU2.mjs → renderer-DWEvQ-hQ.mjs} +3 -3
  220. package/dist/{renderer-DZLJnnU2.mjs.map → renderer-DWEvQ-hQ.mjs.map} +1 -1
  221. package/dist/renderer-DX2qEJTL.mjs +2173 -0
  222. package/dist/renderer-DX2qEJTL.mjs.map +1 -0
  223. package/dist/{renderer-CEGbqT2m.mjs → renderer-DX8aBDqR.mjs} +2 -2
  224. package/dist/{renderer-CEGbqT2m.mjs.map → renderer-DX8aBDqR.mjs.map} +1 -1
  225. package/dist/{renderer-BkN20ZKO.mjs → renderer-DYIPWN_B.mjs} +4 -4
  226. package/dist/{renderer-BkN20ZKO.mjs.map → renderer-DYIPWN_B.mjs.map} +1 -1
  227. package/dist/{renderer-Q63y7HP_.mjs → renderer-DZD2G76E.mjs} +2 -2
  228. package/dist/{renderer-Q63y7HP_.mjs.map → renderer-DZD2G76E.mjs.map} +1 -1
  229. package/dist/{renderer-B12_76qk.mjs → renderer-Da06_9FZ.mjs} +3 -3
  230. package/dist/{renderer-B12_76qk.mjs.map → renderer-Da06_9FZ.mjs.map} +1 -1
  231. package/dist/{renderer-DHAErBtJ.mjs → renderer-DkyXqrQ6.mjs} +2 -2
  232. package/dist/{renderer-DHAErBtJ.mjs.map → renderer-DkyXqrQ6.mjs.map} +1 -1
  233. package/dist/renderer-DmCWc4JL.mjs +5 -0
  234. package/dist/{renderer-DKtP7-fr.mjs → renderer-Dno-fujw.mjs} +2 -2
  235. package/dist/{renderer-DKtP7-fr.mjs.map → renderer-Dno-fujw.mjs.map} +1 -1
  236. package/dist/{renderer-BO2lYmtE.mjs → renderer-DoYdfDEA.mjs} +4 -4
  237. package/dist/{renderer-BO2lYmtE.mjs.map → renderer-DoYdfDEA.mjs.map} +1 -1
  238. package/dist/{renderer-Cjq1s3br.mjs → renderer-DqjITuT-.mjs} +2 -2
  239. package/dist/{renderer-Cjq1s3br.mjs.map → renderer-DqjITuT-.mjs.map} +1 -1
  240. package/dist/{renderer-BjTq3a0L.mjs → renderer-Dy-DBU0X.mjs} +3 -3
  241. package/dist/{renderer-BjTq3a0L.mjs.map → renderer-Dy-DBU0X.mjs.map} +1 -1
  242. package/dist/{renderer-to9DwqXK.mjs → renderer-DyzNM721.mjs} +2 -2
  243. package/dist/{renderer-to9DwqXK.mjs.map → renderer-DyzNM721.mjs.map} +1 -1
  244. package/dist/{renderer-CjT5Zy-J.mjs → renderer-DzrM1KMN.mjs} +3 -3
  245. package/dist/{renderer-CjT5Zy-J.mjs.map → renderer-DzrM1KMN.mjs.map} +1 -1
  246. package/dist/{renderer-D5z3WDkm.mjs → renderer-FHyZn0em.mjs} +2 -2
  247. package/dist/{renderer-D5z3WDkm.mjs.map → renderer-FHyZn0em.mjs.map} +1 -1
  248. package/dist/{renderer-Bsaokil3.mjs → renderer-NXdm6HLb.mjs} +3 -3
  249. package/dist/{renderer-Bsaokil3.mjs.map → renderer-NXdm6HLb.mjs.map} +1 -1
  250. package/dist/renderer-OLaYikwi.mjs +5 -0
  251. package/dist/renderer-Q75RC5Uz.mjs +5 -0
  252. package/dist/renderer-T0LJ4Po3.mjs +5 -0
  253. package/dist/renderer-VuXt1hfq.mjs +5 -0
  254. package/dist/{renderer-DzhRNdBS.mjs → renderer-_1xGBbxn.mjs} +6 -6
  255. package/dist/{renderer-DzhRNdBS.mjs.map → renderer-_1xGBbxn.mjs.map} +1 -1
  256. package/dist/{renderer-C3cYDT3m.mjs → renderer-c4AorKyw.mjs} +3 -3
  257. package/dist/renderer-hY_2WLt3.mjs +5 -0
  258. package/dist/{renderer-BpZaHFRc.mjs → renderer-qsg-JMuN.mjs} +4 -4
  259. package/dist/{renderer-BpZaHFRc.mjs.map → renderer-qsg-JMuN.mjs.map} +1 -1
  260. package/dist/{renderer-D1lynYuy.mjs → renderer-timEC0Gl.mjs} +4 -4
  261. package/dist/{renderer-D1lynYuy.mjs.map → renderer-timEC0Gl.mjs.map} +1 -1
  262. package/dist/renderer-y4EqE06a.mjs +5 -0
  263. package/dist/{renderers-CP8CFWDs-DlFq8jmz.mjs → renderers-CP8CFWDs-CMYe4kvZ.mjs} +2 -2
  264. package/dist/{renderers-CP8CFWDs-DlFq8jmz.mjs.map → renderers-CP8CFWDs-CMYe4kvZ.mjs.map} +1 -1
  265. package/dist/signals/index.d.mts +6 -6
  266. package/dist/signals/index.mjs +6 -6
  267. package/dist/{signals-BDkO0xcZ.mjs → signals-DGRs6ddH.mjs} +2 -2
  268. package/dist/{signals-BDkO0xcZ.mjs.map → signals-DGRs6ddH.mjs.map} +1 -1
  269. package/package.json +56 -56
  270. package/dist/client-dVxUnmHz.mjs +0 -66
  271. package/dist/client-dVxUnmHz.mjs.map +0 -1
  272. package/dist/dist-DlzqyRar.mjs.map +0 -1
  273. package/dist/dist-cjs-91nR6B7Z.mjs +0 -48
  274. package/dist/dist-cjs-91nR6B7Z.mjs.map +0 -1
  275. package/dist/dist-cjs-BAIenEMC.mjs +0 -9069
  276. package/dist/dist-cjs-BAIenEMC.mjs.map +0 -1
  277. package/dist/dist-cjs-BEQhh76X.mjs +0 -153
  278. package/dist/dist-cjs-BEQhh76X.mjs.map +0 -1
  279. package/dist/dist-cjs-BYPq7pfw.mjs +0 -43
  280. package/dist/dist-cjs-BYPq7pfw.mjs.map +0 -1
  281. package/dist/dist-cjs-BocDqSCX.mjs +0 -66
  282. package/dist/dist-cjs-BocDqSCX.mjs.map +0 -1
  283. package/dist/dist-cjs-CWiNggTl.mjs +0 -323
  284. package/dist/dist-cjs-CWiNggTl.mjs.map +0 -1
  285. package/dist/dist-cjs-CwabutT6.mjs +0 -1091
  286. package/dist/dist-cjs-CwabutT6.mjs.map +0 -1
  287. package/dist/dist-cjs-D-EE4Ahy.mjs +0 -51
  288. package/dist/dist-cjs-D-EE4Ahy.mjs.map +0 -1
  289. package/dist/dist-cjs-DNtDUWfk.mjs +0 -137
  290. package/dist/dist-cjs-DNtDUWfk.mjs.map +0 -1
  291. package/dist/dist-cjs-DbZhsgS0.mjs +0 -98
  292. package/dist/dist-cjs-DbZhsgS0.mjs.map +0 -1
  293. package/dist/dist-cjs-Dh7REKcN.mjs +0 -85
  294. package/dist/dist-cjs-Dh7REKcN.mjs.map +0 -1
  295. package/dist/dist-cjs-Dobx0Nz-.mjs +0 -181
  296. package/dist/dist-cjs-Dobx0Nz-.mjs.map +0 -1
  297. package/dist/dist-cjs-Du0UpNof.mjs +0 -437
  298. package/dist/dist-cjs-Du0UpNof.mjs.map +0 -1
  299. package/dist/dist-cjs-DyHiUfsr.mjs +0 -6
  300. package/dist/dist-cjs-HHMfMF5a.mjs +0 -209
  301. package/dist/dist-cjs-HHMfMF5a.mjs.map +0 -1
  302. package/dist/dist-cjs-UJYQzLNT.mjs +0 -64
  303. package/dist/dist-cjs-UJYQzLNT.mjs.map +0 -1
  304. package/dist/dist-cjs-UKxm5cFR.mjs +0 -5015
  305. package/dist/dist-cjs-UKxm5cFR.mjs.map +0 -1
  306. package/dist/event-streams-DnRe8uwT.mjs +0 -204
  307. package/dist/event-streams-DnRe8uwT.mjs.map +0 -1
  308. package/dist/index-CHQ39_Oe.d.mts.map +0 -1
  309. package/dist/package-CudzAF-n.mjs +0 -6
  310. package/dist/package-CudzAF-n.mjs.map +0 -1
  311. package/dist/preview-DwClLMlU.mjs.map +0 -1
  312. package/dist/preview-engine/chunk-QBEUICZD.mjs +0 -1
  313. package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
  314. package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
  315. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
  316. package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
  317. package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
  318. package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
  319. package/dist/preview-engine/renderers-MON4QFRF.mjs +0 -1
  320. package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
  321. package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
  322. package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
  323. package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
  324. package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
  325. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
  326. package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
  327. package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
  328. package/dist/preview-engine/server-utils-2FAIV45N.mjs +0 -1
  329. package/dist/renderer-31jAuNzF.mjs +0 -5
  330. package/dist/renderer-36EI7Rsz.mjs +0 -5
  331. package/dist/renderer-3io-cjTt.mjs +0 -5
  332. package/dist/renderer-9_zWTHbg.mjs +0 -5
  333. package/dist/renderer-B6KnbfdA.mjs +0 -5
  334. package/dist/renderer-B7Y2bmRc.mjs +0 -5
  335. package/dist/renderer-BA6miaaI.mjs +0 -5
  336. package/dist/renderer-BHi-Q6Z_.mjs +0 -5
  337. package/dist/renderer-BOlN9HeG.mjs +0 -5
  338. package/dist/renderer-BTOW-ceB.mjs +0 -5
  339. package/dist/renderer-BiQ0PYOp.mjs +0 -5
  340. package/dist/renderer-Bla7GDyV.mjs +0 -5
  341. package/dist/renderer-BoYyLVKy.mjs +0 -5
  342. package/dist/renderer-BqOgb7bM.mjs +0 -5
  343. package/dist/renderer-BqeM8yTJ.mjs +0 -5
  344. package/dist/renderer-BzpRe50i.mjs +0 -5
  345. package/dist/renderer-C0eAPwpr.mjs +0 -5
  346. package/dist/renderer-CGn8V63v.mjs +0 -5
  347. package/dist/renderer-CM5Syo9r.mjs +0 -5
  348. package/dist/renderer-CWCEW6Wv.mjs +0 -5
  349. package/dist/renderer-Cl70zxkP.mjs +0 -5
  350. package/dist/renderer-ClJjoVpB.mjs +0 -6
  351. package/dist/renderer-DIDSmoFA.mjs +0 -23900
  352. package/dist/renderer-DIDSmoFA.mjs.map +0 -1
  353. package/dist/renderer-DLnF-V_h.mjs +0 -5
  354. package/dist/renderer-DN1rjmcL.mjs +0 -5
  355. package/dist/renderer-DXTw9Oqb.mjs +0 -5
  356. package/dist/renderer-DbAVSBNI.mjs +0 -5
  357. package/dist/renderer-Dg8rD--8.mjs +0 -5
  358. package/dist/renderer-DnFxegGu.mjs +0 -5
  359. package/dist/renderer-DnfmelHn.mjs +0 -5
  360. package/dist/renderer-DuOjzggd.mjs +0 -5
  361. package/dist/renderer-DvYql0Cl.mjs +0 -5
  362. package/dist/renderer-LfUdjgjF.mjs +0 -5
  363. package/dist/renderer-SecCv3U8.mjs +0 -5
  364. package/dist/renderer-oZyoB4CT.mjs +0 -5
  365. package/dist/renderer-rzci_kTy.mjs +0 -5
  366. package/dist/renderer-vLaZuZbX.mjs +0 -5
  367. package/dist/signin-SVSXQw9i.mjs +0 -865
  368. package/dist/signin-SVSXQw9i.mjs.map +0 -1
  369. package/dist/sso-oidc-B3Sagl43.mjs +0 -1051
  370. package/dist/sso-oidc-B3Sagl43.mjs.map +0 -1
  371. package/dist/sts-CYeWec9i.mjs +0 -6
  372. package/dist/sts-ClVtt-bV.mjs +0 -1395
  373. package/dist/sts-ClVtt-bV.mjs.map +0 -1
package/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  **Compositing, motion graphics and 3D for code-first video — one npm package that AI agents drive with code.**
8
8
 
9
+ [**framefields.dev**](https://framefields.dev/)
10
+
9
11
  [![npm](https://img.shields.io/badge/npm-framefields-cb3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/framefields)
10
12
  [![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://github.com/gatewai-dev/framefields/blob/main/LICENCE)
11
13
  [![status](https://img.shields.io/badge/status-beta-orange.svg)](#)
@@ -736,6 +738,7 @@ docker build -t framefields-renderer -f Dockerfile.renderer .
736
738
 
737
739
  ## Community
738
740
 
741
+ - **Website:** [framefields.dev](https://framefields.dev/)
739
742
  - **Discord:** ask questions, share renders, and follow development at [discord.gg/cbqMGGme5](https://discord.gg/cbqMGGme5).
740
743
  - **YouTube:** watch films made with framefields on [@gatewai.studio](https://www.youtube.com/@gatewai.studio).
741
744
 
@@ -1,5 +1,5 @@
1
- import { M as WebGPUAudioProcessor } from "../index-D67p-rHX.mjs";
2
- import { a as SfxTrigger, c as softLimit, d as _default$5, f as _default$4, g as mixAudioTracks, h as _default$2, i as SfxRenderContext, l as _default$7, m as _default$3, n as encodeStereoWav, o as mixSfxInto, p as _default, r as RenderedSfx, s as renderSfx, t as EncodeWavOptions, u as _default$6 } from "../index-DsOqONsj.mjs";
3
- import "../index-DPicEt8H.mjs";
4
- import { t as _default$1 } from "../renderer-CTGe8SqQ.mjs";
1
+ import { M as WebGPUAudioProcessor } from "../index-Cpkzy5XR.mjs";
2
+ import { a as SfxTrigger, c as softLimit, d as _default$5, f as _default$4, g as mixAudioTracks, h as _default$2, i as SfxRenderContext, l as _default$7, m as _default$3, n as encodeStereoWav, o as mixSfxInto, p as _default, r as RenderedSfx, s as renderSfx, t as EncodeWavOptions, u as _default$6 } from "../index--0vVZDPM.mjs";
3
+ import "../index-Fciq8bcC.mjs";
4
+ import { t as _default$1 } from "../renderer-Bs_f_App.mjs";
5
5
  export { EncodeWavOptions, RenderedSfx, SfxRenderContext, SfxTrigger, WebGPUAudioProcessor, _default as audioFadeRenderer, _default$1 as audioSignalExtractorRenderer, _default$2 as compressorRenderer, _default$3 as delayRenderer, encodeStereoWav, mixAudioTracks, mixSfxInto, _default$4 as noiseGateRenderer, _default$5 as parametricEqRenderer, renderSfx, _default$6 as reverbRenderer, softLimit, _default$7 as stereoPanningRenderer };
@@ -1,15 +1,15 @@
1
- import "../chunk-GMkBE123.mjs";
2
- import { g as WebGPUAudioProcessor } from "../dist-Bun_TUvZ.mjs";
3
- import { t as renderers_default$1 } from "../renderers-CP8CFWDs-DlFq8jmz.mjs";
4
- import { i as mixAudioTracks } from "../dist-DlzqyRar.mjs";
5
- import { t as renderers_default$2 } from "../renderer-Dpj68gTn.mjs";
6
- import { t as renderers_default$3 } from "../renderer-Cwhux4VX.mjs";
7
- import { t as renderers_default } from "../renderer-BvG1GF1c.mjs";
8
- import { t as renderers_default$4 } from "../renderer-Bq_dO0LG.mjs";
9
- import { t as renderers_default$5 } from "../renderer-Q63y7HP_.mjs";
10
- import { t as renderers_default$6 } from "../renderer-CgyOylPO.mjs";
1
+ import "../chunk-GBe2k3y8.mjs";
2
+ import { g as WebGPUAudioProcessor } from "../dist-DkuDAIrG.mjs";
3
+ import { t as renderers_default$1 } from "../renderers-CP8CFWDs-CMYe4kvZ.mjs";
4
+ import { i as mixAudioTracks } from "../dist-Bb8BoMiw.mjs";
5
+ import { t as renderers_default$2 } from "../renderer-CydWqyf0.mjs";
6
+ import { t as renderers_default$3 } from "../renderer-C5zpaQed.mjs";
7
+ import { t as renderers_default } from "../renderer-Br9BOkQs.mjs";
8
+ import { t as renderers_default$4 } from "../renderer-C7UZLOYk.mjs";
9
+ import { t as renderers_default$5 } from "../renderer-DZD2G76E.mjs";
10
+ import { t as renderers_default$6 } from "../renderer-C5caYAA3.mjs";
11
11
  import "../renderer-B-BcgA6d.mjs";
12
- import { t as renderers_default$7 } from "../renderer-CH9Qtpy7.mjs";
12
+ import { t as renderers_default$7 } from "../renderer-DVnVnS3c.mjs";
13
13
  import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-DJeVoE8b.mjs";
14
14
 
15
15
  export { WebGPUAudioProcessor, renderers_default as audioFadeRenderer, renderers_default$1 as audioSignalExtractorRenderer, renderers_default$2 as compressorRenderer, renderers_default$3 as delayRenderer, encodeStereoWav, mixAudioTracks, mixSfxInto, renderers_default$4 as noiseGateRenderer, renderers_default$5 as parametricEqRenderer, renderSfx, renderers_default$6 as reverbRenderer, softLimit, renderers_default$7 as stereoPanningRenderer };
@@ -1,5 +1,5 @@
1
- import { o as AudioSignalComputeConfig, xi as FrameSignal } from "./index-D67p-rHX.mjs";
2
- import { n as NodeRendererPlugin } from "./index-DPicEt8H.mjs";
1
+ import { o as AudioSignalComputeConfig, xi as FrameSignal } from "./index-Cpkzy5XR.mjs";
2
+ import { n as NodeRendererPlugin } from "./index-Fciq8bcC.mjs";
3
3
 
4
4
  //#region ../../nodes/node-modulate/dist/renderer.d.mts
5
5
  //#region src/renderers/index.d.ts
@@ -34,4 +34,4 @@ declare const AudioSignal: {
34
34
  };
35
35
  //#endregion
36
36
  export { _default as i, AudioSignalOptions as n, ExtractedAudioSignalsBundle as r, AudioSignal as t };
37
- //# sourceMappingURL=audio-C2fLC3Tx.d.mts.map
37
+ //# sourceMappingURL=audio-CfBpzxn9.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-C2fLC3Tx.d.mts","names":["_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../../nodes/node-modulate/dist/renderer.d.mts","../src/signals/audio.ts"],"sourcesContent":["import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;cAGcC,UAAUE,SAASH;AAHiD;;;UCYjE,kBAAA,SAA2B;;EDT9BC,WAAsE,CAAA,EAAA,MAAA;;;UCenE,2BAAA;EANA,OAAA,EAOP,WAPO,CAAmB,MAAA,CAAA;EAMnB,IAAA,EAEV,WAFU,CAAA,MAAA,CAAA;EACP,IAAA,EAEH,WAFG,CAAA,MAAA,CAAA;EACH,MAAA,EAEE,WAFF,CAAA,MAAA,CAAA;EACA,WAAA,EAAA,MAAA;EACE,SAAA,EAAA,MAAA;EAAW,UAAA,EAAA,MAAA;EAaP,WAAA,EAAA,OAuGZ;EArGW,OAAA,EAAA,OAAA;EAED,aAAA,EAAA,OAAA;EACC,UAAA,EAAA,OAAA;EAAR,UAAA,EAAA,OAAA;EAoFO,YAAA,EAAA,OAAA;EACC,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAAD,cA1FE,WA0FF,EAAA;gCAxFC,8CAED,qBACP,QAAQ;oCAoFD,qBACP,QAAQ"}
1
+ {"version":3,"file":"audio-CfBpzxn9.d.mts","names":["_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../../nodes/node-modulate/dist/renderer.d.mts","../src/signals/audio.ts"],"sourcesContent":["import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;cAGcC,UAAUE,SAASH;AAHiD;;;UCYjE,kBAAA,SAA2B;;EDT9BC,WAAsE,CAAA,EAAA,MAAA;;;UCenE,2BAAA;EANA,OAAA,EAOP,WAPO,CAAmB,MAAA,CAAA;EAMnB,IAAA,EAEV,WAFU,CAAA,MAAA,CAAA;EACP,IAAA,EAEH,WAFG,CAAA,MAAA,CAAA;EACH,MAAA,EAEE,WAFF,CAAA,MAAA,CAAA;EACA,WAAA,EAAA,MAAA;EACE,SAAA,EAAA,MAAA;EAAW,UAAA,EAAA,MAAA;EAaP,WAAA,EAAA,OAuGZ;EArGW,OAAA,EAAA,OAAA;EAED,aAAA,EAAA,OAAA;EACC,UAAA,EAAA,OAAA;EAAR,UAAA,EAAA,OAAA;EAoFO,YAAA,EAAA,OAAA;EACC,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAAD,cA1FE,WA0FF,EAAA;gCAxFC,8CAED,qBACP,QAAQ;oCAoFD,qBACP,QAAQ"}
@@ -1,6 +1,6 @@
1
1
  import { xt as frameArraySignal } from "./dist-fjKpBYkc.mjs";
2
- import { D as ensureDevice, yt as AudioSignalComputePipeline } from "./dist-Bun_TUvZ.mjs";
3
- import { n as decodeAudioSource } from "./dist-DlzqyRar.mjs";
2
+ import { D as ensureDevice, yt as AudioSignalComputePipeline } from "./dist-DkuDAIrG.mjs";
3
+ import { n as decodeAudioSource } from "./dist-Bb8BoMiw.mjs";
4
4
 
5
5
  //#region src/signals/audio.ts
6
6
  const AudioSignal = {
@@ -82,4 +82,4 @@ const AudioSignal = {
82
82
 
83
83
  //#endregion
84
84
  export { AudioSignal as t };
85
- //# sourceMappingURL=audio-D_4SeMRK.mjs.map
85
+ //# sourceMappingURL=audio-GGuQ_JI0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-D_4SeMRK.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
1
+ {"version":3,"file":"audio-GGuQ_JI0.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
@@ -7,7 +7,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
8
  var __getProtoOf = Object.getPrototypeOf;
9
9
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
- var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
11
10
  var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
12
11
  var __exportAll = (all, symbols) => {
13
12
  let target = {};
@@ -40,8 +39,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
40
39
  value: mod,
41
40
  enumerable: true
42
41
  }) : target, mod));
43
- var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
44
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
45
42
 
46
43
  //#endregion
47
- export { __toCommonJS as a, __require as i, __esmMin as n, __toESM as o, __exportAll as r, __commonJSMin as t };
44
+ export { __exportAll as n, __toESM as r, __commonJSMin as t };
@@ -1,6 +1,6 @@
1
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";
2
2
  import { t as audioRegistry, u as webgpuRegistry } from "./renderer-BSitV56h.mjs";
3
- import { A as getHeadlessFontPath, An as signalRegistry, C as drawParagraphNode, E as drawVideoNode, J as registerHeadlessFont, P as inputStore, S as drawLottieNode, T as drawSvgNode, X as shaderStore, b as drawGifNode, et as GetFontAssetUrl, m as SlugGeometry, nt as resolveMediaSourceUrl, p as SlugFontCache, tt as getEnv, w as drawSignalNode, x as drawImageNode, y as drawCaptionNode } from "./dist-Bun_TUvZ.mjs";
3
+ import { A as getHeadlessFontPath, An as signalRegistry, C as drawParagraphNode, E as drawVideoNode, J as registerHeadlessFont, P as inputStore, S as drawLottieNode, T as drawSvgNode, X as shaderStore, b as drawGifNode, et as GetFontAssetUrl, m as SlugGeometry, nt as resolveMediaSourceUrl, p as SlugFontCache, tt as getEnv, w as drawSignalNode, x as drawImageNode, y as drawCaptionNode } from "./dist-DkuDAIrG.mjs";
4
4
  import { AudioSampleSink } from "mediabunny";
5
5
 
6
6
  //#region ../renderers/dist/index.mjs
@@ -988,7 +988,7 @@ function normalizeTimeline(vv, fps, context = { timeOffsetSec: 0 }) {
988
988
  };
989
989
  }
990
990
  const verbose = typeof process !== "undefined" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? "");
991
- let mediaLogger = {
991
+ const mediaLogger = {
992
992
  debug: (msg, ...args) => {
993
993
  if (!verbose) return;
994
994
  if (typeof msg === "object" && msg !== null) console.info("[AudioExtractor]", msg, ...args);
@@ -1003,13 +1003,6 @@ let mediaLogger = {
1003
1003
  else console.error(`[AudioExtractor] ${msg}`, ...args);
1004
1004
  }
1005
1005
  };
1006
- if (typeof window === "undefined" || typeof process !== "undefined" && process.versions?.node) import(
1007
- /* webpackIgnore: true */
1008
- /* @vite-ignore */
1009
- "@framefields/server-utils"
1010
- ).then((m) => {
1011
- if (m.mediaLogger) mediaLogger = m.mediaLogger;
1012
- }).catch(() => {});
1013
1006
  const yieldToMain = () => {
1014
1007
  if (typeof window === "undefined") return Promise.resolve();
1015
1008
  const sched = globalThis.scheduler;
@@ -1366,4 +1359,4 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
1366
1359
 
1367
1360
  //#endregion
1368
1361
  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 };
1369
- //# sourceMappingURL=dist-DlzqyRar.mjs.map
1362
+ //# sourceMappingURL=dist-Bb8BoMiw.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-Bb8BoMiw.mjs","names":[],"sources":["../../renderers/dist/index.mjs","../../compositions/dist/layer-logic-BhwmzPIV.mjs","../../compositions/dist/index.mjs"],"sourcesContent":["import { GetFontAssetUrl } from \"@framefields/client-utils\";\nimport { SlugFontCache, SlugGeometry, getHeadlessFontPath, registerHeadlessFont } from \"@framefields/webgpu-renderers\";\n\nexport * from \"@framefields/webgpu-renderers/math3d\"\n\n//#region src/blend.ts\nconst mapBlendModeToSkia = (mode) => {\n\tif (!mode) return \"srcOver\";\n\tswitch (mode) {\n\t\tcase \"source-over\": return \"srcOver\";\n\t\tcase \"source-in\": return \"srcIn\";\n\t\tcase \"source-out\": return \"srcOut\";\n\t\tcase \"source-atop\": return \"srcATop\";\n\t\tcase \"destination-over\": return \"dstOver\";\n\t\tcase \"destination-in\": return \"dstIn\";\n\t\tcase \"destination-out\": return \"dstOut\";\n\t\tcase \"destination-atop\": return \"dstATop\";\n\t\tcase \"copy\": return \"src\";\n\t\tcase \"xor\": return \"xor\";\n\t\tcase \"multiply\": return \"multiply\";\n\t\tcase \"screen\": return \"screen\";\n\t\tcase \"overlay\": return \"overlay\";\n\t\tcase \"darken\": return \"darken\";\n\t\tcase \"lighten\":\n\t\tcase \"lighter\": return \"lighten\";\n\t\tcase \"color-dodge\": return \"colorDodge\";\n\t\tcase \"color-burn\": return \"colorBurn\";\n\t\tcase \"hard-light\": return \"hardLight\";\n\t\tcase \"soft-light\": return \"softLight\";\n\t\tcase \"difference\": return \"difference\";\n\t\tcase \"exclusion\": return \"exclusion\";\n\t\tcase \"hue\": return \"hue\";\n\t\tcase \"saturation\": return \"saturation\";\n\t\tcase \"color\": return \"color\";\n\t\tcase \"luminosity\": return \"luminosity\";\n\t\tdefault: return \"srcOver\";\n\t}\n};\nconst requiresIsolation = (mode) => {\n\treturn mode === \"destination-in\" || mode === \"source-in\";\n};\n\n//#endregion\n//#region src/geometry.ts\nfunction computeStrokeRect(w, h, cornerRadius, strokeWidth, align = \"outside\") {\n\tif (align === \"inside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: half,\n\t\t\ty: half,\n\t\t\twidth: Math.max(0, w - strokeWidth),\n\t\t\theight: Math.max(0, h - strokeWidth),\n\t\t\tradius: cornerRadius === 0 ? 0 : Math.max(0, cornerRadius - half)\n\t\t};\n\t}\n\tif (align === \"outside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: -half,\n\t\t\ty: -half,\n\t\t\twidth: w + strokeWidth,\n\t\t\theight: h + strokeWidth,\n\t\t\tradius: cornerRadius === 0 ? 0 : cornerRadius + half\n\t\t};\n\t}\n\treturn {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: w,\n\t\theight: h,\n\t\tradius: cornerRadius\n\t};\n}\n\n//#endregion\n//#region src/interpolate.ts\nconst { cbrt, sqrt, PI: π } = Math;\nconst x2t = (x, a, b, c, d) => {\n\tconst q = a + b * x;\n\tconst s = q ** 2 + c;\n\tif (s > 0) {\n\t\tconst root = sqrt(s);\n\t\treturn cbrt(q + root) + cbrt(q - root) - d;\n\t}\n\tconst l = cbrt(sqrt(q * q - s));\n\tconst angle = q ? Math.atan(sqrt(-s) / q) : -π / 2;\n\tlet φ;\n\tif (b < 0) φ = (q > 0 ? 2 * π : π) - angle;\n\telse if (d < 0) φ = (q > 0 ? 2 * π : -3 * π) + angle;\n\telse φ = (q > 0 ? 0 : π) + angle;\n\treturn 2 * l * Math.cos(φ / 3) - d;\n};\nconst Y = (t, ay, by, cy) => ((ay * t + 3 * by) * t + cy) * t;\nconst linearEasing = (x) => x;\nfunction bezier(mX1, mY1, mX2, mY2) {\n\tif (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) throw new Error(\"bezier x values must be in [0, 1] range\");\n\tif (mX1 === mY1 && mX2 === mY2) return linearEasing;\n\tconst a = 6 * (3 * mX1 - 3 * mX2 + 1);\n\tconst b = 6 * (mX2 - 2 * mX1);\n\tconst c = 3 * mX1;\n\tconst a2 = a * a;\n\tconst b2 = b * b;\n\tconst d = b / a;\n\tconst e = 3 * b * c / a2 - b2 * b / (a2 * a);\n\tconst w1 = 2 * c / a - b2 / a2;\n\tconst w = w1 * w1 * w1;\n\tconst o = 3 / a;\n\tconst ay = 3 * mY1 - 3 * mY2 + 1;\n\tconst by = mY2 - 2 * mY1;\n\tconst cy = 3 * mY1;\n\tconst X2T = a ? x2t : linearEasing;\n\treturn function BezierEasing(x) {\n\t\tif (x === 0 || x === 1) return x;\n\t\treturn Y(X2T(x, e, o, w, d), ay, by, cy);\n\t};\n}\nconst Easing = {\n\tlinear: linearEasing,\n\tease: bezier(.25, .1, .25, 1),\n\tquad: (t) => t * t,\n\tcubic: (t) => t * t * t,\n\tpoly: (n) => (t) => t ** n,\n\tsin: (t) => 1 - Math.cos(t * Math.PI / 2),\n\tcircle: (t) => 1 - Math.sqrt(1 - t * t),\n\texp: (t) => 2 ** (10 * (t - 1)),\n\telastic: (bounciness = 1) => {\n\t\tconst p = bounciness * Math.PI;\n\t\treturn (t) => 1 - Math.cos(t * Math.PI / 2) ** 3 * Math.cos(t * p);\n\t},\n\tback: (s = 1.70158) => (t) => t * t * ((s + 1) * t - s),\n\tbounce: (t) => {\n\t\tif (t < 1 / 2.75) return 7.5625 * t * t;\n\t\tif (t < 2 / 2.75) {\n\t\t\tconst t2$1 = t - 1.5 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .75;\n\t\t}\n\t\tif (t < 2.5 / 2.75) {\n\t\t\tconst t2$1 = t - 2.25 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .9375;\n\t\t}\n\t\tconst t2 = t - 2.625 / 2.75;\n\t\treturn 7.5625 * t2 * t2 + .984375;\n\t},\n\tbezier,\n\tin: (fn) => fn,\n\tout: (fn) => (t) => 1 - fn(1 - t),\n\tinOut: (fn) => (t) => t < .5 ? fn(t * 2) / 2 : 1 - fn((1 - t) * 2) / 2\n};\nfunction interpolate(value, inputRange, outputRange, options) {\n\tconst extrapolateLeft = options?.extrapolateLeft ?? \"extend\";\n\tconst extrapolateRight = options?.extrapolateRight ?? \"extend\";\n\tif (inputRange.length !== outputRange.length) throw new Error(\"inputRange and outputRange must have the same length\");\n\tif (inputRange.length < 2) throw new Error(\"inputRange must have at least 2 elements\");\n\tconst firstInput = inputRange[0];\n\tconst lastInput = inputRange[inputRange.length - 1];\n\tif (value < firstInput) {\n\t\tif (extrapolateLeft === \"clamp\") return outputRange[0];\n\t\tif (extrapolateLeft === \"identity\") return value;\n\t}\n\tif (value > lastInput) {\n\t\tif (extrapolateRight === \"clamp\") return outputRange[outputRange.length - 1];\n\t\tif (extrapolateRight === \"identity\") return value;\n\t}\n\tlet i = 1;\n\tfor (; i < inputRange.length - 1; i++) if (value < inputRange[i]) break;\n\tconst x0 = inputRange[i - 1];\n\tconst x1 = inputRange[i];\n\tconst y0 = outputRange[i - 1];\n\tconst y1 = outputRange[i];\n\tif (x0 === x1) return y0;\n\tlet progress = (value - x0) / (x1 - x0);\n\tif (options?.easing) progress = options.easing(progress);\n\treturn y0 + progress * (y1 - y0);\n}\n\n//#endregion\n//#region src/utils.ts\n/**\n* Preloads a font into the browser or headless environment.\n*/\nasync function preloadFont(family, url) {\n\tif (typeof window !== \"undefined\" && typeof FontFace !== \"undefined\") try {\n\t\tconst loadedFace = await new FontFace(family, `url(${url})`).load();\n\t\tdocument.fonts.add(loadedFace);\n\t\tawait document.fonts.ready;\n\t} catch (e) {\n\t\tconsole.warn(`[preloadFont] Failed to load font \"${family}\" from ${url}:`, e);\n\t}\n\telse await registerHeadlessFont(family, url);\n}\n\n//#endregion\n//#region src/preload-fonts.ts\nconst EMOJI_REGEX = /\\p{Extended_Pictographic}/gu;\nlet warnedNoEmojiFont = false;\n/**\n* Loads every font a composition's text uses (for layout and for drawing) and\n* the emoji it draws. The browser preview and the export both call this, so\n* they start each render from the same glyphs.\n*/\nasync function preloadCompositionFonts(media, device, onError = (err, what) => console.warn(`[framefields] ${what}`, err)) {\n\tconst families = /* @__PURE__ */ new Set();\n\tconst emoji = /* @__PURE__ */ new Map();\n\t(function walk(node) {\n\t\tconst op = node.operation;\n\t\tif (op) {\n\t\t\tconst isText = op.op === \"text\" || op.kind === \"text\" || op.op === \"caption\" || op.kind === \"caption\" || typeof op.text === \"string\";\n\t\t\tconst family = op.fontFamily || (isText ? \"Inter\" : \"\");\n\t\t\tif (family) families.add(family);\n\t\t\tif (op.op === \"text\" && typeof op.text === \"string\") {\n\t\t\t\tconst fontSize = op.fontSize ?? 48;\n\t\t\t\tfor (const char of op.text.match(EMOJI_REGEX) ?? []) emoji.set(`${char}-${fontSize}`, fontSize);\n\t\t\t}\n\t\t}\n\t\tfor (const child of node.children ?? []) walk(child);\n\t})(media);\n\tconst tasks = [];\n\tfor (const family of families) {\n\t\tconst url = getHeadlessFontPath(family) ?? GetFontAssetUrl(family);\n\t\ttasks.push(preloadFont(family, url).catch((err) => onError(err, `font \"${family}\" from ${url}`)));\n\t\tif (device) tasks.push(SlugFontCache.preloadSlugFont(device, family, url).catch((err) => onError(err, `Slug font \"${family}\" from ${url}`)));\n\t}\n\tif (device && emoji.size > 0) {\n\t\tif (!SlugFontCache.hasEmojiFont() && !warnedNoEmojiFont) {\n\t\t\twarnedNoEmojiFont = true;\n\t\t\tconsole.warn(\"[framefields] Text uses emoji but no emoji font is registered, so exports draw nothing for them. Register a color emoji font (e.g. Noto Color Emoji) with FontManager.registerEmojiFont(path).\");\n\t\t}\n\t\tfor (const [key, fontSize] of emoji) {\n\t\t\tconst char = key.slice(0, key.lastIndexOf(\"-\"));\n\t\t\ttasks.push(SlugFontCache.preloadEmoji(device, char, fontSize).catch((err) => {\n\t\t\t\tif (SlugFontCache.hasEmojiFont()) onError(err, `emoji \"${char}\"`);\n\t\t\t}));\n\t\t}\n\t}\n\tawait Promise.all(tasks);\n}\n\n//#endregion\n//#region src/spring.ts\nconst defaultSpringConfig = {\n\tdamping: 10,\n\tmass: 1,\n\tstiffness: 100,\n\tovershootClamping: false\n};\nconst advanceCache = {};\nfunction advance({ animation, now, config }) {\n\tconst { toValue, lastTimestamp, current, velocity } = animation;\n\tconst deltaTime = Math.min(now - lastTimestamp, 64);\n\tif (config.damping <= 0) throw new Error(\"Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.\");\n\tif (config.stiffness <= 0) throw new Error(\"Spring stiffness must be greater than 0.\");\n\tif (config.mass <= 0) throw new Error(\"Spring mass must be greater than 0.\");\n\tconst c = config.damping;\n\tconst m = config.mass;\n\tconst k = config.stiffness;\n\tconst cacheKey = [\n\t\ttoValue,\n\t\tlastTimestamp,\n\t\tcurrent,\n\t\tvelocity,\n\t\tc,\n\t\tm,\n\t\tk,\n\t\tnow\n\t].join(\"-\");\n\tif (advanceCache[cacheKey]) return advanceCache[cacheKey];\n\tconst v0 = -velocity;\n\tconst x0 = toValue - current;\n\tconst zeta = c / (2 * Math.sqrt(k * m));\n\tconst omega0 = Math.sqrt(k / m);\n\tconst omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\tconst t = deltaTime / 1e3;\n\tconst sin1 = Math.sin(omega1 * t);\n\tconst cos1 = Math.cos(omega1 * t);\n\tconst underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n\tconst underDampedFrag1 = underDampedEnvelope * (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\tconst underDampedPosition = toValue - underDampedFrag1;\n\tconst underDampedVelocity = zeta * omega0 * underDampedFrag1 - underDampedEnvelope * (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\tconst criticallyDampedEnvelope = Math.exp(-omega0 * t);\n\tconst criticallyDampedPosition = toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\tconst criticallyDampedVelocity = criticallyDampedEnvelope * (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\tconst animationNode = {\n\t\ttoValue,\n\t\tprevPosition: current,\n\t\tlastTimestamp: now,\n\t\tcurrent: zeta < 1 ? underDampedPosition : criticallyDampedPosition,\n\t\tvelocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity\n\t};\n\tadvanceCache[cacheKey] = animationNode;\n\treturn animationNode;\n}\nconst calculationCache = {};\nfunction springCalculation({ frame, fps, config = {} }) {\n\tconst from = 0;\n\tconst to = 1;\n\tconst cacheKey = [\n\t\tframe,\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness\n\t].join(\"-\");\n\tif (calculationCache[cacheKey]) return calculationCache[cacheKey];\n\tlet animation = {\n\t\tlastTimestamp: 0,\n\t\tcurrent: from,\n\t\ttoValue: to,\n\t\tvelocity: 0,\n\t\tprevPosition: 0\n\t};\n\tconst frameClamped = Math.max(0, frame);\n\tconst unevenRest = frameClamped % 1;\n\tfor (let f = 0; f <= Math.floor(frameClamped); f++) {\n\t\tif (f === Math.floor(frameClamped)) f += unevenRest;\n\t\tconst time = f / fps * 1e3;\n\t\tanimation = advance({\n\t\t\tanimation,\n\t\t\tnow: time,\n\t\t\tconfig: {\n\t\t\t\t...defaultSpringConfig,\n\t\t\t\t...config\n\t\t\t}\n\t\t});\n\t}\n\tcalculationCache[cacheKey] = animation;\n\treturn animation;\n}\nconst measureCache = /* @__PURE__ */ new Map();\nfunction measureSpring({ fps, config = {}, threshold = .005 }) {\n\tif (typeof threshold !== \"number\") throw new TypeError(`threshold must be a number, got ${threshold}`);\n\tif (threshold === 0) return Infinity;\n\tif (threshold === 1) return 0;\n\tif (Number.isNaN(threshold)) throw new TypeError(\"Threshold is NaN\");\n\tif (!Number.isFinite(threshold)) throw new TypeError(\"Threshold is not finite\");\n\tif (threshold < 0) throw new TypeError(\"Threshold is below 0\");\n\tconst cacheKey = [\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness,\n\t\tthreshold\n\t].join(\"-\");\n\tif (measureCache.has(cacheKey)) return measureCache.get(cacheKey);\n\tlet frame = 0;\n\tlet finishedFrame = 0;\n\tconst calc = () => {\n\t\treturn springCalculation({\n\t\t\tfps,\n\t\t\tframe,\n\t\t\tconfig\n\t\t});\n\t};\n\tlet animation = calc();\n\tconst calcDifference = () => {\n\t\treturn Math.abs(animation.current - animation.toValue);\n\t};\n\tlet difference = calcDifference();\n\twhile (difference >= threshold) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t}\n\tfinishedFrame = frame;\n\tfor (let i = 0; i < 20; i++) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t\tif (difference >= threshold) {\n\t\t\ti = 0;\n\t\t\tfinishedFrame = frame + 1;\n\t\t}\n\t}\n\tmeasureCache.set(cacheKey, finishedFrame);\n\treturn finishedFrame;\n}\nfunction spring({ frame: passedFrame, fps, config = {}, from = 0, to = 1, durationInFrames: passedDurationInFrames, durationRestThreshold, delay = 0, reverse = false }) {\n\tconst needsToCalculateNaturalDuration = reverse || typeof passedDurationInFrames !== \"undefined\";\n\tconst naturalDuration = needsToCalculateNaturalDuration ? measureSpring({\n\t\tfps,\n\t\tconfig,\n\t\tthreshold: durationRestThreshold\n\t}) : void 0;\n\tconst naturalDurationGetter = needsToCalculateNaturalDuration ? { get: () => naturalDuration } : { get: () => {\n\t\tthrow new Error(\"did not calculate natural duration\");\n\t} };\n\tconst delayProcessed = (reverse ? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame : passedFrame) + (reverse ? delay : -delay);\n\tconst durationProcessed = passedDurationInFrames === void 0 ? delayProcessed : delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());\n\tif (passedDurationInFrames && delayProcessed > passedDurationInFrames) return to;\n\tconst spr = springCalculation({\n\t\tfps,\n\t\tframe: durationProcessed,\n\t\tconfig\n\t});\n\tconst inner = config.overshootClamping ? to >= from ? Math.min(spr.current, to) : Math.max(spr.current, to) : spr.current;\n\treturn from === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);\n}\n\n//#endregion\n//#region src/text-measurer.ts\nconst cache = /* @__PURE__ */ new Map();\nfunction getCacheKey(text, style) {\n\treturn JSON.stringify({\n\t\ttext,\n\t\t...style\n\t});\n}\n/**\n* Shared text measurer that uses SlugGeometry.measure for all environments.\n*/\nfunction measureText(text, style) {\n\tconst safeText = text ? String(text) : \" \";\n\tconst cacheKey = getCacheKey(safeText, style);\n\tconst cached = cache.get(cacheKey);\n\tif (cached) return cached;\n\tconst fontSize = style.fontSize ?? 48;\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\tconst calculatedLineHeight = style.lineHeight !== void 0 && style.lineHeight < 10 ? style.lineHeight * fontSize : style.lineHeight ?? fontSize * 1.2;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, style.fontWeight, null);\n\tconst padding = style.padding ?? 0;\n\tif (!slugFont) {\n\t\tif (!SlugFontCache.isFailed(fontFamily)) {\n\t\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\t\tSlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).catch(() => {});\n\t\t}\n\t\tconst lines = safeText.split(\"\\n\");\n\t\tlet totalWrappedLines = 0;\n\t\tconst maxW = style.width !== void 0 ? Math.max(10, style.width - padding * 2) : 0;\n\t\tfor (const line of lines) if (maxW > 0) {\n\t\t\tconst estLineWidth = line.length * fontSize * .55 + letterSpacing * line.length;\n\t\t\tconst wrapCount = Math.max(1, Math.ceil(estLineWidth / maxW));\n\t\t\ttotalWrappedLines += wrapCount;\n\t\t} else totalWrappedLines += 1;\n\t\tconst letterGaps = Math.max(0, safeText.length - 1);\n\t\tconst result$1 = {\n\t\t\twidth: style.width !== void 0 ? style.width : Math.ceil(safeText.length * fontSize * .6 + letterSpacing * letterGaps) + padding * 2,\n\t\t\theight: style.height !== void 0 ? style.height : Math.ceil(totalWrappedLines * calculatedLineHeight) + padding * 2\n\t\t};\n\t\tcache.set(cacheKey, result$1);\n\t\treturn result$1;\n\t}\n\tconst measured = SlugGeometry.measure(safeText, slugFont, fontSize, letterSpacing, calculatedLineHeight, style.width !== void 0 ? Math.max(0, style.width - padding * 2) : void 0, style.spans, style.direction);\n\tconst result = {\n\t\twidth: style.width !== void 0 && !style.keepNaturalWidth ? style.width : Math.ceil(measured.width) + padding * 2,\n\t\theight: style.height !== void 0 ? style.height : Math.ceil(measured.height) + padding * 2\n\t};\n\tcache.set(cacheKey, result);\n\treturn result;\n}\n/**\n* Async variant of measureText. Preloads the Slug font and yields to the browser.\n*/\nfunction measureTextAsync(text, style) {\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return Promise.resolve(measureText(text, style));\n\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\treturn SlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).then(() => measureText(text, style)).catch(() => measureText(text, style));\n}\n\n//#endregion\nexport { Easing, bezier, computeStrokeRect, interpolate, mapBlendModeToSkia, measureSpring, measureText, measureTextAsync, preloadCompositionFonts, preloadFont, requiresIsolation, spring, springCalculation };\n//# sourceMappingURL=index.mjs.map","import { DEFAULT_DURATION_MS, getActiveMediaMetadata, resolveMediaMimeType } from \"@framefields/core\";\nimport { getEnv, resolveMediaSourceUrl } from \"@framefields/client-utils\";\nimport { interpolate, spring } from \"@framefields/renderers\";\n\n//#region src/utils/apply-operations.ts\nconst BASE_URL = getEnv(\"BASE_URL\");\nconst CDN_DOMAIN = getEnv(\"R2_CUSTOM_DOMAIN\");\nfunction getFontUrl(name) {\n\tif (CDN_DOMAIN) return `https://${CDN_DOMAIN}/fonts/${name}/font_file.ttf`;\n\treturn `${BASE_URL}/api/v1/fonts/load/${name}`;\n}\n/**\n* Compute render parameters for the CURRENT node only — does NOT recurse into\n* children. Each node in the VirtualMedia tree is responsible for exactly its\n* own operation; `SingleClipComposition` drives traversal via React recursion.\n*\n* This is the correct function to use inside the renderer.\n*/\nfunction computeRenderParams(vv) {\n\tconst op = vv.operation;\n\tconst baseMeta = getActiveMediaMetadata(vv);\n\tconst params = {\n\t\tsourceUrl: void 0,\n\t\ttrimStartSec: 0,\n\t\ttrimEndSec: null,\n\t\tspeed: 1,\n\t\tcropRegion: null,\n\t\tflipH: false,\n\t\tflipV: false,\n\t\trotation: 0,\n\t\teffectiveDurationSec: 0,\n\t\tmimeType: resolveMediaMimeType(vv) || null\n\t};\n\tswitch (op.op) {\n\t\tcase \"text\":\n\t\t\tparams.sourceUrl = void 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tparams.sourceUrl = resolveMediaSourceUrl(vv);\n\t\t\tbreak;\n\t}\n\tconst sourceDurationSec = (baseMeta?.durationMs ?? 0) / 1e3;\n\tparams.effectiveDurationSec = ((params.trimEndSec ?? sourceDurationSec) - params.trimStartSec) / params.speed;\n\treturn params;\n}\n\n//#endregion\n//#region src/utils/timing.ts\nfunction framesToSeconds(frames, fps) {\n\treturn frames / fps;\n}\nfunction secondsToFrames(seconds, fps) {\n\treturn Math.round(seconds * fps);\n}\nfunction formatTimecode(seconds) {\n\tconst mins = Math.floor(seconds / 60);\n\tconst secs = Math.floor(seconds % 60);\n\tconst ms = Math.floor(seconds % 1 * 100);\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}.${ms.toString().padStart(2, \"0\")}`;\n}\n\n//#endregion\n//#region src/utils/layer-logic.ts\nconst isStaticVisualMedia = (type) => type === \"Image\" || type === \"SVG\" || type === \"Text\";\nconst resolveLayerDuration = (layerDurationInMS, metaDurationMs, defaultDuration = DEFAULT_DURATION_MS, type) => {\n\tif (type === \"Caption\") return metaDurationMs && metaDurationMs > 0 ? metaDurationMs : layerDurationInMS || defaultDuration;\n\tconst isStatic = isStaticVisualMedia(type);\n\tif (layerDurationInMS && metaDurationMs && !isStatic) return Math.min(layerDurationInMS, metaDurationMs);\n\treturn layerDurationInMS || metaDurationMs || defaultDuration;\n};\nconst calculateLayerTransform = (layer, frame, fps, viewport) => {\n\tconst relativeFrame = frame - (layer.startFrame ?? 0);\n\tlet x = layer.x ?? 0;\n\tlet y = layer.y ?? 0;\n\tlet scale = layer.scale ?? 1;\n\tlet rotation = layer.rotation ?? 0;\n\tlet opacity = layer.opacity ?? 1;\n\tconst volume = layer.volume ?? 1;\n\tconst layerDurationMs = resolveLayerDuration(layer.durationInMS, layer.virtualMedia?.metadata?.durationMs ?? void 0, DEFAULT_DURATION_MS, layer.type);\n\tconst duration = Math.round(layerDurationMs / 1e3 * fps);\n\tconst animations = layer.type === \"Text\" || layer.type === \"Caption\" ? [] : layer.animations ?? [];\n\tif (animations.length === 0) return {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n\tanimations.forEach((anim) => {\n\t\tconst durFrames = anim.value * fps;\n\t\tconst isOut = anim.type.includes(\"-out\");\n\t\tconst startAnimFrame = isOut ? duration - durFrames : 0;\n\t\tconst endAnimFrame = isOut ? duration : durFrames;\n\t\tif (relativeFrame < startAnimFrame || relativeFrame > endAnimFrame) return;\n\t\tconst progress = interpolate(relativeFrame, [startAnimFrame, endAnimFrame], [0, 1], {\n\t\t\textrapolateLeft: \"clamp\",\n\t\t\textrapolateRight: \"clamp\"\n\t\t});\n\t\tswitch (anim.type) {\n\t\t\tcase \"fade-in\":\n\t\t\t\topacity *= progress;\n\t\t\t\tbreak;\n\t\t\tcase \"fade-out\":\n\t\t\t\topacity *= 1 - progress;\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-left\":\n\t\t\t\tx += -1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-right\":\n\t\t\t\tx += 1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-top\":\n\t\t\t\ty += -1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-bottom\":\n\t\t\t\ty += 1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-in\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [0, 1]);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-out\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [1, 0]);\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-cw\":\n\t\t\t\trotation += 360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-ccw\":\n\t\t\t\trotation += -360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"bounce\": {\n\t\t\t\tconst bounceVal = spring({\n\t\t\t\t\tframe: relativeFrame - startAnimFrame,\n\t\t\t\t\tfps,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdamping: 10,\n\t\t\t\t\t\tmass: .5,\n\t\t\t\t\t\tstiffness: 100\n\t\t\t\t\t},\n\t\t\t\t\tdurationInFrames: durFrames\n\t\t\t\t});\n\t\t\t\tscale *= bounceVal;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"shake\":\n\t\t\t\tx += 20 * Math.sin(relativeFrame * 10 * 2 * Math.PI / durFrames) * (1 - progress);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\treturn {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n};\n\n//#endregion\nexport { framesToSeconds as a, getFontUrl as c, formatTimecode as i, isStaticVisualMedia as n, secondsToFrames as o, resolveLayerDuration as r, computeRenderParams as s, calculateLayerTransform as t };\n//# sourceMappingURL=layer-logic-BhwmzPIV.mjs.map","import { a as framesToSeconds, c as getFontUrl, i as formatTimecode, n as isStaticVisualMedia, o as secondsToFrames, r as resolveLayerDuration, s as computeRenderParams, t as calculateLayerTransform } from \"./layer-logic-BhwmzPIV.mjs\";\nimport { getActiveMediaMetadata, getMediaType, isSignal, updateClockSignals } from \"@framefields/core\";\nimport { audioRegistry, webgpuRegistry } from \"@framefields/node-sdk\";\nimport { drawCaptionNode, drawGifNode, drawImageNode, drawLottieNode, drawParagraphNode, drawSignalNode, drawSvgNode, drawVideoNode, inputStore, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { AudioSampleSink } from \"mediabunny\";\n\n//#region src/compositions/canvas-composition.ts\nconst segmentRangeCache = /* @__PURE__ */ new WeakMap();\nfunction getCachedSegmentRanges(segments, fps) {\n\tconst cached = segmentRangeCache.get(segments);\n\tif (cached && cached.fps === fps) return cached.ranges;\n\tlet currentStart = 0;\n\tconst ranges = segments.map((seg) => {\n\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\tconst start = currentStart;\n\t\tcurrentStart += durFrames;\n\t\treturn {\n\t\t\tseg,\n\t\t\tstart,\n\t\t\tduration: durFrames\n\t\t};\n\t});\n\tsegmentRangeCache.set(segments, {\n\t\tfps,\n\t\tranges\n\t});\n\treturn ranges;\n}\nconst frameCtxPool = [];\nfunction acquireFrameContext() {\n\treturn frameCtxPool.pop() ?? {};\n}\n/**\n* Effect operations carry every config field as a signal. Hand node renderers\n* the plain value for this frame (nested objects/arrays included), keeping only\n* GPU-bound signals intact since those are consumed as textures.\n*/\nfunction resolveSignalOperation(virtualMedia, frameCtx) {\n\tconst op = virtualMedia.operation;\n\tconst resolved = { ...op };\n\tfor (const [key, sig] of Object.entries(op.signals)) if (isSignal(sig) && !sig.gpuBinding) resolved[key] = sig.get(frameCtx);\n\treturn {\n\t\t...virtualMedia,\n\t\toperation: resolved\n\t};\n}\n/** The paragraph props a text operation maps to, shared by both text paths. */\nfunction paragraphPropsFromTextOp(opText, props, timing) {\n\treturn {\n\t\ttext: opText.text || \"\",\n\t\tdstRect: {\n\t\t\tx: Number(opText.x ?? 0),\n\t\t\ty: Number(opText.y ?? 0),\n\t\t\twidth: Number(opText.width ?? timing.containerWidth),\n\t\t\theight: Number(opText.height ?? timing.containerHeight)\n\t\t},\n\t\tfontFamily: opText.fontFamily,\n\t\tfontSize: Number(opText.fontSize ?? 48),\n\t\tcolor: opText.fill ?? opText.color ?? \"white\",\n\t\twidth: opText.width ? Number(opText.width) : void 0,\n\t\theight: opText.height ? Number(opText.height) : void 0,\n\t\tlineHeight: Number(opText.lineHeight ?? 1.2),\n\t\talign: opText.align,\n\t\tdirection: opText.direction,\n\t\tverticalAlign: opText.verticalAlign,\n\t\tfontWeight: opText.fontWeight,\n\t\tfontStyle: opText.fontStyle,\n\t\tletterSpacing: opText.letterSpacing,\n\t\tshadows: opText.shadows,\n\t\ttextBackgroundColor: opText.textBackgroundColor,\n\t\tpadding: opText.padding != null ? Number(opText.padding) : void 0,\n\t\tstroke: opText.stroke,\n\t\tstrokeWidth: opText.strokeWidth ?? opText.strokeThickness ? Number(opText.strokeWidth ?? opText.strokeThickness) : void 0,\n\t\tstrokeAlign: opText.strokeAlign,\n\t\topacity: Number(opText.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\tisHeadless: props.isHeadless,\n\t\tanimation: opText.animation ?? opText.textAnimation,\n\t\tanimators: opText.animators,\n\t\tpathOptions: opText.pathOptions,\n\t\ttypewriter: opText.typewriter,\n\t\tmarquee: opText.marquee,\n\t\tsignals: props.signals ?? opText.signals,\n\t\tfirstMargin: opText.firstMargin != null ? Number(opText.firstMargin) : void 0,\n\t\tlastMargin: opText.lastMargin != null ? Number(opText.lastMargin) : void 0,\n\t\tbaselineShift: opText.baselineShift != null ? Number(opText.baselineShift) : void 0,\n\t\tframe: timing.frame,\n\t\tfps: timing.fps,\n\t\tdurationMs: timing.durationMs,\n\t\telapsedMs: timing.elapsedMs,\n\t\tisVideoMode: props.isVideoMode\n\t};\n}\nasync function drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, virtualMedia, props, inheritedSeekOffset = 0, inheritedClockOffset = 0) {\n\tconst fps = props.fps ?? 24;\n\tconst op = virtualMedia.operation;\n\tif (!op) return;\n\tconst isCompositor = op.op === \"Compositor\";\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst segments = op.timeline?.segments || [];\n\tconst localFrame = frame - (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\tconst isTimelineProvider = op.timeline !== void 0 || op.startFrame !== void 0 || op.op === \"compose\";\n\tconst resolvedDurationMs = isTimelineProvider ? getActiveMediaMetadata(virtualMedia)?.durationMs ?? props.durationMs ?? void 0 : props.durationMs ?? getActiveMediaMetadata(virtualMedia)?.durationMs ?? void 0;\n\tif (!(op.op === \"source\" || op.op === \"text\" || op.op === \"caption\")) updateClockSignals(compositionFrame, fps, resolvedDurationMs);\n\tconst frameCtx = acquireFrameContext();\n\tframeCtx.frame = compositionFrame;\n\tframeCtx.fps = fps;\n\tframeCtx.time = fps > 0 ? compositionFrame / fps : 0;\n\tframeCtx.duration = (resolvedDurationMs ?? 0) / 1e3;\n\tframeCtx.durationMs = resolvedDurationMs ?? 0;\n\tframeCtx.progress = resolvedDurationMs && resolvedDurationMs > 0 ? Math.max(0, Math.min(1, compositionFrame / fps * 1e3 / resolvedDurationMs)) : 0;\n\tframeCtx.deltaTime = fps > 0 ? 1 / fps : 0;\n\tconst resolvedElapsedMs = isTimelineProvider ? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0) ?? props.elapsedMs : props.elapsedMs ?? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0);\n\tconst effectiveLocalFrame = localFrame + Math.round(inheritedSeekOffset * fps);\n\tlet activeSeg = null;\n\tlet windowStartFrame = 0;\n\tif (segments.length > 0) {\n\t\tconst active = getCachedSegmentRanges(segments, fps).find(({ start, duration }) => effectiveLocalFrame >= start && effectiveLocalFrame < start + duration);\n\t\tif (active) {\n\t\t\tactiveSeg = active.seg;\n\t\t\twindowStartFrame = active.start;\n\t\t} else return;\n\t}\n\tconst segmentLocalFrame = localFrame - windowStartFrame;\n\tconst accumulatedSeekOffsetSec = inheritedSeekOffset + (activeSeg ? activeSeg.startSec - windowStartFrame / fps : 0);\n\tconst accumulatedClockOffsetSec = inheritedClockOffset + windowStartFrame / fps;\n\tif (typeof op.onRequestFrame === \"function\") op.onRequestFrame(frameCtx);\n\telse if (op.effect && typeof op.effect.notifyFrame === \"function\") op.effect.notifyFrame(frameCtx);\n\tconst CustomRenderer = webgpuRegistry.get(op.op);\n\tif (CustomRenderer) {\n\t\tif (op.signals) virtualMedia = resolveSignalOperation(virtualMedia, frameCtx);\n\t\tconst inputs = op?.inputs;\n\t\tif (inputs) {\n\t\t\tfor (const entry of Object.values(inputs)) if (entry?.connectionValid && entry?.outputItem?.type === \"LUT\") {\n\t\t\t\tconst lutVirtualMedia = entry.outputItem.data;\n\t\t\t\tif (lutVirtualMedia && typeof lutVirtualMedia === \"object\" && lutVirtualMedia.operation) {\n\t\t\t\t\tconst lutW = lutVirtualMedia.metadata?.width ?? targetWidth;\n\t\t\t\t\tconst lutH = lutVirtualMedia.metadata?.height ?? targetHeight;\n\t\t\t\t\tconst dummyTex = ctx.renderer.getTemporaryTexture(lutW, lutH);\n\t\t\t\t\tawait drawCompositionTree(ctx, encoder, dummyTex.createView(), dummyTex, lutW, lutH, lutVirtualMedia, {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tcompositionFrame,\n\t\t\t\t\t\tvirtualMedia: lutVirtualMedia\n\t\t\t\t\t}, accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t\t}\n\t\t\t} else if (entry?.connectionValid && entry?.outputItem?.type === \"Signal\") {\n\t\t\t\tconst sigData = entry.outputItem.data;\n\t\t\t\tif (sigData && typeof sigData === \"object\") await signalRegistry.ensureAudioSourcesExtracted(ctx.device, sigData.signalConfig ?? sigData, fps, props.renderId);\n\t\t\t}\n\t\t}\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tlet passEnded = false;\n\t\tconst originalEnd = pass.end.bind(pass);\n\t\tpass.end = () => {\n\t\t\tif (!passEnded) {\n\t\t\t\toriginalEnd();\n\t\t\t\tpassEnded = true;\n\t\t\t}\n\t\t};\n\t\tconst renderArgs = {\n\t\t\tctx,\n\t\t\tencoder,\n\t\t\tpass,\n\t\t\ttargetView,\n\t\t\ttargetTexture,\n\t\t\ttargetWidth,\n\t\t\ttargetHeight,\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tcompositionFrame,\n\t\t\t\tvirtualMedia,\n\t\t\t\tinheritedSeekOffset: accumulatedSeekOffsetSec,\n\t\t\t\tinheritedClockOffset: accumulatedClockOffsetSec,\n\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t},\n\t\t\tdrawChild: async (child, overrides, targetViewOverride, targetTextureOverride, targetWidthOverride, targetHeightOverride) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, targetViewOverride ?? targetView, targetTextureOverride ?? targetTexture, targetWidthOverride ?? targetWidth, targetHeightOverride ?? targetHeight, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\tvirtualMedia: child,\n\t\t\t\t\t...overrides,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...overrides?.excludeTextures || [],\n\t\t\t\t\t\ttargetTextureOverride ?? targetTexture\n\t\t\t\t\t]\n\t\t\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t}\n\t\t};\n\t\tawait CustomRenderer(renderArgs);\n\t\trenderArgs.pass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"LUT\") return;\n\tif (op.op === \"Signal\" || op.op === \"SignalMath\" || op.dataType === \"Signal\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tawait drawSignalNode(ctx, encoder, pass, {\n\t\t\tnodeId: op.nodeId || op.signalConfig?.nodeId || props.renderId,\n\t\t\tfunc: op.func,\n\t\t\tamplitude: Number(op.amplitude ?? 1),\n\t\t\tfrequency: Number(op.frequency ?? 1),\n\t\t\tphase: Number(op.phase ?? 0),\n\t\t\toffset: Number(op.offset ?? 0),\n\t\t\tsignalConfig: {\n\t\t\t\t...op.signalConfig,\n\t\t\t\t...op\n\t\t\t},\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tdurationMs: resolvedDurationMs ?? 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight,\n\t\t\tdrawChild: async (child, childProps, childView, childTex, childW, childH) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, childView, childTex, childW, childH, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\t...childProps,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...childProps?.excludeTextures || [],\n\t\t\t\t\t\tchildTex\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"source\" || op.op === \"text\" || op.op === \"caption\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tif (op.op === \"source\") {\n\t\t\tconst mediaType = getMediaType(virtualMedia);\n\t\t\tconst params = computeRenderParams(virtualMedia);\n\t\t\tif (params.sourceUrl) {\n\t\t\t\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\t\t\t\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\t\t\t\tif (mediaType === \"Image\") await drawImageNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"SVG\") await drawSvgNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Lottie\") await drawLottieNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\tdpr: typeof props.dpr === \"number\" ? props.dpr : typeof op.dpr === \"number\" ? op.dpr : void 0\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"GIF\") await drawGifNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Text\") {\n\t\t\t\t\tconst opText = { ...op };\n\t\t\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\t\t\t...paragraphPropsFromTextOp(opText, props, {\n\t\t\t\t\t\t\tcontainerWidth,\n\t\t\t\t\t\t\tcontainerHeight,\n\t\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\t\tfps,\n\t\t\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tborderRadius: opText.borderRadius != null ? Number(opText.borderRadius) : void 0,\n\t\t\t\t\t\ttextProgress: opText.textProgress != null ? Number(opText.textProgress) : void 0\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Video\") {\n\t\t\t\t\tconst finalPlaybackRate = Math.max(.01, (Number(props.playbackRateOverride) || 1) * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(props.trimStartOverride) || 0) + (Number(params.trimStartSec) || 0) + accumulatedSeekOffsetSec);\n\t\t\t\t\tconst rawTimestampSec = segmentLocalFrame / fps * finalPlaybackRate + effectiveTrimSec;\n\t\t\t\t\tconst timestampSec = Math.max(0, Number.isFinite(rawTimestampSec) ? rawTimestampSec : 0);\n\t\t\t\t\tawait drawVideoNode(ctx, pass, {\n\t\t\t\t\t\tnodeId: props.renderId,\n\t\t\t\t\t\tframeKey: `${props.renderId ?? \"video\"}-${params.sourceUrl}-${Math.round(timestampSec * fps)}`,\n\t\t\t\t\t\tsourceUrl: params.sourceUrl,\n\t\t\t\t\t\ttimestampSec,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisPlaying: props.isPlaying,\n\t\t\t\t\t\tforceWait: props.forceWait\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Caption\") {\n\t\t\t\t\tconst opCap = {\n\t\t\t\t\t\t...op,\n\t\t\t\t\t\t...props\n\t\t\t\t\t};\n\t\t\t\t\tawait drawCaptionNode(ctx, pass, {\n\t\t\t\t\t\trenderId: props.renderId,\n\t\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\tfontFamily: opCap.fontFamily,\n\t\t\t\t\t\tfontSize: Number(opCap.fontSize ?? 48),\n\t\t\t\t\t\tcolor: opCap.fill ?? opCap.color ?? \"white\",\n\t\t\t\t\t\tlineHeight: Number(opCap.lineHeight ?? 1.2),\n\t\t\t\t\t\talign: opCap.align ?? \"center\",\n\t\t\t\t\t\tdirection: opCap.direction,\n\t\t\t\t\t\ttextAlignVertical: opCap.verticalAlign ?? opCap.textAlignVertical,\n\t\t\t\t\t\tfontWeight: opCap.fontWeight,\n\t\t\t\t\t\tfontStyle: opCap.fontStyle,\n\t\t\t\t\t\tletterSpacing: opCap.letterSpacing,\n\t\t\t\t\t\tshadows: opCap.shadows,\n\t\t\t\t\t\ttextBackgroundColor: opCap.background ?? opCap.textBackgroundColor,\n\t\t\t\t\t\tborderRadius: (opCap.borderRadius ?? opCap.strokeRadius) != null ? Number(opCap.borderRadius ?? opCap.strokeRadius) : void 0,\n\t\t\t\t\t\tstrokeRadius: (opCap.strokeRadius ?? opCap.borderRadius) != null ? Number(opCap.strokeRadius ?? opCap.borderRadius) : void 0,\n\t\t\t\t\t\tstroke: opCap.stroke,\n\t\t\t\t\t\tstrokeWidth: (opCap.strokeWidth ?? opCap.strokeThickness) != null ? Number(opCap.strokeWidth ?? opCap.strokeThickness) : void 0,\n\t\t\t\t\t\tmaxWidth: opCap.maxWidth,\n\t\t\t\t\t\tpadding: opCap.padding != null ? Number(opCap.padding) : void 0,\n\t\t\t\t\t\topacity: Number(opCap.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisVideoMode: props.isVideoMode\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (op.op === \"text\") {\n\t\t\tconst opText = { ...op };\n\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\t...paragraphPropsFromTextOp(opText, props, {\n\t\t\t\t\tcontainerWidth: props.containerWidth ?? ctx.surface.width,\n\t\t\t\t\tcontainerHeight: props.containerHeight ?? ctx.surface.height,\n\t\t\t\t\tframe: localFrame,\n\t\t\t\t\tfps,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t\t}),\n\t\t\t\trenderId: props.renderId,\n\t\t\t\tspans: opText.spans,\n\t\t\t\tborderRadius: (opText.borderRadius ?? opText.strokeRadius) != null ? Number(opText.borderRadius ?? opText.strokeRadius) : void 0,\n\t\t\t\tstrokeRadius: (opText.strokeRadius ?? opText.borderRadius) != null ? Number(opText.strokeRadius ?? opText.borderRadius) : void 0\n\t\t\t});\n\t\t}\n\t\tpass.end();\n\t}\n\tif (virtualMedia.children && virtualMedia.children.length > 0) for (let i = 0; i < virtualMedia.children.length; i++) {\n\t\tconst child = virtualMedia.children[i];\n\t\tif (child) await drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, child, {\n\t\t\t...props,\n\t\t\tcompositionFrame,\n\t\t\tdurationMs: resolvedDurationMs,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tvirtualMedia: child,\n\t\t\trenderId: `${props.renderId}-c${i}`\n\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t}\n}\n\n//#endregion\n//#region src/compositions/composition-state.ts\nconst DEFAULT_STATE = {\n\tframe: 0,\n\tfps: 30,\n\tisPlaying: false\n};\nvar CompositionStateStore = class {\n\tstates = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Map();\n\tsetState(key, frame, fps, isPlaying) {\n\t\tconst current = this.states.get(key);\n\t\tconst resolvedPlaying = isPlaying !== void 0 ? isPlaying : current?.isPlaying ?? false;\n\t\tif (current?.frame === frame && current?.fps === fps && current?.isPlaying === resolvedPlaying) return;\n\t\tthis.states.set(key, {\n\t\t\tframe,\n\t\t\tfps,\n\t\t\tisPlaying: resolvedPlaying\n\t\t});\n\t\tthis.notify(key);\n\t}\n\tgetState(key) {\n\t\tif (this.states.has(key)) return this.states.get(key);\n\t\tfor (const [storeKey, value] of this.states.entries()) if (key.startsWith(storeKey)) return value;\n\t\treturn DEFAULT_STATE;\n\t}\n\tsubscribe(key, listener) {\n\t\tif (!this.listeners.has(key)) this.listeners.set(key, /* @__PURE__ */ new Set());\n\t\tthis.listeners.get(key).add(listener);\n\t\treturn () => {\n\t\t\tconst set = this.listeners.get(key);\n\t\t\tset?.delete(listener);\n\t\t\tif (set?.size === 0) {\n\t\t\t\tthis.listeners.delete(key);\n\t\t\t\tthis.states.delete(key);\n\t\t\t}\n\t\t};\n\t}\n\tclearKey(key) {\n\t\tthis.states.delete(key);\n\t}\n\tnotify(key) {\n\t\tfor (const [listenerKey, set] of this.listeners.entries()) if (listenerKey === key || listenerKey.startsWith(key)) set.forEach((l) => l());\n\t}\n};\nconst compositionStateStore = new CompositionStateStore();\n\n//#endregion\n//#region src/utils/normalization.ts\n/**\n* normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n* generic timeline-shifting operations into standard properties\n* of their children.\n*/\nfunction normalizeTimeline(vv, fps, context = { timeOffsetSec: 0 }) {\n\tif (!vv) return vv;\n\tconst { operation, metadata = {}, children = [] } = vv;\n\tconst { timeOffsetSec, durationLimitMs } = context;\n\tif (!operation) return {\n\t\t...vv,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, context))\n\t};\n\tconst timeline = operation.timeline;\n\tconst segments = timeline?.segments || [];\n\tlet totalDurationMs = getActiveMediaMetadata(vv)?.durationMs ?? 0;\n\tif (segments.length > 0) {\n\t\tconst totalSegmentsFrames = segments.reduce((acc, seg) => {\n\t\t\tconst durSec = seg.endSec != null ? seg.endSec - seg.startSec : 0;\n\t\t\treturn acc + Math.max(1, Math.round(durSec * fps));\n\t\t}, 0);\n\t\tif (totalSegmentsFrames > 0) totalDurationMs = totalSegmentsFrames / fps * 1e3;\n\t}\n\tconst newOperation = { ...operation };\n\tconst rawStartFrame = timeline?.startFrame ?? newOperation.startFrame;\n\tif (typeof rawStartFrame === \"number\") newOperation.startFrame = rawStartFrame - secondsToFrames(timeOffsetSec, fps);\n\tconst newMetadata = {\n\t\t...metadata,\n\t\tdurationMs: totalDurationMs\n\t};\n\tconst childContext = typeof rawStartFrame === \"number\" || newOperation.op === \"compose\" ? {\n\t\ttimeOffsetSec: 0,\n\t\tdurationLimitMs: void 0\n\t} : {\n\t\ttimeOffsetSec,\n\t\tdurationLimitMs\n\t};\n\treturn {\n\t\tmetadata: newMetadata,\n\t\toperation: newOperation,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, childContext))\n\t};\n}\n\n//#endregion\n//#region src/utils/audio-extractor.ts\nconst verbose = typeof process !== \"undefined\" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? \"\");\nconst mediaLogger = {\n\tdebug: (msg, ...args) => {\n\t\tif (!verbose) return;\n\t\tif (typeof msg === \"object\" && msg !== null) console.info(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.info(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\twarn: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.warn(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.warn(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\terror: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.error(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.error(`[AudioExtractor] ${msg}`, ...args);\n\t}\n};\nconst yieldToMain = () => {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tconst sched = globalThis.scheduler;\n\treturn typeof sched?.yield === \"function\" ? sched.yield() : new Promise((resolve) => setTimeout(resolve, 0));\n};\nconst waitForDelayRender = async (timeoutMs = 3e4) => {\n\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\tconst start = Date.now();\n\treturn new Promise((resolve) => {\n\t\tconst check = () => {\n\t\t\tconst browserHandles = typeof window !== \"undefined\" && window.renderer_delayRenderHandles ? window.renderer_delayRenderHandles : [];\n\t\t\tconst globalDelays = typeof globalThis !== \"undefined\" ? globalThis.__GATEWAI_DELAYS__ : null;\n\t\t\tconst hasBrowserDelays = browserHandles.length > 0;\n\t\t\tconst hasGlobalDelays = globalDelays instanceof Set && globalDelays.size > 0;\n\t\t\tif (!hasBrowserDelays && !hasGlobalDelays) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Date.now() - start > timeoutMs) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] waitForDelayRender timed out waiting for handles: ${JSON.stringify({\n\t\t\t\t\tbrowserHandles,\n\t\t\t\t\tglobalDelays: globalDelays ? Array.from(globalDelays) : []\n\t\t\t\t})}`);\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTimeout(check, 50);\n\t\t};\n\t\tcheck();\n\t});\n};\n/**\n* Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n*/\nasync function decodeAudioSource(url) {\n\tmediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);\n\ttry {\n\t\tif (typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && !(typeof process !== \"undefined\" && process.versions && process.versions.node)) {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Browser detected. Fetching arrayBuffer for ${url}...`);\n\t\t\tconst AudioContextClass = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (!AudioContextClass) throw new Error(\"AudioContext is not supported in this browser\");\n\t\t\tconst audioCtx = new AudioContextClass();\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetch response status for ${url}: ${response.status} (${response.statusText})`);\n\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch audio source: ${response.statusText}`);\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetched ${arrayBuffer.byteLength} bytes. Decoding audio data...`);\n\t\t\t\tconst audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Decoded successfully: ${audioBuffer.numberOfChannels} channels, sampleRate: ${audioBuffer.sampleRate}, duration: ${audioBuffer.duration}s`);\n\t\t\t\tconst channels = [];\n\t\t\t\tfor (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));\n\t\t\t\treturn {\n\t\t\t\t\tchannels,\n\t\t\t\t\tsampleRate: audioBuffer.sampleRate\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\taudioCtx.close();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] AudioContext closed for ${url}`);\n\t\t\t}\n\t\t}\n\t\tlet inputAcquired = false;\n\t\ttry {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Server / Node.js detected. Acquiring from inputStore for ${url}...`);\n\t\t\tconst input = await inputStore.acquire(url);\n\t\t\tinputAcquired = true;\n\t\t\tmediaLogger.debug(`[AudioExtractor] inputStore acquired. Retrieving primary audio track...`);\n\t\t\tconst track = await input.getPrimaryAudioTrack();\n\t\t\tif (!track) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] No primary audio track found in input for ${url}`);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst generator = new AudioSampleSink(track).samples(0);\n\t\t\tconst decodedPlanes = [];\n\t\t\tlet totalFrames = 0;\n\t\t\tlet sampleRate = 48e3;\n\t\t\tlet numChannels = 1;\n\t\t\tmediaLogger.debug(`[AudioExtractor] Starting mediabunny generator loop for ${url}...`);\n\t\t\tfor await (const sample of generator) {\n\t\t\t\tsampleRate = sample.sampleRate;\n\t\t\t\tnumChannels = sample.numberOfChannels;\n\t\t\t\tconst sampleFrames = sample.numberOfFrames;\n\t\t\t\tif (decodedPlanes.length === 0) for (let c = 0; c < numChannels; c++) decodedPlanes.push([]);\n\t\t\t\tfor (let c = 0; c < numChannels; c++) {\n\t\t\t\t\tlet planeBuffer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\tsample.copyTo(planeBuffer, {\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({ planeIndex: c });\n\t\t\t\t\t\tif (sample.format === \"s16\" || sample.format === \"s16-planar\") {\n\t\t\t\t\t\t\tconst int16Buffer = new Int16Array(allocSize / 2);\n\t\t\t\t\t\t\tsample.copyTo(int16Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int16Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int16Buffer.length; i++) planeBuffer[i] = (int16Buffer[i] ?? 0) / 32768;\n\t\t\t\t\t\t} else if (sample.format === \"s32\" || sample.format === \"s32-planar\") {\n\t\t\t\t\t\t\tconst int32Buffer = new Int32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(int32Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int32Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int32Buffer.length; i++) planeBuffer[i] = (int32Buffer[i] ?? 0) / 2147483648;\n\t\t\t\t\t\t} else if (sample.format === \"u8\" || sample.format === \"u8-planar\") {\n\t\t\t\t\t\t\tconst u8Buffer = new Uint8Array(allocSize);\n\t\t\t\t\t\t\tsample.copyTo(u8Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(u8Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < u8Buffer.length; i++) planeBuffer[i] = ((u8Buffer[i] ?? 128) - 128) / 128;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(planeBuffer, { planeIndex: c });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdecodedPlanes[c].push(planeBuffer);\n\t\t\t\t}\n\t\t\t\ttotalFrames += sampleFrames;\n\t\t\t\tsample.close();\n\t\t\t}\n\t\t\tmediaLogger.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${totalFrames}`);\n\t\t\tif (totalFrames === 0 || decodedPlanes.length === 0) return null;\n\t\t\treturn {\n\t\t\t\tchannels: decodedPlanes.map((planes) => {\n\t\t\t\t\tconst merged = new Float32Array(totalFrames);\n\t\t\t\t\tlet offset = 0;\n\t\t\t\t\tfor (const plane of planes) {\n\t\t\t\t\t\tmerged.set(plane, offset);\n\t\t\t\t\t\toffset += plane.length;\n\t\t\t\t\t}\n\t\t\t\t\treturn merged;\n\t\t\t\t}),\n\t\t\t\tsampleRate\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tif (typeof process !== \"undefined\" && process.versions?.node) try {\n\t\t\t\tconst { execSync } = await import(\"node:child_process\");\n\t\t\t\tconst stdout = execSync(`ffmpeg -v error -i \"${url}\" -f f32le -ar 48000 -ac 2 pipe:1`, { maxBuffer: 100 * 1024 * 1024 });\n\t\t\t\tconst totalSamples = stdout.byteLength / 4;\n\t\t\t\tconst numFrames = totalSamples / 2;\n\t\t\t\tconst interleaved = new Float32Array(stdout.buffer, stdout.byteOffset, totalSamples);\n\t\t\t\tconst left = new Float32Array(numFrames);\n\t\t\t\tconst right = new Float32Array(numFrames);\n\t\t\t\tfor (let i = 0; i < numFrames; i++) {\n\t\t\t\t\tleft[i] = interleaved[i * 2];\n\t\t\t\t\tright[i] = interleaved[i * 2 + 1];\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tchannels: [left, right],\n\t\t\t\t\tsampleRate: 48e3\n\t\t\t\t};\n\t\t\t} catch (ffmpegErr) {\n\t\t\t\tmediaLogger.warn({ ffmpegErr }, `[AudioExtractor] ffmpeg fallback decode failed for ${url}`);\n\t\t\t}\n\t\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tif (inputAcquired) inputStore.release(url);\n\t\t}\n\t} catch (err) {\n\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\treturn null;\n\t}\n}\n/**\n* Resamples a PCM buffer using linear interpolation to target sample rate & speed.\n*/\nasync function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples) {\n\tconst output = new Float32Array(outputLength);\n\tconst factor = sourceSampleRate / targetSampleRate * speed;\n\tconst YIELD_INTERVAL = 1e5;\n\tfor (let i = 0; i < outputLength; i++) {\n\t\tif (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();\n\t\tconst srcIndex = trimOffsetSamples + i * factor;\n\t\tconst indexFloor = Math.floor(srcIndex);\n\t\tconst indexCeil = Math.ceil(srcIndex);\n\t\tif (indexFloor < 0) {\n\t\t\toutput[i] = 0;\n\t\t\tcontinue;\n\t\t}\n\t\tif (indexFloor >= inputChannel.length) break;\n\t\tconst weight = srcIndex - indexFloor;\n\t\tconst sampleFloor = inputChannel[indexFloor] ?? 0;\n\t\tconst val = sampleFloor + weight * ((indexCeil >= 0 && indexCeil < inputChannel.length ? inputChannel[indexCeil] ?? sampleFloor : sampleFloor) - sampleFloor);\n\t\toutput[i] = Number.isFinite(val) ? val : 0;\n\t}\n\treturn output;\n}\n/**\n* Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n* into a single unified stereo PCM stream (Float32Array channels).\n*/\nasync function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId) {\n\tmediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);\n\tawait waitForDelayRender();\n\tshaderStore.registerSignalsFromComposition(renderId, virtualMedia);\n\tconst durationMs = getActiveMediaMetadata(virtualMedia)?.durationMs || 1e3;\n\tconst totalDurationSec = durationMs / 1e3;\n\tconst totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);\n\tmediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);\n\tconst outputLeft = new Float32Array(totalTargetSamples);\n\tconst outputRight = new Float32Array(totalTargetSamples);\n\tconst mixedChannels = [outputLeft, outputRight];\n\tconst decodedCache = /* @__PURE__ */ new Map();\n\tasync function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {\n\t\tif (!node) return null;\n\t\tconst op = node.operation;\n\t\tif (!op) {\n\t\t\tconst durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\t\tconst durationFrames = Math.round(durationMs$1 / 1e3 * fps);\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;\n\t\t\tconst localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);\n\t\t\tif (localSamplesCount$1 <= 0) return null;\n\t\t\tconst localChannels$1 = [new Float32Array(localSamplesCount$1), new Float32Array(localSamplesCount$1)];\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst childStartSample = Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tfor (let c = 0; c < 2; c++) {\n\t\t\t\t\t\tconst dest = localChannels$1[c];\n\t\t\t\t\t\tconst src = childChannels[c];\n\t\t\t\t\t\tconst len = Math.min(src.length, dest.length - childStartSample);\n\t\t\t\t\t\tfor (let i = 0; i < len; i++) if (childStartSample + i >= 0) dest[childStartSample + i] += src[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn localChannels$1;\n\t\t}\n\t\tconst volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);\n\t\tconst speedMultiplier = inheritedSpeed;\n\t\tconst localClockFrames = inheritedClockFrames + (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\t\tconst segments = op.timeline?.segments || [];\n\t\tconst layer = op;\n\t\tconst layerTrimSec = layer.op === \"CompositorLayer\" ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? null) !== null ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? 0) / fps : Math.round((layer.trimStartSec ?? 0) * fps) / fps : 0;\n\t\tconst nodeDurationMs = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\tconst nodeDurationFrames = Math.round(nodeDurationMs / 1e3 * fps);\n\t\tconst nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;\n\t\tconst localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);\n\t\tif (localSamplesCount <= 0) return null;\n\t\tconst localLeft = new Float32Array(localSamplesCount);\n\t\tconst localRight = new Float32Array(localSamplesCount);\n\t\tconst localChannels = [localLeft, localRight];\n\t\tconst processSegment = async (seg, windowStartFrameOffset) => {\n\t\t\tconst segSeekSec = seg ? seg.startSec : 0;\n\t\t\tconst totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;\n\t\t\tconst totalClockFrames = localClockFrames + windowStartFrameOffset;\n\t\t\tlet segDurationFrames = 0;\n\t\t\tif (seg) segDurationFrames = Math.max(1, Math.round(((seg.endSec ?? 0) - seg.startSec) * fps));\n\t\t\telse segDurationFrames = nodeDurationFrames;\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? Math.min(inheritedDurationFrames, segDurationFrames) : segDurationFrames;\n\t\t\tconst segmentStartSample = Math.round(windowStartFrameOffset / fps * targetSampleRate);\n\t\t\tif (op.op === \"source\") {\n\t\t\t\tconst mediaType = getMediaType(node);\n\t\t\t\tconst params = computeRenderParams(node);\n\t\t\t\tif (params.sourceUrl && (mediaType === \"Audio\" || mediaType === \"Video\") && volume > 0) {\n\t\t\t\t\tconst finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);\n\t\t\t\t\tlet decoded = decodedCache.get(params.sourceUrl);\n\t\t\t\t\tif (decoded === void 0) {\n\t\t\t\t\t\tdecoded = await decodeAudioSource(params.sourceUrl);\n\t\t\t\t\t\tdecodedCache.set(params.sourceUrl, decoded);\n\t\t\t\t\t}\n\t\t\t\t\tif (decoded) {\n\t\t\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\t\t\tif (clipSamplesCount > 0 && segmentStartSample < localSamplesCount) {\n\t\t\t\t\t\t\tconst trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);\n\t\t\t\t\t\t\tconst srcLeft = decoded.channels[0];\n\t\t\t\t\t\t\tconst srcRight = decoded.channels.length > 1 ? decoded.channels[1] : decoded.channels[0];\n\t\t\t\t\t\t\tconst stretchedLeft = await resampleAndStretchPCM(srcLeft, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);\n\t\t\t\t\t\t\tconst stretchedRight = await resampleAndStretchPCM(srcRight, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);\n\t\t\t\t\t\t\tfor (let i = 0; i < clipSamplesCount; i++) {\n\t\t\t\t\t\t\t\tconst outIndex = segmentStartSample + i;\n\t\t\t\t\t\t\t\tlocalLeft[outIndex] += stretchedLeft[i] * volume;\n\t\t\t\t\t\t\t\tlocalRight[outIndex] += stretchedRight[i] * volume;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait yieldToMain();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children) for (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst destStartSample = segmentStartSample + Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tfor (let c = 0; c < 2; c++) {\n\t\t\t\t\t\tconst dest = localChannels[c];\n\t\t\t\t\t\tconst src = childChannels[c];\n\t\t\t\t\t\tconst len = Math.min(src.length, dest.length - destStartSample);\n\t\t\t\t\t\tfor (let i = 0; i < len; i++) if (destStartSample + i >= 0) dest[destStartSample + i] += src[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst pluginProcessor = audioRegistry.get(op.op);\n\t\t\tif (pluginProcessor) try {\n\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\tif (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(localChannels.map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {\n\t\t\t\t\tdevice,\n\t\t\t\t\tframe: totalClockFrames,\n\t\t\t\t\tfps,\n\t\t\t\t\trenderId,\n\t\t\t\t\telapsedMs: (totalClockFrames / fps + totalSeekSec - layerTrimSec) * 1e3,\n\t\t\t\t\tdurationMs: getActiveMediaMetadata(node)?.durationMs ?? void 0\n\t\t\t\t});\n\t\t\t} catch (pluginErr) {\n\t\t\t\tmediaLogger.error({ err: pluginErr }, `[AudioExtractor] Custom plugin for operation '${op.op}' failed`);\n\t\t\t}\n\t\t};\n\t\tif (segments.length > 0) {\n\t\t\tlet currentStart = 0;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\t\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\t\t\tawait processSegment(seg, currentStart);\n\t\t\t\tcurrentStart += durFrames;\n\t\t\t}\n\t\t} else await processSegment(null, 0);\n\t\treturn localChannels;\n\t}\n\tconst rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);\n\tif (rootChannels) for (let c = 0; c < 2; c++) {\n\t\tconst dest = mixedChannels[c];\n\t\tconst src = rootChannels[c];\n\t\tconst len = Math.min(src.length, dest.length);\n\t\tfor (let i = 0; i < len; i++) dest[i] = src[i];\n\t}\n\tdecodedCache.clear();\n\tlet mixPeak = 0;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = Math.abs(outputLeft[i] ?? 0);\n\t\tconst r = Math.abs(outputRight[i] ?? 0);\n\t\tif (l > mixPeak) mixPeak = l;\n\t\tif (r > mixPeak) mixPeak = r;\n\t}\n\tconst autoGain = mixPeak > .95 ? .92 / mixPeak : 1;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = (outputLeft[i] ?? 0) * autoGain;\n\t\tconst r = (outputRight[i] ?? 0) * autoGain;\n\t\toutputLeft[i] = Number.isFinite(l) ? Math.tanh(l) : 0;\n\t\toutputRight[i] = Number.isFinite(r) ? Math.tanh(r) : 0;\n\t}\n\treturn {\n\t\tchannels: mixedChannels,\n\t\tsampleRate: targetSampleRate\n\t};\n}\n\n//#endregion\nexport { calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { o as __toESM, t as __commonJSMin } from "./chunk-GMkBE123.mjs";
1
+ import { r as __toESM, t as __commonJSMin } from "./chunk-GBe2k3y8.mjs";
2
2
  import { At as gradientStopsToOklab, Bt as parseCssColor, It as limitGradientStops, Pt as isSignal, Vt as parseCssGradient } from "./dist-fjKpBYkc.mjs";
3
3
  import { ALL_FORMATS, AudioBufferSink, CanvasSink, FilePathSource, Input, UrlSource, VideoSampleSink } from "mediabunny";
4
4
  import fs from "node:fs";
@@ -30914,4 +30914,4 @@ if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThi
30914
30914
 
30915
30915
  //#endregion
30916
30916
  export { textureCache as $, TypewriterAnimatorSchema as $t, getHeadlessFontPath as A, signalRegistry as An, LineSpacingDynamicsSchema as At, measureMaxCaptionHeight as B, SpringPhysicsSchema as Bt, drawParagraphNode as C, generatePathSegments as Cn, DynamicStrokePropertiesSchema as Ct, ensureDevice as D, sampleAudioSpectrumScale as Dn, GlyphAnchorGroupingSchema as Dt, drawVideoNode as E, parseSvgPathToCubicBeziers as En, ExtendedGlyphPropertiesSchema as Et, jointMatrices as F, SelectorShapeSchema as Ft, parseOBJ as G, TextPathBuilder as Gt, parseColor as H, TextAnimatorBuilder as Ht, loadFBX as I, SelectorUnitsSchema as It, registerHeadlessFont as J, TextRangeSelectorSchema as Jt, poseNodes as K, TextPathOptionsSchema as Kt, loadModel3D as L, SignalRegistry as Lt, getRenderer2D as M, ParticleDissolveConfigSchema as Mt, initHeadlessWebGPU as N, SelectorBasedOnSchema as Nt, fitSpansToText as O, sampleCurveGeometry as On, GlyphAnchorPointSchema as Ot, inputStore as P, SelectorModeSchema as Pt, srtLoader as Q, TextWigglySelectorSchema as Qt, loadOBJ as R, SkewPropertiesSchema as Rt, drawLottieNode as S, generateArcLengthLUT as Sn, CubicBezierSegmentSchema as St, drawSvgNode as T, getShuffledOrder as Tn, ExpressionSelectorSchema as Tt, parseFBX as U, TextCursorConfigSchema as Ut, mediaDecoderCache as V, TextAnchorConfigSchema as Vt, parseMTL as W, TextCursorStyleSchema as Wt, shaderStore as X, TextSelectorSchema as Xt, resolveTextSpans as Y, TextScrambleConfigSchema as Yt, spansText as Z, TextSignalSelectorSchema as Zt, clearAllVideoCache as _, evaluateSelectorCombination as _n, AnchorPresetSchema as _t, GlassPipeline as a, buildPathLUT as an, LIGHT_UNIFORM_SIZE_BYTES as at, drawGifNode as b, evaluateTypewriterState as bn, AudioSpectrumTypographySchema as bt, Renderer2D as c, computeLineLeadingDisplacement as cn, Matrix4Math as ct, ScreenSpaceRelightPipeline as d, distanceToCurveParameter as dn, parseColorToRgb as dt, TypingCadenceSchema as en, GetFontAssetUrl as et, ShadowPipeline as f, ellipseToCubicBeziers as fn, resolveEnvironment as ft, WebGPUAudioProcessor as g, evaluateMarqueeOffset as gn, AnchorGroupingSchema as gt, SlugPipeline as h, evaluateExpressionSelector as hn, AdvancedTextAnimatorSchema as ht, EffectPipeline as i, VolumetricFormationModeSchema as in, ENVIRONMENT_PRESETS as it, getPrimitiveGeometry as j, waveToCubicBeziers as jn, LongShadowConfigSchema as jt, generateExtrudedTextGeometry as k, samplePathChainGeometry as kn, KineticMarqueeConfigSchema as kt, Renderer3D as l, computeRangeSelectorWeight as ln, Path3D as lt, SlugGeometry as m, evaluateCubicBezierDerivative as mn, AdvancedTextAnimatorBuilder as mt, AudioLatentTrackCache as n, Vec2Schema as nn, resolveMediaSourceUrl as nt, MotionBlurPipeline as o, buildWGSLSignalFn as on, Light3D as ot, SlugFontCache as p, evaluateCubicBezier as pn, AETextAnimatorSchema as pt, probeVideoSize as q, TextPathSourceSchema as qt, AudioMeshDeformPipeline as r, VolumetricFormationConfigSchema as rn, Camera3D as rt, NodeSurfaceProvider as s, computeAnchorPivotOffset as sn, MAX_LIGHTS as st, AudioLatentEngine as t, VariableFontAxesSchema as tn, getEnv as tt, SSAOPipeline as u, deterministicWigglyNoise as un, Vector3Math as ut, colorMatrixWgsl as v, evaluateSkewMatrix as vn, AnimatableGlyphPropsSchema as vt, drawSignalNode as w, getScramblePool as wn, EnhancedTextNodeSchema as wt, drawImageNode as x, evaluateVolumetricFormation as xn, ChromaticGlitchConfigSchema as xt, drawCaptionNode as y, evaluateSpringProgress as yn, AudioSignalComputePipeline as yt, lutStore as z, Spatial3DPropertiesSchema as zt };
30917
- //# sourceMappingURL=dist-Bun_TUvZ.mjs.map
30917
+ //# sourceMappingURL=dist-DkuDAIrG.mjs.map