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
@@ -1,19 +1,19 @@
1
- import { Pt as frameSignal, pn as programmaticSignal } from "./dist-BlIrsfcn.mjs";
2
- import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
3
- import { a as PoseSkeletonComputePipeline } from "./dist-Buaaj-Ul.mjs";
1
+ import { Pt as frameSignal, pn as programmaticSignal } from "./dist-Bf2_efYP.mjs";
2
+ import { a as PoseSkeletonComputePipeline } from "./dist-BIE8fvlv.mjs";
4
3
  import { existsSync, mkdirSync, statSync } from "node:fs";
5
4
  import { dirname, join, resolve } from "node:path";
6
5
  import { readFile, rename, unlink, writeFile } from "node:fs/promises";
7
6
  import { createHash } from "node:crypto";
8
7
  import { homedir } from "node:os";
9
8
 
10
- //#region ../vision/dist/registry-RNCQoD9e.mjs
9
+ //#region ../vision/dist/registry-DOHiTjt1.mjs
11
10
  const hf = (repo, revision, path$1) => `https://huggingface.co/${repo}/resolve/${revision}/${path$1}`;
12
11
  const RTMDET_INS_REPO = "tori29umai/rtmdet-ins-onnx-person-masks";
13
12
  const RTMDET_INS_REV = "e5218e8d47d7c50077f27f9893a28e0ef2ad5656";
14
13
  const RTMDET_INS_SOURCE = "RTMDet-Ins (OpenMMLab mmdetection, Apache-2.0), mmdeploy ONNX export";
15
14
  const RTMO_SOURCE = "RTMO (OpenMMLab mmpose, Apache-2.0), ONNX export";
16
15
  const SELFIE_SOURCE = "MediaPipe Selfie Segmenter (Google, Apache-2.0), ONNX export";
16
+ const DEPTH_SOURCE = "Depth Anything V2 Small (TikTok / HKU, Apache-2.0), ONNX export";
17
17
  const models = {
18
18
  "rtmdet-ins-t": {
19
19
  key: "rtmdet-ins-t",
@@ -94,9 +94,23 @@ const models = {
94
94
  sha256: "7a0adcfdb1715d3b0ff0f61486d8a181c33f4a208343a5abfccbc6540e872d24",
95
95
  input: [256, 144],
96
96
  source: SELFIE_SOURCE
97
+ },
98
+ "depth-anything-v2-s": {
99
+ key: "depth-anything-v2-s",
100
+ family: "depth-anything",
101
+ filename: "depth-anything-v2-s.onnx",
102
+ url: hf("onnx-community/depth-anything-v2-small", "4472b7362082ad9968fee890ca0f1e5aca36b93d", "onnx/model.onnx"),
103
+ bytes: 99060839,
104
+ sha256: "afb6a5c28f3b6bf1618c6e43f02073ef9dfdc70e937502d51603e57b0a1df10c",
105
+ input: [518, 518],
106
+ source: DEPTH_SOURCE
97
107
  }
98
108
  };
99
109
  const VISION_MODELS = models;
110
+ /** Adds a pinned model from a separately licensed package to the registry. */
111
+ function registerVisionModel(descriptor) {
112
+ models[descriptor.key] = descriptor;
113
+ }
100
114
  /**
101
115
  * Resolves the model for a task. `detect` and `segment` share RTMDet-Ins (one forward pass
102
116
  * yields both); `matte` picks the landscape Selfie Segmenter for wide frames.
@@ -191,7 +205,7 @@ const COCO_CLASSES = [
191
205
  ];
192
206
 
193
207
  //#endregion
194
- //#region ../vision/dist/src-Bnr8DUC-.mjs
208
+ //#region ../vision/dist/src-BU6vm9sP.mjs
195
209
  function computeIoU(boxA, boxB) {
196
210
  const xA = Math.max(boxA.originX, boxB.originX);
197
211
  const yA = Math.max(boxA.originY, boxB.originY);
@@ -663,6 +677,35 @@ async function analyzeSequence(frames, options) {
663
677
  masks
664
678
  };
665
679
  }
680
+ /** Model input size for a frame: the short side at `short`, the other kept to the frame's aspect, both multiples of the 14 px ViT patch. */
681
+ function depthInputSize(width, height, short) {
682
+ const snap = (v) => Math.max(14, Math.round(v / 14) * 14);
683
+ return width >= height ? [snap(short * width / height), snap(short)] : [snap(short), snap(short * height / width)];
684
+ }
685
+ /** Share of samples clipped at each end, so a stray hot pixel does not set the range. */
686
+ const TAIL = .01;
687
+ /**
688
+ * Depth Anything decode: `predicted_depth [1, h, w]` relative inverse depth →
689
+ * 0 (farthest) … 1 (nearest), at the model's resolution. The range is the
690
+ * frame's 1st…99th percentile, so it is relative to the frame, not metric.
691
+ */
692
+ function decodeDepth(predicted, width, height) {
693
+ const n = width * height;
694
+ const step = Math.max(1, Math.floor(n / 4096));
695
+ const samples = [];
696
+ for (let i = 0; i < n; i += step) samples.push(predicted[i]);
697
+ samples.sort((a, b) => a - b);
698
+ const lo = samples[Math.floor((samples.length - 1) * TAIL)];
699
+ const hi = samples[Math.ceil((samples.length - 1) * (1 - TAIL))];
700
+ const scale = hi > lo ? 1 / (hi - lo) : 0;
701
+ const data = new Float32Array(n);
702
+ for (let i = 0; i < n; i++) data[i] = Math.min(1, Math.max(0, (predicted[i] - lo) * scale));
703
+ return {
704
+ data,
705
+ width,
706
+ height
707
+ };
708
+ }
666
709
  const IMAGENET_BGR_MEAN = [
667
710
  103.53,
668
711
  116.28,
@@ -711,6 +754,21 @@ const PREPROCESS_BY_FAMILY = {
711
754
  255
712
755
  ],
713
756
  padValue: 0
757
+ },
758
+ "depth-anything": {
759
+ fit: "stretch",
760
+ channels: "rgb",
761
+ mean: [
762
+ 123.675,
763
+ 116.28,
764
+ 103.53
765
+ ],
766
+ std: [
767
+ 58.395,
768
+ 57.12,
769
+ 57.375
770
+ ],
771
+ padValue: 0
714
772
  }
715
773
  };
716
774
  /** True for the families `VisionRunner` can preprocess and decode itself. */
@@ -2848,6 +2906,15 @@ var VisionRunner = class VisionRunner$1 {
2848
2906
  ...this.featherRadius !== void 0 ? { featherRadius: this.featherRadius } : {}
2849
2907
  });
2850
2908
  }
