framefields 2.8.0 → 2.9.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 (460) hide show
  1. package/README.md +30 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CGVJlZb9.mjs → audio-BfQg37MW.mjs} +3 -3
  5. package/dist/{audio-CGVJlZb9.mjs.map → audio-BfQg37MW.mjs.map} +1 -1
  6. package/dist/{audio-CxAUxVyA.d.mts → audio-Ccpl9mjV.d.mts} +3 -3
  7. package/dist/{audio-CxAUxVyA.d.mts.map → audio-Ccpl9mjV.d.mts.map} +1 -1
  8. package/dist/cli/check-worker.mjs +44 -44
  9. package/dist/components/index.d.mts +10 -10
  10. package/dist/components/index.mjs +43 -43
  11. package/dist/{dist-CnFcSau0.mjs → dist-C1cCW7Bt.mjs} +2297 -213
  12. package/dist/dist-C1cCW7Bt.mjs.map +1 -0
  13. package/dist/{dist-C5eZw8ms.mjs → dist-C8Xq3zgx.mjs} +2 -2
  14. package/dist/{dist-C5eZw8ms.mjs.map → dist-C8Xq3zgx.mjs.map} +1 -1
  15. package/dist/effects/index.d.mts +4 -4
  16. package/dist/effects/index.mjs +35 -35
  17. package/dist/{effects-DdvkiI3u.mjs → effects-CemgqEPv.mjs} +2 -2
  18. package/dist/{effects-DdvkiI3u.mjs.map → effects-CemgqEPv.mjs.map} +1 -1
  19. package/dist/fonts/index.mjs +2 -2
  20. package/dist/{fonts-k_89s1HO.mjs → fonts-BW0pPcvJ.mjs} +2 -2
  21. package/dist/{fonts-k_89s1HO.mjs.map → fonts-BW0pPcvJ.mjs.map} +1 -1
  22. package/dist/{gpu-BoyykRdD.mjs → gpu-CMaa63nz.mjs} +2 -2
  23. package/dist/{gpu-BoyykRdD.mjs.map → gpu-CMaa63nz.mjs.map} +1 -1
  24. package/dist/{index-CPFKis94.d.mts → index-7Z9_a_iB.d.mts} +3 -3
  25. package/dist/{index-CPFKis94.d.mts.map → index-7Z9_a_iB.d.mts.map} +1 -1
  26. package/dist/{index-CFKMZDv1.d.mts → index-BIjMAW1h.d.mts} +2 -2
  27. package/dist/{index-CFKMZDv1.d.mts.map → index-BIjMAW1h.d.mts.map} +1 -1
  28. package/dist/{index-BukqOGDa.d.mts → index-CFoAmh7q.d.mts} +3 -3
  29. package/dist/{index-BukqOGDa.d.mts.map → index-CFoAmh7q.d.mts.map} +1 -1
  30. package/dist/{index-CPeaSZoz.d.mts → index-CJL0JAU8.d.mts} +2 -2
  31. package/dist/{index-CPeaSZoz.d.mts.map → index-CJL0JAU8.d.mts.map} +1 -1
  32. package/dist/{index-Ds9_v60R.d.mts → index-CZjrnylh.d.mts} +544 -336
  33. package/dist/index-CZjrnylh.d.mts.map +1 -0
  34. package/dist/{index-Ced1Ry4S.d.mts → index-D5UDyVMb.d.mts} +211 -9
  35. package/dist/index-D5UDyVMb.d.mts.map +1 -0
  36. package/dist/{index-B_nooAhS.d.mts → index-Du5YgdzM.d.mts} +53 -15
  37. package/dist/index-Du5YgdzM.d.mts.map +1 -0
  38. package/dist/index.d.mts +11 -11
  39. package/dist/index.mjs +50 -50
  40. package/dist/preview/index.d.mts +3 -3
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-DHqCrFhG.mjs → preview-BQVgn6Ho.mjs} +2 -2
  43. package/dist/{preview-DHqCrFhG.mjs.map → preview-BQVgn6Ho.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/{chunk-JGDZQCNU.mjs → chunk-2B722GXM.mjs} +1 -1
  46. package/dist/preview-engine/{chunk-GFW3D464.mjs → chunk-2DWY7UBV.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-72DYOIMP.mjs → chunk-2PYTDN2C.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-PF3SXQNV.mjs → chunk-34DL53D5.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-GLXJOXBE.mjs → chunk-34RJ7GAS.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-6OY4YLTC.mjs → chunk-35HMRW4I.mjs} +1 -1
  51. package/dist/preview-engine/chunk-374QY63R.mjs +1974 -0
  52. package/dist/preview-engine/{chunk-W26U6BP2.mjs → chunk-4WYM72ZN.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-EQ4VBUWM.mjs → chunk-5AWAOMBR.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-J4SHMCTG.mjs → chunk-6R3UJBL5.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-VHGC72XP.mjs → chunk-73CNXGAK.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-K5F4ZW6T.mjs → chunk-7U34VKNO.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-KYOPOCO5.mjs → chunk-AHQCDTD6.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-ADV2TIKA.mjs → chunk-BEYA25UZ.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-RBDIRBEI.mjs → chunk-BJV2LBII.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-LBJBBEKP.mjs → chunk-BVDWS3D2.mjs} +1 -1
  61. package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
  62. package/dist/preview-engine/{chunk-NIPWL6Z5.mjs → chunk-C4M3B2Q2.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-LLUFOFF4.mjs → chunk-CC4NNNIY.mjs} +1 -1
  64. package/dist/preview-engine/chunk-CCB3VTY2.mjs +39 -0
  65. package/dist/preview-engine/{chunk-NX66555S.mjs → chunk-CN2VLYLB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-SK7PUBTC.mjs → chunk-DMSZXG56.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-WC257OBY.mjs → chunk-DVZITDQS.mjs} +1 -1
  68. package/dist/preview-engine/chunk-FKG27DVO.mjs +4 -0
  69. package/dist/preview-engine/{chunk-COZG35ZR.mjs → chunk-FTCEG3SF.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-57LES7TL.mjs → chunk-GA4HNR44.mjs} +1 -1
  71. package/dist/preview-engine/chunk-GEUUXTDL.mjs +138 -0
  72. package/dist/preview-engine/{chunk-S4WNCEMO.mjs → chunk-GIICZZQI.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-RTHU7REC.mjs → chunk-GRJJVSOV.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-RGDM6PQ5.mjs → chunk-GZWA5QJS.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-LZNNM5OB.mjs → chunk-H7BSN7V7.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-JXUENEQO.mjs → chunk-HOV6DDBZ.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-C6XLAJLL.mjs → chunk-JSYG6OWZ.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-GZVPVOHB.mjs → chunk-K3C6GUQD.mjs} +1 -1
  79. package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
  80. package/dist/preview-engine/{chunk-Y6TWMUJC.mjs → chunk-LVYVXVZO.mjs} +1 -1
  81. package/dist/preview-engine/chunk-MIEH74UH.mjs +480 -0
  82. package/dist/preview-engine/{chunk-AVDHZNIZ.mjs → chunk-OH5W5EL6.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-22F33PPP.mjs → chunk-P5FKRQFU.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-7X2AUKTU.mjs → chunk-PM2W4VLT.mjs} +1 -1
  85. package/dist/preview-engine/chunk-QCSVT73T.mjs +2403 -0
  86. package/dist/preview-engine/{chunk-523CTDOC.mjs → chunk-RJIAES3X.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-DPQN7WYQ.mjs → chunk-S2ABWY5G.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-G7JJ6HVL.mjs → chunk-SF37HXAH.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-OKLYIQ5F.mjs → chunk-SPJPM43P.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-UOTMBWBJ.mjs → chunk-TNJEZKXM.mjs} +1 -1
  91. package/dist/preview-engine/chunk-ULOFDFHJ.mjs +1 -0
  92. package/dist/preview-engine/{chunk-LLB3AGBQ.mjs → chunk-UQKPDGEH.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-DISKQ5MH.mjs → chunk-UXYM2G6J.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-U5YNECNG.mjs → chunk-VN36PRVD.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-PMOKPVSD.mjs → chunk-VVE2QHVG.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-PEUQRSIM.mjs → chunk-Y5K5LVOR.mjs} +1 -1
  97. package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
  98. package/dist/preview-engine/{chunk-PSEMCJBH.mjs → chunk-ZJ5SWTCW.mjs} +1 -1
  99. package/dist/preview-engine/chunk-ZY47XIRK.mjs +5 -0
  100. package/dist/preview-engine/components.mjs +1 -1
  101. package/dist/preview-engine/effects.mjs +1 -1
  102. package/dist/preview-engine/framefields.mjs +1 -1
  103. package/dist/preview-engine/player.mjs +1 -1
  104. package/dist/preview-engine/renderers-3BOQOUEU.mjs +1 -0
  105. package/dist/preview-engine/renderers-3M2FESR2.mjs +1 -0
  106. package/dist/preview-engine/{renderers-FEEIDQF3.mjs → renderers-4F7WLQD5.mjs} +1 -1
  107. package/dist/preview-engine/{renderers-OP6MKYRM.mjs → renderers-5KANN7XF.mjs} +1 -1
  108. package/dist/preview-engine/{renderers-TVRR7PGN.mjs → renderers-5TO2SXFR.mjs} +1 -1
  109. package/dist/preview-engine/{renderers-DR7UZ3QR.mjs → renderers-5UZ3YFBD.mjs} +1 -1
  110. package/dist/preview-engine/renderers-6LHIWKMZ.mjs +1 -0
  111. package/dist/preview-engine/{renderers-7F2KF5RE.mjs → renderers-6Z7DWAPH.mjs} +1 -1
  112. package/dist/preview-engine/renderers-77PDUMYI.mjs +1 -0
  113. package/dist/preview-engine/{renderers-3J3NCOAI.mjs → renderers-7C5RA3R5.mjs} +1 -1
  114. package/dist/preview-engine/renderers-7XHO6M3B.mjs +228 -0
  115. package/dist/preview-engine/{renderers-KJAOPYAU.mjs → renderers-A24KZK2Q.mjs} +1 -1
  116. package/dist/preview-engine/renderers-A43VCJ7X.mjs +1 -0
  117. package/dist/preview-engine/renderers-AKY464RY.mjs +1 -0
  118. package/dist/preview-engine/renderers-C5UO6PL5.mjs +1 -0
  119. package/dist/preview-engine/renderers-C64QSZO4.mjs +1 -0
  120. package/dist/preview-engine/renderers-CIRCR6NG.mjs +1 -0
  121. package/dist/preview-engine/renderers-CIWOPETY.mjs +1 -0
  122. package/dist/preview-engine/renderers-CUMVIVHI.mjs +1 -0
  123. package/dist/preview-engine/renderers-CZEZCELP.mjs +1 -0
  124. package/dist/preview-engine/{renderers-R3YVLWKV.mjs → renderers-ENMY4DKF.mjs} +1 -1
  125. package/dist/preview-engine/{renderers-AAENCA7X.mjs → renderers-FSI5KNGZ.mjs} +1 -1
  126. package/dist/preview-engine/renderers-FSQMWHQM.mjs +1 -0
  127. package/dist/preview-engine/renderers-FZEW5C23.mjs +1 -0
  128. package/dist/preview-engine/renderers-HCET2IML.mjs +1 -0
  129. package/dist/preview-engine/{renderers-LBX7GPDU.mjs → renderers-IHGAWLUF.mjs} +1 -1
  130. package/dist/preview-engine/renderers-IUOOC6K7.mjs +1 -0
  131. package/dist/preview-engine/{renderers-VXMR47WZ.mjs → renderers-KC6ZSKCW.mjs} +1 -1
  132. package/dist/preview-engine/renderers-KYYJLVIJ.mjs +1 -0
  133. package/dist/preview-engine/renderers-L4GE7WV3.mjs +1 -0
  134. package/dist/preview-engine/renderers-L6YDX6GS.mjs +1 -0
  135. package/dist/preview-engine/renderers-LRAFWKCO.mjs +1 -0
  136. package/dist/preview-engine/renderers-LU3XZWEB.mjs +1 -0
  137. package/dist/preview-engine/{renderers-4YYGKLDK.mjs → renderers-MD3PRFZL.mjs} +1 -1
  138. package/dist/preview-engine/renderers-MOEC2XZZ.mjs +1 -0
  139. package/dist/preview-engine/{renderers-RGDTRVZM.mjs → renderers-NCGH2WWJ.mjs} +1 -1
  140. package/dist/preview-engine/renderers-ND2WV4K3.mjs +1 -0
  141. package/dist/preview-engine/renderers-NJ5CWVVH.mjs +1 -0
  142. package/dist/preview-engine/renderers-NKXYPR3V.mjs +1 -0
  143. package/dist/preview-engine/{renderers-WVQQZQ6Y.mjs → renderers-NUAI4TO5.mjs} +1 -1
  144. package/dist/preview-engine/renderers-NWR66CGK.mjs +1 -0
  145. package/dist/preview-engine/renderers-O22WTBRM.mjs +1 -0
  146. package/dist/preview-engine/renderers-O55BEDQZ.mjs +1 -0
  147. package/dist/preview-engine/renderers-PBBA7LQB.mjs +1 -0
  148. package/dist/preview-engine/{renderers-BL7Z3FTF.mjs → renderers-PIIEUKFE.mjs} +1 -1
  149. package/dist/preview-engine/renderers-PPZK6VEW.mjs +1 -0
  150. package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +1 -0
  151. package/dist/preview-engine/{renderers-7TNEKJZS.mjs → renderers-QA2HKUJJ.mjs} +1 -1
  152. package/dist/preview-engine/renderers-RMEACSRL.mjs +1 -0
  153. package/dist/preview-engine/{renderers-AWRIELVX.mjs → renderers-RN2MHIFK.mjs} +1 -1
  154. package/dist/preview-engine/renderers-SEIAUKJF.mjs +1 -0
  155. package/dist/preview-engine/renderers-SP42LCSI.mjs +1 -0
  156. package/dist/preview-engine/{renderers-OE55O27K.mjs → renderers-T74CQCEN.mjs} +1 -1
  157. package/dist/preview-engine/renderers-T7SZA3BX.mjs +1 -0
  158. package/dist/preview-engine/{renderers-ZUQ2ZBYY.mjs → renderers-TGJSOKDY.mjs} +1 -1
  159. package/dist/preview-engine/renderers-TSBV4KPE.mjs +1 -0
  160. package/dist/preview-engine/{renderers-2SE5BLLB.mjs → renderers-U4M7ZCV4.mjs} +1 -1
  161. package/dist/preview-engine/{renderers-YEI4K4W4.mjs → renderers-V3AQO7AR.mjs} +1 -1
  162. package/dist/preview-engine/renderers-VADTDAHD.mjs +1 -0
  163. package/dist/preview-engine/renderers-VNNWI5C3.mjs +1 -0
  164. package/dist/preview-engine/{renderers-YYMRKHAA.mjs → renderers-WEYAHOBK.mjs} +1 -1
  165. package/dist/preview-engine/renderers-WZ75MLP3.mjs +1 -0
  166. package/dist/preview-engine/renderers-XB5R4UQA.mjs +1 -0
  167. package/dist/preview-engine/{renderers-YIVPMPQS.mjs → renderers-Y22VSOXF.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-Y53D5CQ7.mjs → renderers-YBIUZDGQ.mjs} +1 -1
  169. package/dist/preview-engine/renderers-YESJR4O7.mjs +1 -0
  170. package/dist/preview-engine/renderers-YKSRZRRT.mjs +1 -0
  171. package/dist/preview-engine/{renderers-V4VML5IG.mjs → renderers-ZACSHGNZ.mjs} +1 -1
  172. package/dist/preview-engine/signals.mjs +1 -1
  173. package/dist/preview-engine/src-NGVAJYHC.mjs +8 -0
  174. package/dist/{program-CqQDWfSV.mjs → program-CKpKkllV.mjs} +5 -6
  175. package/dist/program-CKpKkllV.mjs.map +1 -0
  176. package/dist/renderer/index.d.mts +2 -2
  177. package/dist/renderer/index.mjs +2 -2
  178. package/dist/renderer--Ac-dg4A.mjs +5 -0
  179. package/dist/renderer--N7TMqzU.mjs +5 -0
  180. package/dist/{renderer-DYfNgEhK.mjs → renderer--fkmiVjl.mjs} +2 -2
  181. package/dist/{renderer-DYfNgEhK.mjs.map → renderer--fkmiVjl.mjs.map} +1 -1
  182. package/dist/{renderer-JDLYPnRh.mjs → renderer-1r-Uq-Ae.mjs} +2 -2
  183. package/dist/{renderer-JDLYPnRh.mjs.map → renderer-1r-Uq-Ae.mjs.map} +1 -1
  184. package/dist/renderer-2ecmdOae.mjs +5 -0
  185. package/dist/{renderer-DZKZup7n.mjs → renderer-8QIwXh7O.mjs} +3 -3
  186. package/dist/{renderer-DZKZup7n.mjs.map → renderer-8QIwXh7O.mjs.map} +1 -1
  187. package/dist/{renderer-DCyp-jzQ.mjs → renderer-B-ur0Ej8.mjs} +3 -3
  188. package/dist/{renderer-DCyp-jzQ.mjs.map → renderer-B-ur0Ej8.mjs.map} +1 -1
  189. package/dist/{renderer-BD25uND8.mjs → renderer-B0piZg9r.mjs} +383 -171
  190. package/dist/renderer-B0piZg9r.mjs.map +1 -0
  191. package/dist/{renderer-Cn34qZC4.mjs → renderer-B2jjxsjO.mjs} +2 -2
  192. package/dist/{renderer-Cn34qZC4.mjs.map → renderer-B2jjxsjO.mjs.map} +1 -1
  193. package/dist/{renderer-DbO4xZBb.mjs → renderer-B39I6CQw.mjs} +3 -3
  194. package/dist/{renderer-DbO4xZBb.mjs.map → renderer-B39I6CQw.mjs.map} +1 -1
  195. package/dist/{renderer-CTr_Zi08.mjs → renderer-B522Dkdk.mjs} +3 -3
  196. package/dist/{renderer-CTr_Zi08.mjs.map → renderer-B522Dkdk.mjs.map} +1 -1
  197. package/dist/renderer-B5RJp5g-.mjs +5 -0
  198. package/dist/renderer-B7xyT1Vb.mjs +5 -0
  199. package/dist/{renderer-4a4koLCl.mjs → renderer-BAYTI6jj.mjs} +2 -2
  200. package/dist/{renderer-4a4koLCl.mjs.map → renderer-BAYTI6jj.mjs.map} +1 -1
  201. package/dist/{renderer-CCnrG0Pd.mjs → renderer-BAusZ6Vu.mjs} +2 -2
  202. package/dist/{renderer-CCnrG0Pd.mjs.map → renderer-BAusZ6Vu.mjs.map} +1 -1
  203. package/dist/renderer-BBeArN_x.mjs +5 -0
  204. package/dist/renderer-BCAZDu-r.mjs +5 -0
  205. package/dist/{renderer-bE6yZ_Ef.mjs → renderer-BF0hx_iJ.mjs} +3 -3
  206. package/dist/{renderer-bE6yZ_Ef.mjs.map → renderer-BF0hx_iJ.mjs.map} +1 -1
  207. package/dist/renderer-BJnhik7Y.mjs +5 -0
  208. package/dist/{renderer-kg8-ngnB.mjs → renderer-BPWDsufX.mjs} +2 -2
  209. package/dist/{renderer-kg8-ngnB.mjs.map → renderer-BPWDsufX.mjs.map} +1 -1
  210. package/dist/{renderer-DXu0nrzo.d.mts → renderer-BX7jS14r.d.mts} +2 -2
  211. package/dist/{renderer-DXu0nrzo.d.mts.map → renderer-BX7jS14r.d.mts.map} +1 -1
  212. package/dist/{renderer-DBN6SV8L.mjs → renderer-BXJXziIt.mjs} +2 -2
  213. package/dist/{renderer-DBN6SV8L.mjs.map → renderer-BXJXziIt.mjs.map} +1 -1
  214. package/dist/{renderer-4F4FypvN.mjs → renderer-BdyopiLC.mjs} +2 -2
  215. package/dist/{renderer-4F4FypvN.mjs.map → renderer-BdyopiLC.mjs.map} +1 -1
  216. package/dist/{renderer-wH_l-jMH.mjs → renderer-Bfk6A7UO.mjs} +3 -3
  217. package/dist/{renderer-wH_l-jMH.mjs.map → renderer-Bfk6A7UO.mjs.map} +1 -1
  218. package/dist/{renderer-DYT4iPi-.mjs → renderer-BgO6BA_z.mjs} +2 -2
  219. package/dist/{renderer-DYT4iPi-.mjs.map → renderer-BgO6BA_z.mjs.map} +1 -1
  220. package/dist/{renderer-Dv5yE4LE.mjs → renderer-BlPqTEii.mjs} +2 -2
  221. package/dist/{renderer-Dv5yE4LE.mjs.map → renderer-BlPqTEii.mjs.map} +1 -1
  222. package/dist/{renderer-CuK1lPnA.mjs → renderer-BlvGcyAN.mjs} +2 -2
  223. package/dist/{renderer-CuK1lPnA.mjs.map → renderer-BlvGcyAN.mjs.map} +1 -1
  224. package/dist/{renderer-DX5ZpEBB.mjs → renderer-BpIF1QIE.mjs} +3 -3
  225. package/dist/{renderer-DX5ZpEBB.mjs.map → renderer-BpIF1QIE.mjs.map} +1 -1
  226. package/dist/renderer-BxRW8MZO.mjs +5 -0
  227. package/dist/renderer-C-lfsEAN.mjs +5 -0
  228. package/dist/{renderer-DRLtfxdW.mjs → renderer-C41U1tK6.mjs} +95 -16
  229. package/dist/renderer-C41U1tK6.mjs.map +1 -0
  230. package/dist/renderer-C6nOFN4-.mjs +5 -0
  231. package/dist/{renderer-CpEU-TRR.mjs → renderer-C7L8Ceqr.mjs} +2 -2
  232. package/dist/{renderer-CpEU-TRR.mjs.map → renderer-C7L8Ceqr.mjs.map} +1 -1
  233. package/dist/{renderer-BMnX_-PZ.mjs → renderer-C7eFJf0_.mjs} +3 -3
  234. package/dist/{renderer-BMnX_-PZ.mjs.map → renderer-C7eFJf0_.mjs.map} +1 -1
  235. package/dist/renderer-C84TSQmS.mjs +5 -0
  236. package/dist/renderer-C8_6YofT.mjs +5 -0
  237. package/dist/{renderer-CeIXVu9F.mjs → renderer-CCycwCEB.mjs} +2 -2
  238. package/dist/{renderer-CeIXVu9F.mjs.map → renderer-CCycwCEB.mjs.map} +1 -1
  239. package/dist/{renderer-CNVzJIBz.mjs → renderer-CHr7MiYW.mjs} +3 -3
  240. package/dist/{renderer-CNVzJIBz.mjs.map → renderer-CHr7MiYW.mjs.map} +1 -1
  241. package/dist/renderer-COR66Sby.mjs +3 -0
  242. package/dist/renderer-COb3tOPG.mjs +5 -0
  243. package/dist/{renderer-Crl8q_vD.mjs → renderer-CQvmbRQ5.mjs} +3 -3
  244. package/dist/{renderer-Crl8q_vD.mjs.map → renderer-CQvmbRQ5.mjs.map} +1 -1
  245. package/dist/renderer-CSCIzaLy.mjs +5 -0
  246. package/dist/{renderer-DO15Nj-w.mjs → renderer-CYC32bDW.mjs} +3 -3
  247. package/dist/{renderer-DO15Nj-w.mjs.map → renderer-CYC32bDW.mjs.map} +1 -1
  248. package/dist/{renderer-NvGahExL.mjs → renderer-CcvvoKiZ.mjs} +3 -3
  249. package/dist/{renderer-NvGahExL.mjs.map → renderer-CcvvoKiZ.mjs.map} +1 -1
  250. package/dist/{renderer-vVKNp3ri.mjs → renderer-CiQhD8Gg.mjs} +3 -3
  251. package/dist/{renderer-vVKNp3ri.mjs.map → renderer-CiQhD8Gg.mjs.map} +1 -1
  252. package/dist/renderer-CmI4c8MS.mjs +5 -0
  253. package/dist/{renderer-Sj11W1xq.mjs → renderer-CpUJBOfb.mjs} +2 -2
  254. package/dist/renderer-CqVltdX9.mjs +5 -0
  255. package/dist/{renderer-j-3XB8YI.mjs → renderer-CwFqqpWY.mjs} +3 -3
  256. package/dist/{renderer-j-3XB8YI.mjs.map → renderer-CwFqqpWY.mjs.map} +1 -1
  257. package/dist/renderer-D-FpMzLY.mjs +5 -0
  258. package/dist/renderer-D-Oyn9mG.mjs +5 -0
  259. package/dist/renderer-D2QrkA8_.mjs +5 -0
  260. package/dist/{renderer-ClxmV_id.mjs → renderer-D47AEJE_.mjs} +2 -2
  261. package/dist/{renderer-ClxmV_id.mjs.map → renderer-D47AEJE_.mjs.map} +1 -1
  262. package/dist/{renderer-BrXkb-9N.mjs → renderer-D61B9bXF.mjs} +2 -2
  263. package/dist/{renderer-BrXkb-9N.mjs.map → renderer-D61B9bXF.mjs.map} +1 -1
  264. package/dist/renderer-D64r4iN-.mjs +5 -0
  265. package/dist/{renderer-DXsV3mZD.mjs → renderer-D7Al3_-5.mjs} +3 -3
  266. package/dist/{renderer-DXsV3mZD.mjs.map → renderer-D7Al3_-5.mjs.map} +1 -1
  267. package/dist/{renderer-Bw3tlr9I.mjs → renderer-D7r6onRT.mjs} +2 -2
  268. package/dist/{renderer-Bw3tlr9I.mjs.map → renderer-D7r6onRT.mjs.map} +1 -1
  269. package/dist/{renderer-Dypn26aP.mjs → renderer-D8bBHrWC.mjs} +3 -3
  270. package/dist/{renderer-Dypn26aP.mjs.map → renderer-D8bBHrWC.mjs.map} +1 -1
  271. package/dist/renderer-DCq6YkgP.mjs +5 -0
  272. package/dist/{renderer-BHwbnT6S.mjs → renderer-DDEkFbVI.mjs} +3 -3
  273. package/dist/{renderer-BHwbnT6S.mjs.map → renderer-DDEkFbVI.mjs.map} +1 -1
  274. package/dist/renderer-DDHG3GdR.mjs +5 -0
  275. package/dist/{renderer-DqMZiy5N.mjs → renderer-DEmYyaqj.mjs} +2 -2
  276. package/dist/{renderer-DqMZiy5N.mjs.map → renderer-DEmYyaqj.mjs.map} +1 -1
  277. package/dist/{renderer-CyELq6P6.mjs → renderer-DF-yvIrV.mjs} +2 -2
  278. package/dist/{renderer-CyELq6P6.mjs.map → renderer-DF-yvIrV.mjs.map} +1 -1
  279. package/dist/{renderer-XnWe1hSL.mjs → renderer-DFzI3yI_.mjs} +2 -2
  280. package/dist/{renderer-XnWe1hSL.mjs.map → renderer-DFzI3yI_.mjs.map} +1 -1
  281. package/dist/{renderer-Cx2Sw9Ib.mjs → renderer-DIw3UtEU.mjs} +3 -3
  282. package/dist/{renderer-Cx2Sw9Ib.mjs.map → renderer-DIw3UtEU.mjs.map} +1 -1
  283. package/dist/{renderer-D_Mf-Zft.d.mts → renderer-DKgPVOLL.d.mts} +2 -2
  284. package/dist/{renderer-D_Mf-Zft.d.mts.map → renderer-DKgPVOLL.d.mts.map} +1 -1
  285. package/dist/renderer-DMdNfcud.mjs +6 -0
  286. package/dist/{renderer-CaRPsrbX.mjs → renderer-DMvmf3T2.mjs} +2 -2
  287. package/dist/{renderer-jvgqy4Td.mjs → renderer-DNQvOrkY.mjs} +3 -3
  288. package/dist/{renderer-jvgqy4Td.mjs.map → renderer-DNQvOrkY.mjs.map} +1 -1
  289. package/dist/{renderer-DB7PM7nZ.mjs → renderer-DO-KbpYZ.mjs} +3 -3
  290. package/dist/{renderer-DB7PM7nZ.mjs.map → renderer-DO-KbpYZ.mjs.map} +1 -1
  291. package/dist/{renderer-CQkZUsvc.mjs → renderer-DTqDy2m9.mjs} +3 -3
  292. package/dist/{renderer-CQkZUsvc.mjs.map → renderer-DTqDy2m9.mjs.map} +1 -1
  293. package/dist/{renderer-DPUULdjh.mjs → renderer-DVCJjVn7.mjs} +2 -2
  294. package/dist/{renderer-DPUULdjh.mjs.map → renderer-DVCJjVn7.mjs.map} +1 -1
  295. package/dist/{renderer-C7SYbHgB.mjs → renderer-DX41niRU.mjs} +2 -2
  296. package/dist/{renderer-C7SYbHgB.mjs.map → renderer-DX41niRU.mjs.map} +1 -1
  297. package/dist/{renderer-BYIa_hnS.mjs → renderer-DXEWbnRF.mjs} +3 -3
  298. package/dist/{renderer-BYIa_hnS.mjs.map → renderer-DXEWbnRF.mjs.map} +1 -1
  299. package/dist/renderer-DZQXZ4lK.mjs +5 -0
  300. package/dist/{renderer-iA7rxZmR.mjs → renderer-DbRZe0Re.mjs} +3 -3
  301. package/dist/{renderer-iA7rxZmR.mjs.map → renderer-DbRZe0Re.mjs.map} +1 -1
  302. package/dist/renderer-DczJJLA1.mjs +5 -0
  303. package/dist/renderer-DfqJj9oe.mjs +5 -0
  304. package/dist/renderer-DgO9ihVJ.mjs +5 -0
  305. package/dist/renderer-DhgnQZYb.mjs +5 -0
  306. package/dist/{renderer-l-K6iZLC.mjs → renderer-DiY70S8S.mjs} +3 -3
  307. package/dist/{renderer-l-K6iZLC.mjs.map → renderer-DiY70S8S.mjs.map} +1 -1
  308. package/dist/renderer-DjxKjHMf.mjs +5 -0
  309. package/dist/{renderer-Qd-HCwKj.mjs → renderer-DkRSZg5g.mjs} +3 -3
  310. package/dist/{renderer-Qd-HCwKj.mjs.map → renderer-DkRSZg5g.mjs.map} +1 -1
  311. package/dist/{renderer-CaE0rp9j.mjs → renderer-DmkWrWAk.mjs} +2 -2
  312. package/dist/{renderer-CaE0rp9j.mjs.map → renderer-DmkWrWAk.mjs.map} +1 -1
  313. package/dist/{renderer-BUV6IH0o.mjs → renderer-DpruWmZU.mjs} +2 -2
  314. package/dist/{renderer-BUV6IH0o.mjs.map → renderer-DpruWmZU.mjs.map} +1 -1
  315. package/dist/renderer-DqLA5cdR.mjs +5 -0
  316. package/dist/{renderer-DfTnsfy9.mjs → renderer-DqvoMLca.mjs} +3 -3
  317. package/dist/{renderer-DfTnsfy9.mjs.map → renderer-DqvoMLca.mjs.map} +1 -1
  318. package/dist/{renderer-Dhi0Q1cI.mjs → renderer-DsEyjwfT.mjs} +70 -70
  319. package/dist/{renderer-Dhi0Q1cI.mjs.map → renderer-DsEyjwfT.mjs.map} +1 -1
  320. package/dist/renderer-Dudp6ZlH.mjs +5 -0
  321. package/dist/{renderer-Bw5jGUo5.mjs → renderer-EaLUCobW.mjs} +2 -2
  322. package/dist/{renderer-Bw5jGUo5.mjs.map → renderer-EaLUCobW.mjs.map} +1 -1
  323. package/dist/{renderer-Ca-LoeJh.mjs → renderer-GBmWjBvy.mjs} +2 -2
  324. package/dist/{renderer-Ca-LoeJh.mjs.map → renderer-GBmWjBvy.mjs.map} +1 -1
  325. package/dist/{renderer-DS-Gv-3w.mjs → renderer-Lth37j17.mjs} +2 -2
  326. package/dist/{renderer-BlUfAZyK.mjs → renderer-SSBL4M1o.mjs} +3 -3
  327. package/dist/{renderer-BlUfAZyK.mjs.map → renderer-SSBL4M1o.mjs.map} +1 -1
  328. package/dist/{renderer-DSM5c7UA.mjs → renderer-SWr3vbrV.mjs} +2 -2
  329. package/dist/{renderer-DSM5c7UA.mjs.map → renderer-SWr3vbrV.mjs.map} +1 -1
  330. package/dist/{renderer-BLrhcSex.mjs → renderer-WCZu2Rf5.mjs} +3 -3
  331. package/dist/{renderer-BLrhcSex.mjs.map → renderer-WCZu2Rf5.mjs.map} +1 -1
  332. package/dist/{renderer-D7FuHXiz.mjs → renderer-Xv6GfNUI.mjs} +2 -2
  333. package/dist/{renderer-D7FuHXiz.mjs.map → renderer-Xv6GfNUI.mjs.map} +1 -1
  334. package/dist/renderer-_jC5KIT1.mjs +5 -0
  335. package/dist/{renderer-8pS82_mX.mjs → renderer-bAKUeHF3.mjs} +3 -3
  336. package/dist/{renderer-8pS82_mX.mjs.map → renderer-bAKUeHF3.mjs.map} +1 -1
  337. package/dist/renderer-cTgAuVmJ.mjs +5 -0
  338. package/dist/{renderer-DjWBBISJ.mjs → renderer-cod5Ona9.mjs} +2 -2
  339. package/dist/{renderer-C55eLbl1.mjs → renderer-g_vrrAQU.mjs} +2 -2
  340. package/dist/{renderer-C55eLbl1.mjs.map → renderer-g_vrrAQU.mjs.map} +1 -1
  341. package/dist/{renderer-CT_aJBk2.mjs → renderer-hSCfnvaK.mjs} +3 -3
  342. package/dist/{renderer-CT_aJBk2.mjs.map → renderer-hSCfnvaK.mjs.map} +1 -1
  343. package/dist/{renderer-BuYRrBRf.mjs → renderer-ktWXVYka.mjs} +3 -3
  344. package/dist/{renderer-BuYRrBRf.mjs.map → renderer-ktWXVYka.mjs.map} +1 -1
  345. package/dist/renderer-nVKDvDLO.mjs +5 -0
  346. package/dist/{renderer-7Tx-L9Vf.mjs → renderer-oKRF4A0M.mjs} +2 -2
  347. package/dist/{renderer-7Tx-L9Vf.mjs.map → renderer-oKRF4A0M.mjs.map} +1 -1
  348. package/dist/{renderer-fv9WvK0d.mjs → renderer-pHWEHDnM.mjs} +3 -3
  349. package/dist/{renderer-fv9WvK0d.mjs.map → renderer-pHWEHDnM.mjs.map} +1 -1
  350. package/dist/renderer-pZ6_pUo1.mjs +5 -0
  351. package/dist/{renderer-DsGE9qtz.mjs → renderer-sCovEubT.mjs} +3 -3
  352. package/dist/{renderer-DsGE9qtz.mjs.map → renderer-sCovEubT.mjs.map} +1 -1
  353. package/dist/{renderer-BcHpcLq3.mjs → renderer-sYSkIUfo.mjs} +3 -3
  354. package/dist/{renderer-BcHpcLq3.mjs.map → renderer-sYSkIUfo.mjs.map} +1 -1
  355. package/dist/{renderer-4GwADfB0.mjs → renderer-zXPVLRlD.mjs} +3 -3
  356. package/dist/{renderer-4GwADfB0.mjs.map → renderer-zXPVLRlD.mjs.map} +1 -1
  357. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs → renderers-CP8CFWDs-DH2oktaC.mjs} +2 -2
  358. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs.map → renderers-CP8CFWDs-DH2oktaC.mjs.map} +1 -1
  359. package/dist/signals/index.d.mts +5 -5
  360. package/dist/signals/index.mjs +4 -4
  361. package/dist/{src-DggYlKaX.mjs → src-CK5rGVbh.mjs} +664 -72
  362. package/dist/src-CK5rGVbh.mjs.map +1 -0
  363. package/package.json +67 -58
  364. package/dist/dist-CnFcSau0.mjs.map +0 -1
  365. package/dist/index-B_nooAhS.d.mts.map +0 -1
  366. package/dist/index-Ced1Ry4S.d.mts.map +0 -1
  367. package/dist/index-Ds9_v60R.d.mts.map +0 -1
  368. package/dist/preview-engine/chunk-3OXRGTQ2.mjs +0 -2390
  369. package/dist/preview-engine/chunk-3U2A3RW4.mjs +0 -5
  370. package/dist/preview-engine/chunk-6E3JSPJN.mjs +0 -1
  371. package/dist/preview-engine/chunk-7EYVBRN3.mjs +0 -480
  372. package/dist/preview-engine/chunk-7WBDEZ2A.mjs +0 -1974
  373. package/dist/preview-engine/chunk-F4F2UDRX.mjs +0 -1
  374. package/dist/preview-engine/chunk-HPP52AQI.mjs +0 -4
  375. package/dist/preview-engine/chunk-PYSBWKIJ.mjs +0 -1
  376. package/dist/preview-engine/chunk-U2IFQMS3.mjs +0 -174
  377. package/dist/preview-engine/renderers-2GMY2ZNK.mjs +0 -1
  378. package/dist/preview-engine/renderers-2QJNKL7Q.mjs +0 -1
  379. package/dist/preview-engine/renderers-3OYU6O6F.mjs +0 -1
  380. package/dist/preview-engine/renderers-433Y2PCK.mjs +0 -1
  381. package/dist/preview-engine/renderers-4AGPGEL4.mjs +0 -1
  382. package/dist/preview-engine/renderers-54DBHGUW.mjs +0 -1
  383. package/dist/preview-engine/renderers-5M2O55U3.mjs +0 -1
  384. package/dist/preview-engine/renderers-6FVMDEAY.mjs +0 -1
  385. package/dist/preview-engine/renderers-6R7ZJ7DU.mjs +0 -1
  386. package/dist/preview-engine/renderers-75GCMFOD.mjs +0 -1
  387. package/dist/preview-engine/renderers-7LWLUCVQ.mjs +0 -1
  388. package/dist/preview-engine/renderers-BLDENIEV.mjs +0 -1
  389. package/dist/preview-engine/renderers-CCOEGTZJ.mjs +0 -228
  390. package/dist/preview-engine/renderers-CDB3YK3R.mjs +0 -1
  391. package/dist/preview-engine/renderers-D6D4XDFY.mjs +0 -1
  392. package/dist/preview-engine/renderers-DJVFQZYU.mjs +0 -1
  393. package/dist/preview-engine/renderers-DMXSV7VO.mjs +0 -1
  394. package/dist/preview-engine/renderers-EBMASIOE.mjs +0 -1
  395. package/dist/preview-engine/renderers-F262HDFS.mjs +0 -1
  396. package/dist/preview-engine/renderers-FMXKIF22.mjs +0 -1
  397. package/dist/preview-engine/renderers-GJKSZ6DR.mjs +0 -1
  398. package/dist/preview-engine/renderers-GR3RLYDZ.mjs +0 -1
  399. package/dist/preview-engine/renderers-GT3W2QIA.mjs +0 -1
  400. package/dist/preview-engine/renderers-IHC7HUK3.mjs +0 -1
  401. package/dist/preview-engine/renderers-J56ZGEVM.mjs +0 -1
  402. package/dist/preview-engine/renderers-KYM6352U.mjs +0 -1
  403. package/dist/preview-engine/renderers-LFXX6TWI.mjs +0 -1
  404. package/dist/preview-engine/renderers-NAHUPFPU.mjs +0 -1
  405. package/dist/preview-engine/renderers-NM3FZLHH.mjs +0 -1
  406. package/dist/preview-engine/renderers-NNB4BTJA.mjs +0 -1
  407. package/dist/preview-engine/renderers-OYVQW6QI.mjs +0 -1
  408. package/dist/preview-engine/renderers-P5RIFU3C.mjs +0 -1
  409. package/dist/preview-engine/renderers-QB7HJUTS.mjs +0 -1
  410. package/dist/preview-engine/renderers-QRQVOCDC.mjs +0 -1
  411. package/dist/preview-engine/renderers-QVFHJTZA.mjs +0 -1
  412. package/dist/preview-engine/renderers-R3WQIE4L.mjs +0 -1
  413. package/dist/preview-engine/renderers-SQBVOLG7.mjs +0 -1
  414. package/dist/preview-engine/renderers-TLXMYEDI.mjs +0 -1
  415. package/dist/preview-engine/renderers-X4S3WELJ.mjs +0 -1
  416. package/dist/preview-engine/renderers-XT7U25I7.mjs +0 -1
  417. package/dist/preview-engine/renderers-XVGLMBB3.mjs +0 -1
  418. package/dist/preview-engine/renderers-YUWU3TQZ.mjs +0 -1
  419. package/dist/preview-engine/renderers-ZNUD5OVO.mjs +0 -1
  420. package/dist/program-CqQDWfSV.mjs.map +0 -1
  421. package/dist/renderer-68XHoE2b.mjs +0 -5
  422. package/dist/renderer-AqUForA-.mjs +0 -5
  423. package/dist/renderer-B0J-uGBG.mjs +0 -5
  424. package/dist/renderer-BD25uND8.mjs.map +0 -1
  425. package/dist/renderer-BF2R0rwb.mjs +0 -5
  426. package/dist/renderer-BLrO9lqK.mjs +0 -5
  427. package/dist/renderer-BMy8jXhL.mjs +0 -5
  428. package/dist/renderer-BUxENp9L.mjs +0 -5
  429. package/dist/renderer-C-ebryrM.mjs +0 -5
  430. package/dist/renderer-C8Gbs3kr.mjs +0 -5
  431. package/dist/renderer-CFZvMv2-.mjs +0 -5
  432. package/dist/renderer-CGXW7mOs.mjs +0 -5
  433. package/dist/renderer-CNq6OGbb.mjs +0 -5
  434. package/dist/renderer-CO-Ddz6-.mjs +0 -5
  435. package/dist/renderer-CRdxAsP7.mjs +0 -5
  436. package/dist/renderer-CZLo0ALi.mjs +0 -5
  437. package/dist/renderer-CdvVUkhR.mjs +0 -5
  438. package/dist/renderer-Cjg7kmTq.mjs +0 -5
  439. package/dist/renderer-Cvz22ZSh.mjs +0 -3
  440. package/dist/renderer-CxKymhVa.mjs +0 -5
  441. package/dist/renderer-Cxlpu3pN.mjs +0 -5
  442. package/dist/renderer-Cz6qZ2Ii.mjs +0 -5
  443. package/dist/renderer-DDGvF2YA.mjs +0 -5
  444. package/dist/renderer-DFxtOKpi.mjs +0 -5
  445. package/dist/renderer-DGBNjTsB.mjs +0 -6
  446. package/dist/renderer-DRLtfxdW.mjs.map +0 -1
  447. package/dist/renderer-DUFcdZmw.mjs +0 -5
  448. package/dist/renderer-DUMu6EOH.mjs +0 -5
  449. package/dist/renderer-DdULrvJo.mjs +0 -5
  450. package/dist/renderer-DoaOOP6_.mjs +0 -5
  451. package/dist/renderer-DqmZqV-a.mjs +0 -5
  452. package/dist/renderer-LxTQ2E-G.mjs +0 -5
  453. package/dist/renderer-SpU-RddZ.mjs +0 -5
  454. package/dist/renderer-W6ahCM9z.mjs +0 -5
  455. package/dist/renderer-gGqtzw-S.mjs +0 -5
  456. package/dist/renderer-l0Wn1AoV.mjs +0 -5
  457. package/dist/renderer-rpXHvMZG.mjs +0 -5
  458. package/dist/renderer-twdsKOiz.mjs +0 -5
  459. package/dist/renderer-uJz-eIqO.mjs +0 -5
  460. package/dist/src-DggYlKaX.mjs.map +0 -1
