framefields 2.9.2 → 2.10.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/NOTICE.md +18 -0
  2. package/README.md +10 -7
  3. package/dist/audio/index.d.mts +5 -4
  4. package/dist/audio/index.mjs +13 -13
  5. package/dist/{audio-Ccpl9mjV.d.mts → audio-1X5qNNmk.d.mts} +4 -3
  6. package/dist/audio-1X5qNNmk.d.mts.map +1 -0
  7. package/dist/{audio-a0MFkK6J.mjs → audio-KHBadECb.mjs} +1 -1
  8. package/dist/{audio-a0MFkK6J.mjs.map → audio-KHBadECb.mjs.map} +1 -1
  9. package/dist/{audio-BfQg37MW.mjs → audio-YpBRdI7r.mjs} +4 -4
  10. package/dist/{audio-BfQg37MW.mjs.map → audio-YpBRdI7r.mjs.map} +1 -1
  11. package/dist/{check-result-C3jlgV2i.mjs → check-result-Culfu7Nx.mjs} +1 -1
  12. package/dist/{check-result-C3jlgV2i.mjs.map → check-result-Culfu7Nx.mjs.map} +1 -1
  13. package/dist/cli/check-worker.mjs +50 -50
  14. package/dist/cli.mjs +179 -3
  15. package/dist/cli.mjs.map +1 -1
  16. package/dist/cloud/index.d.mts +118 -0
  17. package/dist/cloud/index.d.mts.map +1 -0
  18. package/dist/cloud/index.mjs +3 -0
  19. package/dist/cloud-xcfV4J03.mjs +233 -0
  20. package/dist/cloud-xcfV4J03.mjs.map +1 -0
  21. package/dist/components/index.d.mts +14 -11
  22. package/dist/components/index.mjs +47 -47
  23. package/dist/dist-2_lT3Dwc.mjs +1434 -0
  24. package/dist/dist-2_lT3Dwc.mjs.map +1 -0
  25. package/dist/{dist-Buaaj-Ul.mjs → dist-BIE8fvlv.mjs} +1 -1
  26. package/dist/{dist-Buaaj-Ul.mjs.map → dist-BIE8fvlv.mjs.map} +1 -1
  27. package/dist/{dist-BlIrsfcn.mjs → dist-Bf2_efYP.mjs} +1 -1
  28. package/dist/{dist-BlIrsfcn.mjs.map → dist-Bf2_efYP.mjs.map} +1 -1
  29. package/dist/dist-BwtxciN4.mjs +3 -0
  30. package/dist/{dist-C1cCW7Bt.mjs → dist-C4Vxgm0Q.mjs} +275 -78
  31. package/dist/dist-C4Vxgm0Q.mjs.map +1 -0
  32. package/dist/{dist-C8Xq3zgx.mjs → dist-Cu1fZ9Uy.mjs} +4 -4
  33. package/dist/{dist-C8Xq3zgx.mjs.map → dist-Cu1fZ9Uy.mjs.map} +1 -1
  34. package/dist/{dist-DVMepKaO.mjs → dist-CySGkG54.mjs} +2 -2
  35. package/dist/dist-CySGkG54.mjs.map +1 -0
  36. package/dist/effects/index.d.mts +6 -4
  37. package/dist/effects/index.mjs +36 -36
  38. package/dist/{effects-CemgqEPv.mjs → effects-DiWYouOK.mjs} +3 -3
  39. package/dist/{effects-CemgqEPv.mjs.map → effects-DiWYouOK.mjs.map} +1 -1
  40. package/dist/fonts/index.d.mts +1 -1
  41. package/dist/fonts/index.mjs +3 -3
  42. package/dist/{fonts-BW0pPcvJ.mjs → fonts-BnV-GB1o.mjs} +2 -2
  43. package/dist/{fonts-BW0pPcvJ.mjs.map → fonts-BnV-GB1o.mjs.map} +1 -1
  44. package/dist/{gpu-CMaa63nz.mjs → gpu-Bw35AMwY.mjs} +11 -3
  45. package/dist/gpu-Bw35AMwY.mjs.map +1 -0
  46. package/dist/{index-D5UDyVMb.d.mts → index-B7WqFBZA.d.mts} +35 -2401
  47. package/dist/index-B7WqFBZA.d.mts.map +1 -0
  48. package/dist/{index-BfDFmIBE.d.mts → index-BW0Q1ygn.d.mts} +1 -1
  49. package/dist/{index-BfDFmIBE.d.mts.map → index-BW0Q1ygn.d.mts.map} +1 -1
  50. package/dist/{index-CQ-bbZk3.d.mts → index-Bbv0VtxJ.d.mts} +7 -1165
  51. package/dist/index-Bbv0VtxJ.d.mts.map +1 -0
  52. package/dist/{index-CFoAmh7q.d.mts → index-CDQrdZ0J.d.mts} +3 -3
  53. package/dist/{index-CFoAmh7q.d.mts.map → index-CDQrdZ0J.d.mts.map} +1 -1
  54. package/dist/index-COYNQ_mf.d.mts +2402 -0
  55. package/dist/index-COYNQ_mf.d.mts.map +1 -0
  56. package/dist/{index-BIjMAW1h.d.mts → index-CdCrae-I.d.mts} +2 -2
  57. package/dist/{index-BIjMAW1h.d.mts.map → index-CdCrae-I.d.mts.map} +1 -1
  58. package/dist/index-DQa7mhzq.d.mts +330 -0
  59. package/dist/index-DQa7mhzq.d.mts.map +1 -0
  60. package/dist/{index-Bnh42ouE.d.mts → index-Dyt4yS-x.d.mts} +376 -287
  61. package/dist/index-Dyt4yS-x.d.mts.map +1 -0
  62. package/dist/index-WwuuX8ZJ.d.mts +1165 -0
  63. package/dist/index-WwuuX8ZJ.d.mts.map +1 -0
  64. package/dist/{index-CJL0JAU8.d.mts → index-gOVtTm-P.d.mts} +125 -3
  65. package/dist/index-gOVtTm-P.d.mts.map +1 -0
  66. package/dist/{index-7Z9_a_iB.d.mts → index-h7m8QgcL.d.mts} +3 -3
  67. package/dist/{index-7Z9_a_iB.d.mts.map → index-h7m8QgcL.d.mts.map} +1 -1
  68. package/dist/index.d.mts +16 -13
  69. package/dist/index.mjs +59 -58
  70. package/dist/preview/index.d.mts +4 -3
  71. package/dist/preview/index.mjs +12 -12
  72. package/dist/{preview-DvP8AZuV.mjs → preview-BW7ilNWk.mjs} +3 -3
  73. package/dist/{preview-DvP8AZuV.mjs.map → preview-BW7ilNWk.mjs.map} +1 -1
  74. package/dist/preview-engine/audio.mjs +1 -1
  75. package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
  76. package/dist/preview-engine/{chunk-5AWAOMBR.mjs → chunk-4BWBX2HM.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-BEYA25UZ.mjs → chunk-4DSOZ5QG.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-VVE2QHVG.mjs → chunk-4FACCLLE.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-DMSZXG56.mjs → chunk-4N25ZU43.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-FTCEG3SF.mjs → chunk-4RLKHFV6.mjs} +1 -1
  81. package/dist/preview-engine/chunk-4TPXZNVR.mjs +483 -0
  82. package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
  83. package/dist/preview-engine/{chunk-CC4NNNIY.mjs → chunk-57WXGYEV.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-C4M3B2Q2.mjs → chunk-5SLBE2FX.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-PM2W4VLT.mjs → chunk-5Y7SO37Q.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
  87. package/dist/preview-engine/{chunk-Y5K5LVOR.mjs → chunk-6BE3IL7L.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-GA4HNR44.mjs → chunk-6LBFSGCI.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-IB6GZJOL.mjs → chunk-6O55UROD.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-SPJPM43P.mjs → chunk-6SLCECHG.mjs} +1 -1
  91. package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
  92. package/dist/preview-engine/{chunk-QCSVT73T.mjs → chunk-7A3BNAWY.mjs} +84 -25
  93. package/dist/preview-engine/{chunk-CN2VLYLB.mjs → chunk-7HW7GA76.mjs} +1 -1
  94. package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
  95. package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
  96. package/dist/preview-engine/{chunk-LVYVXVZO.mjs → chunk-C2GX5L5S.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-4WYM72ZN.mjs → chunk-CHXR5XZK.mjs} +1 -1
  98. package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
  99. package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-RJIAES3X.mjs → chunk-EKEKYGXE.mjs} +1 -1
  101. package/dist/preview-engine/{chunk-TNJEZKXM.mjs → chunk-FH72KTSM.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-P5FKRQFU.mjs → chunk-FW2UDDUT.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-S2ABWY5G.mjs → chunk-GTMZOMAN.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-6R3UJBL5.mjs → chunk-HGWT3RVQ.mjs} +10 -10
  105. package/dist/preview-engine/{chunk-34RJ7GAS.mjs → chunk-HKYENGC5.mjs} +1 -1
  106. package/dist/preview-engine/{chunk-7U34VKNO.mjs → chunk-HO7FXISJ.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-73CNXGAK.mjs → chunk-HPQDCC4S.mjs} +1 -1
  108. package/dist/preview-engine/{chunk-ZY47XIRK.mjs → chunk-IVAA5X5H.mjs} +1 -1
  109. package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
  110. package/dist/preview-engine/{chunk-UXYM2G6J.mjs → chunk-JFBSNFN6.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-GIICZZQI.mjs → chunk-JSKEVYKD.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-EJJITH6U.mjs → chunk-K3TJJXVC.mjs} +1 -1
  113. package/dist/preview-engine/{chunk-GZWA5QJS.mjs → chunk-L2NTIWW5.mjs} +1 -1
  114. package/dist/preview-engine/{chunk-VN36PRVD.mjs → chunk-LBP7E7SJ.mjs} +1 -1
  115. package/dist/preview-engine/{chunk-34DL53D5.mjs → chunk-LTR5FXGU.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-GRJJVSOV.mjs → chunk-ML7WO27M.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
  118. package/dist/preview-engine/{chunk-OH5W5EL6.mjs → chunk-NTTEGJD6.mjs} +1 -1
  119. package/dist/preview-engine/{chunk-2B722GXM.mjs → chunk-OD4CSXZL.mjs} +15 -15
  120. package/dist/preview-engine/{chunk-AHQCDTD6.mjs → chunk-OOUDE4XL.mjs} +1 -1
  121. package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
  122. package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
  123. package/dist/preview-engine/{chunk-ZJ5SWTCW.mjs → chunk-RAW2I27S.mjs} +1 -1
  124. package/dist/preview-engine/{chunk-BJV2LBII.mjs → chunk-RMHL4XZ3.mjs} +1 -1
  125. package/dist/preview-engine/chunk-T6L3DO3H.mjs +1 -0
  126. package/dist/preview-engine/{chunk-2PYTDN2C.mjs → chunk-V5HU6NIW.mjs} +1 -1
  127. package/dist/preview-engine/{chunk-DVZITDQS.mjs → chunk-VRJBOFFY.mjs} +1 -1
  128. package/dist/preview-engine/{chunk-SF37HXAH.mjs → chunk-WVIDORLK.mjs} +1 -1
  129. package/dist/preview-engine/{chunk-35HMRW4I.mjs → chunk-XCQ7KN4S.mjs} +1 -1
  130. package/dist/preview-engine/{chunk-KHJZMTOS.mjs → chunk-Y2SWIWIU.mjs} +1 -1
  131. package/dist/preview-engine/{chunk-H7BSN7V7.mjs → chunk-YS3ROS25.mjs} +1 -1
  132. package/dist/preview-engine/{chunk-2DWY7UBV.mjs → chunk-YXCTOCQ2.mjs} +1 -1
  133. package/dist/preview-engine/{chunk-BVDWS3D2.mjs → chunk-ZA5LWHRM.mjs} +1 -1
  134. package/dist/preview-engine/chunk-ZGEKF34E.mjs +1974 -0
  135. package/dist/preview-engine/components.mjs +1 -1
  136. package/dist/preview-engine/effects.mjs +1 -1
  137. package/dist/preview-engine/fonts.mjs +1 -1
  138. package/dist/preview-engine/framefields.mjs +1 -1
  139. package/dist/preview-engine/player.mjs +1 -1
  140. package/dist/preview-engine/renderers-33PIDDZC.mjs +1 -0
  141. package/dist/preview-engine/{renderers-ZACSHGNZ.mjs → renderers-36P2TKPC.mjs} +1 -1
  142. package/dist/preview-engine/{renderers-TSBV4KPE.mjs → renderers-37Y5LR2S.mjs} +1 -1
  143. package/dist/preview-engine/renderers-3AZ3HY53.mjs +1 -0
  144. package/dist/preview-engine/renderers-3FGKW52B.mjs +1 -0
  145. package/dist/preview-engine/renderers-4A2FBS3Y.mjs +1 -0
  146. package/dist/preview-engine/{renderers-5TO2SXFR.mjs → renderers-4MW4NW6O.mjs} +1 -1
  147. package/dist/preview-engine/{renderers-ENMY4DKF.mjs → renderers-4SNAK77B.mjs} +1 -1
  148. package/dist/preview-engine/{renderers-Y22VSOXF.mjs → renderers-4WFRXGMR.mjs} +1 -1
  149. package/dist/preview-engine/{renderers-5KANN7XF.mjs → renderers-5K3BSBI6.mjs} +1 -1
  150. package/dist/preview-engine/renderers-65DU2F5W.mjs +1 -0
  151. package/dist/preview-engine/renderers-6CTPYQR6.mjs +1 -0
  152. package/dist/preview-engine/{renderers-NUAI4TO5.mjs → renderers-6RRWA33X.mjs} +1 -1
  153. package/dist/preview-engine/{renderers-4F7WLQD5.mjs → renderers-6RYIPQ7W.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-U4M7ZCV4.mjs → renderers-AUYCQNSS.mjs} +1 -1
  155. package/dist/preview-engine/renderers-AWODRI3B.mjs +1 -0
  156. package/dist/preview-engine/renderers-BO6HHGMZ.mjs +1 -0
  157. package/dist/preview-engine/renderers-BSXYDEV7.mjs +1 -0
  158. package/dist/preview-engine/{renderers-FSI5KNGZ.mjs → renderers-CMBI4JOC.mjs} +1 -1
  159. package/dist/preview-engine/{renderers-6Z7DWAPH.mjs → renderers-CQIPHCIW.mjs} +1 -1
  160. package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
  161. package/dist/preview-engine/renderers-ECW2CGNU.mjs +1 -0
  162. package/dist/preview-engine/renderers-EEX22FUO.mjs +1 -0
  163. package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
  164. package/dist/preview-engine/{renderers-NCGH2WWJ.mjs → renderers-G2FL3IFD.mjs} +1 -1
  165. package/dist/preview-engine/{renderers-5XRKZHVT.mjs → renderers-GCQKGJ7W.mjs} +1 -1
  166. package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
  167. package/dist/preview-engine/renderers-HZBXLDKG.mjs +1 -0
  168. package/dist/preview-engine/renderers-IOXNQPQK.mjs +1 -0
  169. package/dist/preview-engine/renderers-IR44E4ZZ.mjs +1 -0
  170. package/dist/preview-engine/{renderers-TGJSOKDY.mjs → renderers-JALV3B3A.mjs} +1 -1
  171. package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
  172. package/dist/preview-engine/{renderers-CUMVIVHI.mjs → renderers-JZYHX4XI.mjs} +1 -1
  173. package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +1 -0
  174. package/dist/preview-engine/renderers-K37YL3Z7.mjs +1 -0
  175. package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
  176. package/dist/preview-engine/renderers-KUJQV3K6.mjs +1 -0
  177. package/dist/preview-engine/renderers-KXVKLSSX.mjs +1 -0
  178. package/dist/preview-engine/{renderers-WEYAHOBK.mjs → renderers-LF6U4MR5.mjs} +1 -1
  179. package/dist/preview-engine/renderers-N4RVFX3G.mjs +1 -0
  180. package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
  181. package/dist/preview-engine/renderers-NZWWEAYA.mjs +1 -0
  182. package/dist/preview-engine/{renderers-5UZ3YFBD.mjs → renderers-OPRXVIGT.mjs} +1 -1
  183. package/dist/preview-engine/{renderers-7C5RA3R5.mjs → renderers-OZKPOUMW.mjs} +1 -1
  184. package/dist/preview-engine/renderers-P4JJEDZB.mjs +1 -0
  185. package/dist/preview-engine/{renderers-V3AQO7AR.mjs → renderers-PGZDFDSC.mjs} +1 -1
  186. package/dist/preview-engine/renderers-Q4572F5C.mjs +1 -0
  187. package/dist/preview-engine/{renderers-PIIEUKFE.mjs → renderers-Q5YCUPYE.mjs} +1 -1
  188. package/dist/preview-engine/renderers-QAX2QWWQ.mjs +1 -0
  189. package/dist/preview-engine/{renderers-SEIAUKJF.mjs → renderers-RQ3JZE3L.mjs} +1 -1
  190. package/dist/preview-engine/renderers-SRFIEVWL.mjs +1 -0
  191. package/dist/preview-engine/renderers-SYC6WFTM.mjs +1 -0
  192. package/dist/preview-engine/{renderers-QA2HKUJJ.mjs → renderers-TKHQRERE.mjs} +1 -1
  193. package/dist/preview-engine/{renderers-A24KZK2Q.mjs → renderers-U4S577ON.mjs} +1 -1
  194. package/dist/preview-engine/{renderers-KC6ZSKCW.mjs → renderers-UBIFSF37.mjs} +1 -1
  195. package/dist/preview-engine/renderers-UH4WN3QN.mjs +1 -0
  196. package/dist/preview-engine/renderers-V4FFCAS7.mjs +1 -0
  197. package/dist/preview-engine/renderers-VGDEOZUU.mjs +1 -0
  198. package/dist/preview-engine/renderers-VJJKBX5K.mjs +1 -0
  199. package/dist/preview-engine/renderers-VJOKVDYW.mjs +1 -0
  200. package/dist/preview-engine/renderers-VUUWZUOH.mjs +1 -0
  201. package/dist/preview-engine/renderers-WG756VF3.mjs +228 -0
  202. package/dist/preview-engine/renderers-WOP5GOZP.mjs +1 -0
  203. package/dist/preview-engine/{renderers-T74CQCEN.mjs → renderers-XZ3XDQIN.mjs} +1 -1
  204. package/dist/preview-engine/renderers-Y4MGN2FR.mjs +1 -0
  205. package/dist/preview-engine/renderers-YAMYH7IK.mjs +1 -0
  206. package/dist/preview-engine/{renderers-MD3PRFZL.mjs → renderers-YJ4PJEPG.mjs} +1 -1
  207. package/dist/preview-engine/renderers-ZNLSAWW3.mjs +1 -0
  208. package/dist/preview-engine/{renderers-L6YDX6GS.mjs → renderers-ZQVKE5AO.mjs} +1 -1
  209. package/dist/preview-engine/signals.mjs +1 -1
  210. package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-GPF7RIBU.mjs} +1 -1
  211. package/dist/{program-CKpKkllV.mjs → program-BUjUTdxq.mjs} +44 -17
  212. package/dist/program-BUjUTdxq.mjs.map +1 -0
  213. package/dist/registry/focus-zoom.json +9 -2
  214. package/dist/renderer/index.d.mts +4 -3
  215. package/dist/renderer/index.mjs +4 -4
  216. package/dist/{renderer-BF0hx_iJ.mjs → renderer--f8JHHyT.mjs} +5 -5
  217. package/dist/{renderer-BF0hx_iJ.mjs.map → renderer--f8JHHyT.mjs.map} +1 -1
  218. package/dist/{renderer-CHr7MiYW.mjs → renderer-1KgHl_ls.mjs} +5 -5
  219. package/dist/{renderer-CHr7MiYW.mjs.map → renderer-1KgHl_ls.mjs.map} +1 -1
  220. package/dist/renderer-6sNr6ZRJ.mjs +6 -0
  221. package/dist/{renderer-BgO6BA_z.mjs → renderer-7c0ecb-L.mjs} +74 -21
  222. package/dist/renderer-7c0ecb-L.mjs.map +1 -0
  223. package/dist/{renderer-D61B9bXF.mjs → renderer-7w9PZmWJ.mjs} +4 -4
  224. package/dist/{renderer-D61B9bXF.mjs.map → renderer-7w9PZmWJ.mjs.map} +1 -1
  225. package/dist/{renderer-DVCJjVn7.mjs → renderer-B3WHDQeB.mjs} +5 -5
  226. package/dist/{renderer-DVCJjVn7.mjs.map → renderer-B3WHDQeB.mjs.map} +1 -1
  227. package/dist/{renderer-C7eFJf0_.mjs → renderer-B84T5I98.mjs} +5 -5
  228. package/dist/{renderer-C7eFJf0_.mjs.map → renderer-B84T5I98.mjs.map} +1 -1
  229. package/dist/{renderer-EaLUCobW.mjs → renderer-B8i4d1Rc.mjs} +4 -4
  230. package/dist/{renderer-EaLUCobW.mjs.map → renderer-B8i4d1Rc.mjs.map} +1 -1
  231. package/dist/renderer-BDHGxD6p.mjs +5 -0
  232. package/dist/{renderer-WCZu2Rf5.mjs → renderer-BFmVDdVs.mjs} +4 -4
  233. package/dist/{renderer-WCZu2Rf5.mjs.map → renderer-BFmVDdVs.mjs.map} +1 -1
  234. package/dist/{renderer-bAKUeHF3.mjs → renderer-BG_cnGbF.mjs} +5 -5
  235. package/dist/{renderer-bAKUeHF3.mjs.map → renderer-BG_cnGbF.mjs.map} +1 -1
  236. package/dist/{renderer-BPWDsufX.mjs → renderer-BIToh0CA.mjs} +3 -3
  237. package/dist/{renderer-BPWDsufX.mjs.map → renderer-BIToh0CA.mjs.map} +1 -1
  238. package/dist/{renderer-mNSyac1V.mjs → renderer-BOg8i8eF.mjs} +11 -2
  239. package/dist/{renderer-mNSyac1V.mjs.map → renderer-BOg8i8eF.mjs.map} +1 -1
  240. package/dist/{renderer-BlPqTEii.mjs → renderer-BSW4CGZF.mjs} +4 -4
  241. package/dist/{renderer-BlPqTEii.mjs.map → renderer-BSW4CGZF.mjs.map} +1 -1
  242. package/dist/{renderer-D7Al3_-5.mjs → renderer-BT4im6c0.mjs} +5 -5
  243. package/dist/{renderer-D7Al3_-5.mjs.map → renderer-BT4im6c0.mjs.map} +1 -1
  244. package/dist/renderer-BT9dvpk2.mjs +5 -0
  245. package/dist/{renderer-BpIF1QIE.mjs → renderer-BTLZBD63.mjs} +5 -5
  246. package/dist/{renderer-BpIF1QIE.mjs.map → renderer-BTLZBD63.mjs.map} +1 -1
  247. package/dist/{renderer-CcvvoKiZ.mjs → renderer-Bb_HHUQ0.mjs} +5 -5
  248. package/dist/{renderer-CcvvoKiZ.mjs.map → renderer-Bb_HHUQ0.mjs.map} +1 -1
  249. package/dist/renderer-Bd-NuU3M.mjs +3 -0
  250. package/dist/{renderer-sCovEubT.mjs → renderer-BdRwbLLV.mjs} +4 -4
  251. package/dist/{renderer-sCovEubT.mjs.map → renderer-BdRwbLLV.mjs.map} +1 -1
  252. package/dist/{renderer-DNQvOrkY.mjs → renderer-BeJoW-nG.mjs} +5 -5
  253. package/dist/{renderer-DNQvOrkY.mjs.map → renderer-BeJoW-nG.mjs.map} +1 -1
  254. package/dist/renderer-BfaRh0qy.mjs +5 -0
  255. package/dist/{renderer-B522Dkdk.mjs → renderer-BhNZn2DU.mjs} +4 -4
  256. package/dist/{renderer-B522Dkdk.mjs.map → renderer-BhNZn2DU.mjs.map} +1 -1
  257. package/dist/{renderer-D47AEJE_.mjs → renderer-Bif8bwCq.mjs} +3 -3
  258. package/dist/{renderer-D47AEJE_.mjs.map → renderer-Bif8bwCq.mjs.map} +1 -1
  259. package/dist/renderer-BlwXKV7Y.mjs +5 -0
  260. package/dist/{renderer-CwFqqpWY.mjs → renderer-Bm91Xv6l.mjs} +4 -4
  261. package/dist/{renderer-CwFqqpWY.mjs.map → renderer-Bm91Xv6l.mjs.map} +1 -1
  262. package/dist/{renderer-SSBL4M1o.mjs → renderer-BnN3JH9u.mjs} +20 -7
  263. package/dist/renderer-BnN3JH9u.mjs.map +1 -0
  264. package/dist/{renderer-8QIwXh7O.mjs → renderer-Bo5GwErU.mjs} +6 -6
  265. package/dist/{renderer-8QIwXh7O.mjs.map → renderer-Bo5GwErU.mjs.map} +1 -1
  266. package/dist/{renderer-DF-yvIrV.mjs → renderer-Br_aJ_b7.mjs} +4 -4
  267. package/dist/{renderer-DF-yvIrV.mjs.map → renderer-Br_aJ_b7.mjs.map} +1 -1
  268. package/dist/{renderer-DmkWrWAk.mjs → renderer-BvRaVByi.mjs} +3 -3
  269. package/dist/{renderer-DmkWrWAk.mjs.map → renderer-BvRaVByi.mjs.map} +1 -1
  270. package/dist/renderer-C40yZK3x.mjs +5 -0
  271. package/dist/renderer-C5MjQ7L8.mjs +5 -0
  272. package/dist/renderer-C8LjKYnS.mjs +5 -0
  273. package/dist/renderer-C9q9H_qa.mjs +5 -0
  274. package/dist/renderer-CC4fhNup.mjs +3 -0
  275. package/dist/{renderer-GBmWjBvy.mjs → renderer-CDfCaqV4.mjs} +3 -3
  276. package/dist/{renderer-GBmWjBvy.mjs.map → renderer-CDfCaqV4.mjs.map} +1 -1
  277. package/dist/renderer-CF9ta9Rm.mjs +5 -0
  278. package/dist/{renderer-DkRSZg5g.mjs → renderer-CKlNHDKI.mjs} +5 -5
  279. package/dist/{renderer-DkRSZg5g.mjs.map → renderer-CKlNHDKI.mjs.map} +1 -1
  280. package/dist/{renderer-CYC32bDW.mjs → renderer-CLRrcT_3.mjs} +5 -5
  281. package/dist/{renderer-CYC32bDW.mjs.map → renderer-CLRrcT_3.mjs.map} +1 -1
  282. package/dist/{renderer-DpruWmZU.mjs → renderer-CO1PwItH.mjs} +4 -4
  283. package/dist/{renderer-DpruWmZU.mjs.map → renderer-CO1PwItH.mjs.map} +1 -1
  284. package/dist/renderer-CO205Gr9.mjs +5 -0
  285. package/dist/renderer-CSm8UXLP.mjs +5 -0
  286. package/dist/renderer-CSy8HRtF.mjs +5 -0
  287. package/dist/{renderer-pHWEHDnM.mjs → renderer-CTSvHf6g.mjs} +5 -5
  288. package/dist/{renderer-pHWEHDnM.mjs.map → renderer-CTSvHf6g.mjs.map} +1 -1
  289. package/dist/{renderer-hSCfnvaK.mjs → renderer-CWmlfdLb.mjs} +5 -5
  290. package/dist/{renderer-hSCfnvaK.mjs.map → renderer-CWmlfdLb.mjs.map} +1 -1
  291. package/dist/{renderer--fkmiVjl.mjs → renderer-CanNjQuL.mjs} +4 -4
  292. package/dist/{renderer--fkmiVjl.mjs.map → renderer-CanNjQuL.mjs.map} +1 -1
  293. package/dist/renderer-CdNRWDsA.mjs +5 -0
  294. package/dist/{renderer-DFzI3yI_.mjs → renderer-CeNAgCE2.mjs} +3 -3
  295. package/dist/{renderer-DFzI3yI_.mjs.map → renderer-CeNAgCE2.mjs.map} +1 -1
  296. package/dist/{renderer-BdyopiLC.mjs → renderer-Ch1qZ2PT.mjs} +4 -4
  297. package/dist/{renderer-BdyopiLC.mjs.map → renderer-Ch1qZ2PT.mjs.map} +1 -1
  298. package/dist/{renderer-CQvmbRQ5.mjs → renderer-Chfo4G9t.mjs} +5 -5
  299. package/dist/{renderer-CQvmbRQ5.mjs.map → renderer-Chfo4G9t.mjs.map} +1 -1
  300. package/dist/{renderer-DEmYyaqj.mjs → renderer-Ck-NLzz0.mjs} +4 -4
  301. package/dist/{renderer-DEmYyaqj.mjs.map → renderer-Ck-NLzz0.mjs.map} +1 -1
  302. package/dist/renderer-CkAjiGRB.mjs +5 -0
  303. package/dist/renderer-CmryuPBm.mjs +5 -0
  304. package/dist/renderer-CnEwne4L.mjs +5 -0
  305. package/dist/{renderer-BlvGcyAN.mjs → renderer-CsRuEpR2.mjs} +3 -3
  306. package/dist/{renderer-BlvGcyAN.mjs.map → renderer-CsRuEpR2.mjs.map} +1 -1
  307. package/dist/{renderer-SWr3vbrV.mjs → renderer-CtulmkqT.mjs} +3 -3
  308. package/dist/{renderer-SWr3vbrV.mjs.map → renderer-CtulmkqT.mjs.map} +1 -1
  309. package/dist/{renderer-DTqDy2m9.mjs → renderer-CwAuWLWm.mjs} +3 -3
  310. package/dist/{renderer-DTqDy2m9.mjs.map → renderer-CwAuWLWm.mjs.map} +1 -1
  311. package/dist/{renderer-B2jjxsjO.mjs → renderer-CxabOSkk.mjs} +4 -4
  312. package/dist/{renderer-B2jjxsjO.mjs.map → renderer-CxabOSkk.mjs.map} +1 -1
  313. package/dist/{renderer-DPAD6fL1.mjs → renderer-CybBR8AL.mjs} +425 -115
  314. package/dist/renderer-CybBR8AL.mjs.map +1 -0
  315. package/dist/{renderer-DO-KbpYZ.mjs → renderer-D1tDMuD0.mjs} +5 -5
  316. package/dist/{renderer-DO-KbpYZ.mjs.map → renderer-D1tDMuD0.mjs.map} +1 -1
  317. package/dist/renderer-D4QDoqOG.mjs +5 -0
  318. package/dist/{renderer-Bfk6A7UO.mjs → renderer-D7DlNOVi.mjs} +5 -5
  319. package/dist/{renderer-Bfk6A7UO.mjs.map → renderer-D7DlNOVi.mjs.map} +1 -1
  320. package/dist/renderer-D7cS2a8z.mjs +5 -0
  321. package/dist/{renderer-g_vrrAQU.mjs → renderer-D7lApyWZ.mjs} +3 -3
  322. package/dist/{renderer-g_vrrAQU.mjs.map → renderer-D7lApyWZ.mjs.map} +1 -1
  323. package/dist/renderer-D85CNC-b.mjs +5 -0
  324. package/dist/{renderer-DqvoMLca.mjs → renderer-DAfCcnCz.mjs} +5 -5
  325. package/dist/{renderer-DqvoMLca.mjs.map → renderer-DAfCcnCz.mjs.map} +1 -1
  326. package/dist/{renderer-D7r6onRT.mjs → renderer-DAug14gu.mjs} +4 -4
  327. package/dist/{renderer-D7r6onRT.mjs.map → renderer-DAug14gu.mjs.map} +1 -1
  328. package/dist/{renderer-DMvmf3T2.mjs → renderer-DBfx6QX1.mjs} +3 -3
  329. package/dist/renderer-DC9IoJNz.mjs +5 -0
  330. package/dist/renderer-DCMoBppL.mjs +1062 -0
  331. package/dist/renderer-DCMoBppL.mjs.map +1 -0
  332. package/dist/renderer-DIDh0gFm.mjs +5 -0
  333. package/dist/{renderer-DKgPVOLL.d.mts → renderer-DJuVX3c5.d.mts} +2 -2
  334. package/dist/{renderer-DKgPVOLL.d.mts.map → renderer-DJuVX3c5.d.mts.map} +1 -1
  335. package/dist/{renderer-sYSkIUfo.mjs → renderer-DKptrHeL.mjs} +5 -5
  336. package/dist/{renderer-sYSkIUfo.mjs.map → renderer-DKptrHeL.mjs.map} +1 -1
  337. package/dist/renderer-DLmJ9GWE.mjs +5 -0
  338. package/dist/renderer-DM7PUWP9.mjs +5 -0
  339. package/dist/{renderer-C41U1tK6.mjs → renderer-DMtzPqYo.mjs} +211 -72
  340. package/dist/renderer-DMtzPqYo.mjs.map +1 -0
  341. package/dist/renderer-DPWFDxIO.mjs +5 -0
  342. package/dist/renderer-DUCByhAk.mjs +5 -0
  343. package/dist/renderer-DVOtnCKH.mjs +5 -0
  344. package/dist/renderer-DVrN2bW8.mjs +5 -0
  345. package/dist/{renderer-zXPVLRlD.mjs → renderer-D_rEtJAH.mjs} +5 -5
  346. package/dist/{renderer-zXPVLRlD.mjs.map → renderer-D_rEtJAH.mjs.map} +1 -1
  347. package/dist/{renderer-BIGFP1cF.mjs → renderer-Dak_wVh9.mjs} +2 -2
  348. package/dist/{renderer-BIGFP1cF.mjs.map → renderer-Dak_wVh9.mjs.map} +1 -1
  349. package/dist/{renderer-DX41niRU.mjs → renderer-Dd2XrdqA.mjs} +4 -4
  350. package/dist/{renderer-DX41niRU.mjs.map → renderer-Dd2XrdqA.mjs.map} +1 -1
  351. package/dist/renderer-DdOVwfG4.mjs +5 -0
  352. package/dist/{renderer-1r-Uq-Ae.mjs → renderer-Dih1rtT6.mjs} +3 -3
  353. package/dist/{renderer-1r-Uq-Ae.mjs.map → renderer-Dih1rtT6.mjs.map} +1 -1
  354. package/dist/{renderer-BXJXziIt.mjs → renderer-DjiebKHO.mjs} +3 -3
  355. package/dist/{renderer-BXJXziIt.mjs.map → renderer-DjiebKHO.mjs.map} +1 -1
  356. package/dist/{renderer-DIw3UtEU.mjs → renderer-DkAFIpzB.mjs} +5 -5
  357. package/dist/{renderer-DIw3UtEU.mjs.map → renderer-DkAFIpzB.mjs.map} +1 -1
  358. package/dist/{renderer-DDEkFbVI.mjs → renderer-DlbSqOJR.mjs} +5 -5
  359. package/dist/{renderer-DDEkFbVI.mjs.map → renderer-DlbSqOJR.mjs.map} +1 -1
  360. package/dist/{renderer-C7L8Ceqr.mjs → renderer-DrExCXnp.mjs} +4 -4
  361. package/dist/{renderer-C7L8Ceqr.mjs.map → renderer-DrExCXnp.mjs.map} +1 -1
  362. package/dist/{renderer-_iMAO698.mjs → renderer-DsPLMzy1.mjs} +2 -2
  363. package/dist/{renderer-_iMAO698.mjs.map → renderer-DsPLMzy1.mjs.map} +1 -1
  364. package/dist/{renderer-BAYTI6jj.mjs → renderer-Dswrn-yi.mjs} +4 -4
  365. package/dist/{renderer-BAYTI6jj.mjs.map → renderer-Dswrn-yi.mjs.map} +1 -1
  366. package/dist/renderer-DtCe9ouu.mjs +5 -0
  367. package/dist/{renderer-DXEWbnRF.mjs → renderer-DtCmG-tT.mjs} +4 -4
  368. package/dist/{renderer-DXEWbnRF.mjs.map → renderer-DtCmG-tT.mjs.map} +1 -1
  369. package/dist/{renderer-B39I6CQw.mjs → renderer-DxiF4O6X.mjs} +4 -4
  370. package/dist/{renderer-B39I6CQw.mjs.map → renderer-DxiF4O6X.mjs.map} +1 -1
  371. package/dist/{renderer-BAusZ6Vu.mjs → renderer-DxkvDAA6.mjs} +4 -4
  372. package/dist/{renderer-BAusZ6Vu.mjs.map → renderer-DxkvDAA6.mjs.map} +1 -1
  373. package/dist/{renderer-ktWXVYka.mjs → renderer-FFLnACY-.mjs} +6 -6
  374. package/dist/{renderer-ktWXVYka.mjs.map → renderer-FFLnACY-.mjs.map} +1 -1
  375. package/dist/{renderer-Lth37j17.mjs → renderer-H4CZt3Z5.mjs} +3 -3
  376. package/dist/{renderer-B-ur0Ej8.mjs → renderer-JASAZUyY.mjs} +4 -4
  377. package/dist/{renderer-B-ur0Ej8.mjs.map → renderer-JASAZUyY.mjs.map} +1 -1
  378. package/dist/renderer-Mg0kr9Fm.mjs +5 -0
  379. package/dist/{renderer-CCycwCEB.mjs → renderer-R2kLaNuR.mjs} +3 -3
  380. package/dist/{renderer-CCycwCEB.mjs.map → renderer-R2kLaNuR.mjs.map} +1 -1
  381. package/dist/renderer-T35PsSw5.mjs +5 -0
  382. package/dist/{renderer-cod5Ona9.mjs → renderer-fWW0bsVl.mjs} +3 -3
  383. package/dist/renderer-iSZ5NT-J.mjs +5 -0
  384. package/dist/{renderer-oKRF4A0M.mjs → renderer-jBKpX3Xg.mjs} +4 -4
  385. package/dist/{renderer-oKRF4A0M.mjs.map → renderer-jBKpX3Xg.mjs.map} +1 -1
  386. package/dist/{renderer-Xv6GfNUI.mjs → renderer-kFx1_MmK.mjs} +3 -3
  387. package/dist/{renderer-Xv6GfNUI.mjs.map → renderer-kFx1_MmK.mjs.map} +1 -1
  388. package/dist/{renderer-DbRZe0Re.mjs → renderer-muB4slsV.mjs} +5 -5
  389. package/dist/{renderer-DbRZe0Re.mjs.map → renderer-muB4slsV.mjs.map} +1 -1
  390. package/dist/renderer-nEmMjQ1a.mjs +5 -0
  391. package/dist/{renderer-CpUJBOfb.mjs → renderer-oiDoNzhv.mjs} +3 -3
  392. package/dist/renderer-pG1nyfjE.mjs +5 -0
  393. package/dist/{renderer-BX7jS14r.d.mts → renderer-tcypOFaB.d.mts} +23 -4
  394. package/dist/renderer-tcypOFaB.d.mts.map +1 -0
  395. package/dist/{renderer-CiQhD8Gg.mjs → renderer-vPxMXiv8.mjs} +5 -5
  396. package/dist/{renderer-CiQhD8Gg.mjs.map → renderer-vPxMXiv8.mjs.map} +1 -1
  397. package/dist/renderer-vbb9e3E3.mjs +5 -0
  398. package/dist/{renderer-D8bBHrWC.mjs → renderer-vpsU_4XW.mjs} +5 -5
  399. package/dist/{renderer-D8bBHrWC.mjs.map → renderer-vpsU_4XW.mjs.map} +1 -1
  400. package/dist/{renderer-DiY70S8S.mjs → renderer-w7mlMSC-.mjs} +4 -4
  401. package/dist/{renderer-DiY70S8S.mjs.map → renderer-w7mlMSC-.mjs.map} +1 -1
  402. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs → renderers-CP8CFWDs-OgyUiyrr.mjs} +4 -4
  403. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs.map → renderers-CP8CFWDs-OgyUiyrr.mjs.map} +1 -1
  404. package/dist/sam/index.d.mts +4 -0
  405. package/dist/sam/index.mjs +3 -0
  406. package/dist/signals/index.d.mts +7 -6
  407. package/dist/signals/index.mjs +8 -8
  408. package/dist/{signals-CXwgAUp-.mjs → signals-BfJ1aqpT.mjs} +4 -4
  409. package/dist/{signals-CXwgAUp-.mjs.map → signals-BfJ1aqpT.mjs.map} +1 -1
  410. package/dist/{renderer-B2P1vgb7.mjs → src-BU6vm9sP-DFJ3phW0.mjs} +81 -1016
  411. package/dist/src-BU6vm9sP-DFJ3phW0.mjs.map +1 -0
  412. package/dist/{src-DFEqficI.mjs → src-C3f3zXYg.mjs} +251 -37
  413. package/dist/src-C3f3zXYg.mjs.map +1 -0
  414. package/package.json +75 -69
  415. package/dist/audio-Ccpl9mjV.d.mts.map +0 -1
  416. package/dist/dist-C1cCW7Bt.mjs.map +0 -1
  417. package/dist/dist-DVMepKaO.mjs.map +0 -1
  418. package/dist/gpu-CMaa63nz.mjs.map +0 -1
  419. package/dist/index-Bnh42ouE.d.mts.map +0 -1
  420. package/dist/index-CJL0JAU8.d.mts.map +0 -1
  421. package/dist/index-CQ-bbZk3.d.mts.map +0 -1
  422. package/dist/index-D5UDyVMb.d.mts.map +0 -1
  423. package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
  424. package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
  425. package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
  426. package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
  427. package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
  428. package/dist/preview-engine/chunk-FKG27DVO.mjs +0 -4
  429. package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
  430. package/dist/preview-engine/chunk-KXLXP66K.mjs +0 -1974
  431. package/dist/preview-engine/chunk-MIEH74UH.mjs +0 -480
  432. package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
  433. package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
  434. package/dist/preview-engine/renderers-3BOQOUEU.mjs +0 -1
  435. package/dist/preview-engine/renderers-3M2FESR2.mjs +0 -1
  436. package/dist/preview-engine/renderers-6LHIWKMZ.mjs +0 -1
  437. package/dist/preview-engine/renderers-7XHO6M3B.mjs +0 -228
  438. package/dist/preview-engine/renderers-A43VCJ7X.mjs +0 -1
  439. package/dist/preview-engine/renderers-AKY464RY.mjs +0 -1
  440. package/dist/preview-engine/renderers-C5UO6PL5.mjs +0 -1
  441. package/dist/preview-engine/renderers-C64QSZO4.mjs +0 -1
  442. package/dist/preview-engine/renderers-CIRCR6NG.mjs +0 -1
  443. package/dist/preview-engine/renderers-CIWOPETY.mjs +0 -1
  444. package/dist/preview-engine/renderers-CZEZCELP.mjs +0 -1
  445. package/dist/preview-engine/renderers-FSQMWHQM.mjs +0 -1
  446. package/dist/preview-engine/renderers-FZEW5C23.mjs +0 -1
  447. package/dist/preview-engine/renderers-HCET2IML.mjs +0 -1
  448. package/dist/preview-engine/renderers-IUOOC6K7.mjs +0 -1
  449. package/dist/preview-engine/renderers-KYYJLVIJ.mjs +0 -1
  450. package/dist/preview-engine/renderers-L4GE7WV3.mjs +0 -1
  451. package/dist/preview-engine/renderers-LRAFWKCO.mjs +0 -1
  452. package/dist/preview-engine/renderers-LU3XZWEB.mjs +0 -1
  453. package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
  454. package/dist/preview-engine/renderers-ND2WV4K3.mjs +0 -1
  455. package/dist/preview-engine/renderers-NJ5CWVVH.mjs +0 -1
  456. package/dist/preview-engine/renderers-NKXYPR3V.mjs +0 -1
  457. package/dist/preview-engine/renderers-NWR66CGK.mjs +0 -1
  458. package/dist/preview-engine/renderers-O22WTBRM.mjs +0 -1
  459. package/dist/preview-engine/renderers-PBBA7LQB.mjs +0 -1
  460. package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +0 -1
  461. package/dist/preview-engine/renderers-RMEACSRL.mjs +0 -1
  462. package/dist/preview-engine/renderers-SP42LCSI.mjs +0 -1
  463. package/dist/preview-engine/renderers-T7SZA3BX.mjs +0 -1
  464. package/dist/preview-engine/renderers-VADTDAHD.mjs +0 -1
  465. package/dist/preview-engine/renderers-VNNWI5C3.mjs +0 -1
  466. package/dist/preview-engine/renderers-WZ75MLP3.mjs +0 -1
  467. package/dist/preview-engine/renderers-XB5R4UQA.mjs +0 -1
  468. package/dist/preview-engine/renderers-YBIUZDGQ.mjs +0 -1
  469. package/dist/preview-engine/renderers-YESJR4O7.mjs +0 -1
  470. package/dist/preview-engine/renderers-YKSRZRRT.mjs +0 -1
  471. package/dist/program-CKpKkllV.mjs.map +0 -1
  472. package/dist/renderer--Ac-dg4A.mjs +0 -5
  473. package/dist/renderer--N7TMqzU.mjs +0 -5
  474. package/dist/renderer-2ecmdOae.mjs +0 -5
  475. package/dist/renderer-B2P1vgb7.mjs.map +0 -1
  476. package/dist/renderer-B5RJp5g-.mjs +0 -5
  477. package/dist/renderer-B7xyT1Vb.mjs +0 -5
  478. package/dist/renderer-BBeArN_x.mjs +0 -5
  479. package/dist/renderer-BCAZDu-r.mjs +0 -5
  480. package/dist/renderer-BJnhik7Y.mjs +0 -5
  481. package/dist/renderer-BX7jS14r.d.mts.map +0 -1
  482. package/dist/renderer-BgO6BA_z.mjs.map +0 -1
  483. package/dist/renderer-BxRW8MZO.mjs +0 -5
  484. package/dist/renderer-C-lfsEAN.mjs +0 -5
  485. package/dist/renderer-C41U1tK6.mjs.map +0 -1
  486. package/dist/renderer-C6nOFN4-.mjs +0 -5
  487. package/dist/renderer-C84TSQmS.mjs +0 -5
  488. package/dist/renderer-C8_6YofT.mjs +0 -5
  489. package/dist/renderer-COb3tOPG.mjs +0 -5
  490. package/dist/renderer-CSCIzaLy.mjs +0 -5
  491. package/dist/renderer-CmI4c8MS.mjs +0 -5
  492. package/dist/renderer-CqVltdX9.mjs +0 -5
  493. package/dist/renderer-D-FpMzLY.mjs +0 -5
  494. package/dist/renderer-D-Oyn9mG.mjs +0 -5
  495. package/dist/renderer-D2QrkA8_.mjs +0 -5
  496. package/dist/renderer-D5bjOx83.mjs +0 -3
  497. package/dist/renderer-D64r4iN-.mjs +0 -5
  498. package/dist/renderer-DCq6YkgP.mjs +0 -5
  499. package/dist/renderer-DDHG3GdR.mjs +0 -5
  500. package/dist/renderer-DMdNfcud.mjs +0 -6
  501. package/dist/renderer-DPAD6fL1.mjs.map +0 -1
  502. package/dist/renderer-DZQXZ4lK.mjs +0 -5
  503. package/dist/renderer-DczJJLA1.mjs +0 -5
  504. package/dist/renderer-DfqJj9oe.mjs +0 -5
  505. package/dist/renderer-DgO9ihVJ.mjs +0 -5
  506. package/dist/renderer-DhgnQZYb.mjs +0 -5
  507. package/dist/renderer-DjxKjHMf.mjs +0 -5
  508. package/dist/renderer-DnRDW2Oz.mjs +0 -3
  509. package/dist/renderer-DqLA5cdR.mjs +0 -5
  510. package/dist/renderer-Dudp6ZlH.mjs +0 -5
  511. package/dist/renderer-SSBL4M1o.mjs.map +0 -1
  512. package/dist/renderer-_jC5KIT1.mjs +0 -5
  513. package/dist/renderer-cTgAuVmJ.mjs +0 -5
  514. package/dist/renderer-nVKDvDLO.mjs +0 -5
  515. package/dist/renderer-pZ6_pUo1.mjs +0 -5
  516. package/dist/src-DFEqficI.mjs.map +0 -1
  517. /package/dist/{chunk-BcJoO4Nm.mjs → chunk-W71TSjRM.mjs} +0 -0
  518. /package/dist/{renderer-COqFNSfV.mjs → renderer-B6rZUBwE.mjs} +0 -0