2909
+ /** Relative depth of the whole frame (Depth Anything V2 Small), near = 1, at the model's resolution. */
2910
+ async depth(image) {
2911
+ const key = "depth-anything-v2-s";
2912
+ const input = depthInputSize(image.width, image.height, VISION_MODELS[key].input[1]);
2913
+ const { outputs } = await this.infer(key, image, input);
2914
+ const predicted = output(outputs, "predicted_depth", key);
2915
+ const dims = predicted.dims;
2916
+ return decodeDepth(predicted.data, dims[dims.length - 1] ?? input[0], dims[dims.length - 2] ?? input[1]);
2917
+ }
2851
2918
  close() {
2852
2919
  if (!this._ownsCore) return;
2853
2920
  const core = this._core;
@@ -2897,9 +2964,9 @@ var VisionRunner = class VisionRunner$1 {
2897
2964
  * Runs one model on one image. Runs of the same model are queued: they share
2898
2965
  * the input scratch buffer, and one run already uses the session's threads.
2899
2966
  */
2900
- infer(key, image) {
2967
+ infer(key, image, input) {
2901
2968
  const queue = this._core.runQueue;
2902
- const run = (queue.get(key) ?? Promise.resolve()).then(() => this.inferNow(key, image), () => this.inferNow(key, image));
2969
+ const run = (queue.get(key) ?? Promise.resolve()).then(() => this.inferNow(key, image, input), () => this.inferNow(key, image, input));
2903
2970
  const tail = run.catch(() => void 0);
2904
2971
  queue.set(key, tail);
2905
2972
  tail.then(() => {
@@ -2907,11 +2974,11 @@ var VisionRunner = class VisionRunner$1 {
2907
2974
  });
2908
2975
  return run;
2909
2976
  }
2910
- async inferNow(key, frame) {
2977
+ async inferNow(key, frame, input) {
2911
2978
  const session = await this.session(key);
2912
2979
  const desc = VISION_MODELS[key];
2913
2980
  if (!isPreprocessFamily(desc.family)) throw new Error(`VisionRunner cannot run '${desc.family}' models; use the family's own tracker (e.g. Sam2Tracker or Sam3Tracker from @framefields/vision-sam).`);
2914
- const spec = preprocessSpec(desc.family, desc.input);
2981
+ const spec = preprocessSpec(desc.family, input ?? desc.input);
2915
2982
  const dims = [
2916
2983
  1,
2917
2984
  3,
@@ -3074,8 +3141,9 @@ function output(outputs, name, key) {
3074
3141
  /**
3075
3142
  * Where a render-time Vision effect finds subject masks someone already
3076
3143
  * computed for its clip (`comp.vision(clip)` in framefields), so a matte layer
3077
- * reuses them instead of segmenting the frame again, and a skeleton layer draws
3078
- * the pose matched to that subject instead of the first person it detects. Set
3144
+ * reuses them instead of segmenting the frame again, a skeleton layer draws
3145
+ * the pose matched to that subject instead of the first person it detects, and
3146
+ * a depth layer shows the depth analysed for each frame (not one behind). Set
3079
3147
  * on the Vision effect instance under this key; the renderer reads it from the effect.
3080
3148
  */
3081
3149
  const CLIP_SUBJECT = Symbol.for("framefields.vision.clipSubject");
@@ -4312,1008 +4380,5 @@ var VisionNode = class VisionNode$1 {
4312
4380
  };
4313
4381
 
4314
4382
  //#endregion
4315
- //#region ../../nodes/node-vision/dist/renderers-Ao0SpHQm.mjs
4316
- let scratchValues = new Uint8Array(0);
4317
- let scratchLengths = new Uint32Array(0);
4318
- function encodeMask(mask, width, height) {
4319
- if (scratchValues.length < mask.length) {
4320
- scratchValues = new Uint8Array(mask.length);
4321
- scratchLengths = new Uint32Array(mask.length);
4322
- }
4323
- const values = scratchValues;
4324
- const lengths = scratchLengths;
4325
- let runs = 0;
4326
- let start = 0;
4327
- for (let i = 1; i <= mask.length; i++) if (i === mask.length || mask[i] !== mask[start]) {
4328
- values[runs] = mask[start];
4329
- lengths[runs] = i - start;
4330
- runs++;
4331
- start = i;
4332
- }
4333
- return {
4334
- width,
4335
- height,
4336
- values: values.slice(0, runs),
4337
- lengths: lengths.slice(0, runs)
4338
- };
4339
- }
4340
- function decodeMask(rle) {
4341
- const out = new Uint8Array(rle.width * rle.height);
4342
- let at = 0;
4343
- for (let r = 0; r < rle.values.length; r++) {
4344
- const end = at + rle.lengths[r];
4345
- if (rle.values[r] !== 0) out.fill(rle.values[r], at, end);
4346
- at = end;
4347
- }
4348
- return out;
4349
- }
4350
- function rleBytes(rle) {
4351
- return rle.values.byteLength + rle.lengths.byteLength;
4352
- }
4353
- function toCachedMask(mask) {
4354
- const { mask: data, ...rest } = mask;
4355
- return {
4356
- ...rest,
4357
- rle: encodeMask(data, mask.width, mask.height)
4358
- };
4359
- }
4360
- function fromCachedMask(mask) {
4361
- const { rle, ...rest } = mask;
4362
- return {
4363
- ...rest,
4364
- mask: decodeMask(rle)
4365
- };
4366
- }
4367
- function resultBytes(result) {
4368
- let bytes = 512 + result.detections.length * 128 + result.objects.length * 256;
4369
- for (const m of result.masks ?? []) bytes += rleBytes(m.rle);
4370
- if (result.subject) bytes += rleBytes(result.subject.mask.rle);
4371
- return bytes;
4372
- }
4373
- /** Results by source (node + inference settings) and frame, least recently used out first. */
4374
- var VisionFrameCache = class {
4375
- entries = /* @__PURE__ */ new Map();
4376
- bytes = 0;
4377
- constructor(maxBytes = 256 * 1024 * 1024) {
4378
- this.maxBytes = maxBytes;
4379
- }
4380
- get(source, frame) {
4381
- const key = `${source}#${frame}`;
4382
- const hit = this.entries.get(key);
4383
- if (hit) {
4384
- this.entries.delete(key);
4385
- this.entries.set(key, hit);
4386
- }
4387
- return hit;
4388
- }
4389
- set(source, frame, result) {
4390
- const key = `${source}#${frame}`;
4391
- const old = this.entries.get(key);
4392
- if (old) {
4393
- this.bytes -= resultBytes(old);
4394
- this.entries.delete(key);
4395
- }
4396
- this.entries.set(key, result);
4397
- this.bytes += resultBytes(result);
4398
- for (const [k, v] of this.entries) {
4399
- if (this.bytes <= this.maxBytes) break;
4400
- this.entries.delete(k);
4401
- this.bytes -= resultBytes(v);
4402
- }
4403
- }
4404
- clear() {
4405
- this.entries.clear();
4406
- this.bytes = 0;
4407
- }
4408
- get size() {
4409
- return this.entries.size;
4410
- }
4411
- };
4412
- /**
4413
- * GPU composite for the mask-family modes: the picture times the subject mask,
4414
- * in one full-screen pass. Replaces building the RGBA result on the CPU and
4415
- * uploading it; only the 8-bit mask goes to the GPU.
4416
- *
4417
- * - matte: picture × mask (premultiplied, so the background is transparent)
4418
- * - mask: white silhouette (rgb = mask, a = 1)
4419
- * - crop: matte, with the subject's bounding box stretched to the frame
4420
- */
4421
- const WGSL = `
4422
- struct Params {
4423
- mode: u32, // 0 matte, 1 mask, 2 crop
4424
- _pad: u32,
4425
- cropMin: vec2<f32>, // uv of the subject bounds (crop)
4426
- cropMax: vec2<f32>,
4427
- _pad2: vec2<f32>,
4428
- };
4429
-
4430
- @group(0) @binding(0) var<uniform> params: Params;
4431
- @group(0) @binding(1) var picture: texture_2d<f32>;
4432
- @group(0) @binding(2) var mask: texture_2d<f32>;
4433
- @group(0) @binding(3) var samp: sampler;
4434
-
4435
- struct VSOut {
4436
- @builtin(position) pos: vec4<f32>,
4437
- @location(0) uv: vec2<f32>,
4438
- };
4439
-
4440
- @vertex fn vs(@builtin(vertex_index) i: u32) -> VSOut {
4441
- var p = array<vec2<f32>, 3>(vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0));
4442
- var out: VSOut;
4443
- out.pos = vec4(p[i], 0.0, 1.0);
4444
- out.uv = vec2(p[i].x * 0.5 + 0.5, 0.5 - p[i].y * 0.5);
4445
- return out;
4446
- }
4447
-
4448
- @fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
4449
- var uv = in.uv;
4450
- if (params.mode == 2u) {
4451
- uv = mix(params.cropMin, params.cropMax, uv);
4452
- }
4453
- let m = textureSampleLevel(mask, samp, uv, 0.0).r;
4454
- if (params.mode == 1u) {
4455
- return vec4(m, m, m, 1.0);
4456
- }
4457
- return textureSampleLevel(picture, samp, uv, 0.0) * m;
4458
- }
4459
- `;
4460
- var MatteCompositor = class {
4461
- pipeline;
4462
- sampler;
4463
- uniforms = [];
4464
- uniformIndex = 0;
4465
- /** One 8-bit mask texture per node, rewritten each frame. */
4466
- masks = /* @__PURE__ */ new Map();
4467
- constructor(device, format) {
4468
- this.device = device;
4469
- const module = device.createShaderModule({
4470
- label: "vision_matte_composite",
4471
- code: WGSL
4472
- });
4473
- this.pipeline = device.createRenderPipeline({
4474
- label: "vision_matte_composite",
4475
- layout: "auto",
4476
- vertex: {
4477
- module,
4478
- entryPoint: "vs"
4479
- },
4480
- fragment: {
4481
- module,
4482
- entryPoint: "fs",
4483
- targets: [{ format }]
4484
- },
4485
- primitive: { topology: "triangle-list" }
4486
- });
4487
- this.sampler = device.createSampler({
4488
- magFilter: "linear",
4489
- minFilter: "linear"
4490
- });
4491
- }
4492
- /** Uploads a frame-sized 0..255 mask for `key` and returns its texture. */
4493
- uploadMask(key, mask, width, height) {
4494
- let tex = this.masks.get(key);
4495
- if (!tex || tex.width !== width || tex.height !== height) {
4496
- tex?.destroy();
4497
- tex = this.device.createTexture({
4498
- label: `vision_mask_${key}`,
4499
- size: [width, height],
4500
- format: "r8unorm",
4501
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
4502
- });
4503
- this.masks.set(key, tex);
4504
- }
4505
- const aligned = Math.ceil(width / 256) * 256;
4506
- let bytes = mask;
4507
- if (aligned !== width) {
4508
- bytes = new Uint8Array(aligned * height);
4509
- for (let y = 0; y < height; y++) bytes.set(mask.subarray(y * width, (y + 1) * width), y * aligned);
4510
- }
4511
- this.device.queue.writeTexture({ texture: tex }, bytes.buffer, {
4512
- offset: bytes.byteOffset,
4513
- bytesPerRow: aligned,
4514
- rowsPerImage: height
4515
- }, {
4516
- width,
4517
- height
4518
- });
4519
- return tex;
4520
- }
4521
- /** Clears `target` and draws `picture` through `mask` into it. */
4522
- draw(encoder$1, target, picture, mask, mode, bounds) {
4523
- const w = mask.width;
4524
- const h = mask.height;
4525
- const data = new Float32Array(8);
4526
- const view = new Uint32Array(data.buffer);
4527
- view[0] = mode === "matte" ? 0 : mode === "mask" ? 1 : 2;
4528
- if (mode === "crop" && bounds) {
4529
- data[2] = bounds.x0 / w;
4530
- data[3] = bounds.y0 / h;
4531
- data[4] = (bounds.x1 + 1) / w;
4532
- data[5] = (bounds.y1 + 1) / h;
4533
- } else {
4534
- data[2] = 0;
4535
- data[3] = 0;
4536
- data[4] = 1;
4537
- data[5] = 1;
4538
- if (mode === "crop") view[0] = 0;
4539
- }
4540
- if (this.uniformIndex >= this.uniforms.length) this.uniforms.push(this.device.createBuffer({
4541
- size: data.byteLength,
4542
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
4543
- }));
4544
- const uniform = this.uniforms[this.uniformIndex];
4545
- this.uniformIndex = (this.uniformIndex + 1) % 16;
4546
- this.device.queue.writeBuffer(uniform, 0, data);
4547
- const bindGroup = this.device.createBindGroup({
4548
- layout: this.pipeline.getBindGroupLayout(0),
4549
- entries: [
4550
- {
4551
- binding: 0,
4552
- resource: { buffer: uniform }
4553
- },
4554
- {
4555
- binding: 1,
4556
- resource: picture.createView()
4557
- },
4558
- {
4559
- binding: 2,
4560
- resource: mask.createView()
4561
- },
4562
- {
4563
- binding: 3,
4564
- resource: this.sampler
4565
- }
4566
- ]
4567
- });
4568
- const pass = encoder$1.beginRenderPass({
4569
- label: "vision_matte_composite",
4570
- colorAttachments: [{
4571
- view: target,
4572
- loadOp: "clear",
4573
- storeOp: "store",
4574
- clearValue: {
4575
- r: 0,
4576
- g: 0,
4577
- b: 0,
4578
- a: 0
4579
- }
4580
- }]
4581
- });
4582
- pass.setPipeline(this.pipeline);
4583
- pass.setBindGroup(0, bindGroup);
4584
- pass.draw(3);
4585
- pass.end();
4586
- }
4587
- };
4588
- /**
4589
- * Runners by model options (variant, models dir, mirror), each with the runners
4590
- * derived from it by decode options — layers that differ only in classes or
4591
- * confidence share sessions instead of reloading the models.
4592
- */
4593
- const sharedRunners = /* @__PURE__ */ new Map();
4594
- const MAX_SHARED_RUNNERS = 4;
4595
- let sharedSkeletonRenderer = null;
4596
- let sharedCompositor = null;
4597
- let sharedCompositorFormat = null;
4598
- /** Analysed frames, shared by every vision node in the process. */
4599
- const frameCache = new VisionFrameCache();
4600
- /** The frame each node's child texture holds (drawn on its last call). */
4601
- const heldFrameByNode = /* @__PURE__ */ new Map();
4602
- /** Per node: a copy of the held frame, the frame being analysed, and the composited matte. */
4603
- const heldTextures = /* @__PURE__ */ new Map();
4604
- const analysisTextures = /* @__PURE__ */ new Map();
4605
- const matteTextures = /* @__PURE__ */ new Map();
4606
- /** One tracker per vision node — track ids must not mix across nodes/sources. */
4607
- const objectTrackers = /* @__PURE__ */ new Map();
4608
- /**
4609
- * Persistent per-node child textures. The shared frame encoder is submitted at
4610
- * the END of the frame, so a node renderer cannot read back the child it just
4611
- * drew. We keep the texture around and read back the PREVIOUS frame's pixels at
4612
- * the start of the next call — a stable one-frame delay instead of the
4613
- * unpredictable multi-frame lag you get from pooled textures.
4614
- *
4615
- * Keyed on the stable Vision `Effect` instance (render ids change every frame),
4616
- * with a size-keyed fallback for raw operation nodes.
4617
- */
4618
- const childTexturesByEffect = /* @__PURE__ */ new WeakMap();
4619
- const childTexturesByKey = /* @__PURE__ */ new Map();
4620
- /**
4621
- * Last successful subject mask, reused for a few frames when the model misses —
4622
- * a transient miss then holds the silhouette instead of flashing the raw plate.
4623
- * Keyed per node/effect so multiple vision nodes do not collide.
4624
- */
4625
- const lastSubjectByNode = /* @__PURE__ */ new Map();
4626
- const SUBJECT_HOLD_FRAMES = 3;
4627
- /** A per-node texture shaped like `like`, recreated when the size changes. */
4628
- function nodeTexture(textures, device, key, like, usage, label) {
4629
- let tex = textures.get(key);
4630
- if (!tex || tex.width !== like.width || tex.height !== like.height || tex.format !== like.format) {
4631
- tex?.destroy();
4632
- tex = device.createTexture({
4633
- size: [like.width, like.height],
4634
- format: like.format,
4635
- usage,
4636
- label
4637
- });
4638
- textures.set(key, tex);
4639
- }
4640
- return tex;
4641
- }
4642
- const heldTexture = (device, key, like) => nodeTexture(heldTextures, device, key, like, GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING, "vision_held_frame");
4643
- const analysisTexture = (device, key, like) => nodeTexture(analysisTextures, device, key, like, GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC, "vision_analysis_frame");
4644
- const matteTexture = (device, key, like) => nodeTexture(matteTextures, device, key, like, GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC, "vision_matte");
4645
- /** Everything that decides a frame's results besides the frame itself. */
4646
- function cacheSource(nodeKey, child, op, width, height) {
4647
- const c = child;
4648
- return JSON.stringify([
4649
- nodeKey,
4650
- c?.operation?.id ?? c?.id ?? null,
4651
- width,
4652
- height,
4653
- op.mode ?? "passthrough",
4654
- op.variant,
4655
- op.confidence,
4656
- op.classes,
4657
- op.maskThreshold,
4658
- op.featherRadius,
4659
- op.matteSource,
4660
- op.keyBackground === true,
4661
- op.maxMissedFrames
4662
- ]);
4663
- }
4664
- /** The background-key threshold at `frame` (it may be animated). */
4665
- function backgroundKeyThreshold(op, frame, fps) {
4666
- const raw = op.backgroundKeyThreshold;
4667
- if (typeof raw === "number") return raw;
4668
- if (typeof raw?.get === "function") return Number(raw.get({
4669
- frame,
4670
- fps
4671
- }));
4672
- if (typeof raw?._value === "number") return Number(raw._value);
4673
- return 70;
4674
- }
4675
- /**
4676
- * The model's subject, or the last one through brief misses: a transient miss
4677
- * then holds the silhouette instead of flashing the raw plate.
4678
- */
4679
- function selectSubject(selected, nodeKey, frame) {
4680
- if (selected) {
4681
- lastSubjectByNode.set(nodeKey, {
4682
- mask: selected,
4683
- frame
4684
- });
4685
- return selected;
4686
- }
4687
- const last = lastSubjectByNode.get(nodeKey);
4688
- if (last && frame - last.frame <= SUBJECT_HOLD_FRAMES) return last.mask;
4689
- }
4690
- /**
4691
- * Lazy shared runner — `create()` is a pure constructor (zero I/O); the first frame that
4692
- * requests a task triggers that task's model download at inference time (never at init).
4693
- * Nodes with the same model options share sessions; decode options (classes,
4694
- * confidence, …) get a derived runner over the same sessions.
4695
- */
4696
- function getSharedRunner(op) {
4697
- const modelOptions = {
4698
- variant: op.variant,
4699
- modelsDir: op.modelsDir,
4700
- baseUrl: op.baseUrl
4701
- };
4702
- const modelKey = JSON.stringify(modelOptions);
4703
- let entry = sharedRunners.get(modelKey);
4704
- if (!entry) {
4705
- if (sharedRunners.size >= MAX_SHARED_RUNNERS) {
4706
- const [oldestKey, oldest] = sharedRunners.entries().next().value;
4707
- oldest.runner.close();
4708
- sharedRunners.delete(oldestKey);
4709
- }
4710
- entry = {
4711
- runner: VisionRunner.create(modelOptions),
4712
- derived: /* @__PURE__ */ new Map()
4713
- };
4714
- sharedRunners.set(modelKey, entry);
4715
- }
4716
- const decodeOptions = {
4717
- confidence: op.confidence,
4718
- classes: op.classes,
4719
- maskThreshold: op.maskThreshold,
4720
- featherRadius: op.featherRadius
4721
- };
4722
- const decodeKey = JSON.stringify(decodeOptions);
4723
- let runner = entry.derived.get(decodeKey);
4724
- if (!runner) {
4725
- runner = entry.runner.derive(decodeOptions);
4726
- entry.derived.set(decodeKey, runner);
4727
- }
4728
- return runner;
4729
- }
4730
- function getObjectTracker(nodeKey, op) {
4731
- let tracker = objectTrackers.get(nodeKey);
4732
- if (!tracker) {
4733
- tracker = new TemporalObjectTracker({ maxMissedFrames: op.maxMissedFrames ?? 15 });
4734
- objectTrackers.set(nodeKey, tracker);
4735
- }
4736
- return tracker;
4737
- }
4738
- /**
4739
- * Normalizes the runner's pose keypoints (plate pixel space) to [0, 1] landmarks, which is
4740
- * the contract the signal bundle and the skeleton pipeline expect.
4741
- */
4742
- function normalizePoseKeypoints(result, width, height) {
4743
- if (width <= 0 || height <= 0) return result;
4744
- return { people: result.people.map((person) => ({
4745
- ...person,
4746
- keypoints: person.keypoints.map((k) => ({
4747
- x: k.x / width,
4748
- y: k.y / height,
4749
- visibility: k.visibility
4750
- }))
4751
- })) };
4752
- }
4753
- /** Case-insensitive class filter, as the runner's decode applies it. */
4754
- function matchesClasses(category, classes) {
4755
- if (!classes) return true;
4756
- const c = category.toLowerCase();
4757
- return classes.some((k) => k.toLowerCase() === c);
4758
- }
4759
- /** Assigns each decoded instance mask to the temporal track whose box center is nearest the mask's centroid. */
4760
- function assignMasksToTracks(masks, tracked) {
4761
- return masks.map((mask) => {
4762
- const { cx, cy } = maskCentroid(mask);
4763
- let best = null;
4764
- for (const obj of tracked) {
4765
- const dx = obj.centerX - cx;
4766
- const dy = obj.centerY - cy;
4767
- const distance = dx * dx + dy * dy;
4768
- if (!best || distance < best.distance) best = {
4769
- trackId: obj.trackId,
4770
- distance
4771
- };
4772
- }
4773
- return best ? {
4774
- ...mask,
4775
- trackId: best.trackId
4776
- } : mask;
4777
- });
4778
- }
4779
- /**
4780
- * Grows a subject mask into connected foreground pixels — seeding a flood fill
4781
- * from the subject through pixels that differ from the sampled backdrop recovers
4782
- * thin or fast-moving edges (hair, fabric) without adding a near-uniform studio
4783
- * wall or its soft grey shadow.
4784
- */
4785
- function fillInternalHoles(mask, width, height) {
4786
- const n = width * height;
4787
- const exterior = new Uint8Array(n);
4788
- const queue = new Int32Array(n);
4789
- let tail = 0;
4790
- const seed = (i) => {
4791
- if (exterior[i] || mask[i] > 0) return;
4792
- exterior[i] = 1;
4793
- queue[tail++] = i;
4794
- };
4795
- for (let x = 0; x < width; x++) {
4796
- seed(x);
4797
- seed((height - 1) * width + x);
4798
- }
4799
- for (let y = 0; y < height; y++) {
4800
- seed(y * width);
4801
- seed(y * width + width - 1);
4802
- }
4803
- let head = 0;
4804
- while (head < tail) {
4805
- const i = queue[head++];
4806
- const x = i % width;
4807
- let j = i + 1;
4808
- if (x + 1 < width && !exterior[j] && mask[j] === 0) {
4809
- exterior[j] = 1;
4810
- queue[tail++] = j;
4811
- }
4812
- j = i - 1;
4813
- if (x > 0 && !exterior[j] && mask[j] === 0) {
4814
- exterior[j] = 1;
4815
- queue[tail++] = j;
4816
- }
4817
- j = i + width;
4818
- if (j < n && !exterior[j] && mask[j] === 0) {
4819
- exterior[j] = 1;
4820
- queue[tail++] = j;
4821
- }
4822
- j = i - width;
4823
- if (j >= 0 && !exterior[j] && mask[j] === 0) {
4824
- exterior[j] = 1;
4825
- queue[tail++] = j;
4826
- }
4827
- }
4828
- for (let i = 0; i < n; i++) if (mask[i] === 0 && exterior[i] === 0) mask[i] = 255;
4829
- }
4830
- function smoothMaskBoundary(mask, width, height, radius = 2) {
4831
- if (radius <= 0) return mask;
4832
- const temp = new Uint8Array(width * height);
4833
- const out = new Uint8Array(width * height);
4834
- const div = 2 * radius + 1;
4835
- for (let y = 0; y < height; y++) {
4836
- const row = y * width;
4837
- let sum = 0;
4838
- for (let k = -radius; k <= radius; k++) {
4839
- const x = Math.max(0, Math.min(width - 1, k));
4840
- sum += mask[row + x];
4841
- }
4842
- for (let x = 0; x < width; x++) {
4843
- temp[row + x] = Math.round(sum / div);
4844
- const xOut = Math.max(0, x - radius);
4845
- const xIn = Math.min(width - 1, x + radius + 1);
4846
- sum += mask[row + xIn] - mask[row + xOut];
4847
- }
4848
- }
4849
- const sums = new Float64Array(width);
4850
- for (let k = -radius; k <= radius; k++) {
4851
- const row = Math.max(0, Math.min(height - 1, k)) * width;
4852
- for (let x = 0; x < width; x++) sums[x] += temp[row + x];
4853
- }
4854
- for (let y = 0; y < height; y++) {
4855
- const row = y * width;
4856
- const rowOut = Math.max(0, y - radius) * width;
4857
- const rowIn = Math.min(height - 1, y + radius + 1) * width;
4858
- for (let x = 0; x < width; x++) {
4859
- out[row + x] = Math.round(sums[x] / div);
4860
- sums[x] += temp[rowIn + x] - temp[rowOut + x];
4861
- }
4862
- }
4863
- return out;
4864
- }
4865
- function growMaskIntoForeground(mask, width, height, pixels, threshold, featherRadius) {
4866
- let br = 0;
4867
- let bg = 0;
4868
- let bb = 0;
4869
- let count = 0;
4870
- const sample = (x, y) => {
4871
- const i = y * width + x;
4872
- if (mask[i]) return;
4873
- const p = i * 4;
4874
- br += pixels[p];
4875
- bg += pixels[p + 1];
4876
- bb += pixels[p + 2];
4877
- count++;
4878
- };
4879
- for (let x = 0; x < width; x += 4) {
4880
- sample(x, 0);
4881
- sample(x, height - 1);
4882
- }
4883
- for (let y = 0; y < height; y += 4) {
4884
- sample(0, y);
4885
- sample(width - 1, y);
4886
- }
4887
- if (count === 0) return mask;
4888
- br /= count;
4889
- bg /= count;
4890
- bb /= count;
4891
- const n = width * height;
4892
- const fg = new Uint8Array(n);
4893
- for (let i = 0, p = 0; i < n; i++, p += 4) fg[i] = Math.max(Math.abs(pixels[p] - br), Math.abs(pixels[p + 1] - bg), Math.abs(pixels[p + 2] - bb)) > threshold ? 1 : 0;
4894
- const queue = new Int32Array(n);
4895
- let tail = 0;
4896
- for (let i = 0; i < n; i++) if (mask[i] > 0) {
4897
- if (fg[i]) mask[i] = 255;
4898
- queue[tail++] = i;
4899
- }
4900
- let head = 0;
4901
- while (head < tail) {
4902
- const i = queue[head++];
4903
- const x = i % width;
4904
- let j = i + 1;
4905
- if (x + 1 < width && mask[j] !== 255 && fg[j]) {
4906
- mask[j] = 255;
4907
- queue[tail++] = j;
4908
- }
4909
- j = i - 1;
4910
- if (x > 0 && mask[j] !== 255 && fg[j]) {
4911
- mask[j] = 255;
4912
- queue[tail++] = j;
4913
- }
4914
- j = i + width;
4915
- if (j < n && mask[j] !== 255 && fg[j]) {
4916
- mask[j] = 255;
4917
- queue[tail++] = j;
4918
- }
4919
- j = i - width;
4920
- if (j >= 0 && mask[j] !== 255 && fg[j]) {
4921
- mask[j] = 255;
4922
- queue[tail++] = j;
4923
- }
4924
- }
4925
- fillInternalHoles(mask, width, height);
4926
- return smoothMaskBoundary(mask, width, height, featherRadius !== void 0 && featherRadius > 0 ? Math.max(1, Math.min(8, Math.round(featherRadius * 50))) : 2);
4927
- }
4928
- function maskCentroid(mask) {
4929
- const { mask: data, width, height } = mask;
4930
- let sumX = 0;
4931
- let sumY = 0;
4932
- let count = 0;
4933
- for (let y = 0; y < height; y++) {
4934
- const row = y * width;
4935
- for (let x = 0; x < width; x++) if (data[row + x] > 0) {
4936
- sumX += x;
4937
- sumY += y;
4938
- count++;
4939
- }
4940
- }
4941
- if (count === 0) return {
4942
- cx: 0,
4943
- cy: 0
4944
- };
4945
- return {
4946
- cx: sumX / count,
4947
- cy: sumY / count
4948
- };
4949
- }
4950
- const VisionWebGPURenderer = async (args) => {
4951
- const { ctx, encoder: encoder$1, pass, targetView, targetWidth, targetHeight, props, drawChild } = args;
4952
- const { virtualMedia } = props;
4953
- setVisionDevice(ctx.device);
4954
- const rawOp = virtualMedia?.operation;
4955
- if (rawOp?.op !== "Vision") return;
4956
- const op = rawOp;
4957
- pass.end();
4958
- const childMedia = virtualMedia?.children?.[0];
4959
- if (!childMedia) return;
4960
- const effectKey = op.effect;
4961
- const hasEffectKey = effectKey !== void 0 && effectKey !== null;
4962
- const nodeKeyStr = virtualMedia?.id ?? rawOp?.id ?? `${targetWidth}x${targetHeight}_${op.mode}_${op.variant}_${op.keyBackground}_${op.backgroundKeyThreshold}`;
4963
- const fallbackKey = `vision-${nodeKeyStr}`;
4964
- let childTex = hasEffectKey ? childTexturesByEffect.get(effectKey) : childTexturesByKey.get(fallbackKey);
4965
- if (childTex && (childTex.width !== targetWidth || childTex.height !== targetHeight)) {
4966
- childTex.destroy();
4967
- childTex = void 0;
4968
- if (hasEffectKey) childTexturesByEffect.delete(effectKey);
4969
- else childTexturesByKey.delete(fallbackKey);
4970
- }
4971
- const hasPreviousFrame = childTex !== void 0;
4972
- if (!childTex) {
4973
- childTex = ctx.device.createTexture({
4974
- size: [targetWidth, targetHeight],
4975
- format: ctx.renderer.format,
4976
- usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC,
4977
- label: "vision_child_persistent"
4978
- });
4979
- if (hasEffectKey) childTexturesByEffect.set(effectKey, childTex);
4980
- else childTexturesByKey.set(fallbackKey, childTex);
4981
- if (childTexturesByKey.size > 4) {
4982
- const oldest = childTexturesByKey.keys().next().value;
4983
- if (oldest && oldest !== fallbackKey) {
4984
- childTexturesByKey.get(oldest)?.destroy();
4985
- childTexturesByKey.delete(oldest);
4986
- }
4987
- }
4988
- }
4989
- const frameIdx = props.frame ?? 0;
4990
- const compositionFrame = props.compositionFrame ?? frameIdx;
4991
- const fps = props.fps ?? 24;
4992
- const mode = op.mode ?? "passthrough";
4993
- const isMatteMode = mode === "mask" || mode === "matte" || mode === "crop";
4994
- const visionBundle = op.visionBundle ?? virtualMedia.visionBundle;
4995
- const wantsDetection = op.enableDetection !== false || mode === "boxes" || mode === "tracking";
4996
- const wantsSegmentation = op.enableSegmentation === true || isMatteMode && op.matteSource !== "selfie";
4997
- const wantsSelfie = op.enableMatte === true || isMatteMode && op.matteSource === "selfie";
4998
- const wantsPose = op.enablePose === true || mode === "skeleton";
4999
- const clipSubject = isMatteMode && !visionBundle && !wantsPose && !wantsSelfie && op.keyBackground !== true ? clipSubjectFor(effectKey, props.sourceTimeSec === void 0 ? frameIdx : props.sourceTimeSec * fps, fps, targetWidth, targetHeight) : void 0;
5000
- const clipPose = mode === "skeleton" && !visionBundle ? clipPoseFor(effectKey, props.sourceTimeSec === void 0 ? frameIdx : props.sourceTimeSec * fps, fps, targetWidth, targetHeight) : void 0;
5001
- const fromClip = clipSubject !== void 0 || clipPose !== void 0;
5002
- const cacheable = !fromClip && !wantsSelfie && !wantsPose && (wantsDetection || wantsSegmentation);
5003
- const source = cacheable ? cacheSource(nodeKeyStr, childMedia, op, targetWidth, targetHeight) : "";
5004
- const keyThresholdAt = (frame$1) => op.keyBackground === true ? backgroundKeyThreshold(op, compositionFrame - (frameIdx - frame$1), fps) : void 0;
5005
- const lookup = (frame$1) => {
5006
- if (!cacheable || frame$1 === void 0) return void 0;
5007
- const hit = frameCache.get(source, frame$1);
5008
- if (!hit || hit.keyThreshold !== keyThresholdAt(frame$1)) return void 0;
5009
- if (wantsSegmentation && visionBundle && !hit.masks) return void 0;
5010
- return hit;
5011
- };
5012
- const heldFrame = hasPreviousFrame ? heldFrameByNode.get(nodeKeyStr) : void 0;
5013
- let cached = lookup(frameIdx);
5014
- const exact = fromClip || cached !== void 0;
5015
- if (!cached) cached = lookup(heldFrame);
5016
- let heldTex;
5017
- if (isMatteMode && hasPreviousFrame && !exact) {
5018
- heldTex = heldTexture(ctx.device, nodeKeyStr, childTex);
5019
- encoder$1.copyTextureToTexture({ texture: childTex }, { texture: heldTex }, [
5020
- targetWidth,
5021
- targetHeight,
5022
- 1
5023
- ]);
5024
- }
5025
- let frame;
5026
- let framePixels = null;
5027
- if (hasPreviousFrame && !cached && !fromClip) {
5028
- const analysis = analysisTexture(ctx.device, nodeKeyStr, childTex);
5029
- const copy = ctx.device.createCommandEncoder({ label: "vision_analysis_copy" });
5030
- copy.copyTextureToTexture({ texture: childTex }, { texture: analysis }, [
5031
- targetWidth,
5032
- targetHeight,
5033
- 1
5034
- ]);
5035
- ctx.device.queue.submit([copy.finish()]);
5036
- frame = {
5037
- texture: analysis,
5038
- device: ctx.device,
5039
- width: targetWidth,
5040
- height: targetHeight
5041
- };
5042
- if (isMatteMode && op.keyBackground === true) framePixels = (await readTexturePixels(frame)).data;
5043
- }
5044
- const childView = childTex.createView();
5045
- ctx.renderer.beginFrame(encoder$1, childView, {
5046
- r: 0,
5047
- g: 0,
5048
- b: 0,
5049
- a: 0
5050
- }, targetWidth, targetHeight, "clear").end();
5051
- await drawChild(childMedia, { ...props }, childView, childTex, targetWidth, targetHeight);
5052
- heldFrameByNode.set(nodeKeyStr, frameIdx);
5053
- let frameObjects = [];
5054
- let frameMasks = [];
5055
- let personMatte;
5056
- let currentPoseRes;
5057
- let subject;
5058
- if (fromClip) {
5059
- subject = clipSubject ?? void 0;
5060
- if (subject) lastSubjectByNode.set(nodeKeyStr, {
5061
- mask: subject,
5062
- frame: frameIdx
5063
- });
5064
- else lastSubjectByNode.delete(nodeKeyStr);
5065
- } else if (cached) {
5066
- frameObjects = cached.objects;
5067
- if (wantsDetection) visionBundle?.setObjectResult(frameIdx, {
5068
- objects: cached.objects,
5069
- rawDetections: cached.detections
5070
- });
5071
- if (wantsSegmentation && visionBundle && cached.masks) {
5072
- frameMasks = cached.masks.map(fromCachedMask);
5073
- visionBundle.setMaskResult(frameIdx, frameMasks);
5074
- }
5075
- if (cached.subject) {
5076
- subject = fromCachedMask(cached.subject.mask);
5077
- lastSubjectByNode.set(nodeKeyStr, {
5078
- mask: subject,
5079
- frame: frameIdx
5080
- });
5081
- }
5082
- } else if (frame) {
5083
- const runner = getSharedRunner(op);
5084
- const image = frame;
5085
- let detections = [];
5086
- if (wantsDetection) {
5087
- detections = await runner.detect(image);
5088
- const tracker = getObjectTracker(nodeKeyStr, op);
5089
- if (frameIdx === 0) tracker.reset();
5090
- frameObjects = tracker.update(detections, frameIdx, fps);
5091
- visionBundle?.setObjectResult(frameIdx, {
5092
- objects: frameObjects,
5093
- rawDetections: detections
5094
- });
5095
- }
5096
- let subjectMasks = [];
5097
- if (wantsSegmentation) {
5098
- const subjectFromAllClasses = isMatteMode && op.matteSource !== "selfie" && op.classes !== void 0;
5099
- const segRes = await (subjectFromAllClasses ? getSharedRunner({
5100
- ...op,
5101
- classes: void 0
5102
- }) : runner).segment(image);
5103
- frameMasks = assignMasksToTracks(subjectFromAllClasses ? segRes.masks.filter((m) => matchesClasses(m.category, op.classes)) : segRes.masks, frameObjects);
5104
- subjectMasks = subjectFromAllClasses ? segRes.masks : frameMasks;
5105
- visionBundle?.setMaskResult(frameIdx, frameMasks);
5106
- }
5107
- if (wantsSelfie) {
5108
- personMatte = await runner.matte(image);
5109
- visionBundle?.setMatteResult(frameIdx, personMatte);
5110
- }
5111
- if (wantsPose) {
5112
- currentPoseRes = { people: matchPoseToTracks(normalizePoseKeypoints(await runner.pose(image), image.width, image.height).people, frameObjects) };
5113
- visionBundle?.setPoseResult(frameIdx, currentPoseRes);
5114
- }
5115
- if (isMatteMode) {
5116
- subject = selectSubject(op.matteSource === "selfie" ? personMatteAsMask(personMatte) : mergeSubjectMask(subjectMasks.length > 0 ? subjectMasks : visionBundle?.getMaskResult(frameIdx) ?? [], { classes: op.classes }), nodeKeyStr, frameIdx);
5117
- const threshold = keyThresholdAt(heldFrame ?? frameIdx);
5118
- if (subject && threshold !== void 0 && framePixels) subject = {
5119
- ...subject,
5120
- mask: growMaskIntoForeground(subject.mask, subject.width, subject.height, framePixels, threshold, op.featherRadius)
5121
- };
5122
- }
5123
- if (cacheable && heldFrame !== void 0) frameCache.set(source, heldFrame, {
5124
- detections,
5125
- objects: frameObjects,
5126
- masks: visionBundle ? frameMasks.map(toCachedMask) : null,
5127
- subject: subject ? { mask: toCachedMask(subject) } : null,
5128
- keyThreshold: keyThresholdAt(heldFrame)
5129
- });
5130
- }
5131
- if (isMatteMode) {
5132
- const picture = exact ? childTex : heldTex;
5133
- if (!subject || !picture) {
5134
- ctx.renderer.beginFrame(encoder$1, targetView, {
5135
- r: 0,
5136
- g: 0,
5137
- b: 0,
5138
- a: 0
5139
- }, targetWidth, targetHeight, "clear").end();
5140
- return;
5141
- }
5142
- if (!sharedCompositor || sharedCompositorFormat !== ctx.renderer.format) {
5143
- sharedCompositor = new MatteCompositor(ctx.device, ctx.renderer.format);
5144
- sharedCompositorFormat = ctx.renderer.format;
5145
- }
5146
- const maskTex = sharedCompositor.uploadMask(nodeKeyStr, subject.mask, subject.width, subject.height);
5147
- const matteTex = matteTexture(ctx.device, nodeKeyStr, childTex);
5148
- sharedCompositor.draw(encoder$1, matteTex.createView(), picture, maskTex, mode, mode === "crop" ? maskBounds(subject) ?? void 0 : void 0);
5149
- visionBundle?.setStencilTexture(matteTex);
5150
- const outPass$1 = ctx.renderer.beginFrame(encoder$1, targetView, {
5151
- r: 0,
5152
- g: 0,
5153
- b: 0,
5154
- a: 0
5155
- }, targetWidth, targetHeight, "clear");
5156
- ctx.renderer.drawTexture(outPass$1, matteTex, {
5157
- x: 0,
5158
- y: 0,
5159
- width: targetWidth,
5160
- height: targetHeight
5161
- });
5162
- outPass$1.end();
5163
- return;
5164
- }
5165
- if (mode === "skeleton") {
5166
- if (!sharedSkeletonRenderer) sharedSkeletonRenderer = new PoseSkeletonRenderer(ctx.device);
5167
- const keypoints = clipPose !== void 0 ? clipPose : (visionBundle?.getPoseResult(frameIdx) ?? currentPoseRes)?.people[0]?.keypoints;
5168
- const skelPass = ctx.renderer.beginFrame(encoder$1, targetView, {
5169
- r: 0,
5170
- g: 0,
5171
- b: 0,
5172
- a: 0
5173
- }, targetWidth, targetHeight, "clear");
5174
- if (keypoints && keypoints.length > 0) {
5175
- const skelTex = sharedSkeletonRenderer.renderToTexture(keypoints, {
5176
- width: targetWidth,
5177
- height: targetHeight
5178
- });
5179
- ctx.renderer.drawTexture(skelPass, skelTex, {
5180
- x: 0,
5181
- y: 0,
5182
- width: targetWidth,
5183
- height: targetHeight
5184
- });
5185
- }
5186
- skelPass.end();
5187
- return;
5188
- }
5189
- if (mode === "boxes" || mode === "tracking") {
5190
- const outPass$1 = ctx.renderer.beginFrame(encoder$1, targetView, {
5191
- r: 0,
5192
- g: 0,
5193
- b: 0,
5194
- a: 0
5195
- }, targetWidth, targetHeight, "clear");
5196
- ctx.renderer.drawTexture(outPass$1, childTex, {
5197
- x: 0,
5198
- y: 0,
5199
- width: targetWidth,
5200
- height: targetHeight
5201
- });
5202
- const objects = frameObjects.length > 0 ? frameObjects : visionBundle?.getObjectResult(frameIdx).objects ?? [];
5203
- if (objects.length > 0) {
5204
- const boxColor = "#38bdf8";
5205
- const stroke = 2;
5206
- for (const obj of objects) {
5207
- if (!obj.active) continue;
5208
- const b = obj.boundingBox;
5209
- ctx.renderer.drawRect(outPass$1, {
5210
- x: b.originX,
5211
- y: b.originY,
5212
- width: b.width,
5213
- height: stroke
5214
- }, boxColor);
5215
- ctx.renderer.drawRect(outPass$1, {
5216
- x: b.originX,
5217
- y: b.originY + b.height - stroke,
5218
- width: b.width,
5219
- height: stroke
5220
- }, boxColor);
5221
- ctx.renderer.drawRect(outPass$1, {
5222
- x: b.originX,
5223
- y: b.originY,
5224
- width: stroke,
5225
- height: b.height
5226
- }, boxColor);
5227
- ctx.renderer.drawRect(outPass$1, {
5228
- x: b.originX + b.width - stroke,
5229
- y: b.originY,
5230
- width: stroke,
5231
- height: b.height
5232
- }, boxColor);
5233
- const cornerLen = Math.min(16, b.width / 4, b.height / 4);
5234
- ctx.renderer.drawRect(outPass$1, {
5235
- x: b.originX,
5236
- y: b.originY,
5237
- width: cornerLen,
5238
- height: stroke * 2
5239
- }, "#ffffff");
5240
- ctx.renderer.drawRect(outPass$1, {
5241
- x: b.originX,
5242
- y: b.originY,
5243
- width: stroke * 2,
5244
- height: cornerLen
5245
- }, "#ffffff");
5246
- if (mode === "tracking") ctx.renderer.drawRect(outPass$1, {
5247
- x: obj.centerX - 3,
5248
- y: obj.centerY - 3,
5249
- width: 6,
5250
- height: 6
5251
- }, "#ef4444", 3);
5252
- }
5253
- }
5254
- outPass$1.end();
5255
- return;
5256
- }
5257
- const outPass = ctx.renderer.beginFrame(encoder$1, targetView, {
5258
- r: 0,
5259
- g: 0,
5260
- b: 0,
5261
- a: 0
5262
- }, targetWidth, targetHeight, "clear");
5263
- ctx.renderer.drawTexture(outPass, childTex, {
5264
- x: 0,
5265
- y: 0,
5266
- width: targetWidth,
5267
- height: targetHeight
5268
- });
5269
- outPass.end();
5270
- };
5271
- /**
5272
- * The subject a linked `comp.vision` clip holds for a source frame (see
5273
- * CLIP_SUBJECT). Its mask is in source pixels; the composite samples it by
5274
- * uv, so it fits any target of the same aspect. Other shapes fall back.
5275
- */
5276
- function clipSubjectFor(effect, frame, fps, width, height) {
5277
- const source = linkedClip(effect);
5278
- const subject = source?.subject(frame, fps);
5279
- if (!subject || !source) return subject;
5280
- return fitsTarget(source, subject.width / subject.height, width / height) ? subject : void 0;
5281
- }
5282
- /**
5283
- * The pose a linked `comp.vision` clip matched to its subject for a source
5284
- * frame, normalized to the source; it fits targets of the same aspect.
5285
- */
5286
- function clipPoseFor(effect, frame, fps, width, height) {
5287
- const source = linkedClip(effect);
5288
- const pose = source?.pose?.(frame, fps);
5289
- if (!pose || !source) return pose === null ? null : void 0;
5290
- return fitsTarget(source, pose.width / pose.height, width / height) ? pose.keypoints : void 0;
5291
- }
5292
- function linkedClip(effect) {
5293
- return effect?.[CLIP_SUBJECT];
5294
- }
5295
- /** Source results map onto a target of the same aspect; a prompted clip must not fall back. */
5296
- function fitsTarget(source, sourceAspect, targetAspect) {
5297
- if (Math.abs(sourceAspect / targetAspect - 1) < .01) return true;
5298
- if (source.exact) throw new Error("A prompted clip matte requires the source aspect ratio. Apply layout cropping after the source matte.");
5299
- return false;
5300
- }
5301
- /** Adapts a Selfie Segmenter matte to the instance-mask shape the composite path takes. */
5302
- function personMatteAsMask(matte) {
5303
- if (!matte || matte.coverage <= 0) return void 0;
5304
- const area = Math.round(matte.coverage * matte.width * matte.height);
5305
- return {
5306
- category: "person",
5307
- mask: matte.mask,
5308
- width: matte.width,
5309
- height: matte.height,
5310
- area,
5311
- coverage: matte.coverage,
5312
- detectionIndex: -1
5313
- };
5314
- }
5315
- var renderers_default = defineRenderer({ WebGPURenderer: VisionWebGPURenderer });
5316
-
5317
- //#endregion
5318
- export { pinNodeToObject as _, COCO17_KEYPOINT_NAMES as a, SpatialLandmarkTransformer as c, VisionNode as d, VisionRunner as f, pinNodeToLandmark as g, mergeSubjectMask as h, COCO17_KEYPOINTS as i, TemporalObjectTracker as l, maskObject as m, CLIP_SUBJECT as n, PoseSkeletonRenderer as o, analyzeSequence as p, COCO17_BONES as r, SegmentationTexturePool as s, renderers_default as t, VisionBundle as u, COCO_CLASSES as v };
5319
- //# sourceMappingURL=renderer-B2P1vgb7.mjs.map
4383
+ export { setVisionDevice as A, matchPoseToTracks as C, readTexturePixels as D, pinNodeToObject as E, registerVisionModel as F, varint as M, COCO_CLASSES as N, readVarint as O, VISION_MODELS as P, maskObject as S, pinNodeToLandmark as T, fields as _, PoseSkeletonRenderer as a, lengthDelimited as b, TemporalObjectTracker as c, VisionNode as d, VisionRunner as f, encoder as g, createDefaultSessionProvider as h, COCO17_KEYPOINT_NAMES as i, strings as j, sessionCompute as k, VisionBundle as l, concat as m, COCO17_BONES as n, SegmentationTexturePool as o, analyzeSequence as p, COCO17_KEYPOINTS as r, SpatialLandmarkTransformer as s, CLIP_SUBJECT as t, VisionModelStore as u, firstString as v, mergeSubjectMask as w, maskBounds as x, imageToTensor as y };
4384
+ //# sourceMappingURL=src-BU6vm9sP-DFJ3phW0.mjs.map