@@ -7,14 +7,14 @@ import { readFile, rename, unlink, writeFile } from "node:fs/promises";
7
7
  import { createHash } from "node:crypto";
8
8
  import { homedir } from "node:os";
9
9
 
10
- //#region ../vision/dist/registry-CSFimt7C.mjs
10
+ //#region ../vision/dist/registry-RNCQoD9e.mjs
11
11
  const hf = (repo, revision, path$1) => `https://huggingface.co/${repo}/resolve/${revision}/${path$1}`;
12
12
  const RTMDET_INS_REPO = "tori29umai/rtmdet-ins-onnx-person-masks";
13
13
  const RTMDET_INS_REV = "e5218e8d47d7c50077f27f9893a28e0ef2ad5656";
14
14
  const RTMDET_INS_SOURCE = "RTMDet-Ins (OpenMMLab mmdetection, Apache-2.0), mmdeploy ONNX export";
15
15
  const RTMO_SOURCE = "RTMO (OpenMMLab mmpose, Apache-2.0), ONNX export";
16
16
  const SELFIE_SOURCE = "MediaPipe Selfie Segmenter (Google, Apache-2.0), ONNX export";
17
- const VISION_MODELS = {
17
+ const models = {
18
18
  "rtmdet-ins-t": {
19
19
  key: "rtmdet-ins-t",
20
20
  family: "rtmdet-ins",
@@ -96,6 +96,7 @@ const VISION_MODELS = {
96
96
  source: SELFIE_SOURCE
97
97
  }
98
98
  };
99
+ const VISION_MODELS = models;
99
100
  /**
100
101
  * Resolves the model for a task. `detect` and `segment` share RTMDet-Ins (one forward pass
101
102
  * yields both); `matte` picks the landscape Selfie Segmenter for wide frames.
@@ -190,7 +191,7 @@ const COCO_CLASSES = [
190
191
  ];
191
192
 
192
193
  //#endregion
193
- //#region ../vision/dist/src-DNIUH8PT.mjs
194
+ //#region ../vision/dist/src-Bfz8DtoR.mjs
194
195
  function computeIoU(boxA, boxB) {
195
196
  const xA = Math.max(boxA.originX, boxB.originX);
196
197
  const yA = Math.max(boxA.originY, boxB.originY);
@@ -712,6 +713,10 @@ const PREPROCESS_BY_FAMILY = {
712
713
  padValue: 0
713
714
  }
714
715
  };
716
+ /** True for the families `VisionRunner` can preprocess and decode itself. */
717
+ function isPreprocessFamily(family) {
718
+ return Object.hasOwn(PREPROCESS_BY_FAMILY, family);
719
+ }
715
720
  function preprocessSpec(family, input) {
716
721
  return {
717
722
  ...PREPROCESS_BY_FAMILY[family],
@@ -1611,6 +1616,7 @@ var VisionModelStore = class {
1611
1616
  _verify;
1612
1617
  _fetch;
1613
1618
  _onProgress;
1619
+ _acceptLicense;
1614
1620
  _inflight = /* @__PURE__ */ new Map();
1615
1621
  _buffers = /* @__PURE__ */ new Map();
1616
1622
  _status = /* @__PURE__ */ new Map();
@@ -1623,29 +1629,34 @@ var VisionModelStore = class {
1623
1629
  this._verify = options.verify !== false;
1624
1630
  this._fetch = options.fetchImpl ?? globalThis.fetch;
1625
1631
  this._onProgress = options.onProgress;
1632
+ this._acceptLicense = options.acceptLicense === true;
1626
1633
  }
1627
1634
  get modelsDir() {
1628
1635
  return this._modelsDir;
1629
1636
  }
1630
1637
  pathFor(key) {
1631
- return join(this._modelsDir, VISION_MODELS[key].filename);
1638
+ return join(this._modelsDir, this.descriptor(key).filename);
1632
1639
  }
1633
1640
  descriptor(key) {
1634
- return VISION_MODELS[key];
1641
+ const desc = VISION_MODELS[key];
1642
+ if (!desc) throw new Error(`Vision model '${key}' is not registered in the model store.`);
1643
+ return desc;
1635
1644
  }
1636
1645
  /** The URL `ensure(key)` downloads from (mirror when `baseUrl` is set). */
1637
1646
  urlFor(key) {
1638
- const desc = VISION_MODELS[key];
1647
+ const desc = this.descriptor(key);
1639
1648
  if (!this._baseUrl) return desc.url;
1640
1649
  return `${this._baseUrl.replace(/\/+$/, "")}/${desc.filename}`;
1641
1650
  }
1642
1651
  /** True when a complete cached file exists (exact registry size when verifying). */
1643
1652
  has(key) {
1644
- const targetPath = this.pathFor(key);
1653
+ const desc = VISION_MODELS[key];
1654
+ if (!desc) return false;
1655
+ const targetPath = join(this._modelsDir, desc.filename);
1645
1656
  if (!existsSync(targetPath)) return false;
1646
1657
  try {
1647
1658
  const size = statSync(targetPath).size;
1648
- return this._verify ? size === VISION_MODELS[key].bytes : size > 0;
1659
+ return this._verify ? size === desc.bytes : size > 0;
1649
1660
  } catch {
1650
1661
  return false;
1651
1662
  }
@@ -1685,11 +1696,15 @@ var VisionModelStore = class {
1685
1696
  await Promise.all([...new Set(keys)].map((key) => this.ensure(key)));
1686
1697
  }
1687
1698
  async load(key) {
1699
+ const desc = this.descriptor(key);
1688
1700
  const targetPath = this.pathFor(key);
1689
1701
  if (this.has(key)) {
1690
1702
  this._status.set(key, "ready");
1691
1703
  return this.readBuffer(key, targetPath);
1692
1704
  }
1705
+ if (desc.license && desc.license !== "Apache-2.0") {
1706
+ if (!this._acceptLicense && process.env.FRAMEFIELDS_ACCEPT_SAM_LICENSE !== "1") throw new Error(`License agreement required for model "${key}":\nThis model is licensed under "${desc.license}".\nTo download and use this model, you must accept its license terms by passing 'acceptLicense: true' or setting FRAMEFIELDS_ACCEPT_SAM_LICENSE=1.`);
1707
+ }
1693
1708
  const downloadUrl = this.urlFor(key);
1694
1709
  this._status.set(key, "downloading");
1695
1710
  if (!existsSync(dirname(targetPath))) mkdirSync(dirname(targetPath), { recursive: true });
@@ -1751,6 +1766,98 @@ var VisionModelStore = class {
1751
1766
  this._buffers.clear();
1752
1767
  }
1753
1768
  };
1769
+ /**
1770
+ * Minimal ONNX protobuf wire-format helpers: split a message into fields,
1771
+ * read strings, write length-delimited fields. Only what the graph editors
1772
+ * (onnx-subgraph.ts, onnx-float16.ts) need; unknown fields are copied as raw
1773
+ * bytes, so nothing else in a model is touched.
1774
+ */
1775
+ const MODEL_GRAPH$1 = 7;
1776
+ const GRAPH_NODE$1 = 1;
1777
+ const GRAPH_INITIALIZER = 5;
1778
+ const GRAPH_INPUT$1 = 11;
1779
+ const GRAPH_OUTPUT$1 = 12;
1780
+ const GRAPH_VALUE_INFO = 13;
1781
+ const NODE_INPUT$1 = 1;
1782
+ const NODE_OUTPUT$2 = 2;
1783
+ const VALUE_INFO_NAME = 1;
1784
+ const TENSOR_NAME = 8;
1785
+ const WIRE_VARINT = 0;
1786
+ const WIRE_I64 = 1;
1787
+ const WIRE_LEN = 2;
1788
+ const WIRE_I32 = 5;
1789
+ function readVarint(buf, pos) {
1790
+ let value = 0;
1791
+ let scale = 1;
1792
+ for (;;) {
1793
+ if (pos >= buf.length) throw new Error("ONNX model: truncated varint");
1794
+ const byte = buf[pos++];
1795
+ value += (byte & 127) * scale;
1796
+ if (byte < 128) return [value, pos];
1797
+ scale *= 128;
1798
+ }
1799
+ }
1800
+ function fields(buf) {
1801
+ const out = [];
1802
+ let pos = 0;
1803
+ while (pos < buf.length) {
1804
+ const start = pos;
1805
+ const [tag, afterTag] = readVarint(buf, pos);
1806
+ pos = afterTag;
1807
+ const number$1 = Math.floor(tag / 8);
1808
+ const wire = tag & 7;
1809
+ let body = buf.subarray(pos, pos);
1810
+ if (wire === WIRE_VARINT) pos = readVarint(buf, pos)[1];
1811
+ else if (wire === WIRE_I64) pos += 8;
1812
+ else if (wire === WIRE_I32) pos += 4;
1813
+ else if (wire === WIRE_LEN) {
1814
+ const [length, afterLength] = readVarint(buf, pos);
1815
+ body = buf.subarray(afterLength, afterLength + length);
1816
+ pos = afterLength + length;
1817
+ } else throw new Error(`ONNX model: unsupported wire type ${wire}`);
1818
+ if (pos > buf.length) throw new Error("ONNX model: truncated field");
1819
+ out.push({
1820
+ number: number$1,
1821
+ wire,
1822
+ raw: buf.subarray(start, pos),
1823
+ body
1824
+ });
1825
+ }
1826
+ return out;
1827
+ }
1828
+ const decoder = new TextDecoder();
1829
+ const encoder = new TextEncoder();
1830
+ function strings(buf, number$1) {
1831
+ return fields(buf).filter((f) => f.number === number$1 && f.wire === WIRE_LEN).map((f) => decoder.decode(f.body));
1832
+ }
1833
+ function firstString(buf, number$1) {
1834
+ return strings(buf, number$1)[0];
1835
+ }
1836
+ function varint(value) {
1837
+ const bytes = [];
1838
+ while (value >= 128) {
1839
+ bytes.push(value % 128 | 128);
1840
+ value = Math.floor(value / 128);
1841
+ }
1842
+ bytes.push(value);
1843
+ return bytes;
1844
+ }
1845
+ function lengthDelimited(number$1, payload) {
1846
+ const head = [...varint(number$1 * 8 + WIRE_LEN), ...varint(payload.length)];
1847
+ const out = new Uint8Array(head.length + payload.length);
1848
+ out.set(head, 0);
1849
+ out.set(payload, head.length);
1850
+ return out;
1851
+ }
1852
+ function concat(parts) {
1853
+ const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));
1854
+ let offset = 0;
1855
+ for (const part of parts) {
1856
+ out.set(part, offset);
1857
+ offset += part.length;
1858
+ }
1859
+ return out;
1860
+ }
1754
1861
  /** Neutral fallbacks so signal evaluators always have a well-formed frame to read. */
1755
1862
  function createNeutralObjectResult() {
1756
1863
  return {
@@ -1941,98 +2048,6 @@ function maskLogits(head, anchor, out) {
1941
2048
  return logits;
1942
2049
  }
1943
2050
  /**
1944
- * Minimal ONNX protobuf wire-format helpers: split a message into fields,
1945
- * read strings, write length-delimited fields. Only what the graph editors
1946
- * (onnx-subgraph.ts, onnx-float16.ts) need; unknown fields are copied as raw
1947
- * bytes, so nothing else in a model is touched.
1948
- */
1949
- const MODEL_GRAPH = 7;
1950
- const GRAPH_NODE = 1;
1951
- const GRAPH_INITIALIZER = 5;
1952
- const GRAPH_INPUT = 11;
1953
- const GRAPH_OUTPUT = 12;
1954
- const GRAPH_VALUE_INFO = 13;
1955
- const NODE_INPUT = 1;
1956
- const NODE_OUTPUT$1 = 2;
1957
- const VALUE_INFO_NAME = 1;
1958
- const TENSOR_NAME = 8;
1959
- const WIRE_VARINT = 0;
1960
- const WIRE_I64 = 1;
1961
- const WIRE_LEN = 2;
1962
- const WIRE_I32 = 5;
1963
- function readVarint(buf, pos) {
1964
- let value = 0;
1965
- let scale = 1;
1966
- for (;;) {
1967
- if (pos >= buf.length) throw new Error("ONNX model: truncated varint");
1968
- const byte = buf[pos++];
1969
- value += (byte & 127) * scale;
1970
- if (byte < 128) return [value, pos];
1971
- scale *= 128;
1972
- }
1973
- }
1974
- function fields(buf) {
1975
- const out = [];
1976
- let pos = 0;
1977
- while (pos < buf.length) {
1978
- const start = pos;
1979
- const [tag, afterTag] = readVarint(buf, pos);
1980
- pos = afterTag;
1981
- const number = Math.floor(tag / 8);
1982
- const wire = tag & 7;
1983
- let body = buf.subarray(pos, pos);
1984
- if (wire === WIRE_VARINT) pos = readVarint(buf, pos)[1];
1985
- else if (wire === WIRE_I64) pos += 8;
1986
- else if (wire === WIRE_I32) pos += 4;
1987
- else if (wire === WIRE_LEN) {
1988
- const [length, afterLength] = readVarint(buf, pos);
1989
- body = buf.subarray(afterLength, afterLength + length);
1990
- pos = afterLength + length;
1991
- } else throw new Error(`ONNX model: unsupported wire type ${wire}`);
1992
- if (pos > buf.length) throw new Error("ONNX model: truncated field");
1993
- out.push({
1994
- number,
1995
- wire,
1996
- raw: buf.subarray(start, pos),
1997
- body
1998
- });
1999
- }
2000
- return out;
2001
- }
2002
- const decoder = new TextDecoder();
2003
- const encoder = new TextEncoder();
2004
- function strings(buf, number) {
2005
- return fields(buf).filter((f) => f.number === number && f.wire === WIRE_LEN).map((f) => decoder.decode(f.body));
2006
- }
2007
- function firstString(buf, number) {
2008
- return strings(buf, number)[0];
2009
- }
2010
- function varint(value) {
2011
- const bytes = [];
2012
- while (value >= 128) {
2013
- bytes.push(value % 128 | 128);
2014
- value = Math.floor(value / 128);
2015
- }
2016
- bytes.push(value);
2017
- return bytes;
2018
- }
2019
- function lengthDelimited(number, payload) {
2020
- const head = [...varint(number * 8 + WIRE_LEN), ...varint(payload.length)];
2021
- const out = new Uint8Array(head.length + payload.length);
2022
- out.set(head, 0);
2023
- out.set(payload, head.length);
2024
- return out;
2025
- }
2026
- function concat(parts) {
2027
- const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));
2028
- let offset = 0;
2029
- for (const part of parts) {
2030
- out.set(part, offset);
2031
- offset += part.length;
2032
- }
2033
- return out;
2034
- }
2035
- /**
2036
2051
  * Cuts an ONNX model down to the nodes that compute a chosen set of tensors,
2037
2052
  * which become the graph's outputs. Works on the protobuf wire format directly
2038
2053
  * (only the fields it needs are decoded; everything else is copied byte for
@@ -2054,13 +2069,13 @@ function floatOutput(name) {
2054
2069
  */
2055
2070
  function extractSubgraph(model, outputs) {
2056
2071
  const modelFields = fields(model);
2057
- const graphField = modelFields.find((f) => f.number === MODEL_GRAPH && f.wire === WIRE_LEN);
2072
+ const graphField = modelFields.find((f) => f.number === MODEL_GRAPH$1 && f.wire === WIRE_LEN);
2058
2073
  if (!graphField) throw new Error("ONNX model has no graph");
2059
2074
  const graphFields = fields(graphField.body);
2060
- const nodes = graphFields.filter((f) => f.number === GRAPH_NODE).map((f) => ({
2075
+ const nodes = graphFields.filter((f) => f.number === GRAPH_NODE$1).map((f) => ({
2061
2076
  field: f,
2062
- inputs: strings(f.body, NODE_INPUT),
2063
- outputs: strings(f.body, NODE_OUTPUT$1)
2077
+ inputs: strings(f.body, NODE_INPUT$1),
2078
+ outputs: strings(f.body, NODE_OUTPUT$2)
2064
2079
  }));
2065
2080
  const producer = /* @__PURE__ */ new Map();
2066
2081
  nodes.forEach((node, index) => {
@@ -2088,7 +2103,7 @@ function extractSubgraph(model, outputs) {
2088
2103
  const parts = [];
2089
2104
  let nodeIndex = 0;
2090
2105
  for (const f of graphFields) switch (f.number) {
2091
- case GRAPH_NODE:
2106
+ case GRAPH_NODE$1:
2092
2107
  if (keepNode.has(nodeIndex)) parts.push(f.raw);
2093
2108
  nodeIndex++;
2094
2109
  break;
@@ -2097,18 +2112,66 @@ function extractSubgraph(model, outputs) {
2097
2112
  if (name !== void 0 && needed.has(name)) parts.push(f.raw);
2098
2113
  break;
2099
2114
  }
2100
- case GRAPH_INPUT:
2115
+ case GRAPH_INPUT$1:
2101
2116
  case GRAPH_VALUE_INFO: {
2102
2117
  const name = firstString(f.body, VALUE_INFO_NAME);
2103
2118
  if (name !== void 0 && needed.has(name)) parts.push(f.raw);
2104
2119
  break;
2105
2120
  }
2106
- case GRAPH_OUTPUT: break;
2121
+ case GRAPH_OUTPUT$1: break;
2107
2122
  default: parts.push(f.raw);
2108
2123
  }
2109
- for (const name of outputs) parts.push(lengthDelimited(GRAPH_OUTPUT, valueInfo.get(name) ?? floatOutput(name)));
2124
+ for (const name of outputs) parts.push(lengthDelimited(GRAPH_OUTPUT$1, valueInfo.get(name) ?? floatOutput(name)));
2110
2125
  const graph = concat(parts);
2111
- return concat(modelFields.map((f) => f === graphField ? lengthDelimited(MODEL_GRAPH, graph) : f.raw));
2126
+ return concat(modelFields.map((f) => f === graphField ? lengthDelimited(MODEL_GRAPH$1, graph) : f.raw));
2127
+ }
2128
+ const MODEL_IR_VERSION = 1;
2129
+ const MODEL_OPSET_IMPORT = 8;
2130
+ const MODEL_GRAPH = 7;
2131
+ const OPSET_VERSION = 2;
2132
+ const GRAPH_NODE = 1;
2133
+ const GRAPH_NAME = 2;
2134
+ const GRAPH_INPUT = 11;
2135
+ const GRAPH_OUTPUT = 12;
2136
+ const NODE_INPUT = 1;
2137
+ const NODE_OUTPUT$1 = 2;
2138
+ const NODE_OP_TYPE$1 = 4;
2139
+ const VALUE_NAME = 1;
2140
+ const VALUE_TYPE = 2;
2141
+ const TYPE_TENSOR = 1;
2142
+ const TENSOR_ELEM_TYPE = 1;
2143
+ const TENSOR_SHAPE = 2;
2144
+ const SHAPE_DIM = 1;
2145
+ const DIM_VALUE = 1;
2146
+ const FLOAT = 1;
2147
+ const text = (field, value) => lengthDelimited(field, encoder.encode(value));
2148
+ const number = (field, value) => new Uint8Array([...varint(field * 8), ...varint(value)]);
2149
+ function floatVector(name) {
2150
+ const dim = lengthDelimited(SHAPE_DIM, number(DIM_VALUE, 1));
2151
+ const tensor = concat([number(TENSOR_ELEM_TYPE, FLOAT), lengthDelimited(TENSOR_SHAPE, dim)]);
2152
+ return concat([text(VALUE_NAME, name), lengthDelimited(VALUE_TYPE, lengthDelimited(TYPE_TENSOR, tensor))]);
2153
+ }
2154
+ let probe;
2155
+ /**
2156
+ * A one-node ONNX model (`y = Identity(x)`, float[1]). Creating a session from it tells
2157
+ * whether an execution provider works here before any real model is downloaded.
2158
+ */
2159
+ function probeModel() {
2160
+ probe ??= concat([
2161
+ number(MODEL_IR_VERSION, 8),
2162
+ lengthDelimited(MODEL_OPSET_IMPORT, number(OPSET_VERSION, 13)),
2163
+ lengthDelimited(MODEL_GRAPH, concat([
2164
+ lengthDelimited(GRAPH_NODE, concat([
2165
+ text(NODE_INPUT, "x"),
2166
+ text(NODE_OUTPUT$1, "y"),
2167
+ text(NODE_OP_TYPE$1, "Identity")
2168
+ ])),
2169
+ text(GRAPH_NAME, "probe"),
2170
+ lengthDelimited(GRAPH_INPUT, floatVector("x")),
2171
+ lengthDelimited(GRAPH_OUTPUT, floatVector("y"))
2172
+ ]))
2173
+ ]);
2174
+ return probe;
2112
2175
  }
2113
2176
  /**
2114
2177
  * onnxruntime-web 1.30's WebGPU EP computes grouped convolutions wrong in its
@@ -2151,7 +2214,7 @@ function tensorDims(tensor) {
2151
2214
  function needsNchwLayout(model) {
2152
2215
  let graph;
2153
2216
  try {
2154
- graph = fields(model).find((f) => f.number === MODEL_GRAPH && f.wire === WIRE_LEN);
2217
+ graph = fields(model).find((f) => f.number === MODEL_GRAPH$1 && f.wire === WIRE_LEN);
2155
2218
  } catch {
2156
2219
  return true;
2157
2220
  }
@@ -2161,7 +2224,7 @@ function needsNchwLayout(model) {
2161
2224
  for (const f of fields(graph.body)) if (f.number === GRAPH_INITIALIZER) {
2162
2225
  const name = firstString(f.body, TENSOR_NAME);
2163
2226
  if (name !== void 0) dims.set(name, tensorDims(f.body));
2164
- } else if (f.number === GRAPH_NODE) {
2227
+ } else if (f.number === GRAPH_NODE$1) {
2165
2228
  const op = firstString(f.body, NODE_OP_TYPE);
2166
2229
  if (op !== "Conv" && op !== "Constant") continue;
2167
2230
  const attributes = fields(f.body).filter((a) => a.number === NODE_ATTRIBUTE).map((a) => a.body);
@@ -2175,7 +2238,7 @@ function needsNchwLayout(model) {
2175
2238
  const groupAttr = attributes.find((a) => firstString(a, ATTR_NAME) === "group");
2176
2239
  const groupField = groupAttr && fields(groupAttr).find((a) => a.number === ATTR_I);
2177
2240
  const group = groupField ? varintValues(groupField)[0] ?? 1 : 1;
2178
- const weight = strings(f.body, NODE_INPUT)[1];
2241
+ const weight = strings(f.body, NODE_INPUT$1)[1];
2179
2242
  if (group > 1 && weight) convs.push({
2180
2243
  weight,
2181
2244
  group
@@ -2222,42 +2285,58 @@ var WebGPUProvider = class {
2222
2285
  });
2223
2286
  return this._ortPromise;
2224
2287
  }
2225
- async createSession(modelBytes) {
2226
- const ort = await this.ort();
2227
- let session;
2288
+ async createOrtSession(ort, modelBytes, options) {
2228
2289
  try {
2229
2290
  const device = this.device;
2230
2291
  const layout = needsNchwLayout(modelBytes) ? "NCHW" : "NHWC";
2231
- session = await ort.InferenceSession.create(modelBytes, {
2292
+ return await ort.InferenceSession.create(modelBytes, {
2232
2293
  executionProviders: this._providers.map((name) => withProviderOptions(name, device, layout)),
2233
2294
  graphOptimizationLevel: "all",
2295
+ externalData: options?.externalData?.map(({ path: path$1, data }) => ({
2296
+ path: path$1,
2297
+ data
2298
+ })),
2234
2299
  logSeverityLevel: 3
2235
2300
  });
2236
2301
  } catch (err) {
2237
2302
  if (!this._wasmFallback || !this._providers.includes("webgpu")) throw err;
2238
- session = await ort.InferenceSession.create(modelBytes, {
2303
+ return await ort.InferenceSession.create(modelBytes, {
2239
2304
  executionProviders: ["wasm"],
2240
2305
  graphOptimizationLevel: "all",
2306
+ externalData: options?.externalData?.map(({ path: path$1, data }) => ({
2307
+ path: path$1,
2308
+ data
2309
+ })),
2241
2310
  logSeverityLevel: 3
2242
2311
  });
2243
2312
  }
2244
- return {
2245
- run: async (input) => {
2246
- const inputName = session.inputNames.includes(input.name) ? input.name : session.inputNames[0] ?? input.name;
2247
- const tensor = input.gpuBuffer && ort.Tensor.fromGpuBuffer ? ort.Tensor.fromGpuBuffer(input.gpuBuffer, {
2313
+ }
2314
+ async createSession(modelBytes, options) {
2315
+ const ort = await this.ort();
2316
+ const session = await exclusive(ort, () => this.createOrtSession(ort, modelBytes, options));
2317
+ const runMany = async (inputs) => {
2318
+ const feeds = {};
2319
+ for (const input of inputs) {
2320
+ const name = inputs.length === 1 && !session.inputNames.includes(input.name) ? session.inputNames[0] ?? input.name : input.name;
2321
+ if (input.gpuBuffer && !(input.data instanceof Float32Array)) throw new Error("GPU-buffer vision inputs must be float32.");
2322
+ feeds[name] = input.gpuBuffer && ort.Tensor.fromGpuBuffer ? ort.Tensor.fromGpuBuffer(input.gpuBuffer, {
2248
2323
  dataType: "float32",
2249
2324
  dims: [...input.dims]
2250
- }) : new ort.Tensor("float32", input.data, [...input.dims]);
2251
- const results = await session.run({ [inputName]: tensor });
2252
- const outputs = {};
2253
- for (const [name, tensor$1] of Object.entries(results)) outputs[name] = {
2254
- data: tensor$1.data,
2255
- dims: [...tensor$1.dims]
2256
- };
2257
- return outputs;
2258
- },
2325
+ }) : new ort.Tensor(input.data instanceof Uint8Array ? "bool" : input.data instanceof BigInt64Array ? "int64" : input.data instanceof Int32Array ? "int32" : "float32", input.data, [...input.dims]);
2326
+ }
2327
+ const results = await exclusive(ort, () => session.run(feeds));
2328
+ const outputs = {};
2329
+ for (const [name, tensor] of Object.entries(results)) outputs[name] = {
2330
+ data: tensor.data,
2331
+ dims: [...tensor.dims]
2332
+ };
2333
+ return outputs;
2334
+ };
2335
+ return {
2336
+ run: (input) => runMany([input]),
2337
+ runMany,
2259
2338
  release: () => {
2260
- session.release();
2339
+ exclusive(ort, () => session.release());
2261
2340
  }
2262
2341
  };
2263
2342
  }
@@ -2279,6 +2358,17 @@ function withProviderOptions(name, device, preferredLayout) {
2279
2358
  preferredLayout
2280
2359
  };
2281
2360
  }
2361
+ /**
2362
+ * ORT Web's WebGPU build takes one call at a time per runtime: a concurrent session create
2363
+ * throws, and a run entered while another awaits the GPU corrupts its wasm heap. Every
2364
+ * create, run and release on one module therefore queues here.
2365
+ */
2366
+ const queues = /* @__PURE__ */ new WeakMap();
2367
+ function exclusive(ort, call) {
2368
+ const result = (queues.get(ort) ?? Promise.resolve()).then(call, call);
2369
+ queues.set(ort, result.catch(() => void 0));
2370
+ return result;
2371
+ }
2282
2372
  const ORT_WEBGPU_SPECIFIER = "onnxruntime-web/webgpu";
2283
2373
  const WEBGPU_SPECIFIER = "webgpu";
2284
2374
  let nodeWebGPUReady;
@@ -2377,10 +2467,15 @@ var NodeWebGPUProvider = class {
2377
2467
  loader
2378
2468
  });
2379
2469
  }
2380
- createSession(modelBytes) {
2381
- return this._inner.createSession(modelBytes);
2470
+ createSession(modelBytes, options) {
2471
+ return this._inner.createSession(modelBytes, options);
2382
2472
  }
2383
2473
  };
2474
+ /** Where a provider's sessions run: its own answer, else WebGPU for WebGPU providers, else CPU. */
2475
+ function sessionCompute(provider) {
2476
+ if (provider.backend) return provider.backend();
2477
+ return Promise.resolve(provider.kind === "webgpu" ? "webgpu" : "cpu");
2478
+ }
2384
2479
  let defaultProvider;
2385
2480
  let visionDevice;
2386
2481
  /**
@@ -2427,22 +2522,30 @@ var AutoSessionProvider = class {
2427
2522
  get device() {
2428
2523
  return this._resolved?.device;
2429
2524
  }
2430
- async createSession(modelBytes) {
2431
- if (this._resolved) return this._resolved.createSession(modelBytes);
2432
- if (!this._resolving) {
2433
- this._resolving = this.resolve(modelBytes);
2434
- this._resolving.catch(() => {
2435
- this._resolving = void 0;
2436
- });
2437
- const { provider: provider$1, first } = await this._resolving;
2438
- this._resolved = provider$1;
2439
- if (first) return first;
2440
- return provider$1.createSession(modelBytes);
2441
- }
2442
- const { provider } = await this._resolving;
2443
- return provider.createSession(modelBytes);
2525
+ async createSession(modelBytes, options) {
2526
+ if (this._resolved) return this._resolved.createSession(modelBytes, options);
2527
+ if (this._resolving) return (await this._resolving).provider.createSession(modelBytes, options);
2528
+ const { provider, first } = await this.start(modelBytes, options);
2529
+ return first ?? provider.createSession(modelBytes, options);
2530
+ }
2531
+ /** Where sessions run. Before the first session it decides with a one-node probe graph. */
2532
+ async backend() {
2533
+ if (!this._resolved && !this._resolving) (await this.start(probeModel())).first?.release();
2534
+ const provider = this._resolved ?? (await this._resolving)?.provider;
2535
+ if (!provider) throw new Error("No vision backend could be resolved.");
2536
+ return sessionCompute(provider);
2537
+ }
2538
+ start(modelBytes, options) {
2539
+ const resolving = this.resolve(modelBytes, options);
2540
+ this._resolving = resolving;
2541
+ resolving.then(({ provider }) => {
2542
+ this._resolved = provider;
2543
+ }, () => {
2544
+ this._resolving = void 0;
2545
+ });
2546
+ return resolving;
2444
2547
  }
2445
- async resolve(modelBytes) {
2548
+ async resolve(modelBytes, options) {
2446
2549
  const backend = requestedVisionBackend();
2447
2550
  if (backend === "cpu") {
2448
2551
  reportBackend({
@@ -2457,14 +2560,23 @@ var AutoSessionProvider = class {
2457
2560
  backend: "cuda",
2458
2561
  sharedDevice: false
2459
2562
  });
2460
- return { provider: new NodeSessionProvider({ executionProviders: ["cuda", "cpu"] }) };
2563
+ return { provider: cudaProvider() };
2461
2564
  }
2565
+ if (backend === "auto" && await hasNvidiaDriver()) try {
2566
+ const first = await new NodeSessionProvider({ executionProviders: ["cuda"] }).createSession(modelBytes, options);
2567
+ reportBackend({
2568
+ backend: "cuda",
2569
+ sharedDevice: false
2570
+ });
2571
+ first.release();
2572
+ return { provider: cudaProvider() };
2573
+ } catch {}
2462
2574
  const webgpu = new NodeWebGPUProvider({
2463
2575
  wasmFallback: false,
2464
2576
  device: visionDevice
2465
2577
  });
2466
2578
  try {
2467
- const first = await webgpu.createSession(modelBytes);
2579
+ const first = await webgpu.createSession(modelBytes, options);
2468
2580
  reportBackend({
2469
2581
  backend: "webgpu",
2470
2582
  sharedDevice: !!visionDevice
@@ -2484,6 +2596,20 @@ var AutoSessionProvider = class {
2484
2596
  }
2485
2597
  }
2486
2598
  };
2599
+ function cudaProvider() {
2600
+ return new NodeSessionProvider({ executionProviders: ["cuda", "cpu"] });
2601
+ }
2602
+ /** True on Linux with the NVIDIA kernel driver loaded (checked without touching CUDA). */
2603
+ async function hasNvidiaDriver() {
2604
+ if (typeof process === "undefined" || process.platform !== "linux") return false;
2605
+ try {
2606
+ const { access } = await import("node:fs/promises");
2607
+ await access("/proc/driver/nvidia/version");
2608
+ return true;
2609
+ } catch {
2610
+ return false;
2611
+ }
2612
+ }
2487
2613
  let processProvider;
2488
2614
  /**
2489
2615
  * The provider for a runner created without one: GPU if possible, otherwise CPU.
@@ -2509,7 +2635,7 @@ async function availableCpus() {
2509
2635
  async function cgroupCpuQuota() {
2510
2636
  if (typeof process === "undefined" || process.platform !== "linux") return;
2511
2637
  const { readFile: readFile$1 } = await import("node:fs/promises");
2512
- const read = (path$1) => readFile$1(path$1, "utf8").then((text) => text.trim(), () => void 0);
2638
+ const read = (path$1) => readFile$1(path$1, "utf8").then((text$1) => text$1.trim(), () => void 0);
2513
2639
  const toCpus = (quota, period) => quota > 0 && period > 0 ? Math.ceil(quota / period) : void 0;
2514
2640
  const v2 = await read("/sys/fs/cgroup/cpu.max");
2515
2641
  if (v2 !== void 0) {
@@ -2539,6 +2665,9 @@ var NodeSessionProvider = class {
2539
2665
  constructor(options = {}) {
2540
2666
  this._executionProviders = options.executionProviders ?? ["cpu"];
2541
2667
  }
2668
+ backend() {
2669
+ return Promise.resolve(this._executionProviders.includes("cuda") ? "cuda" : "cpu");
2670
+ }
2542
2671
  ortPromise;
2543
2672
  async ort() {
2544
2673
  if (!this.ortPromise) this.ortPromise = import("onnxruntime-node").catch((err) => {
@@ -2547,28 +2676,39 @@ var NodeSessionProvider = class {
2547
2676
  });
2548
2677
  return this.ortPromise;
2549
2678
  }
2550
- async createSession(modelBytes) {
2679
+ async createSession(modelBytes, options) {
2551
2680
  const ort = await this.ort();
2552
2681
  const threads = await cpuSessionThreads();
2553
2682
  const session = await ort.InferenceSession.create(modelBytes, {
2554
2683
  executionProviders: [...this._executionProviders],
2684
+ externalData: options?.externalData?.map(({ path: path$1, data }) => ({
2685
+ path: path$1,
2686
+ data
2687
+ })),
2555
2688
  graphOptimizationLevel: "all",
2556
2689
  ...threads !== void 0 ? {
2557
2690
  intraOpNumThreads: threads,
2558
2691
  interOpNumThreads: 1
2559
2692
  } : {}
2560
2693
  });
2694
+ const runMany = async (inputs) => {
2695
+ const feeds = {};
2696
+ for (const input of inputs) {
2697
+ const name = inputs.length === 1 && !session.inputNames.includes(input.name) ? session.inputNames[0] ?? input.name : input.name;
2698
+ if (input.gpuBuffer) throw new Error("CPU vision sessions do not accept GPU buffers.");
2699
+ feeds[name] = input.data instanceof Uint8Array ? new ort.Tensor("bool", input.data, [...input.dims]) : input.data instanceof BigInt64Array ? new ort.Tensor("int64", input.data, [...input.dims]) : input.data instanceof Int32Array ? new ort.Tensor("int32", input.data, [...input.dims]) : new ort.Tensor("float32", input.data, [...input.dims]);
2700
+ }
2701
+ const results = await session.run(feeds);
2702
+ const outputs = {};
2703
+ for (const [name, tensor] of Object.entries(results)) outputs[name] = {
2704
+ data: tensor.data,
2705
+ dims: [...tensor.dims]
2706
+ };
2707
+ return outputs;
2708
+ };
2561
2709
  return {
2562
- run: async (input) => {
2563
- const feeds = { [session.inputNames.includes(input.name) ? input.name : session.inputNames[0] ?? input.name]: new ort.Tensor("float32", input.data, [...input.dims]) };
2564
- const results = await session.run(feeds);
2565
- const outputs = {};
2566
- for (const [name, tensor] of Object.entries(results)) outputs[name] = {
2567
- data: tensor.data,
2568
- dims: [...tensor.dims]
2569
- };
2570
- return outputs;
2571
- },
2710
+ run: (input) => runMany([input]),
2711
+ runMany,
2572
2712
  release: () => {
2573
2713
  session.release();
2574
2714
  }
@@ -2770,6 +2910,7 @@ var VisionRunner = class VisionRunner$1 {
2770
2910
  async inferNow(key, frame) {
2771
2911
  const session = await this.session(key);
2772
2912
  const desc = VISION_MODELS[key];
2913
+ 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).`);
2773
2914
  const spec = preprocessSpec(desc.family, desc.input);
2774
2915
  const dims = [
2775
2916
  1,
@@ -3033,6 +3174,51 @@ function boundsOverlap(a, b) {
3033
3174
  if (iw <= 0 || ih <= 0) return 0;
3034
3175
  return iw * ih / Math.min(boundsArea(a), boundsArea(b));
3035
3176
  }
3177
+ /** Tracked-object geometry of one selected mask (bounds, center, velocity), with no detector involved; the track ID is the mask's (default 1). */
3178
+ function maskObject(mask, frame, fps, score, previous) {
3179
+ let left = mask.width, top = mask.height, right = -1, bottom = -1;
3180
+ for (let y$1 = 0; y$1 < mask.height; y$1++) for (let x$1 = 0; x$1 < mask.width; x$1++) {
3181
+ if ((mask.mask[y$1 * mask.width + x$1] ?? 0) < 128) continue;
3182
+ left = Math.min(left, x$1);
3183
+ top = Math.min(top, y$1);
3184
+ right = Math.max(right, x$1);
3185
+ bottom = Math.max(bottom, y$1);
3186
+ }
3187
+ const active = right >= 0;
3188
+ const x = active ? left : 0, y = active ? top : 0;
3189
+ const width = active ? right - left + 1 : 0, height = active ? bottom - top + 1 : 0;
3190
+ const centerX = x + width / 2, centerY = y + height / 2;
3191
+ const vx = active && previous?.active ? (centerX - previous.centerX) * fps : 0;
3192
+ const vy = active && previous?.active ? (centerY - previous.centerY) * fps : 0;
3193
+ return {
3194
+ trackId: mask.trackId ?? 1,
3195
+ category: mask.category,
3196
+ score,
3197
+ boundingBox: {
3198
+ originX: x,
3199
+ originY: y,
3200
+ width,
3201
+ height,
3202
+ normalizedX: x / mask.width,
3203
+ normalizedY: y / mask.height,
3204
+ normalizedWidth: width / mask.width,
3205
+ normalizedHeight: height / mask.height
3206
+ },
3207
+ centerX,
3208
+ centerY,
3209
+ normalizedCenterX: centerX / mask.width,
3210
+ normalizedCenterY: centerY / mask.height,
3211
+ velocity: {
3212
+ vx,
3213
+ vy
3214
+ },
3215
+ speed: Math.hypot(vx, vy),
3216
+ age: frame + 1,
3217
+ hits: frame + 1,
3218
+ active,
3219
+ isCoasting: false
3220
+ };
3221
+ }
3036
3222
  var SpatialLandmarkTransformer = class {
3037
3223
  width;
3038
3224
  height;
@@ -3177,6 +3363,9 @@ var VisionBundle = class {
3177
3363
  _height;
3178
3364
  _transformer;
3179
3365
  _stencilTexture;
3366
+ _maskSource;
3367
+ _matteSource;
3368
+ _cameraFov;
3180
3369
  _poseCache = /* @__PURE__ */ new Map();
3181
3370
  _objectCache = /* @__PURE__ */ new Map();
3182
3371
  _maskCache = /* @__PURE__ */ new Map();
@@ -3188,6 +3377,9 @@ var VisionBundle = class {
3188
3377
  _maskTrackCache = /* @__PURE__ */ new Map();
3189
3378
  _registeredSignals = /* @__PURE__ */ new Set();
3190
3379
  constructor(options = {}) {
3380
+ this._maskSource = options.maskSource;
3381
+ this._matteSource = options.matteSource;
3382
+ this._cameraFov = options.cameraFov ?? 60;
3191
3383
  this._totalFrames = options.totalFrames ?? 120;
3192
3384
  this._fps = options.fps ?? 24;
3193
3385
  this._width = options.width ?? 1920;
@@ -3815,6 +4007,18 @@ var VisionBundle = class {
3815
4007
  }
3816
4008
  };
3817
4009
  }
4010
+ /** Update source geometry once a lazily decoded clip's size is known. */
4011
+ setFrameSize(width, height) {
4012
+ if (this._width === width && this._height === height) return;
4013
+ this._width = width;
4014
+ this._height = height;
4015
+ this._transformer = new SpatialLandmarkTransformer({
4016
+ width,
4017
+ height,
4018
+ fov: this._cameraFov
4019
+ });
4020
+ this.invalidateSignals();
4021
+ }
3818
4022
  setStencilTexture(texture) {
3819
4023
  this._stencilTexture = texture;
3820
4024
  }
@@ -3865,14 +4069,14 @@ var VisionBundle = class {
3865
4069
  this.invalidateSignals();
3866
4070
  }
3867
4071
  getMaskResult(frame) {
3868
- return this.latestAtOrBefore(this._maskCache, frame) ?? [];
4072
+ return this._maskSource?.(frame) ?? this.latestAtOrBefore(this._maskCache, frame) ?? [];
3869
4073
  }
3870
4074
  setMatteResult(frame, matte) {
3871
4075
  this._matteCache.set(this.clamp(frame), matte);
3872
4076
  this.invalidateSignals();
3873
4077
  }
3874
4078
  getMatteResult(frame) {
3875
- return this.latestAtOrBefore(this._matteCache, frame);
4079
+ return this._matteSource?.(frame) ?? this.latestAtOrBefore(this._matteCache, frame);
3876
4080
  }
3877
4081
  /**
3878
4082
  * Serializable snapshot of one frame's object / class / mask signals.
@@ -4107,7 +4311,7 @@ var VisionNode = class VisionNode$1 {
4107
4311
  };
4108
4312
 
4109
4313
  //#endregion
4110
- //#region ../../nodes/node-vision/dist/renderers-ZqeB-LTu.mjs
4314
+ //#region ../../nodes/node-vision/dist/renderers-D1ixy3z3.mjs
4111
4315
  let scratchValues = new Uint8Array(0);
4112
4316
  let scratchLengths = new Uint32Array(0);
4113
4317
  function encodeMask(mask, width, height) {
@@ -4849,8 +5053,14 @@ const VisionWebGPURenderer = async (args) => {
4849
5053
  let personMatte;
4850
5054
  let currentPoseRes;
4851
5055
  let subject;
4852
- if (fromClip) subject = selectSubject(clipSubject ?? void 0, nodeKeyStr, frameIdx);
4853
- else if (cached) {
5056
+ if (fromClip) {
5057
+ subject = clipSubject ?? void 0;
5058
+ if (subject) lastSubjectByNode.set(nodeKeyStr, {
5059
+ mask: subject,
5060
+ frame: frameIdx
5061
+ });
5062
+ else lastSubjectByNode.delete(nodeKeyStr);
5063
+ } else if (cached) {
4854
5064
  frameObjects = cached.objects;
4855
5065
  if (wantsDetection) visionBundle?.setObjectResult(frameIdx, {
4856
5066
  objects: cached.objects,
@@ -5062,10 +5272,12 @@ const VisionWebGPURenderer = async (args) => {
5062
5272
  * uv, so it fits any target of the same aspect. Other shapes fall back.
5063
5273
  */
5064
5274
  function clipSubjectFor(effect, frame, fps, width, height) {
5065
- const subject = (effect?.[CLIP_SUBJECT])?.subject(frame, fps);
5275
+ const source = effect?.[CLIP_SUBJECT];
5276
+ const subject = source?.subject(frame, fps);
5066
5277
  if (!subject) return subject;
5067
5278
  const aspect = subject.width / subject.height / (width / height);
5068
- return Math.abs(aspect - 1) < .01 ? subject : void 0;
5279
+ if (Math.abs(aspect - 1) < .01) return subject;
5280
+ if (source?.exact) throw new Error("A prompted clip matte requires the source aspect ratio. Apply layout cropping after the source matte.");
5069
5281
  }
5070
5282
  /** Adapts a Selfie Segmenter matte to the instance-mask shape the composite path takes. */
5071
5283
  function personMatteAsMask(matte) {
@@ -5084,5 +5296,5 @@ function personMatteAsMask(matte) {
5084
5296
  var renderers_default = defineRenderer({ WebGPURenderer: VisionWebGPURenderer });
5085
5297
 
5086
5298
  //#endregion
5087
- export { COCO_CLASSES as _, COCO17_KEYPOINT_NAMES as a, SpatialLandmarkTransformer as c, VisionNode as d, VisionRunner as f, pinNodeToObject as g, pinNodeToLandmark as h, COCO17_KEYPOINTS as i, TemporalObjectTracker as l, mergeSubjectMask 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 };
5088
- //# sourceMappingURL=renderer-BD25uND8.mjs.map
5299
+ 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 };
5300
+ //# sourceMappingURL=renderer-B0piZg9r.mjs.map