package/NOTICE.md ADDED
@@ -0,0 +1,18 @@
1
+ # Notice: framefields
2
+
3
+ framefields is licensed under Apache-2.0. It contains no model weights: every vision model downloads on first use from a pinned revision into the local model cache (`~/.cache/framefields/models`) and is verified by size and SHA-256. The licenses below apply to those downloaded weights, not to framefields' code.
4
+
5
+ ## Prompted tracking (SAM)
6
+
7
+ `comp.vision(clip, { sam2 | sam3 })` and `framefields/sam` track objects with Meta's Segment Anything models: SAM 2.1 (Tiny and Small) and SAM 3. That code is written for framefields and licensed under Apache-2.0; it contains no code or weights distributed by Meta. It loads only when a clip uses `sam2` or `sam3`.
8
+
9
+ | Model | Weights license | Acceptance |
10
+ | --- | --- | --- |
11
+ | SAM 2.1 Tiny / Small (Diffusion Studio ONNX exports of `facebook/sam2.1-hiera-*`) | Apache-2.0 | none |
12
+ | SAM 3 (ONNX exports of Meta's SAM 3 checkpoints) | Meta SAM License | required at runtime |
13
+
14
+ Before SAM 3 weights are downloaded or run, you must accept Meta's SAM License (https://github.com/facebookresearch/sam3/blob/main/LICENSE): pass `acceptSamLicense: true` in `comp.vision` options (or `acceptLicense: true` to `Sam3Tracker`), or set `FRAMEFIELDS_ACCEPT_SAM_LICENSE=1`. Your use of SAM 3 is then governed by that license.
15
+
16
+ ## Depth
17
+
18
+ `comp.vision(clip, { depth: true })` and `withVision({ mode: "depth" })` estimate depth with Depth Anything V2 **Small** (onnx-community export of `depth-anything/Depth-Anything-V2-Small`), whose weights are Apache-2.0. The larger Depth Anything V2 checkpoints are licensed CC-BY-NC-4.0 and are not used.
package/README.md CHANGED
@@ -42,6 +42,11 @@ Every frame is rendered by framefields directly from TypeScript in [`examples/`]
42
42
 
43
43
  <table>
44
44
  <tr>
45
+ <td width="33.33%" align="center">
46
+ <a href="https://youtu.be/3lrQdiXjlnY"><img src="https://raw.githubusercontent.com/gatewai-dev/framefields/main/assets/showcase/relay.jpg" alt="Relay product film" width="100%"></a>
47
+ <br><a href="https://youtu.be/3lrQdiXjlnY"><b>Relay</b></a>
48
+ <br><sub><a href="https://github.com/gatewai-dev/framefields/blob/main/examples/32_relay"><code>32_relay</code></a></sub>
49
+ </td>
45
50
  <td width="33.33%" align="center">
46
51
  <a href="https://youtu.be/xSowU7X48J8"><img src="https://raw.githubusercontent.com/gatewai-dev/framefields/main/assets/showcase/shard-storm.jpg" alt="Shard storm vision dancer showcase film" width="100%"></a>
47
52
  <br><a href="https://youtu.be/xSowU7X48J8"><b>Shard storm</b></a>
@@ -52,13 +57,13 @@ Every frame is rendered by framefields directly from TypeScript in [`examples/`]
52
57
  <br><a href="https://youtu.be/POC7rKnuoE4"><b>Physics dancer</b></a>
53
58
  <br><sub><a href="https://github.com/gatewai-dev/framefields/blob/main/examples/28_physics_dancer"><code>28_physics_dancer</code></a></sub>
54
59
  </td>
60
+ </tr>
61
+ <tr>
55
62
  <td width="33.33%" align="center">
56
63
  <a href="https://youtu.be/k2lgbdL6_TA"><img src="https://raw.githubusercontent.com/gatewai-dev/framefields/main/assets/showcase/mac-keyboard.jpg" alt="Mac keyboard from 3D primitives" width="100%"></a>
57
64
  <br><a href="https://youtu.be/k2lgbdL6_TA"><b>Mac Keyboard</b></a>
58
65
  <br><sub><a href="https://github.com/gatewai-dev/framefields/blob/main/examples/26_mac_keyboard_from_3d_primitives"><code>26_mac_keyboard_from_3d_primitives</code></a></sub>
59
66
  </td>
60
- </tr>
61
- <tr>
62
67
  <td width="33.33%" align="center">
63
68
  <a href="https://youtu.be/FVXTqAozAv8"><img src="https://raw.githubusercontent.com/gatewai-dev/framefields/main/assets/showcase/framefields-launch.jpg" alt="Framefields launch film" width="100%"></a>
64
69
  <br><a href="https://youtu.be/FVXTqAozAv8"><b>Framefields launch</b></a>
@@ -69,6 +74,8 @@ Every frame is rendered by framefields directly from TypeScript in [`examples/`]
69
74
  <br><a href="https://youtu.be/9BF1snfmg3o"><b>Full Circle</b></a>
70
75
  <br><sub><a href="https://github.com/gatewai-dev/framefields/blob/main/examples/21_full_circle"><code>21_full_circle</code></a></sub>
71
76
  </td>
77
+ </tr>
78
+ <tr>
72
79
  <td width="33.33%" align="center">
73
80
  <a href="https://youtu.be/RQ3yi_lzPqI"><img src="https://raw.githubusercontent.com/gatewai-dev/framefields/main/assets/showcase/dancer.jpg" alt="Dancer showcase film" width="100%"></a>
74
81
  <br><a href="https://youtu.be/RQ3yi_lzPqI"><b>Dancer showcase</b></a>
@@ -196,11 +203,7 @@ Installed components import only `framefields` and the shared toolkit in `framef
196
203
 
197
204
  ## Select and track a subject
198
205
 
199
- Select a specific object with a point or box (SAM 2.1 Tiny or Small), or by description, several at once, or a whole group as one mask (SAM 3), and track it through video. Masks, bounds, motion and optional matched pose feed the existing vision signals; the same clip masks drive cutouts. SAM ships separately under Meta's SAM License, so install it next to framefields:
200
-
201
- ```bash
202
- pnpm add @framefields/vision-sam
203
- ```
206
+ Select a specific object with a point or box (SAM 2.1 Tiny or Small), or by description, several at once, or a whole group as one mask (SAM 3), and track it through video. Masks, bounds, motion and optional matched pose feed the existing vision signals; the same clip masks drive cutouts. The SAM code ships in framefields and loads only when a clip uses it; model weights download on first use, and SAM 3's are under Meta's SAM License, which you accept explicitly (see `NOTICE.md`).
204
207
 
205
208
  ```ts
206
209
  const subject = Layer.video("assets/source.mp4", {
@@ -1,5 +1,6 @@
1
- import { W as WebGPUAudioProcessor } from "../index-D5UDyVMb.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-CFoAmh7q.mjs";
3
- import "../renderer-BX7jS14r.mjs";
4
- import { t as _default$1 } from "../renderer-DKgPVOLL.mjs";
1
+ import "../index-COYNQ_mf.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-CDQrdZ0J.mjs";
3
+ import { W as WebGPUAudioProcessor } from "../index-B7WqFBZA.mjs";
4
+ import "../renderer-tcypOFaB.mjs";
5
+ import { t as _default$1 } from "../renderer-DJuVX3c5.mjs";
5
6
  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-BcJoO4Nm.mjs";
2
- import { g as WebGPUAudioProcessor } from "../dist-C1cCW7Bt.mjs";
3
- import { t as renderers_default$1 } from "../renderers-CP8CFWDs-DH2oktaC.mjs";
4
- import { i as mixAudioTracks } from "../dist-C8Xq3zgx.mjs";
5
- import { t as renderers_default$2 } from "../renderer-B2jjxsjO.mjs";
6
- import { t as renderers_default$3 } from "../renderer-DpruWmZU.mjs";
7
- import { t as renderers_default } from "../renderer-BAYTI6jj.mjs";
8
- import { t as renderers_default$4 } from "../renderer--fkmiVjl.mjs";
9
- import { t as renderers_default$5 } from "../renderer-C7L8Ceqr.mjs";
10
- import { t as renderers_default$6 } from "../renderer-BAusZ6Vu.mjs";
11
- import "../renderer-COqFNSfV.mjs";
12
- import { t as renderers_default$7 } from "../renderer-oKRF4A0M.mjs";
13
- import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-a0MFkK6J.mjs";
1
+ import "../chunk-W71TSjRM.mjs";
2
+ import { g as WebGPUAudioProcessor } from "../dist-C4Vxgm0Q.mjs";
3
+ import { t as renderers_default$1 } from "../renderers-CP8CFWDs-OgyUiyrr.mjs";
4
+ import { i as mixAudioTracks } from "../dist-Cu1fZ9Uy.mjs";
5
+ import { t as renderers_default$2 } from "../renderer-CxabOSkk.mjs";
6
+ import { t as renderers_default$3 } from "../renderer-CO1PwItH.mjs";
7
+ import { t as renderers_default } from "../renderer-Dswrn-yi.mjs";
8
+ import { t as renderers_default$4 } from "../renderer-CanNjQuL.mjs";
9
+ import { t as renderers_default$5 } from "../renderer-DrExCXnp.mjs";
10
+ import { t as renderers_default$6 } from "../renderer-DxkvDAA6.mjs";
11
+ import "../renderer-B6rZUBwE.mjs";
12
+ import { t as renderers_default$7 } from "../renderer-jBKpX3Xg.mjs";
13
+ import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-KHBadECb.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,6 @@
1
- import { Hi as FrameSignal, o as AudioSignalComputeConfig } from "./index-D5UDyVMb.mjs";
2
- import { n as NodeRendererPlugin } from "./renderer-BX7jS14r.mjs";
1
+ import { $ as FrameSignal } from "./index-COYNQ_mf.mjs";
2
+ import { o as AudioSignalComputeConfig } from "./index-B7WqFBZA.mjs";
3
+ import { n as NodeRendererPlugin } from "./renderer-tcypOFaB.mjs";
3
4
 
4
5
  //#region ../../nodes/node-modulate/dist/renderer.d.mts
5
6
  //#region src/renderers/index.d.ts
@@ -34,4 +35,4 @@ declare const AudioSignal: {
34
35
  };
35
36
  //#endregion
36
37
  export { _default as i, AudioSignalOptions as n, ExtractedAudioSignalsBundle as r, AudioSignal as t };
37
- //# sourceMappingURL=audio-Ccpl9mjV.d.mts.map
38
+ //# sourceMappingURL=audio-1X5qNNmk.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-1X5qNNmk.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;;;;UCShB,kBAAA,SAA2B;;;EDT9BC,WAAsE,CAAA,EAAA,UAAnDD,GAAAA,UAAAA,GAAAA,cAAD,GAAA,UAAA;;UCef,2BAAA;WACP;EAPO,IAAA,EAQV,WARU,CAAA,MAAmB,CAAA;EAMnB,IAAA,EAGV,WAHU,CAAA,MAAA,CAAA;EACP,MAAA,EAGD,WAHC,CAAA,MAAA,CAAA;EACH,WAAA,EAAA,MAAA;EACA,SAAA,EAAA,MAAA;EACE,UAAA,EAAA,MAAA;EAAW,WAAA,EAAA,OAAA;EAaP,OAAA,EAAA,OAuGZ;EArGW,aAAA,EAAA,OAAA;EAED,UAAA,EAAA,OAAA;EACC,UAAA,EAAA,OAAA;EAAR,YAAA,EAAA,OAAA;EAoFO,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AACP,cA1FS,WA0FT,EAAA;EAAO,mBAAA,CAAA,QAAA,EAxFC,YAwFD,EAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAtFA,kBAsFA,CAAA,EArFP,OAqFO,CArFC,2BAqFD,CAAA;oCADA,qBACP,QAAQ"}
@@ -211,4 +211,4 @@ function encodeStereoWav(channels, options = {}) {
211
211
 
212
212
  //#endregion
213
213
  export { softLimit as i, mixSfxInto as n, renderSfx as r, encodeStereoWav as t };
214
- //# sourceMappingURL=audio-a0MFkK6J.mjs.map
214
+ //# sourceMappingURL=audio-KHBadECb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-a0MFkK6J.mjs","names":[],"sources":["../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["/**\n * @file packages/framefields/src/audio/synth/sfx.ts\n * Deterministic procedural transition effects (whoosh, riser, impact, downshifter, glitch).\n * Pure CPU DSP: the same trigger always renders the same samples.\n */\n\n/**\n * Procedural sound effect transition event, synthesized deterministically on the CPU.\n * Default durations: whoosh 0.7s, riser 2s, impact 1.8s, downshifter 1.2s, glitch 0.35s.\n */\nexport interface SfxTrigger {\n\ttype: \"whoosh\" | \"riser\" | \"impact\" | \"downshifter\" | \"glitch\";\n\t/** Bar (fractional allowed) where the effect *starts*. A riser landing on a cut starts `durationSec` earlier. */\n\tatBar: number;\n\tdurationSec?: number;\n\tvolume?: number;\n}\n\nexport type StereoBuffer = [Float32Array, Float32Array];\n\nexport interface RenderedSfx {\n\t/** First sample of the effect on the score timeline. */\n\tstartSample: number;\n\tchannels: StereoBuffer;\n}\n\nexport interface SfxRenderContext {\n\tsampleRate: number;\n\tsecondsPerBar: number;\n\t/** Distinguishes otherwise identical triggers so noise differs between them. */\n\tseed: number;\n}\n\nconst DEFAULT_DURATION_SEC: Record<SfxTrigger[\"type\"], number> = {\n\twhoosh: 0.7,\n\triser: 2,\n\timpact: 1.8,\n\tdownshifter: 1.2,\n\tglitch: 0.35,\n};\n\n/** Small, fast, seedable PRNG returning values in [-1, 1). */\nfunction createNoise(seed: number): () => number {\n\tlet state = (seed ^ 0x9e3779b9) >>> 0;\n\treturn () => {\n\t\tstate = (state + 0x6d2b79f5) >>> 0;\n\t\tlet t = state;\n\t\tt = Math.imul(t ^ (t >>> 15), t | 1);\n\t\tt ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\t\treturn (((t ^ (t >>> 14)) >>> 0) / 4294967296) * 2 - 1;\n\t};\n}\n\n/** Chamberlin state-variable filter; returns the band-pass output of one sample. */\nclass BandPass {\n\tprivate low = 0;\n\tprivate band = 0;\n\n\tpublic process(\n\t\tinput: number,\n\t\tfreq: number,\n\t\tq: number,\n\t\tsampleRate: number,\n\t): number {\n\t\tconst f =\n\t\t\t2 * Math.sin((Math.PI * Math.min(freq, sampleRate * 0.45)) / sampleRate);\n\t\tthis.low += f * this.band;\n\t\tconst high = input - this.low - q * this.band;\n\t\tthis.band += f * high;\n\t\treturn this.band;\n\t}\n}\n\n/** Exponential sweep from `a` to `b` as `x` moves 0 → 1. */\nconst expSweep = (a: number, b: number, x: number): number => a * (b / a) ** x;\n\n/** Fast rise, longer fall: a bell centred at `peak` in 0..1. */\nconst bell = (x: number, peak: number): number =>\n\tx < peak\n\t\t? Math.sin((x / peak) * (Math.PI / 2)) ** 2\n\t\t: Math.cos(((x - peak) / (1 - peak)) * (Math.PI / 2)) ** 2;\n\nfunction whoosh(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst filter = new BandPass();\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = bell(x, reverse ? 0.35 : 0.6);\n\t\tconst s =\n\t\t\tfilter.process(noise(), expSweep(250, 7000, sweep), 0.35, sr) * env * 0.9;\n\t\tconst pan = (reverse ? 1 - x : x) * 2 - 1;\n\t\tleft[i] = s * Math.sqrt((1 - pan) / 2) * 1.4;\n\t\tright[i] = s * Math.sqrt((1 + pan) / 2) * 1.4;\n\t}\n\treturn [left, right];\n}\n\nfunction riser(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst air = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = reverse ? (1 - x) ** 1.5 : x ** 2.2;\n\t\tconst freq = expSweep(110, 880, sweep);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\t// Band-limited enough at these pitches: two detuned-free partials of a saw.\n\t\tconst tone =\n\t\t\t(Math.sin(phase) +\n\t\t\t\t0.5 * Math.sin(phase * 2) +\n\t\t\t\t0.25 * Math.sin(phase * 3)) *\n\t\t\t0.3;\n\t\tconst hiss =\n\t\t\tair.process(noise(), expSweep(300, 9000, sweep), 0.5, sr) * 1.2;\n\t\tconst s = (tone + hiss) * env * 0.6;\n\t\tleft[i] = s;\n\t\tright[i] = s;\n\t}\n\treturn [left, right];\n}\n\nfunction impact(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst burst = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst t = i / sr;\n\t\tconst freq = 38 + 62 * Math.exp(-t * 14);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\tconst sub = Math.sin(phase) * Math.exp(-t * 2.6);\n\t\tconst body =\n\t\t\tburst.process(noise(), 900 * Math.exp(-t * 6) + 120, 0.6, sr) *\n\t\t\tMath.exp(-t * 9) *\n\t\t\t1.6;\n\t\tconst click = i < 96 ? noise() * (1 - i / 96) * 0.5 : 0;\n\t\tconst s = (sub * 1.1 + body + click) * 0.85;\n\t\t// Slight decorrelated tail widens the hit without smearing the transient.\n\t\tconst tail = noise() * Math.exp(-t * 5) * 0.08;\n\t\tleft[i] = s + tail;\n\t\tright[i] = s - tail;\n\t}\n\treturn [left, right];\n}\n\nfunction glitch(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst slice = Math.max(1, Math.round(sr * 0.022));\n\tlet held = 0;\n\tlet gate = 1;\n\tlet crush = 1;\n\tfor (let i = 0; i < n; i++) {\n\t\tif (i % slice === 0) {\n\t\t\tgate = noise() > -0.2 ? 1 : 0;\n\t\t\tcrush = 2 + Math.floor((noise() + 1) * 6);\n\t\t}\n\t\tif (i % crush === 0) held = noise() > 0 ? 1 : -1;\n\t\tconst env = 1 - i / n;\n\t\tconst s = held * gate * env * 0.45;\n\t\tleft[i] = s;\n\t\tright[i] = gate ? -s * 0.6 : 0;\n\t}\n\treturn [left, right];\n}\n\n/**\n * Renders one trigger to stereo PCM positioned at `atBar` on the score timeline.\n * `atBar` is where the effect *starts*; a riser meant to land on a cut starts\n * `durationSec / secondsPerBar` bars before it.\n */\nexport function renderSfx(\n\ttrigger: SfxTrigger,\n\tctx: SfxRenderContext,\n): RenderedSfx {\n\tconst durationSec = trigger.durationSec ?? DEFAULT_DURATION_SEC[trigger.type];\n\tconst sr = ctx.sampleRate;\n\tconst n = Math.max(1, Math.round(durationSec * sr));\n\tconst noise = createNoise(ctx.seed + n);\n\n\tlet channels: StereoBuffer;\n\tswitch (trigger.type) {\n\t\tcase \"whoosh\":\n\t\t\tchannels = whoosh(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"riser\":\n\t\t\tchannels = riser(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"downshifter\":\n\t\t\tchannels = riser(n, sr, noise, true);\n\t\t\tbreak;\n\t\tcase \"impact\":\n\t\t\tchannels = impact(n, sr, noise);\n\t\t\tbreak;\n\t\tcase \"glitch\":\n\t\t\tchannels = glitch(n, sr, noise);\n\t\t\tbreak;\n\t}\n\n\tconst gain = trigger.volume ?? 0.8;\n\tfor (const channel of channels) {\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tchannel[i] = Math.tanh((channel[i] ?? 0) * gain);\n\t}\n\treturn {\n\t\tstartSample: Math.max(\n\t\t\t0,\n\t\t\tMath.round(trigger.atBar * ctx.secondsPerBar * sr),\n\t\t),\n\t\tchannels,\n\t};\n}\n\n/** Adds rendered effects into `target` in place, clipping to its length. */\nexport function mixSfxInto(\n\ttarget: StereoBuffer,\n\teffects: readonly RenderedSfx[],\n): void {\n\tfor (const fx of effects) {\n\t\tfor (let c = 0; c < 2; c++) {\n\t\t\tconst dst = target[c];\n\t\t\tconst src = fx.channels[c];\n\t\t\tif (!dst || !src) continue;\n\t\t\tconst limit = Math.min(src.length, dst.length - fx.startSample);\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst val = dst[fx.startSample + i];\n\t\t\t\tconst s = src[i];\n\t\t\t\tif (val !== undefined && s !== undefined) {\n\t\t\t\t\tdst[fx.startSample + i] = val + s;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Soft-knee limiter for sums that may exceed full scale (impacts stacked on a\n * loud mix): transparent below the knee, asymptotically bounded by 1.0 above it.\n */\nexport function softLimit(\n\ttarget: StereoBuffer,\n\tknee = 0.7,\n\tceiling = 0.97,\n): void {\n\tconst headroom = ceiling - knee;\n\tfor (const channel of target) {\n\t\tfor (let i = 0; i < channel.length; i++) {\n\t\t\tconst x = channel[i] ?? 0;\n\t\t\tconst a = Math.abs(x);\n\t\t\tif (a > knee)\n\t\t\t\tchannel[i] =\n\t\t\t\t\tMath.sign(x) * (knee + headroom * Math.tanh((a - knee) / headroom));\n\t\t}\n\t}\n}\n","/**\n * @file packages/framefields/src/audio/synth/wav-encoder.ts\n * High-performance 16-bit PCM RIFF/WAVE stereo audio encoder.\n */\n\nexport interface EncodeWavOptions {\n\tsampleRate?: number;\n}\n\n/**\n * Encodes stereo Float32Array PCM channels (-1.0 to +1.0) into a standard 16-bit RIFF/WAVE Buffer.\n */\nexport function encodeStereoWav(\n\tchannels: [Float32Array, Float32Array],\n\toptions: EncodeWavOptions = {},\n): Buffer {\n\tconst sampleRate = options.sampleRate ?? 48000;\n\tconst numChannels = 2;\n\tconst left = channels[0];\n\tconst right = channels[1];\n\tconst numSamples = Math.min(left.length, right.length);\n\n\tconst bytesPerSample = 2; // 16-bit\n\tconst blockAlign = numChannels * bytesPerSample;\n\tconst byteRate = sampleRate * blockAlign;\n\tconst dataSize = numSamples * blockAlign;\n\tconst totalSize = 44 + dataSize;\n\n\tconst buffer = Buffer.alloc(totalSize);\n\n\t// RIFF Header\n\tbuffer.write(\"RIFF\", 0, \"ascii\");\n\tbuffer.writeUInt32LE(36 + dataSize, 4);\n\tbuffer.write(\"WAVE\", 8, \"ascii\");\n\n\t// \"fmt \" chunk\n\tbuffer.write(\"fmt \", 12, \"ascii\");\n\tbuffer.writeUInt32LE(16, 16); // PCM header size\n\tbuffer.writeUInt16LE(1, 20); // AudioFormat 1 = PCM\n\tbuffer.writeUInt16LE(numChannels, 22);\n\tbuffer.writeUInt32LE(sampleRate, 24);\n\tbuffer.writeUInt32LE(byteRate, 28);\n\tbuffer.writeUInt16LE(blockAlign, 32);\n\tbuffer.writeUInt16LE(16, 34); // Bits per sample\n\n\t// \"data\" chunk\n\tbuffer.write(\"data\", 36, \"ascii\");\n\tbuffer.writeUInt32LE(dataSize, 40);\n\n\tlet offset = 44;\n\tfor (let i = 0; i < numSamples; i++) {\n\t\t// Left channel\n\t\tconst sl = Math.max(-1, Math.min(1, left[i] ?? 0));\n\t\tconst intL = sl < 0 ? sl * 0x8000 : sl * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intL), offset);\n\t\toffset += 2;\n\n\t\t// Right channel\n\t\tconst sr = Math.max(-1, Math.min(1, right[i] ?? 0));\n\t\tconst intR = sr < 0 ? sr * 0x8000 : sr * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intR), offset);\n\t\toffset += 2;\n\t}\n\n\treturn buffer;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"audio-KHBadECb.mjs","names":[],"sources":["../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["/**\n * @file packages/framefields/src/audio/synth/sfx.ts\n * Deterministic procedural transition effects (whoosh, riser, impact, downshifter, glitch).\n * Pure CPU DSP: the same trigger always renders the same samples.\n */\n\n/**\n * Procedural sound effect transition event, synthesized deterministically on the CPU.\n * Default durations: whoosh 0.7s, riser 2s, impact 1.8s, downshifter 1.2s, glitch 0.35s.\n */\nexport interface SfxTrigger {\n\ttype: \"whoosh\" | \"riser\" | \"impact\" | \"downshifter\" | \"glitch\";\n\t/** Bar (fractional allowed) where the effect *starts*. A riser landing on a cut starts `durationSec` earlier. */\n\tatBar: number;\n\tdurationSec?: number;\n\tvolume?: number;\n}\n\nexport type StereoBuffer = [Float32Array, Float32Array];\n\nexport interface RenderedSfx {\n\t/** First sample of the effect on the score timeline. */\n\tstartSample: number;\n\tchannels: StereoBuffer;\n}\n\nexport interface SfxRenderContext {\n\tsampleRate: number;\n\tsecondsPerBar: number;\n\t/** Distinguishes otherwise identical triggers so noise differs between them. */\n\tseed: number;\n}\n\nconst DEFAULT_DURATION_SEC: Record<SfxTrigger[\"type\"], number> = {\n\twhoosh: 0.7,\n\triser: 2,\n\timpact: 1.8,\n\tdownshifter: 1.2,\n\tglitch: 0.35,\n};\n\n/** Small, fast, seedable PRNG returning values in [-1, 1). */\nfunction createNoise(seed: number): () => number {\n\tlet state = (seed ^ 0x9e3779b9) >>> 0;\n\treturn () => {\n\t\tstate = (state + 0x6d2b79f5) >>> 0;\n\t\tlet t = state;\n\t\tt = Math.imul(t ^ (t >>> 15), t | 1);\n\t\tt ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\t\treturn (((t ^ (t >>> 14)) >>> 0) / 4294967296) * 2 - 1;\n\t};\n}\n\n/** Chamberlin state-variable filter; returns the band-pass output of one sample. */\nclass BandPass {\n\tprivate low = 0;\n\tprivate band = 0;\n\n\tpublic process(\n\t\tinput: number,\n\t\tfreq: number,\n\t\tq: number,\n\t\tsampleRate: number,\n\t): number {\n\t\tconst f =\n\t\t\t2 * Math.sin((Math.PI * Math.min(freq, sampleRate * 0.45)) / sampleRate);\n\t\tthis.low += f * this.band;\n\t\tconst high = input - this.low - q * this.band;\n\t\tthis.band += f * high;\n\t\treturn this.band;\n\t}\n}\n\n/** Exponential sweep from `a` to `b` as `x` moves 0 → 1. */\nconst expSweep = (a: number, b: number, x: number): number => a * (b / a) ** x;\n\n/** Fast rise, longer fall: a bell centred at `peak` in 0..1. */\nconst bell = (x: number, peak: number): number =>\n\tx < peak\n\t\t? Math.sin((x / peak) * (Math.PI / 2)) ** 2\n\t\t: Math.cos(((x - peak) / (1 - peak)) * (Math.PI / 2)) ** 2;\n\nfunction whoosh(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst filter = new BandPass();\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = bell(x, reverse ? 0.35 : 0.6);\n\t\tconst s =\n\t\t\tfilter.process(noise(), expSweep(250, 7000, sweep), 0.35, sr) * env * 0.9;\n\t\tconst pan = (reverse ? 1 - x : x) * 2 - 1;\n\t\tleft[i] = s * Math.sqrt((1 - pan) / 2) * 1.4;\n\t\tright[i] = s * Math.sqrt((1 + pan) / 2) * 1.4;\n\t}\n\treturn [left, right];\n}\n\nfunction riser(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst air = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = reverse ? (1 - x) ** 1.5 : x ** 2.2;\n\t\tconst freq = expSweep(110, 880, sweep);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\t// Band-limited enough at these pitches: two detuned-free partials of a saw.\n\t\tconst tone =\n\t\t\t(Math.sin(phase) +\n\t\t\t\t0.5 * Math.sin(phase * 2) +\n\t\t\t\t0.25 * Math.sin(phase * 3)) *\n\t\t\t0.3;\n\t\tconst hiss =\n\t\t\tair.process(noise(), expSweep(300, 9000, sweep), 0.5, sr) * 1.2;\n\t\tconst s = (tone + hiss) * env * 0.6;\n\t\tleft[i] = s;\n\t\tright[i] = s;\n\t}\n\treturn [left, right];\n}\n\nfunction impact(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst burst = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst t = i / sr;\n\t\tconst freq = 38 + 62 * Math.exp(-t * 14);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\tconst sub = Math.sin(phase) * Math.exp(-t * 2.6);\n\t\tconst body =\n\t\t\tburst.process(noise(), 900 * Math.exp(-t * 6) + 120, 0.6, sr) *\n\t\t\tMath.exp(-t * 9) *\n\t\t\t1.6;\n\t\tconst click = i < 96 ? noise() * (1 - i / 96) * 0.5 : 0;\n\t\tconst s = (sub * 1.1 + body + click) * 0.85;\n\t\t// Slight decorrelated tail widens the hit without smearing the transient.\n\t\tconst tail = noise() * Math.exp(-t * 5) * 0.08;\n\t\tleft[i] = s + tail;\n\t\tright[i] = s - tail;\n\t}\n\treturn [left, right];\n}\n\nfunction glitch(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst slice = Math.max(1, Math.round(sr * 0.022));\n\tlet held = 0;\n\tlet gate = 1;\n\tlet crush = 1;\n\tfor (let i = 0; i < n; i++) {\n\t\tif (i % slice === 0) {\n\t\t\tgate = noise() > -0.2 ? 1 : 0;\n\t\t\tcrush = 2 + Math.floor((noise() + 1) * 6);\n\t\t}\n\t\tif (i % crush === 0) held = noise() > 0 ? 1 : -1;\n\t\tconst env = 1 - i / n;\n\t\tconst s = held * gate * env * 0.45;\n\t\tleft[i] = s;\n\t\tright[i] = gate ? -s * 0.6 : 0;\n\t}\n\treturn [left, right];\n}\n\n/**\n * Renders one trigger to stereo PCM positioned at `atBar` on the score timeline.\n * `atBar` is where the effect *starts*; a riser meant to land on a cut starts\n * `durationSec / secondsPerBar` bars before it.\n */\nexport function renderSfx(\n\ttrigger: SfxTrigger,\n\tctx: SfxRenderContext,\n): RenderedSfx {\n\tconst durationSec = trigger.durationSec ?? DEFAULT_DURATION_SEC[trigger.type];\n\tconst sr = ctx.sampleRate;\n\tconst n = Math.max(1, Math.round(durationSec * sr));\n\tconst noise = createNoise(ctx.seed + n);\n\n\tlet channels: StereoBuffer;\n\tswitch (trigger.type) {\n\t\tcase \"whoosh\":\n\t\t\tchannels = whoosh(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"riser\":\n\t\t\tchannels = riser(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"downshifter\":\n\t\t\tchannels = riser(n, sr, noise, true);\n\t\t\tbreak;\n\t\tcase \"impact\":\n\t\t\tchannels = impact(n, sr, noise);\n\t\t\tbreak;\n\t\tcase \"glitch\":\n\t\t\tchannels = glitch(n, sr, noise);\n\t\t\tbreak;\n\t}\n\n\tconst gain = trigger.volume ?? 0.8;\n\tfor (const channel of channels) {\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tchannel[i] = Math.tanh((channel[i] ?? 0) * gain);\n\t}\n\treturn {\n\t\tstartSample: Math.max(\n\t\t\t0,\n\t\t\tMath.round(trigger.atBar * ctx.secondsPerBar * sr),\n\t\t),\n\t\tchannels,\n\t};\n}\n\n/** Adds rendered effects into `target` in place, clipping to its length. */\nexport function mixSfxInto(\n\ttarget: StereoBuffer,\n\teffects: readonly RenderedSfx[],\n): void {\n\tfor (const fx of effects) {\n\t\tfor (let c = 0; c < 2; c++) {\n\t\t\tconst dst = target[c];\n\t\t\tconst src = fx.channels[c];\n\t\t\tif (!dst || !src) continue;\n\t\t\tconst limit = Math.min(src.length, dst.length - fx.startSample);\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst val = dst[fx.startSample + i];\n\t\t\t\tconst s = src[i];\n\t\t\t\tif (val !== undefined && s !== undefined) {\n\t\t\t\t\tdst[fx.startSample + i] = val + s;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Soft-knee limiter for sums that may exceed full scale (impacts stacked on a\n * loud mix): transparent below the knee, asymptotically bounded by 1.0 above it.\n */\nexport function softLimit(\n\ttarget: StereoBuffer,\n\tknee = 0.7,\n\tceiling = 0.97,\n): void {\n\tconst headroom = ceiling - knee;\n\tfor (const channel of target) {\n\t\tfor (let i = 0; i < channel.length; i++) {\n\t\t\tconst x = channel[i] ?? 0;\n\t\t\tconst a = Math.abs(x);\n\t\t\tif (a > knee)\n\t\t\t\tchannel[i] =\n\t\t\t\t\tMath.sign(x) * (knee + headroom * Math.tanh((a - knee) / headroom));\n\t\t}\n\t}\n}\n","/**\n * @file packages/framefields/src/audio/synth/wav-encoder.ts\n * High-performance 16-bit PCM RIFF/WAVE stereo audio encoder.\n */\n\nexport interface EncodeWavOptions {\n\tsampleRate?: number;\n}\n\n/**\n * Encodes stereo Float32Array PCM channels (-1.0 to +1.0) into a standard 16-bit RIFF/WAVE Buffer.\n */\nexport function encodeStereoWav(\n\tchannels: [Float32Array, Float32Array],\n\toptions: EncodeWavOptions = {},\n): Buffer {\n\tconst sampleRate = options.sampleRate ?? 48000;\n\tconst numChannels = 2;\n\tconst left = channels[0];\n\tconst right = channels[1];\n\tconst numSamples = Math.min(left.length, right.length);\n\n\tconst bytesPerSample = 2; // 16-bit\n\tconst blockAlign = numChannels * bytesPerSample;\n\tconst byteRate = sampleRate * blockAlign;\n\tconst dataSize = numSamples * blockAlign;\n\tconst totalSize = 44 + dataSize;\n\n\tconst buffer = Buffer.alloc(totalSize);\n\n\t// RIFF Header\n\tbuffer.write(\"RIFF\", 0, \"ascii\");\n\tbuffer.writeUInt32LE(36 + dataSize, 4);\n\tbuffer.write(\"WAVE\", 8, \"ascii\");\n\n\t// \"fmt \" chunk\n\tbuffer.write(\"fmt \", 12, \"ascii\");\n\tbuffer.writeUInt32LE(16, 16); // PCM header size\n\tbuffer.writeUInt16LE(1, 20); // AudioFormat 1 = PCM\n\tbuffer.writeUInt16LE(numChannels, 22);\n\tbuffer.writeUInt32LE(sampleRate, 24);\n\tbuffer.writeUInt32LE(byteRate, 28);\n\tbuffer.writeUInt16LE(blockAlign, 32);\n\tbuffer.writeUInt16LE(16, 34); // Bits per sample\n\n\t// \"data\" chunk\n\tbuffer.write(\"data\", 36, \"ascii\");\n\tbuffer.writeUInt32LE(dataSize, 40);\n\n\tlet offset = 44;\n\tfor (let i = 0; i < numSamples; i++) {\n\t\t// Left channel\n\t\tconst sl = Math.max(-1, Math.min(1, left[i] ?? 0));\n\t\tconst intL = sl < 0 ? sl * 0x8000 : sl * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intL), offset);\n\t\toffset += 2;\n\n\t\t// Right channel\n\t\tconst sr = Math.max(-1, Math.min(1, right[i] ?? 0));\n\t\tconst intR = sr < 0 ? sr * 0x8000 : sr * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intR), offset);\n\t\toffset += 2;\n\t}\n\n\treturn buffer;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { Mt as frameArraySignal } from "./dist-BlIrsfcn.mjs";
2
- import { Dt as AudioSignalComputePipeline, j as ensureDevice } from "./dist-C1cCW7Bt.mjs";
3
- import { n as decodeAudioSource } from "./dist-C8Xq3zgx.mjs";
1
+ import { Mt as frameArraySignal } from "./dist-Bf2_efYP.mjs";
2
+ import { Ot as AudioSignalComputePipeline, j as ensureDevice } from "./dist-C4Vxgm0Q.mjs";
3
+ import { n as decodeAudioSource } from "./dist-Cu1fZ9Uy.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-BfQg37MW.mjs.map
85
+ //# sourceMappingURL=audio-YpBRdI7r.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-BfQg37MW.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-YpBRdI7r.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"}
@@ -19,4 +19,4 @@ function failedCheck(entry, exportName, sdkVersion, code, message) {
19
19
 
20
20
  //#endregion
21
21
  export { failedCheck as t };
22
- //# sourceMappingURL=check-result-C3jlgV2i.mjs.map
22
+ //# sourceMappingURL=check-result-Culfu7Nx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-result-C3jlgV2i.mjs","names":[],"sources":["../src/cli/check-result.ts"],"sourcesContent":["import type { RenderDiagnostic } from \"@framefields/core\";\n\nexport interface CheckDiagnostic extends RenderDiagnostic {\n\tstage:\n\t\t| \"build\"\n\t\t| \"schema\"\n\t\t| \"assets\"\n\t\t| \"lint\"\n\t\t| \"timeline\"\n\t\t| \"render\"\n\t\t| \"worker\";\n\tpath?: string;\n}\n\nexport interface CheckReport {\n\tschemaVersion: 1;\n\tsdkVersion: string;\n\tentry: string;\n\texportName: string;\n\tstatus: \"passed\" | \"failed\";\n\tdiagnostics: CheckDiagnostic[];\n\tartifacts: string[];\n\trender: \"not_requested\" | \"skipped\" | \"passed\" | \"failed\";\n\truntime?: { node: string; platform: string; arch: string };\n\ttimeline?: { fps: number; totalFrames: number; durationMs: number };\n\tbackend?: {\n\t\tvendor: string;\n\t\tdevice: string;\n\t\tdescription: string;\n\t\tsoftware: boolean;\n\t};\n}\n\nexport function failedCheck(\n\tentry: string,\n\texportName: string,\n\tsdkVersion: string,\n\tcode: string,\n\tmessage: string,\n): CheckReport {\n\treturn {\n\t\tschemaVersion: 1,\n\t\tsdkVersion,\n\t\tentry,\n\t\texportName,\n\t\tstatus: \"failed\",\n\t\tdiagnostics: [{ severity: \"error\", code, message, stage: \"worker\" }],\n\t\tartifacts: [],\n\t\trender: \"not_requested\",\n\t};\n}\n"],"mappings":";AAiCA,SAAgB,YACf,OACA,YACA,YACA,MACA,SACc;AACd,QAAO;EACN,eAAe;EACf;EACA;EACA;EACA,QAAQ;EACR,aAAa,CAAC;GAAE,UAAU;GAAS;GAAM;GAAS,OAAO;GAAU,CAAC;EACpE,WAAW,EAAE;EACb,QAAQ;EACR"}
1
+ {"version":3,"file":"check-result-Culfu7Nx.mjs","names":[],"sources":["../src/cli/check-result.ts"],"sourcesContent":["import type { RenderDiagnostic } from \"@framefields/core\";\n\nexport interface CheckDiagnostic extends RenderDiagnostic {\n\tstage:\n\t\t| \"build\"\n\t\t| \"schema\"\n\t\t| \"assets\"\n\t\t| \"lint\"\n\t\t| \"timeline\"\n\t\t| \"render\"\n\t\t| \"worker\";\n\tpath?: string;\n}\n\nexport interface CheckReport {\n\tschemaVersion: 1;\n\tsdkVersion: string;\n\tentry: string;\n\texportName: string;\n\tstatus: \"passed\" | \"failed\";\n\tdiagnostics: CheckDiagnostic[];\n\tartifacts: string[];\n\trender: \"not_requested\" | \"skipped\" | \"passed\" | \"failed\";\n\truntime?: { node: string; platform: string; arch: string };\n\ttimeline?: { fps: number; totalFrames: number; durationMs: number };\n\tbackend?: {\n\t\tvendor: string;\n\t\tdevice: string;\n\t\tdescription: string;\n\t\tsoftware: boolean;\n\t};\n}\n\nexport function failedCheck(\n\tentry: string,\n\texportName: string,\n\tsdkVersion: string,\n\tcode: string,\n\tmessage: string,\n): CheckReport {\n\treturn {\n\t\tschemaVersion: 1,\n\t\tsdkVersion,\n\t\tentry,\n\t\texportName,\n\t\tstatus: \"failed\",\n\t\tdiagnostics: [{ severity: \"error\", code, message, stage: \"worker\" }],\n\t\tartifacts: [],\n\t\trender: \"not_requested\",\n\t};\n}\n"],"mappings":";AAiCA,SAAgB,YACf,OACA,YACA,YACA,MACA,SACc;AACd,QAAO;EACN,eAAe;EACf;EACA;EACA;EACA,QAAQ;EACR,aAAa,CAAC;GAAE,UAAU;GAAS;GAAM;GAAS,OAAO;GAAU,CAAC;EACpE,WAAW,EAAE;EACb,QAAQ;EACR"}
@@ -1,53 +1,53 @@
1
- import "../chunk-BcJoO4Nm.mjs";
2
- import { Nt as frameCount } from "../dist-BlIrsfcn.mjs";
3
- import { t as Composition } from "../src-DFEqficI.mjs";
4
- import { x as describeGpu } from "../dist-C1cCW7Bt.mjs";
5
- import "../renderers-CP8CFWDs-DH2oktaC.mjs";
6
- import "../signals-CXwgAUp-.mjs";
7
- import "../renderer-sCovEubT.mjs";
8
- import "../renderer-BIGFP1cF.mjs";
9
- import "../renderer-B2jjxsjO.mjs";
10
- import "../renderer-DpruWmZU.mjs";
11
- import "../renderer-BAYTI6jj.mjs";
12
- import "../renderer--fkmiVjl.mjs";
13
- import "../renderer-C7L8Ceqr.mjs";
14
- import "../renderer-BAusZ6Vu.mjs";
15
- import "../renderer-COqFNSfV.mjs";
16
- import "../renderer-oKRF4A0M.mjs";
17
- import "../renderer-B2P1vgb7.mjs";
18
- import { s as CompositorProgramSchema } from "../program-CKpKkllV.mjs";
19
- import "../renderer-SSBL4M1o.mjs";
20
- import "../renderer-BlvGcyAN.mjs";
21
- import "../renderer-DiY70S8S.mjs";
22
- import "../renderer-SWr3vbrV.mjs";
23
- import "../renderer-D47AEJE_.mjs";
24
- import "../renderer-GBmWjBvy.mjs";
25
- import "../renderer-D7r6onRT.mjs";
26
- import "../renderer-B39I6CQw.mjs";
27
- import "../renderer-DXEWbnRF.mjs";
28
- import "../renderer-Xv6GfNUI.mjs";
29
- import "../renderer-DTqDy2m9.mjs";
30
- import "../renderer-CwFqqpWY.mjs";
31
- import "../renderer-EaLUCobW.mjs";
32
- import "../renderer-1r-Uq-Ae.mjs";
33
- import "../renderer-BgO6BA_z.mjs";
34
- import "../renderer-DO-KbpYZ.mjs";
35
- import "../renderer-DmkWrWAk.mjs";
36
- import "../renderer-WCZu2Rf5.mjs";
37
- import "../renderer-DX41niRU.mjs";
38
- import "../renderer-BPWDsufX.mjs";
39
- import "../renderer-DFzI3yI_.mjs";
40
- import "../renderer-BlPqTEii.mjs";
41
- import "../renderer-D61B9bXF.mjs";
42
- import "../renderer-B-ur0Ej8.mjs";
43
- import "../renderer-sYSkIUfo.mjs";
44
- import "../renderer-B522Dkdk.mjs";
45
- import "../renderer-g_vrrAQU.mjs";
46
- import "../renderer-DF-yvIrV.mjs";
47
- import "../renderer-BXJXziIt.mjs";
48
- import "../renderer-DEmYyaqj.mjs";
49
- import "../renderer-CCycwCEB.mjs";
50
- import { t as failedCheck } from "../check-result-C3jlgV2i.mjs";
1
+ import "../chunk-W71TSjRM.mjs";
2
+ import { Nt as frameCount } from "../dist-Bf2_efYP.mjs";
3
+ import { t as Composition } from "../src-C3f3zXYg.mjs";
4
+ import { x as describeGpu } from "../dist-C4Vxgm0Q.mjs";
5
+ import "../renderers-CP8CFWDs-OgyUiyrr.mjs";
6
+ import "../signals-BfJ1aqpT.mjs";
7
+ import "../renderer-BdRwbLLV.mjs";
8
+ import "../renderer-Dak_wVh9.mjs";
9
+ import "../renderer-CxabOSkk.mjs";
10
+ import "../renderer-CO1PwItH.mjs";
11
+ import "../renderer-Dswrn-yi.mjs";
12
+ import "../renderer-CanNjQuL.mjs";
13
+ import "../renderer-DrExCXnp.mjs";
14
+ import "../renderer-DxkvDAA6.mjs";
15
+ import "../renderer-B6rZUBwE.mjs";
16
+ import "../renderer-jBKpX3Xg.mjs";
17
+ import { s as CompositorProgramSchema } from "../program-BUjUTdxq.mjs";
18
+ import "../renderer-BnN3JH9u.mjs";
19
+ import "../renderer-CsRuEpR2.mjs";
20
+ import "../renderer-w7mlMSC-.mjs";
21
+ import "../renderer-CtulmkqT.mjs";
22
+ import "../renderer-Bif8bwCq.mjs";
23
+ import "../renderer-CDfCaqV4.mjs";
24
+ import "../renderer-DAug14gu.mjs";
25
+ import "../renderer-DxiF4O6X.mjs";
26
+ import "../renderer-DtCmG-tT.mjs";
27
+ import "../renderer-kFx1_MmK.mjs";
28
+ import "../renderer-CwAuWLWm.mjs";
29
+ import "../renderer-Bm91Xv6l.mjs";
30
+ import "../renderer-B8i4d1Rc.mjs";
31
+ import "../renderer-Dih1rtT6.mjs";
32
+ import "../renderer-7c0ecb-L.mjs";
33
+ import "../renderer-D1tDMuD0.mjs";
34
+ import "../renderer-BvRaVByi.mjs";
35
+ import "../renderer-BFmVDdVs.mjs";
36
+ import "../renderer-Dd2XrdqA.mjs";
37
+ import "../renderer-BIToh0CA.mjs";
38
+ import "../renderer-CeNAgCE2.mjs";
39
+ import "../renderer-BSW4CGZF.mjs";
40
+ import "../renderer-7w9PZmWJ.mjs";
41
+ import "../renderer-JASAZUyY.mjs";
42
+ import "../renderer-DKptrHeL.mjs";
43
+ import "../renderer-BhNZn2DU.mjs";
44
+ import "../renderer-D7lApyWZ.mjs";
45
+ import "../renderer-Br_aJ_b7.mjs";
46
+ import "../renderer-DjiebKHO.mjs";
47
+ import "../renderer-Ck-NLzz0.mjs";
48
+ import "../renderer-R2kLaNuR.mjs";
49
+ import "../renderer-DCMoBppL.mjs";
50
+ import { t as failedCheck } from "../check-result-Culfu7Nx.mjs";
51
51
  import { existsSync } from "node:fs";
52
52
  import { join } from "node:path";
53
53
  import { mkdir, writeFile } from "node:fs/promises";