framefields 2.8.1 → 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.
- package/README.md +30 -1
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-vatRe308.mjs → audio-BfQg37MW.mjs} +3 -3
- package/dist/{audio-vatRe308.mjs.map → audio-BfQg37MW.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +44 -44
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +43 -43
- package/dist/{dist-CFe1fC9l.mjs → dist-C1cCW7Bt.mjs} +8 -1
- package/dist/{dist-CFe1fC9l.mjs.map → dist-C1cCW7Bt.mjs.map} +1 -1
- package/dist/{dist-BbwtlSZO.mjs → dist-C8Xq3zgx.mjs} +2 -2
- package/dist/{dist-BbwtlSZO.mjs.map → dist-C8Xq3zgx.mjs.map} +1 -1
- package/dist/effects/index.d.mts +1 -1
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-CCyfjbhZ.mjs → effects-CemgqEPv.mjs} +2 -2
- package/dist/{effects-CCyfjbhZ.mjs.map → effects-CemgqEPv.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-C1mgtkCa.mjs → fonts-BW0pPcvJ.mjs} +2 -2
- package/dist/{fonts-C1mgtkCa.mjs.map → fonts-BW0pPcvJ.mjs.map} +1 -1
- package/dist/{gpu-CU2tEKJJ.mjs → gpu-CMaa63nz.mjs} +2 -2
- package/dist/{gpu-CU2tEKJJ.mjs.map → gpu-CMaa63nz.mjs.map} +1 -1
- package/dist/{index-BwRrsP_V.d.mts → index-CZjrnylh.d.mts} +457 -417
- package/dist/index-CZjrnylh.d.mts.map +1 -0
- package/dist/index-D5UDyVMb.d.mts.map +1 -1
- package/dist/{index-UDDAfHAF.d.mts → index-Du5YgdzM.d.mts} +50 -12
- package/dist/index-Du5YgdzM.d.mts.map +1 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +50 -50
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-WXbsf6Dv.mjs → preview-BQVgn6Ho.mjs} +2 -2
- package/dist/{preview-WXbsf6Dv.mjs.map → preview-BQVgn6Ho.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-JGDZQCNU.mjs → chunk-2B722GXM.mjs} +1 -1
- package/dist/preview-engine/{chunk-GFW3D464.mjs → chunk-2DWY7UBV.mjs} +1 -1
- package/dist/preview-engine/{chunk-72DYOIMP.mjs → chunk-2PYTDN2C.mjs} +1 -1
- package/dist/preview-engine/{chunk-PF3SXQNV.mjs → chunk-34DL53D5.mjs} +1 -1
- package/dist/preview-engine/{chunk-GLXJOXBE.mjs → chunk-34RJ7GAS.mjs} +1 -1
- package/dist/preview-engine/{chunk-6OY4YLTC.mjs → chunk-35HMRW4I.mjs} +1 -1
- package/dist/preview-engine/chunk-374QY63R.mjs +1974 -0
- package/dist/preview-engine/{chunk-W26U6BP2.mjs → chunk-4WYM72ZN.mjs} +1 -1
- package/dist/preview-engine/{chunk-EQ4VBUWM.mjs → chunk-5AWAOMBR.mjs} +1 -1
- package/dist/preview-engine/{chunk-J4SHMCTG.mjs → chunk-6R3UJBL5.mjs} +1 -1
- package/dist/preview-engine/{chunk-VHGC72XP.mjs → chunk-73CNXGAK.mjs} +1 -1
- package/dist/preview-engine/{chunk-KYOPOCO5.mjs → chunk-AHQCDTD6.mjs} +1 -1
- package/dist/preview-engine/{chunk-ADV2TIKA.mjs → chunk-BEYA25UZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-RBDIRBEI.mjs → chunk-BJV2LBII.mjs} +1 -1
- package/dist/preview-engine/{chunk-LBJBBEKP.mjs → chunk-BVDWS3D2.mjs} +1 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
- package/dist/preview-engine/{chunk-NIPWL6Z5.mjs → chunk-C4M3B2Q2.mjs} +1 -1
- package/dist/preview-engine/{chunk-LLUFOFF4.mjs → chunk-CC4NNNIY.mjs} +1 -1
- package/dist/preview-engine/chunk-CCB3VTY2.mjs +39 -0
- package/dist/preview-engine/{chunk-NX66555S.mjs → chunk-CN2VLYLB.mjs} +1 -1
- package/dist/preview-engine/{chunk-SK7PUBTC.mjs → chunk-DMSZXG56.mjs} +1 -1
- package/dist/preview-engine/{chunk-WC257OBY.mjs → chunk-DVZITDQS.mjs} +1 -1
- package/dist/preview-engine/{chunk-COZG35ZR.mjs → chunk-FTCEG3SF.mjs} +1 -1
- package/dist/preview-engine/{chunk-57LES7TL.mjs → chunk-GA4HNR44.mjs} +1 -1
- package/dist/preview-engine/chunk-GEUUXTDL.mjs +138 -0
- package/dist/preview-engine/{chunk-S4WNCEMO.mjs → chunk-GIICZZQI.mjs} +1 -1
- package/dist/preview-engine/{chunk-RTHU7REC.mjs → chunk-GRJJVSOV.mjs} +1 -1
- package/dist/preview-engine/{chunk-RGDM6PQ5.mjs → chunk-GZWA5QJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-LZNNM5OB.mjs → chunk-H7BSN7V7.mjs} +1 -1
- package/dist/preview-engine/{chunk-JXUENEQO.mjs → chunk-HOV6DDBZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-C6XLAJLL.mjs → chunk-JSYG6OWZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-GZVPVOHB.mjs → chunk-K3C6GUQD.mjs} +1 -1
- package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
- package/dist/preview-engine/{chunk-Y6TWMUJC.mjs → chunk-LVYVXVZO.mjs} +1 -1
- package/dist/preview-engine/{chunk-NKAVHU7H.mjs → chunk-MIEH74UH.mjs} +7 -7
- package/dist/preview-engine/{chunk-AVDHZNIZ.mjs → chunk-OH5W5EL6.mjs} +1 -1
- package/dist/preview-engine/{chunk-22F33PPP.mjs → chunk-P5FKRQFU.mjs} +1 -1
- package/dist/preview-engine/{chunk-7X2AUKTU.mjs → chunk-PM2W4VLT.mjs} +1 -1
- package/dist/preview-engine/{chunk-PYX6Q2EJ.mjs → chunk-QCSVT73T.mjs} +1 -1
- package/dist/preview-engine/{chunk-523CTDOC.mjs → chunk-RJIAES3X.mjs} +1 -1
- package/dist/preview-engine/{chunk-DPQN7WYQ.mjs → chunk-S2ABWY5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-G7JJ6HVL.mjs → chunk-SF37HXAH.mjs} +1 -1
- package/dist/preview-engine/{chunk-OKLYIQ5F.mjs → chunk-SPJPM43P.mjs} +1 -1
- package/dist/preview-engine/{chunk-UOTMBWBJ.mjs → chunk-TNJEZKXM.mjs} +1 -1
- package/dist/preview-engine/chunk-ULOFDFHJ.mjs +1 -0
- package/dist/preview-engine/{chunk-LLB3AGBQ.mjs → chunk-UQKPDGEH.mjs} +1 -1
- package/dist/preview-engine/{chunk-DISKQ5MH.mjs → chunk-UXYM2G6J.mjs} +1 -1
- package/dist/preview-engine/{chunk-U5YNECNG.mjs → chunk-VN36PRVD.mjs} +1 -1
- package/dist/preview-engine/{chunk-PMOKPVSD.mjs → chunk-VVE2QHVG.mjs} +1 -1
- package/dist/preview-engine/{chunk-PEUQRSIM.mjs → chunk-Y5K5LVOR.mjs} +1 -1
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
- package/dist/preview-engine/{chunk-PSEMCJBH.mjs → chunk-ZJ5SWTCW.mjs} +1 -1
- package/dist/preview-engine/chunk-ZY47XIRK.mjs +5 -0
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-3BOQOUEU.mjs +1 -0
- package/dist/preview-engine/renderers-3M2FESR2.mjs +1 -0
- package/dist/preview-engine/{renderers-FEEIDQF3.mjs → renderers-4F7WLQD5.mjs} +1 -1
- package/dist/preview-engine/{renderers-OP6MKYRM.mjs → renderers-5KANN7XF.mjs} +1 -1
- package/dist/preview-engine/{renderers-TVRR7PGN.mjs → renderers-5TO2SXFR.mjs} +1 -1
- package/dist/preview-engine/{renderers-DR7UZ3QR.mjs → renderers-5UZ3YFBD.mjs} +1 -1
- package/dist/preview-engine/renderers-6LHIWKMZ.mjs +1 -0
- package/dist/preview-engine/{renderers-7F2KF5RE.mjs → renderers-6Z7DWAPH.mjs} +1 -1
- package/dist/preview-engine/renderers-77PDUMYI.mjs +1 -0
- package/dist/preview-engine/{renderers-3J3NCOAI.mjs → renderers-7C5RA3R5.mjs} +1 -1
- package/dist/preview-engine/{renderers-KPCQGBIY.mjs → renderers-7XHO6M3B.mjs} +1 -1
- package/dist/preview-engine/{renderers-KJAOPYAU.mjs → renderers-A24KZK2Q.mjs} +1 -1
- package/dist/preview-engine/renderers-A43VCJ7X.mjs +1 -0
- package/dist/preview-engine/renderers-AKY464RY.mjs +1 -0
- package/dist/preview-engine/renderers-C5UO6PL5.mjs +1 -0
- package/dist/preview-engine/renderers-C64QSZO4.mjs +1 -0
- package/dist/preview-engine/renderers-CIRCR6NG.mjs +1 -0
- package/dist/preview-engine/renderers-CIWOPETY.mjs +1 -0
- package/dist/preview-engine/renderers-CUMVIVHI.mjs +1 -0
- package/dist/preview-engine/renderers-CZEZCELP.mjs +1 -0
- package/dist/preview-engine/{renderers-R3YVLWKV.mjs → renderers-ENMY4DKF.mjs} +1 -1
- package/dist/preview-engine/{renderers-AAENCA7X.mjs → renderers-FSI5KNGZ.mjs} +1 -1
- package/dist/preview-engine/renderers-FSQMWHQM.mjs +1 -0
- package/dist/preview-engine/renderers-FZEW5C23.mjs +1 -0
- package/dist/preview-engine/renderers-HCET2IML.mjs +1 -0
- package/dist/preview-engine/{renderers-LBX7GPDU.mjs → renderers-IHGAWLUF.mjs} +1 -1
- package/dist/preview-engine/renderers-IUOOC6K7.mjs +1 -0
- package/dist/preview-engine/{renderers-VXMR47WZ.mjs → renderers-KC6ZSKCW.mjs} +1 -1
- package/dist/preview-engine/renderers-KYYJLVIJ.mjs +1 -0
- package/dist/preview-engine/renderers-L4GE7WV3.mjs +1 -0
- package/dist/preview-engine/renderers-L6YDX6GS.mjs +1 -0
- package/dist/preview-engine/renderers-LRAFWKCO.mjs +1 -0
- package/dist/preview-engine/renderers-LU3XZWEB.mjs +1 -0
- package/dist/preview-engine/{renderers-4YYGKLDK.mjs → renderers-MD3PRFZL.mjs} +1 -1
- package/dist/preview-engine/renderers-MOEC2XZZ.mjs +1 -0
- package/dist/preview-engine/{renderers-RGDTRVZM.mjs → renderers-NCGH2WWJ.mjs} +1 -1
- package/dist/preview-engine/renderers-ND2WV4K3.mjs +1 -0
- package/dist/preview-engine/renderers-NJ5CWVVH.mjs +1 -0
- package/dist/preview-engine/renderers-NKXYPR3V.mjs +1 -0
- package/dist/preview-engine/{renderers-WVQQZQ6Y.mjs → renderers-NUAI4TO5.mjs} +1 -1
- package/dist/preview-engine/renderers-NWR66CGK.mjs +1 -0
- package/dist/preview-engine/renderers-O22WTBRM.mjs +1 -0
- package/dist/preview-engine/renderers-O55BEDQZ.mjs +1 -0
- package/dist/preview-engine/renderers-PBBA7LQB.mjs +1 -0
- package/dist/preview-engine/{renderers-BL7Z3FTF.mjs → renderers-PIIEUKFE.mjs} +1 -1
- package/dist/preview-engine/renderers-PPZK6VEW.mjs +1 -0
- package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +1 -0
- package/dist/preview-engine/{renderers-7TNEKJZS.mjs → renderers-QA2HKUJJ.mjs} +1 -1
- package/dist/preview-engine/renderers-RMEACSRL.mjs +1 -0
- package/dist/preview-engine/{renderers-AWRIELVX.mjs → renderers-RN2MHIFK.mjs} +1 -1
- package/dist/preview-engine/renderers-SEIAUKJF.mjs +1 -0
- package/dist/preview-engine/renderers-SP42LCSI.mjs +1 -0
- package/dist/preview-engine/{renderers-OE55O27K.mjs → renderers-T74CQCEN.mjs} +1 -1
- package/dist/preview-engine/renderers-T7SZA3BX.mjs +1 -0
- package/dist/preview-engine/{renderers-ZUQ2ZBYY.mjs → renderers-TGJSOKDY.mjs} +1 -1
- package/dist/preview-engine/renderers-TSBV4KPE.mjs +1 -0
- package/dist/preview-engine/{renderers-2SE5BLLB.mjs → renderers-U4M7ZCV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-YEI4K4W4.mjs → renderers-V3AQO7AR.mjs} +1 -1
- package/dist/preview-engine/renderers-VADTDAHD.mjs +1 -0
- package/dist/preview-engine/renderers-VNNWI5C3.mjs +1 -0
- package/dist/preview-engine/{renderers-YYMRKHAA.mjs → renderers-WEYAHOBK.mjs} +1 -1
- package/dist/preview-engine/renderers-WZ75MLP3.mjs +1 -0
- package/dist/preview-engine/renderers-XB5R4UQA.mjs +1 -0
- package/dist/preview-engine/{renderers-YIVPMPQS.mjs → renderers-Y22VSOXF.mjs} +1 -1
- package/dist/preview-engine/{renderers-Y53D5CQ7.mjs → renderers-YBIUZDGQ.mjs} +1 -1
- package/dist/preview-engine/renderers-YESJR4O7.mjs +1 -0
- package/dist/preview-engine/renderers-YKSRZRRT.mjs +1 -0
- package/dist/preview-engine/{renderers-V4VML5IG.mjs → renderers-ZACSHGNZ.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/src-NGVAJYHC.mjs +8 -0
- package/dist/{program-Cq4gP9Dd.mjs → program-CKpKkllV.mjs} +2 -2
- package/dist/{program-Cq4gP9Dd.mjs.map → program-CKpKkllV.mjs.map} +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--Ac-dg4A.mjs +5 -0
- package/dist/renderer--N7TMqzU.mjs +5 -0
- package/dist/{renderer-CXWAdRqn.mjs → renderer--fkmiVjl.mjs} +2 -2
- package/dist/{renderer-CXWAdRqn.mjs.map → renderer--fkmiVjl.mjs.map} +1 -1
- package/dist/{renderer-CZyJ72JZ.mjs → renderer-1r-Uq-Ae.mjs} +2 -2
- package/dist/{renderer-CZyJ72JZ.mjs.map → renderer-1r-Uq-Ae.mjs.map} +1 -1
- package/dist/renderer-2ecmdOae.mjs +5 -0
- package/dist/{renderer-D8CMakyz.mjs → renderer-8QIwXh7O.mjs} +3 -3
- package/dist/{renderer-D8CMakyz.mjs.map → renderer-8QIwXh7O.mjs.map} +1 -1
- package/dist/{renderer-B4iCFvJh.mjs → renderer-B-ur0Ej8.mjs} +3 -3
- package/dist/{renderer-B4iCFvJh.mjs.map → renderer-B-ur0Ej8.mjs.map} +1 -1
- package/dist/{renderer-BD25uND8.mjs → renderer-B0piZg9r.mjs} +383 -171
- package/dist/renderer-B0piZg9r.mjs.map +1 -0
- package/dist/{renderer-BZKkT-6Q.mjs → renderer-B2jjxsjO.mjs} +2 -2
- package/dist/{renderer-BZKkT-6Q.mjs.map → renderer-B2jjxsjO.mjs.map} +1 -1
- package/dist/{renderer-DEcbSNQd.mjs → renderer-B39I6CQw.mjs} +3 -3
- package/dist/{renderer-DEcbSNQd.mjs.map → renderer-B39I6CQw.mjs.map} +1 -1
- package/dist/{renderer-DIPyUVX2.mjs → renderer-B522Dkdk.mjs} +3 -3
- package/dist/{renderer-DIPyUVX2.mjs.map → renderer-B522Dkdk.mjs.map} +1 -1
- package/dist/renderer-B5RJp5g-.mjs +5 -0
- package/dist/renderer-B7xyT1Vb.mjs +5 -0
- package/dist/{renderer-CeX7uUXB.mjs → renderer-BAYTI6jj.mjs} +2 -2
- package/dist/{renderer-CeX7uUXB.mjs.map → renderer-BAYTI6jj.mjs.map} +1 -1
- package/dist/{renderer-DoRazdp_.mjs → renderer-BAusZ6Vu.mjs} +2 -2
- package/dist/{renderer-DoRazdp_.mjs.map → renderer-BAusZ6Vu.mjs.map} +1 -1
- package/dist/renderer-BBeArN_x.mjs +5 -0
- package/dist/renderer-BCAZDu-r.mjs +5 -0
- package/dist/{renderer-D41gHat4.mjs → renderer-BF0hx_iJ.mjs} +3 -3
- package/dist/{renderer-D41gHat4.mjs.map → renderer-BF0hx_iJ.mjs.map} +1 -1
- package/dist/renderer-BJnhik7Y.mjs +5 -0
- package/dist/{renderer-BeQrWrOa.mjs → renderer-BPWDsufX.mjs} +2 -2
- package/dist/{renderer-BeQrWrOa.mjs.map → renderer-BPWDsufX.mjs.map} +1 -1
- package/dist/{renderer-CxEBV-w0.mjs → renderer-BXJXziIt.mjs} +2 -2
- package/dist/{renderer-CxEBV-w0.mjs.map → renderer-BXJXziIt.mjs.map} +1 -1
- package/dist/{renderer-Ce8VPaog.mjs → renderer-BdyopiLC.mjs} +2 -2
- package/dist/{renderer-Ce8VPaog.mjs.map → renderer-BdyopiLC.mjs.map} +1 -1
- package/dist/{renderer-Bkqg-U2F.mjs → renderer-Bfk6A7UO.mjs} +3 -3
- package/dist/{renderer-Bkqg-U2F.mjs.map → renderer-Bfk6A7UO.mjs.map} +1 -1
- package/dist/{renderer-CAagaRag.mjs → renderer-BgO6BA_z.mjs} +2 -2
- package/dist/{renderer-CAagaRag.mjs.map → renderer-BgO6BA_z.mjs.map} +1 -1
- package/dist/{renderer-DlZwbO-A.mjs → renderer-BlPqTEii.mjs} +2 -2
- package/dist/{renderer-DlZwbO-A.mjs.map → renderer-BlPqTEii.mjs.map} +1 -1
- package/dist/{renderer-BEuU7qlG.mjs → renderer-BlvGcyAN.mjs} +2 -2
- package/dist/{renderer-BEuU7qlG.mjs.map → renderer-BlvGcyAN.mjs.map} +1 -1
- package/dist/{renderer-BrWOcJ9Q.mjs → renderer-BpIF1QIE.mjs} +3 -3
- package/dist/{renderer-BrWOcJ9Q.mjs.map → renderer-BpIF1QIE.mjs.map} +1 -1
- package/dist/renderer-BxRW8MZO.mjs +5 -0
- package/dist/renderer-C-lfsEAN.mjs +5 -0
- package/dist/{renderer-eAVNsuX8.mjs → renderer-C41U1tK6.mjs} +5 -5
- package/dist/{renderer-eAVNsuX8.mjs.map → renderer-C41U1tK6.mjs.map} +1 -1
- package/dist/renderer-C6nOFN4-.mjs +5 -0
- package/dist/{renderer-CjklM-KD.mjs → renderer-C7L8Ceqr.mjs} +2 -2
- package/dist/{renderer-CjklM-KD.mjs.map → renderer-C7L8Ceqr.mjs.map} +1 -1
- package/dist/{renderer-xLQ_nkmy.mjs → renderer-C7eFJf0_.mjs} +3 -3
- package/dist/{renderer-xLQ_nkmy.mjs.map → renderer-C7eFJf0_.mjs.map} +1 -1
- package/dist/renderer-C84TSQmS.mjs +5 -0
- package/dist/renderer-C8_6YofT.mjs +5 -0
- package/dist/{renderer-DsAoxQ8O.mjs → renderer-CCycwCEB.mjs} +2 -2
- package/dist/{renderer-DsAoxQ8O.mjs.map → renderer-CCycwCEB.mjs.map} +1 -1
- package/dist/{renderer-Cjx3x7xM.mjs → renderer-CHr7MiYW.mjs} +3 -3
- package/dist/{renderer-Cjx3x7xM.mjs.map → renderer-CHr7MiYW.mjs.map} +1 -1
- package/dist/renderer-COR66Sby.mjs +3 -0
- package/dist/renderer-COb3tOPG.mjs +5 -0
- package/dist/{renderer-DSpTGqUU.mjs → renderer-CQvmbRQ5.mjs} +3 -3
- package/dist/{renderer-DSpTGqUU.mjs.map → renderer-CQvmbRQ5.mjs.map} +1 -1
- package/dist/renderer-CSCIzaLy.mjs +5 -0
- package/dist/{renderer-D7Kk7VxM.mjs → renderer-CYC32bDW.mjs} +3 -3
- package/dist/{renderer-D7Kk7VxM.mjs.map → renderer-CYC32bDW.mjs.map} +1 -1
- package/dist/{renderer-Ci9x2WUd.mjs → renderer-CcvvoKiZ.mjs} +3 -3
- package/dist/{renderer-Ci9x2WUd.mjs.map → renderer-CcvvoKiZ.mjs.map} +1 -1
- package/dist/{renderer-DTgO5LPf.mjs → renderer-CiQhD8Gg.mjs} +3 -3
- package/dist/{renderer-DTgO5LPf.mjs.map → renderer-CiQhD8Gg.mjs.map} +1 -1
- package/dist/renderer-CmI4c8MS.mjs +5 -0
- package/dist/{renderer-BlVmbzPs.mjs → renderer-CpUJBOfb.mjs} +2 -2
- package/dist/renderer-CqVltdX9.mjs +5 -0
- package/dist/{renderer-LY2MiIj0.mjs → renderer-CwFqqpWY.mjs} +3 -3
- package/dist/{renderer-LY2MiIj0.mjs.map → renderer-CwFqqpWY.mjs.map} +1 -1
- package/dist/renderer-D-FpMzLY.mjs +5 -0
- package/dist/renderer-D-Oyn9mG.mjs +5 -0
- package/dist/renderer-D2QrkA8_.mjs +5 -0
- package/dist/{renderer-D7Cu9OZx.mjs → renderer-D47AEJE_.mjs} +2 -2
- package/dist/{renderer-D7Cu9OZx.mjs.map → renderer-D47AEJE_.mjs.map} +1 -1
- package/dist/{renderer-DPn2DhMU.mjs → renderer-D61B9bXF.mjs} +2 -2
- package/dist/{renderer-DPn2DhMU.mjs.map → renderer-D61B9bXF.mjs.map} +1 -1
- package/dist/renderer-D64r4iN-.mjs +5 -0
- package/dist/{renderer-CUq2qgyc.mjs → renderer-D7Al3_-5.mjs} +3 -3
- package/dist/{renderer-CUq2qgyc.mjs.map → renderer-D7Al3_-5.mjs.map} +1 -1
- package/dist/{renderer-CyWRvKUI.mjs → renderer-D7r6onRT.mjs} +2 -2
- package/dist/{renderer-CyWRvKUI.mjs.map → renderer-D7r6onRT.mjs.map} +1 -1
- package/dist/{renderer-DxHICEk3.mjs → renderer-D8bBHrWC.mjs} +3 -3
- package/dist/{renderer-DxHICEk3.mjs.map → renderer-D8bBHrWC.mjs.map} +1 -1
- package/dist/renderer-DCq6YkgP.mjs +5 -0
- package/dist/{renderer-Dk45W8Zd.mjs → renderer-DDEkFbVI.mjs} +3 -3
- package/dist/{renderer-Dk45W8Zd.mjs.map → renderer-DDEkFbVI.mjs.map} +1 -1
- package/dist/renderer-DDHG3GdR.mjs +5 -0
- package/dist/{renderer-BWlMAacF.mjs → renderer-DEmYyaqj.mjs} +2 -2
- package/dist/{renderer-BWlMAacF.mjs.map → renderer-DEmYyaqj.mjs.map} +1 -1
- package/dist/{renderer-DRGa6tlX.mjs → renderer-DF-yvIrV.mjs} +2 -2
- package/dist/{renderer-DRGa6tlX.mjs.map → renderer-DF-yvIrV.mjs.map} +1 -1
- package/dist/{renderer-C-5RNIeX.mjs → renderer-DFzI3yI_.mjs} +2 -2
- package/dist/{renderer-C-5RNIeX.mjs.map → renderer-DFzI3yI_.mjs.map} +1 -1
- package/dist/{renderer-AMBVtZ_G.mjs → renderer-DIw3UtEU.mjs} +3 -3
- package/dist/{renderer-AMBVtZ_G.mjs.map → renderer-DIw3UtEU.mjs.map} +1 -1
- package/dist/renderer-DMdNfcud.mjs +6 -0
- package/dist/{renderer-DnPzvIHK.mjs → renderer-DMvmf3T2.mjs} +2 -2
- package/dist/{renderer-Gw1ICOJ3.mjs → renderer-DNQvOrkY.mjs} +3 -3
- package/dist/{renderer-Gw1ICOJ3.mjs.map → renderer-DNQvOrkY.mjs.map} +1 -1
- package/dist/{renderer-CP2FOWyJ.mjs → renderer-DO-KbpYZ.mjs} +3 -3
- package/dist/{renderer-CP2FOWyJ.mjs.map → renderer-DO-KbpYZ.mjs.map} +1 -1
- package/dist/{renderer-cg06hb82.mjs → renderer-DTqDy2m9.mjs} +3 -3
- package/dist/{renderer-cg06hb82.mjs.map → renderer-DTqDy2m9.mjs.map} +1 -1
- package/dist/{renderer-BXAgUuAq.mjs → renderer-DVCJjVn7.mjs} +2 -2
- package/dist/{renderer-BXAgUuAq.mjs.map → renderer-DVCJjVn7.mjs.map} +1 -1
- package/dist/{renderer-D6X9vWkN.mjs → renderer-DX41niRU.mjs} +2 -2
- package/dist/{renderer-D6X9vWkN.mjs.map → renderer-DX41niRU.mjs.map} +1 -1
- package/dist/{renderer-D3K9FEQk.mjs → renderer-DXEWbnRF.mjs} +3 -3
- package/dist/{renderer-D3K9FEQk.mjs.map → renderer-DXEWbnRF.mjs.map} +1 -1
- package/dist/renderer-DZQXZ4lK.mjs +5 -0
- package/dist/{renderer-CiMIftlS.mjs → renderer-DbRZe0Re.mjs} +3 -3
- package/dist/{renderer-CiMIftlS.mjs.map → renderer-DbRZe0Re.mjs.map} +1 -1
- package/dist/renderer-DczJJLA1.mjs +5 -0
- package/dist/renderer-DfqJj9oe.mjs +5 -0
- package/dist/renderer-DgO9ihVJ.mjs +5 -0
- package/dist/renderer-DhgnQZYb.mjs +5 -0
- package/dist/{renderer-CrgfMDbh.mjs → renderer-DiY70S8S.mjs} +3 -3
- package/dist/{renderer-CrgfMDbh.mjs.map → renderer-DiY70S8S.mjs.map} +1 -1
- package/dist/renderer-DjxKjHMf.mjs +5 -0
- package/dist/{renderer-Br4UZvfL.mjs → renderer-DkRSZg5g.mjs} +3 -3
- package/dist/{renderer-Br4UZvfL.mjs.map → renderer-DkRSZg5g.mjs.map} +1 -1
- package/dist/{renderer-CCSzKnvs.mjs → renderer-DmkWrWAk.mjs} +2 -2
- package/dist/{renderer-CCSzKnvs.mjs.map → renderer-DmkWrWAk.mjs.map} +1 -1
- package/dist/{renderer-D2JOseb1.mjs → renderer-DpruWmZU.mjs} +2 -2
- package/dist/{renderer-D2JOseb1.mjs.map → renderer-DpruWmZU.mjs.map} +1 -1
- package/dist/renderer-DqLA5cdR.mjs +5 -0
- package/dist/{renderer-DxbFjINv.mjs → renderer-DqvoMLca.mjs} +3 -3
- package/dist/{renderer-DxbFjINv.mjs.map → renderer-DqvoMLca.mjs.map} +1 -1
- package/dist/{renderer-BeFiQfzV.mjs → renderer-DsEyjwfT.mjs} +70 -70
- package/dist/{renderer-BeFiQfzV.mjs.map → renderer-DsEyjwfT.mjs.map} +1 -1
- package/dist/renderer-Dudp6ZlH.mjs +5 -0
- package/dist/{renderer-COQc1jn6.mjs → renderer-EaLUCobW.mjs} +2 -2
- package/dist/{renderer-COQc1jn6.mjs.map → renderer-EaLUCobW.mjs.map} +1 -1
- package/dist/{renderer-BioUC9zE.mjs → renderer-GBmWjBvy.mjs} +2 -2
- package/dist/{renderer-BioUC9zE.mjs.map → renderer-GBmWjBvy.mjs.map} +1 -1
- package/dist/{renderer-BNzT34UV.mjs → renderer-Lth37j17.mjs} +2 -2
- package/dist/{renderer-D-17HVPb.mjs → renderer-SSBL4M1o.mjs} +3 -3
- package/dist/{renderer-D-17HVPb.mjs.map → renderer-SSBL4M1o.mjs.map} +1 -1
- package/dist/{renderer-C8rxyjaE.mjs → renderer-SWr3vbrV.mjs} +2 -2
- package/dist/{renderer-C8rxyjaE.mjs.map → renderer-SWr3vbrV.mjs.map} +1 -1
- package/dist/{renderer-LwrcnEtI.mjs → renderer-WCZu2Rf5.mjs} +3 -3
- package/dist/{renderer-LwrcnEtI.mjs.map → renderer-WCZu2Rf5.mjs.map} +1 -1
- package/dist/{renderer-BIGILDEA.mjs → renderer-Xv6GfNUI.mjs} +2 -2
- package/dist/{renderer-BIGILDEA.mjs.map → renderer-Xv6GfNUI.mjs.map} +1 -1
- package/dist/renderer-_jC5KIT1.mjs +5 -0
- package/dist/{renderer-DveQQCi8.mjs → renderer-bAKUeHF3.mjs} +3 -3
- package/dist/{renderer-DveQQCi8.mjs.map → renderer-bAKUeHF3.mjs.map} +1 -1
- package/dist/renderer-cTgAuVmJ.mjs +5 -0
- package/dist/{renderer-DGPaKIFf.mjs → renderer-cod5Ona9.mjs} +2 -2
- package/dist/{renderer-DgLt0TPo.mjs → renderer-g_vrrAQU.mjs} +2 -2
- package/dist/{renderer-DgLt0TPo.mjs.map → renderer-g_vrrAQU.mjs.map} +1 -1
- package/dist/{renderer-uorPCWdC.mjs → renderer-hSCfnvaK.mjs} +3 -3
- package/dist/{renderer-uorPCWdC.mjs.map → renderer-hSCfnvaK.mjs.map} +1 -1
- package/dist/{renderer-BGPnCRFI.mjs → renderer-ktWXVYka.mjs} +3 -3
- package/dist/{renderer-BGPnCRFI.mjs.map → renderer-ktWXVYka.mjs.map} +1 -1
- package/dist/renderer-nVKDvDLO.mjs +5 -0
- package/dist/{renderer-U-12BOhe.mjs → renderer-oKRF4A0M.mjs} +2 -2
- package/dist/{renderer-U-12BOhe.mjs.map → renderer-oKRF4A0M.mjs.map} +1 -1
- package/dist/{renderer-CsilJwL-.mjs → renderer-pHWEHDnM.mjs} +3 -3
- package/dist/{renderer-CsilJwL-.mjs.map → renderer-pHWEHDnM.mjs.map} +1 -1
- package/dist/renderer-pZ6_pUo1.mjs +5 -0
- package/dist/{renderer-BD00i68i.mjs → renderer-sCovEubT.mjs} +3 -3
- package/dist/{renderer-BD00i68i.mjs.map → renderer-sCovEubT.mjs.map} +1 -1
- package/dist/{renderer-BdbGTz7z.mjs → renderer-sYSkIUfo.mjs} +3 -3
- package/dist/{renderer-BdbGTz7z.mjs.map → renderer-sYSkIUfo.mjs.map} +1 -1
- package/dist/{renderer-BLU0PQTB.mjs → renderer-zXPVLRlD.mjs} +3 -3
- package/dist/{renderer-BLU0PQTB.mjs.map → renderer-zXPVLRlD.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-ywy4xljX.mjs → renderers-CP8CFWDs-DH2oktaC.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-ywy4xljX.mjs.map → renderers-CP8CFWDs-DH2oktaC.mjs.map} +1 -1
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-B0KFNjj4.mjs → src-CK5rGVbh.mjs} +382 -20
- package/dist/src-CK5rGVbh.mjs.map +1 -0
- package/package.json +67 -58
- package/dist/index-BwRrsP_V.d.mts.map +0 -1
- package/dist/index-UDDAfHAF.d.mts.map +0 -1
- package/dist/preview-engine/chunk-3U2A3RW4.mjs +0 -5
- package/dist/preview-engine/chunk-6E3JSPJN.mjs +0 -1
- package/dist/preview-engine/chunk-F4F2UDRX.mjs +0 -1
- package/dist/preview-engine/chunk-KFNVUGNN.mjs +0 -1974
- package/dist/preview-engine/chunk-PYSBWKIJ.mjs +0 -1
- package/dist/preview-engine/chunk-U2IFQMS3.mjs +0 -174
- package/dist/preview-engine/renderers-2GMY2ZNK.mjs +0 -1
- package/dist/preview-engine/renderers-2QJNKL7Q.mjs +0 -1
- package/dist/preview-engine/renderers-3OYU6O6F.mjs +0 -1
- package/dist/preview-engine/renderers-433Y2PCK.mjs +0 -1
- package/dist/preview-engine/renderers-4AGPGEL4.mjs +0 -1
- package/dist/preview-engine/renderers-54DBHGUW.mjs +0 -1
- package/dist/preview-engine/renderers-5M2O55U3.mjs +0 -1
- package/dist/preview-engine/renderers-6FVMDEAY.mjs +0 -1
- package/dist/preview-engine/renderers-6R7ZJ7DU.mjs +0 -1
- package/dist/preview-engine/renderers-75GCMFOD.mjs +0 -1
- package/dist/preview-engine/renderers-7LWLUCVQ.mjs +0 -1
- package/dist/preview-engine/renderers-BLDENIEV.mjs +0 -1
- package/dist/preview-engine/renderers-CDB3YK3R.mjs +0 -1
- package/dist/preview-engine/renderers-D6D4XDFY.mjs +0 -1
- package/dist/preview-engine/renderers-DJVFQZYU.mjs +0 -1
- package/dist/preview-engine/renderers-DMXSV7VO.mjs +0 -1
- package/dist/preview-engine/renderers-EBMASIOE.mjs +0 -1
- package/dist/preview-engine/renderers-F262HDFS.mjs +0 -1
- package/dist/preview-engine/renderers-FMXKIF22.mjs +0 -1
- package/dist/preview-engine/renderers-GJKSZ6DR.mjs +0 -1
- package/dist/preview-engine/renderers-GR3RLYDZ.mjs +0 -1
- package/dist/preview-engine/renderers-GT3W2QIA.mjs +0 -1
- package/dist/preview-engine/renderers-IHC7HUK3.mjs +0 -1
- package/dist/preview-engine/renderers-J56ZGEVM.mjs +0 -1
- package/dist/preview-engine/renderers-KYM6352U.mjs +0 -1
- package/dist/preview-engine/renderers-LFXX6TWI.mjs +0 -1
- package/dist/preview-engine/renderers-NAHUPFPU.mjs +0 -1
- package/dist/preview-engine/renderers-NM3FZLHH.mjs +0 -1
- package/dist/preview-engine/renderers-NNB4BTJA.mjs +0 -1
- package/dist/preview-engine/renderers-OYVQW6QI.mjs +0 -1
- package/dist/preview-engine/renderers-P5RIFU3C.mjs +0 -1
- package/dist/preview-engine/renderers-QB7HJUTS.mjs +0 -1
- package/dist/preview-engine/renderers-QRQVOCDC.mjs +0 -1
- package/dist/preview-engine/renderers-QVFHJTZA.mjs +0 -1
- package/dist/preview-engine/renderers-R3WQIE4L.mjs +0 -1
- package/dist/preview-engine/renderers-SQBVOLG7.mjs +0 -1
- package/dist/preview-engine/renderers-TLXMYEDI.mjs +0 -1
- package/dist/preview-engine/renderers-X4S3WELJ.mjs +0 -1
- package/dist/preview-engine/renderers-XT7U25I7.mjs +0 -1
- package/dist/preview-engine/renderers-XVGLMBB3.mjs +0 -1
- package/dist/preview-engine/renderers-YUWU3TQZ.mjs +0 -1
- package/dist/preview-engine/renderers-ZNUD5OVO.mjs +0 -1
- package/dist/renderer-01zxT4CK.mjs +0 -5
- package/dist/renderer-35LHkj36.mjs +0 -5
- package/dist/renderer-B0OIdCGj.mjs +0 -5
- package/dist/renderer-B3IPtkK9.mjs +0 -5
- package/dist/renderer-BD25uND8.mjs.map +0 -1
- package/dist/renderer-BMC39abo.mjs +0 -5
- package/dist/renderer-BQj3nlAI.mjs +0 -5
- package/dist/renderer-BnBvSmp_.mjs +0 -5
- package/dist/renderer-BsDSpTpL.mjs +0 -5
- package/dist/renderer-BtW6_gvE.mjs +0 -5
- package/dist/renderer-By8U44Rt.mjs +0 -5
- package/dist/renderer-C3lDmxuX.mjs +0 -5
- package/dist/renderer-C6SZAE_x.mjs +0 -5
- package/dist/renderer-CA3IVeZj.mjs +0 -5
- package/dist/renderer-CFoCH_mO.mjs +0 -5
- package/dist/renderer-CLhZqJF8.mjs +0 -6
- package/dist/renderer-CYJXQS8E.mjs +0 -5
- package/dist/renderer-C_vj6_WJ.mjs +0 -5
- package/dist/renderer-CeqfC6OR.mjs +0 -5
- package/dist/renderer-CkZCGMAc.mjs +0 -5
- package/dist/renderer-Clxju1r9.mjs +0 -5
- package/dist/renderer-Cvz22ZSh.mjs +0 -3
- package/dist/renderer-CyWtKBF7.mjs +0 -5
- package/dist/renderer-D27STGoB.mjs +0 -5
- package/dist/renderer-D78Aq9YK.mjs +0 -5
- package/dist/renderer-DHEffABL.mjs +0 -5
- package/dist/renderer-DUuNCgzW.mjs +0 -5
- package/dist/renderer-DVD5pzRq.mjs +0 -5
- package/dist/renderer-Dsp6xDw5.mjs +0 -5
- package/dist/renderer-DuC-BFXR.mjs +0 -5
- package/dist/renderer-DuWs_Wsv.mjs +0 -5
- package/dist/renderer-OSgsiIrW.mjs +0 -5
- package/dist/renderer-OZaMFYtZ.mjs +0 -5
- package/dist/renderer-T79TmHET.mjs +0 -5
- package/dist/renderer-UhsC9oTU.mjs +0 -5
- package/dist/renderer-WYZV1jWf.mjs +0 -5
- package/dist/renderer-Y7evDjHH.mjs +0 -5
- package/dist/renderer-mcePkmUe.mjs +0 -5
- package/dist/src-B0KFNjj4.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-
|
|
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
|
|
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-
|
|
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,
|
|
1638
|
+
return join(this._modelsDir, this.descriptor(key).filename);
|
|
1632
1639
|
}
|
|
1633
1640
|
descriptor(key) {
|
|
1634
|
-
|
|
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 =
|
|
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
|
|
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 ===
|
|
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$
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
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
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
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 (
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
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:
|
|
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:
|
|
2563
|
-
|
|
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-
|
|
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)
|
|
4853
|
-
|
|
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
|
|
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
|
-
|
|
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 {
|
|
5088
|
-
//# sourceMappingURL=renderer-
|
|
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
|