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
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { G as ProgrammaticSignal, K as Signal, Mt as frameArraySignal, N as MediaSignalRecorder, St as createVirtualMedia, pt as appendOperation, rn as mediaSourceTime, tn as mediaSourceRange, y as Effect$1, yn as resolveFrameRequest } from "./dist-BlIrsfcn.mjs";
|
|
2
|
-
import { F as getPrimitiveGeometry, K as mediaDecoderCache, N as generateExtrudedTextGeometry, Z as parseSvgPathToSegments, _ as buildShapeSvgPath, gt as Path3D, p as SlugFontCache, q as parseColor$1, z as inputStore } from "./dist-
|
|
3
|
-
import { a as preflightMediaTime, n as decodeAudioSource } from "./dist-
|
|
4
|
-
import { t as FontManager } from "./fonts-
|
|
2
|
+
import { F as getPrimitiveGeometry, K as mediaDecoderCache, N as generateExtrudedTextGeometry, Z as parseSvgPathToSegments, _ as buildShapeSvgPath, gt as Path3D, p as SlugFontCache, q as parseColor$1, z as inputStore } from "./dist-C1cCW7Bt.mjs";
|
|
3
|
+
import { a as preflightMediaTime, n as decodeAudioSource } from "./dist-C8Xq3zgx.mjs";
|
|
4
|
+
import { t as FontManager } from "./fonts-BW0pPcvJ.mjs";
|
|
5
5
|
import { s as TensorPipeline } from "./dist-Buaaj-Ul.mjs";
|
|
6
|
-
import { a as COCO17_KEYPOINT_NAMES, d as VisionNode, f as VisionRunner, g as
|
|
7
|
-
import { G as mediaSignalSampler, K as mergeAnimationTracks, N as collectNodeOps, P as compositorToProgram, W as lintComposition, f as LayerAnimation, q as sampleMediaTimeSignal } from "./program-
|
|
8
|
-
import { C as effectFactories, H as Dither, I as ColorBalance, K as Iridescence, L as ColorKey, M as CRT, R as Contour, S as Vision, T as Ascii, Y as LayerStyle, _ as SelectiveColor, a as CustomEffect, at as Posterize, b as TileOffset, c as GradientMap, d as Levels, et as OpArt, f as Modulate, g as SSAO, h as Relight3D, ht as Vignette, i as Curves, it as Pixelate, l as HalftoneScreen, m as PBRGlass, nt as Painterly, o as DepthOfField, ot as ProceduralVFX, p as MotionBlur, pt as Toon, q as Kaleidoscope, r as Crop, s as FilmGrain, st as RGBSplit, t as ApplyLUT, u as HighPass, v as ShadowsHighlights, w as Blur, x as UnsharpMask, y as TemporalDeflicker } from "./effects-
|
|
9
|
-
import { a as HeadlessMediaRenderer, n as renderFrameGrid } from "./renderer-
|
|
6
|
+
import { _ as pinNodeToObject, a as COCO17_KEYPOINT_NAMES, d as VisionNode, f as VisionRunner, g as pinNodeToLandmark, h as mergeSubjectMask, m as maskObject, n as CLIP_SUBJECT, p as analyzeSequence, u as VisionBundle } from "./renderer-B0piZg9r.mjs";
|
|
7
|
+
import { G as mediaSignalSampler, K as mergeAnimationTracks, N as collectNodeOps, P as compositorToProgram, W as lintComposition, f as LayerAnimation, q as sampleMediaTimeSignal } from "./program-CKpKkllV.mjs";
|
|
8
|
+
import { C as effectFactories, H as Dither, I as ColorBalance, K as Iridescence, L as ColorKey, M as CRT, R as Contour, S as Vision, T as Ascii, Y as LayerStyle, _ as SelectiveColor, a as CustomEffect, at as Posterize, b as TileOffset, c as GradientMap, d as Levels, et as OpArt, f as Modulate, g as SSAO, h as Relight3D, ht as Vignette, i as Curves, it as Pixelate, l as HalftoneScreen, m as PBRGlass, nt as Painterly, o as DepthOfField, ot as ProceduralVFX, p as MotionBlur, pt as Toon, q as Kaleidoscope, r as Crop, s as FilmGrain, st as RGBSplit, t as ApplyLUT, u as HighPass, v as ShadowsHighlights, w as Blur, x as UnsharpMask, y as TemporalDeflicker } from "./effects-CemgqEPv.mjs";
|
|
9
|
+
import { a as HeadlessMediaRenderer, n as renderFrameGrid } from "./renderer-DsEyjwfT.mjs";
|
|
10
10
|
import { z, z as z$2 } from "zod";
|
|
11
11
|
import path from "node:path";
|
|
12
12
|
import fs from "node:fs/promises";
|
|
@@ -1337,6 +1337,19 @@ function translatePath(d, dx, dy) {
|
|
|
1337
1337
|
/** Frames looked back over to bridge a gap where the person is lost. */
|
|
1338
1338
|
const HOLD = 24;
|
|
1339
1339
|
const CACHE_VERSION = 1;
|
|
1340
|
+
let visionSam;
|
|
1341
|
+
let clipVisionIds = 0;
|
|
1342
|
+
/**
|
|
1343
|
+
* SAM lives in `@framefields/vision-sam`, an optional peer (SAM 3's weights are under Meta's SAM License), so it
|
|
1344
|
+
* is imported only when a clip asks for `sam2` or `sam3`.
|
|
1345
|
+
*/
|
|
1346
|
+
function loadVisionSam() {
|
|
1347
|
+
visionSam ??= import("@framefields/vision-sam").catch((cause) => {
|
|
1348
|
+
visionSam = void 0;
|
|
1349
|
+
throw new Error("Prompted sam2/sam3 tracking needs the optional @framefields/vision-sam package. Install it next to framefields.", { cause });
|
|
1350
|
+
});
|
|
1351
|
+
return visionSam;
|
|
1352
|
+
}
|
|
1340
1353
|
/**
|
|
1341
1354
|
* Vision results for one clip, computed per frame on demand and shared by
|
|
1342
1355
|
* everything that reads the clip: physics, layout, signals. Unlike the
|
|
@@ -1367,6 +1380,20 @@ var ClipVision = class {
|
|
|
1367
1380
|
cell;
|
|
1368
1381
|
queue = Promise.resolve();
|
|
1369
1382
|
runner;
|
|
1383
|
+
sam2Tracker;
|
|
1384
|
+
sam2Frame = -1;
|
|
1385
|
+
sam3Tracker;
|
|
1386
|
+
sam3Frame = -1;
|
|
1387
|
+
sam;
|
|
1388
|
+
/** Clips walk their source independently, so each owns a decoder (requests to one supersede). */
|
|
1389
|
+
decoderId = `clip-vision#${++clipVisionIds}#`;
|
|
1390
|
+
signalBundle;
|
|
1391
|
+
publishedSignals = /* @__PURE__ */ new Set();
|
|
1392
|
+
signalMaskFrame = -1;
|
|
1393
|
+
/** Masks of `signalMaskFrame` by track ID (0: all tracks merged). */
|
|
1394
|
+
signalMasks = /* @__PURE__ */ new Map();
|
|
1395
|
+
/** Prompted track count per source frame, including frames where every track is absent. */
|
|
1396
|
+
trackCounts = /* @__PURE__ */ new Map();
|
|
1370
1397
|
cacheLoaded;
|
|
1371
1398
|
unsaved = 0;
|
|
1372
1399
|
unsavedSubjects = 0;
|
|
@@ -1380,13 +1407,80 @@ var ClipVision = class {
|
|
|
1380
1407
|
/** @internal Use `comp.vision(source, options)`. */
|
|
1381
1408
|
constructor(source, fps, options = {}) {
|
|
1382
1409
|
this.source = source;
|
|
1383
|
-
|
|
1410
|
+
if (options.sam2 && options.sam3) throw new Error("Choose one prompted backend: sam2 or sam3.");
|
|
1411
|
+
this.options = options.sam2 ? {
|
|
1412
|
+
...options,
|
|
1413
|
+
sam2: {
|
|
1414
|
+
...options.sam2,
|
|
1415
|
+
prompts: options.sam2.prompts.map((prompt) => ({
|
|
1416
|
+
...prompt,
|
|
1417
|
+
points: prompt.points.map((point) => ({ ...point }))
|
|
1418
|
+
}))
|
|
1419
|
+
}
|
|
1420
|
+
} : options.sam3 ? {
|
|
1421
|
+
...options,
|
|
1422
|
+
sam3: {
|
|
1423
|
+
...options.sam3,
|
|
1424
|
+
prompts: (options.sam3.prompts ?? (options.sam3.text ? [{
|
|
1425
|
+
frame: 0,
|
|
1426
|
+
text: options.sam3.text
|
|
1427
|
+
}] : [])).map((prompt) => ({
|
|
1428
|
+
...prompt,
|
|
1429
|
+
...prompt.points ? { points: prompt.points.map((point) => ({ ...point })) } : {}
|
|
1430
|
+
}))
|
|
1431
|
+
}
|
|
1432
|
+
} : options;
|
|
1384
1433
|
this.compositionFps = fps;
|
|
1385
1434
|
this.fps = options.fps ?? fps;
|
|
1386
1435
|
this.startFrame = Math.round(options.startFrame ?? 0);
|
|
1387
1436
|
this.trimStartSec = options.trimStartSec ?? 0;
|
|
1388
|
-
this.smoothing = Math.max(0, Math.round(options.smoothing ?? 2));
|
|
1437
|
+
this.smoothing = Math.max(0, Math.round(options.smoothing ?? (options.sam2 || options.sam3 ? 0 : 2)));
|
|
1389
1438
|
this.cell = Math.max(1, Math.round(options.maskCell ?? 8));
|
|
1439
|
+
if (options.sam2 || options.sam3) this.wantSubjects = true;
|
|
1440
|
+
}
|
|
1441
|
+
/** @internal Explicit selections must never fall back to another detected subject. */
|
|
1442
|
+
get exact() {
|
|
1443
|
+
return this.options.sam2 !== void 0 || this.options.sam3 !== void 0;
|
|
1444
|
+
}
|
|
1445
|
+
/** Object, mask and optional pose signals on the composition clock, in source geometry. */
|
|
1446
|
+
get signals() {
|
|
1447
|
+
this.keepSubjects();
|
|
1448
|
+
this.signalBundle ??= new VisionBundle({
|
|
1449
|
+
fps: this.compositionFps,
|
|
1450
|
+
totalFrames: Number.MAX_SAFE_INTEGER,
|
|
1451
|
+
maskSource: (frame) => this.trackIds(frame).flatMap((id) => {
|
|
1452
|
+
const mask = this.maskAt(frame, id);
|
|
1453
|
+
return mask && mask.area > 0 ? [mask] : [];
|
|
1454
|
+
}),
|
|
1455
|
+
matteSource: (frame) => {
|
|
1456
|
+
const mask = this.maskAt(frame);
|
|
1457
|
+
return mask ? {
|
|
1458
|
+
mask: mask.mask,
|
|
1459
|
+
width: mask.width,
|
|
1460
|
+
height: mask.height,
|
|
1461
|
+
coverage: mask.coverage
|
|
1462
|
+
} : void 0;
|
|
1463
|
+
}
|
|
1464
|
+
});
|
|
1465
|
+
return this.signalBundle;
|
|
1466
|
+
}
|
|
1467
|
+
decoder() {
|
|
1468
|
+
return mediaDecoderCache.getVideo(this.source, true, this.decoderId);
|
|
1469
|
+
}
|
|
1470
|
+
/** Free inference sessions and the decoder. Analysed frames remain readable; later frames replay memory. */
|
|
1471
|
+
release() {
|
|
1472
|
+
mediaDecoderCache.clearNode(this.decoderId);
|
|
1473
|
+
this.sam2Tracker?.release();
|
|
1474
|
+
this.sam2Tracker = void 0;
|
|
1475
|
+
this.sam2Frame = -1;
|
|
1476
|
+
this.sam3Tracker?.release();
|
|
1477
|
+
this.sam3Tracker = void 0;
|
|
1478
|
+
this.sam3Frame = -1;
|
|
1479
|
+
this.runner?.close();
|
|
1480
|
+
this.runner = void 0;
|
|
1481
|
+
this.signalMaskFrame = -1;
|
|
1482
|
+
this.signalMasks.clear();
|
|
1483
|
+
this.publishedSignals.clear();
|
|
1390
1484
|
}
|
|
1391
1485
|
/** The tracked person in source pixels; `.place()` maps it into the composition. */
|
|
1392
1486
|
get person() {
|
|
@@ -1400,13 +1494,22 @@ var ClipVision = class {
|
|
|
1400
1494
|
*/
|
|
1401
1495
|
ready(frame, toFrame = frame) {
|
|
1402
1496
|
const [from, to] = this.window(frame, toFrame);
|
|
1403
|
-
|
|
1404
|
-
|
|
1497
|
+
const run$1 = this.queue.then(async () => {
|
|
1498
|
+
try {
|
|
1499
|
+
await this.compute(from, to);
|
|
1500
|
+
} catch (error) {
|
|
1501
|
+
this.release();
|
|
1502
|
+
throw error;
|
|
1503
|
+
}
|
|
1504
|
+
if (this.signalBundle) this.publishSignals(Math.min(frame, toFrame), Math.max(frame, toFrame));
|
|
1505
|
+
});
|
|
1506
|
+
this.queue = run$1.catch(() => void 0);
|
|
1507
|
+
return run$1;
|
|
1405
1508
|
}
|
|
1406
1509
|
/** True when composition frame `frame` can be read synchronously. */
|
|
1407
1510
|
isReady(frame) {
|
|
1408
1511
|
const [from, to] = this.window(frame, frame);
|
|
1409
|
-
for (let c = from; c <= to; c++) if (!this.
|
|
1512
|
+
for (let c = from; c <= to; c++) if (!this.analysed(c)) return false;
|
|
1410
1513
|
return true;
|
|
1411
1514
|
}
|
|
1412
1515
|
/**
|
|
@@ -1424,8 +1527,8 @@ var ClipVision = class {
|
|
|
1424
1527
|
*/
|
|
1425
1528
|
subject(frame, fps) {
|
|
1426
1529
|
const c = frame * this.fps / fps;
|
|
1427
|
-
if (!this.options.timeRemap && Math.abs(c - Math.round(c)) > 1e-6) return void 0;
|
|
1428
|
-
const sourceFrame = this.options.timeRemap ? Math.floor(c + 1e-6) : Math.round(c);
|
|
1530
|
+
if (!this.exact && !this.options.timeRemap && Math.abs(c - Math.round(c)) > 1e-6) return void 0;
|
|
1531
|
+
const sourceFrame = this.options.timeRemap || this.exact ? Math.floor(c + 1e-6) : Math.round(c);
|
|
1429
1532
|
const s = this.subjects.get(sourceFrame);
|
|
1430
1533
|
if (s === void 0) return s;
|
|
1431
1534
|
if (s === null || !this.sourceWidth) return null;
|
|
@@ -1433,7 +1536,7 @@ var ClipVision = class {
|
|
|
1433
1536
|
const height = this.sourceHeight;
|
|
1434
1537
|
return {
|
|
1435
1538
|
category: s.category,
|
|
1436
|
-
mask:
|
|
1539
|
+
mask: subjectAlpha(s, width * height),
|
|
1437
1540
|
width,
|
|
1438
1541
|
height,
|
|
1439
1542
|
area: s.area,
|
|
@@ -1459,7 +1562,17 @@ var ClipVision = class {
|
|
|
1459
1562
|
analysed(c) {
|
|
1460
1563
|
return this.results.has(c) && (!this.wantSubjects || this.subjects.has(c));
|
|
1461
1564
|
}
|
|
1565
|
+
/** Loads `@framefields/vision-sam` and validates the prompts once, on first use. */
|
|
1566
|
+
prompted() {
|
|
1567
|
+
this.sam ??= loadVisionSam().then((sam) => {
|
|
1568
|
+
if (this.options.sam2) sam.validateSam2Prompts(this.options.sam2.prompts);
|
|
1569
|
+
if (this.options.sam3) sam.validateSam3Prompts(this.options.sam3);
|
|
1570
|
+
return sam;
|
|
1571
|
+
});
|
|
1572
|
+
return this.sam;
|
|
1573
|
+
}
|
|
1462
1574
|
async compute(from, to) {
|
|
1575
|
+
if (this.exact) await this.prompted();
|
|
1463
1576
|
this.cacheLoaded ??= this.loadCache();
|
|
1464
1577
|
await this.cacheLoaded;
|
|
1465
1578
|
if (this.wantSubjects) {
|
|
@@ -1469,6 +1582,14 @@ var ClipVision = class {
|
|
|
1469
1582
|
let missing = false;
|
|
1470
1583
|
for (let c = from; c <= to; c++) if (!this.analysed(c)) missing = true;
|
|
1471
1584
|
if (!missing) return;
|
|
1585
|
+
if (this.options.sam2) {
|
|
1586
|
+
await this.computeSam2(to);
|
|
1587
|
+
return;
|
|
1588
|
+
}
|
|
1589
|
+
if (this.options.sam3) {
|
|
1590
|
+
await this.computeSam3(to);
|
|
1591
|
+
return;
|
|
1592
|
+
}
|
|
1472
1593
|
const wantPose = this.options.pose ?? true;
|
|
1473
1594
|
const wantMask = this.options.mask ?? true;
|
|
1474
1595
|
this.runner ??= VisionRunner.create({
|
|
@@ -1477,7 +1598,7 @@ var ClipVision = class {
|
|
|
1477
1598
|
...this.options.confidence !== void 0 && { confidence: this.options.confidence },
|
|
1478
1599
|
...this.options.variant !== void 0 && { variant: this.options.variant }
|
|
1479
1600
|
});
|
|
1480
|
-
const decoder =
|
|
1601
|
+
const decoder = this.decoder();
|
|
1481
1602
|
for (let c = from; c <= to; c++) {
|
|
1482
1603
|
if (this.analysed(c)) continue;
|
|
1483
1604
|
const image = await decodedPixels(await decoder.getFrame(c / this.fps));
|
|
@@ -1532,6 +1653,220 @@ var ClipVision = class {
|
|
|
1532
1653
|
if (this.unsaved > 0) await this.saveCache();
|
|
1533
1654
|
if (this.unsavedSubjects > 0) await this.saveSubjects();
|
|
1534
1655
|
}
|
|
1656
|
+
async computeSam2(to) {
|
|
1657
|
+
const settings = this.options.sam2;
|
|
1658
|
+
if (!settings) return;
|
|
1659
|
+
const first = settings.prompts[0]?.frame ?? 0;
|
|
1660
|
+
for (let frame = 0; frame < Math.min(first, to + 1); frame++) {
|
|
1661
|
+
this.results.set(frame, {
|
|
1662
|
+
kp: null,
|
|
1663
|
+
mask: null,
|
|
1664
|
+
score: 0
|
|
1665
|
+
});
|
|
1666
|
+
this.subjects.set(frame, null);
|
|
1667
|
+
}
|
|
1668
|
+
if (to < first) return;
|
|
1669
|
+
const decoder = this.decoder();
|
|
1670
|
+
if (!this.sam2Tracker) {
|
|
1671
|
+
const frameCount = Math.max(1, Math.ceil(await decoder.durationSec() * this.fps - 1e-6));
|
|
1672
|
+
if (settings.prompts.some((prompt) => prompt.frame >= frameCount)) throw new Error("SAM 2 prompt frames must be inside the source video.");
|
|
1673
|
+
const { Sam2Tracker } = await this.prompted();
|
|
1674
|
+
this.sam2Tracker = await Sam2Tracker.create({
|
|
1675
|
+
modelsDir: this.options.modelsDir,
|
|
1676
|
+
baseUrl: this.options.baseUrl,
|
|
1677
|
+
frameCount,
|
|
1678
|
+
model: settings.model
|
|
1679
|
+
});
|
|
1680
|
+
this.sam2Frame = first - 1;
|
|
1681
|
+
}
|
|
1682
|
+
for (let frame = this.sam2Frame + 1; frame <= to; frame++) {
|
|
1683
|
+
const image = await decodedPixels(await decoder.getFrame(frame / this.fps));
|
|
1684
|
+
if (!image) throw new Error(`Cannot decode SAM 2 source frame ${frame}.`);
|
|
1685
|
+
if (!this.sourceWidth) this.setSize(image.width, image.height);
|
|
1686
|
+
const prompt = settings.prompts.find((item) => item.frame === frame);
|
|
1687
|
+
const result$1 = await this.sam2Tracker.process(image, frame, prompt?.points);
|
|
1688
|
+
const kp = this.options.pose ? await this.matchedPose(image, result$1.mask) : null;
|
|
1689
|
+
this.storeSamFrame(frame, result$1.width, result$1.height, [result$1], kp);
|
|
1690
|
+
if (this.unsaved >= 24) {
|
|
1691
|
+
await this.saveCache();
|
|
1692
|
+
await this.saveSubjects();
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
await this.saveCache();
|
|
1696
|
+
await this.saveSubjects();
|
|
1697
|
+
}
|
|
1698
|
+
async computeSam3(to) {
|
|
1699
|
+
const settings = this.options.sam3;
|
|
1700
|
+
if (!settings) return;
|
|
1701
|
+
const first = settings.prompts[0]?.frame ?? 0;
|
|
1702
|
+
for (let frame = 0; frame < Math.min(first, to + 1); frame++) {
|
|
1703
|
+
this.results.set(frame, {
|
|
1704
|
+
kp: null,
|
|
1705
|
+
mask: null,
|
|
1706
|
+
score: 0
|
|
1707
|
+
});
|
|
1708
|
+
this.subjects.set(frame, null);
|
|
1709
|
+
}
|
|
1710
|
+
if (to < first) return;
|
|
1711
|
+
const decoder = this.decoder();
|
|
1712
|
+
if (!this.sam3Tracker) {
|
|
1713
|
+
const frameCount = Math.max(1, Math.ceil(await decoder.durationSec() * this.fps - 1e-6));
|
|
1714
|
+
if (settings.prompts.some((prompt) => prompt.frame >= frameCount)) throw new Error("SAM 3 prompt frames must be inside the source video.");
|
|
1715
|
+
const { Sam3Tracker } = await this.prompted();
|
|
1716
|
+
this.sam3Tracker = await Sam3Tracker.create({
|
|
1717
|
+
modelsDir: this.options.modelsDir,
|
|
1718
|
+
baseUrl: this.options.baseUrl,
|
|
1719
|
+
frameCount,
|
|
1720
|
+
textThreshold: settings.textThreshold,
|
|
1721
|
+
maxObjects: settings.maxObjects,
|
|
1722
|
+
merge: settings.merge,
|
|
1723
|
+
precision: settings.precision,
|
|
1724
|
+
acceptLicense: this.options.acceptSamLicense ?? this.options.sam3?.acceptLicense
|
|
1725
|
+
});
|
|
1726
|
+
this.sam3Frame = first - 1;
|
|
1727
|
+
}
|
|
1728
|
+
for (let frame = this.sam3Frame + 1; frame <= to; frame++) {
|
|
1729
|
+
const image = await decodedPixels(await decoder.getFrame(frame / this.fps));
|
|
1730
|
+
if (!image) throw new Error(`Cannot decode SAM 3 source frame ${frame}.`);
|
|
1731
|
+
if (!this.sourceWidth) this.setSize(image.width, image.height);
|
|
1732
|
+
const prompt = settings.prompts.find((item) => item.frame === frame);
|
|
1733
|
+
const result$1 = await this.sam3Tracker.process(image, frame, prompt);
|
|
1734
|
+
const kp = this.options.pose ? await this.matchedPose(image, unionMask(result$1.objects, image)) : null;
|
|
1735
|
+
this.storeSamFrame(frame, result$1.width, result$1.height, result$1.objects, kp);
|
|
1736
|
+
if (this.unsaved >= 24) {
|
|
1737
|
+
await this.saveCache();
|
|
1738
|
+
await this.saveSubjects();
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
await this.saveCache();
|
|
1742
|
+
await this.saveSubjects();
|
|
1743
|
+
}
|
|
1744
|
+
/** Stores a prompted frame: every track's mask as one label map, the union as the subject. */
|
|
1745
|
+
storeSamFrame(frame, width, height, objects, kp) {
|
|
1746
|
+
const labels = new Uint8Array(width * height);
|
|
1747
|
+
const order = [...objects.keys()].sort((a, b) => (objects[a]?.score ?? 0) - (objects[b]?.score ?? 0));
|
|
1748
|
+
for (const index of order) {
|
|
1749
|
+
const mask = objects[index]?.mask;
|
|
1750
|
+
if (!mask) continue;
|
|
1751
|
+
for (let i = 0; i < mask.length; i++) if ((mask[i] ?? 0) >= 128) labels[i] = index + 1;
|
|
1752
|
+
}
|
|
1753
|
+
const union = Uint8Array.from(labels, (id) => id ? 255 : 0);
|
|
1754
|
+
const grid = new Uint8Array(this.cellW * this.cellH);
|
|
1755
|
+
downsampleMean(union, width, height, this.cell, grid, this.cellW, this.cellH);
|
|
1756
|
+
let area$1 = 0;
|
|
1757
|
+
for (const id of labels) if (id) area$1++;
|
|
1758
|
+
const scores = objects.map((o) => 1 / (1 + Math.exp(-o.score)));
|
|
1759
|
+
this.results.set(frame, {
|
|
1760
|
+
kp,
|
|
1761
|
+
mask: grid,
|
|
1762
|
+
score: Math.max(0, ...scores)
|
|
1763
|
+
});
|
|
1764
|
+
this.subjects.set(frame, area$1 > 0 ? {
|
|
1765
|
+
category: this.samCategory(),
|
|
1766
|
+
area: area$1,
|
|
1767
|
+
scores,
|
|
1768
|
+
...encodeRuns(labels)
|
|
1769
|
+
} : null);
|
|
1770
|
+
this.trackCounts.set(frame, objects.length);
|
|
1771
|
+
this.blurred.delete(frame);
|
|
1772
|
+
if (this.options.sam3) this.sam3Frame = frame;
|
|
1773
|
+
else this.sam2Frame = frame;
|
|
1774
|
+
this.unsaved++;
|
|
1775
|
+
this.unsavedSubjects++;
|
|
1776
|
+
}
|
|
1777
|
+
samCategory() {
|
|
1778
|
+
return this.options.sam2?.category ?? this.options.sam3?.category ?? "object";
|
|
1779
|
+
}
|
|
1780
|
+
async matchedPose(image, mask) {
|
|
1781
|
+
this.runner ??= VisionRunner.create({
|
|
1782
|
+
modelsDir: this.options.modelsDir,
|
|
1783
|
+
baseUrl: this.options.baseUrl,
|
|
1784
|
+
variant: this.options.variant
|
|
1785
|
+
});
|
|
1786
|
+
const { people } = await this.runner.pose(image);
|
|
1787
|
+
const match = people.map((person) => ({
|
|
1788
|
+
person,
|
|
1789
|
+
overlap: person.keypoints.reduce((sum, point) => {
|
|
1790
|
+
const x = Math.max(0, Math.min(image.width - 1, Math.round(point.x)));
|
|
1791
|
+
return sum + (mask[Math.max(0, Math.min(image.height - 1, Math.round(point.y))) * image.width + x] ?? 0) / 255 * point.visibility;
|
|
1792
|
+
}, 0)
|
|
1793
|
+
})).sort((a, b) => b.overlap - a.overlap)[0];
|
|
1794
|
+
if (!match || match.overlap < 2) return null;
|
|
1795
|
+
return Float32Array.from(match.person.keypoints.flatMap((point) => [
|
|
1796
|
+
point.x,
|
|
1797
|
+
point.y,
|
|
1798
|
+
point.visibility
|
|
1799
|
+
]));
|
|
1800
|
+
}
|
|
1801
|
+
/** Track IDs at a composition frame: every prompted track, else the one subject. */
|
|
1802
|
+
trackIds(frame) {
|
|
1803
|
+
const c = Math.max(0, Math.floor(this.clipFrame(frame)));
|
|
1804
|
+
const count = this.subjects.get(c)?.scores?.length ?? this.trackCounts.get(c) ?? 1;
|
|
1805
|
+
return Array.from({ length: count }, (_, i) => i + 1);
|
|
1806
|
+
}
|
|
1807
|
+
/** The subject (all tracks merged) or, with `id`, one track's mask, in source pixels. */
|
|
1808
|
+
maskAt(frame, id) {
|
|
1809
|
+
const c = Math.max(0, Math.floor(this.clipFrame(frame)));
|
|
1810
|
+
if (this.signalMaskFrame !== c) {
|
|
1811
|
+
this.signalMaskFrame = c;
|
|
1812
|
+
this.signalMasks.clear();
|
|
1813
|
+
}
|
|
1814
|
+
const hit = this.signalMasks.get(id ?? 0);
|
|
1815
|
+
if (hit) return hit;
|
|
1816
|
+
if (!this.results.has(c) || !this.sourceWidth) return void 0;
|
|
1817
|
+
const stored = this.subjects.get(c);
|
|
1818
|
+
const size$1 = this.sourceWidth * this.sourceHeight;
|
|
1819
|
+
const data = stored ? subjectAlpha(stored, size$1, id) : new Uint8Array(size$1);
|
|
1820
|
+
let area$1 = stored?.area ?? 0;
|
|
1821
|
+
if (id !== void 0 && stored?.scores) {
|
|
1822
|
+
area$1 = 0;
|
|
1823
|
+
for (const alpha of data) if (alpha) area$1++;
|
|
1824
|
+
}
|
|
1825
|
+
const mask = {
|
|
1826
|
+
category: stored?.category ?? this.samCategory(),
|
|
1827
|
+
mask: data,
|
|
1828
|
+
width: this.sourceWidth,
|
|
1829
|
+
height: this.sourceHeight,
|
|
1830
|
+
area: area$1,
|
|
1831
|
+
coverage: area$1 / size$1,
|
|
1832
|
+
detectionIndex: (id ?? 1) - 1,
|
|
1833
|
+
trackId: id ?? 1
|
|
1834
|
+
};
|
|
1835
|
+
this.signalMasks.set(id ?? 0, mask);
|
|
1836
|
+
return mask;
|
|
1837
|
+
}
|
|
1838
|
+
publishSignals(from, to) {
|
|
1839
|
+
const bundle = this.signalBundle;
|
|
1840
|
+
if (!bundle || !this.sourceWidth) return;
|
|
1841
|
+
bundle.setFrameSize(this.sourceWidth, this.sourceHeight);
|
|
1842
|
+
for (let frame = from; frame <= to; frame++) {
|
|
1843
|
+
if (this.publishedSignals.has(frame)) continue;
|
|
1844
|
+
this.publishedSignals.add(frame);
|
|
1845
|
+
const c = Math.max(0, Math.floor(this.clipFrame(frame)));
|
|
1846
|
+
const mask = this.maskAt(frame);
|
|
1847
|
+
if (!mask) continue;
|
|
1848
|
+
const before = bundle.getObjectResult(frame - 1).objects;
|
|
1849
|
+
const scores = this.subjects.get(c)?.scores;
|
|
1850
|
+
const objects = this.trackIds(frame).flatMap((id) => {
|
|
1851
|
+
const track = this.maskAt(frame, id);
|
|
1852
|
+
if (!track) return [];
|
|
1853
|
+
return [maskObject(track, frame, this.compositionFps, scores?.[id - 1] ?? this.results.get(c)?.score ?? 1, before.find((object$1) => object$1.trackId === id))];
|
|
1854
|
+
});
|
|
1855
|
+
bundle.setObjectResult(frame, objects);
|
|
1856
|
+
const object = objects[0] ?? maskObject(mask, frame, this.compositionFps, 0);
|
|
1857
|
+
const kp = this.results.get(c)?.kp;
|
|
1858
|
+
bundle.setPoseResult(frame, { people: kp ? [{
|
|
1859
|
+
score: object.score,
|
|
1860
|
+
boundingBox: object.boundingBox,
|
|
1861
|
+
trackId: 1,
|
|
1862
|
+
keypoints: Array.from({ length: 17 }, (_, i) => ({
|
|
1863
|
+
x: (kp[i * 3] ?? 0) / mask.width,
|
|
1864
|
+
y: (kp[i * 3 + 1] ?? 0) / mask.height,
|
|
1865
|
+
visibility: kp[i * 3 + 2] ?? 0
|
|
1866
|
+
}))
|
|
1867
|
+
}] : [] });
|
|
1868
|
+
}
|
|
1869
|
+
}
|
|
1535
1870
|
setSize(width, height) {
|
|
1536
1871
|
this.sourceWidth = width;
|
|
1537
1872
|
this.sourceHeight = height;
|
|
@@ -1591,7 +1926,7 @@ var ClipVision = class {
|
|
|
1591
1926
|
c = Math.max(0, c);
|
|
1592
1927
|
if (this.blurred.has(c)) return this.blurred.get(c) ?? null;
|
|
1593
1928
|
this.mustHave(c);
|
|
1594
|
-
const mask = bridgedMask(this.results, c, this.smoothing);
|
|
1929
|
+
const mask = this.exact ? this.results.get(c)?.mask ?? null : bridgedMask(this.results, c, this.smoothing);
|
|
1595
1930
|
const grid = mask ? boxBlur(mask, this.cellW, this.cellH, 2) : null;
|
|
1596
1931
|
this.blurred.set(c, grid);
|
|
1597
1932
|
return grid;
|
|
@@ -1624,6 +1959,7 @@ var ClipVision = class {
|
|
|
1624
1959
|
const stat = fs$1.statSync(this.source);
|
|
1625
1960
|
const dir = this.options.cacheDir ?? process.env.FRAMEFIELDS_VISION_CACHE_DIR ?? path$1.join(os.homedir(), ".cache", "framefields", "vision");
|
|
1626
1961
|
const o = this.options;
|
|
1962
|
+
const sam = this.exact ? await this.prompted() : void 0;
|
|
1627
1963
|
const key = JSON.stringify([
|
|
1628
1964
|
CACHE_VERSION,
|
|
1629
1965
|
path$1.resolve(this.source),
|
|
@@ -1634,7 +1970,17 @@ var ClipVision = class {
|
|
|
1634
1970
|
o.mask ?? true,
|
|
1635
1971
|
this.cell,
|
|
1636
1972
|
o.variant ?? "s",
|
|
1637
|
-
o.confidence ?? null
|
|
1973
|
+
o.confidence ?? null,
|
|
1974
|
+
...o.sam2 ? [[
|
|
1975
|
+
sam?.sam2Revision(o.sam2.model),
|
|
1976
|
+
o.sam2,
|
|
1977
|
+
2
|
|
1978
|
+
]] : [],
|
|
1979
|
+
...o.sam3 && sam ? [[
|
|
1980
|
+
sam.sam3Revision(await sam.sam3Precision(void 0, o.sam3.precision)),
|
|
1981
|
+
o.sam3,
|
|
1982
|
+
2
|
|
1983
|
+
]] : []
|
|
1638
1984
|
]);
|
|
1639
1985
|
const hash = crypto.createHash("sha256").update(key).digest("hex").slice(0, 24);
|
|
1640
1986
|
fs$1.mkdirSync(dir, { recursive: true });
|
|
@@ -1655,6 +2001,7 @@ var ClipVision = class {
|
|
|
1655
2001
|
this.setSize(json.width, json.height);
|
|
1656
2002
|
for (const [c, r] of Object.entries(json.frames)) this.results.set(Number(c), {
|
|
1657
2003
|
kp: r.kp ? Float32Array.from(r.kp) : null,
|
|
2004
|
+
score: r.score,
|
|
1658
2005
|
mask: r.mask ? new Uint8Array(Buffer.from(r.mask, "base64")) : null
|
|
1659
2006
|
});
|
|
1660
2007
|
} catch {}
|
|
@@ -1666,7 +2013,8 @@ var ClipVision = class {
|
|
|
1666
2013
|
const frames = {};
|
|
1667
2014
|
for (const [c, r] of this.results) frames[c] = {
|
|
1668
2015
|
kp: r.kp ? Array.from(r.kp, (v) => Math.round(v * 100) / 100) : null,
|
|
1669
|
-
mask: r.mask ? Buffer.from(r.mask).toString("base64") : null
|
|
2016
|
+
mask: r.mask ? Buffer.from(r.mask).toString("base64") : null,
|
|
2017
|
+
score: r.score
|
|
1670
2018
|
};
|
|
1671
2019
|
const fs$1 = await import("node:fs");
|
|
1672
2020
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
@@ -1697,6 +2045,7 @@ var ClipVision = class {
|
|
|
1697
2045
|
this.subjects.set(Number(c), s && {
|
|
1698
2046
|
category: s.category,
|
|
1699
2047
|
area: s.area,
|
|
2048
|
+
...s.scores && { scores: s.scores },
|
|
1700
2049
|
values: new Uint8Array(Buffer.from(s.values, "base64")),
|
|
1701
2050
|
lengths: new Uint32Array(lengths.buffer.slice(lengths.byteOffset, lengths.byteOffset + lengths.byteLength))
|
|
1702
2051
|
});
|
|
@@ -1711,6 +2060,7 @@ var ClipVision = class {
|
|
|
1711
2060
|
for (const [c, s] of this.subjects) frames[c] = s && {
|
|
1712
2061
|
category: s.category,
|
|
1713
2062
|
area: s.area,
|
|
2063
|
+
...s.scores && { scores: s.scores },
|
|
1714
2064
|
values: Buffer.from(s.values).toString("base64"),
|
|
1715
2065
|
lengths: Buffer.from(s.lengths.buffer, s.lengths.byteOffset, s.lengths.byteLength).toString("base64")
|
|
1716
2066
|
};
|
|
@@ -1993,6 +2343,18 @@ function boxBlur(src, w, h, r) {
|
|
|
1993
2343
|
}
|
|
1994
2344
|
return dst;
|
|
1995
2345
|
}
|
|
2346
|
+
/** A stored subject as 0/255 alpha: label maps merge every track, or keep track `id` only. */
|
|
2347
|
+
function subjectAlpha(stored, size$1, id) {
|
|
2348
|
+
const values = decodeRuns(stored, size$1);
|
|
2349
|
+
if (!stored.scores) return values;
|
|
2350
|
+
return values.map((label) => (id === void 0 ? label > 0 : label === id) ? 255 : 0);
|
|
2351
|
+
}
|
|
2352
|
+
/** Every track's mask merged, for matching one pose to the whole selection. */
|
|
2353
|
+
function unionMask(objects, image) {
|
|
2354
|
+
const union = new Uint8Array(image.width * image.height);
|
|
2355
|
+
for (const { mask } of objects) for (let i = 0; i < union.length; i++) union[i] = Math.max(union[i] ?? 0, mask[i] ?? 0);
|
|
2356
|
+
return union;
|
|
2357
|
+
}
|
|
1996
2358
|
|
|
1997
2359
|
//#endregion
|
|
1998
2360
|
//#region src/media-signals.ts
|
|
@@ -9457,4 +9819,4 @@ const Effect = Object.assign(Effect$1, effectFactories, {
|
|
|
9457
9819
|
|
|
9458
9820
|
//#endregion
|
|
9459
9821
|
export { glyphAnimator as $, wordRanges as $t, boilKeys as A, squigglePath as At, defineTheme as B, themes as Bt, audioLevelsSchema as C, span as Cn, scaleFrames as Ct, basePropsSchema as D, FRAMEFIELDS_AI_PROXY_URL as Dn, springKeys as Dt, bandEdges as E, ApiError as En, springAt as Et, constantExpression as F, surfaceFill as Ft, elevationStyle as G, transparent as Gt, drawOnKeys as H, toPathData as Ht, contrastRatio as I, targetPoint as It, evaluateEase as J, windowExpression as Jt, ellipsePath as K, typingFrames as Kt, cover as L, targetSchema as Lt, boxPath as M, staggerRanks as Mt, catmullRom as N, stepExpression as Nt, beats as O, ValidationError as On, springSettleFrames as Ot, chain as P, supersede as Pt, frameSpan as Q, wobblePoints as Qt, defineComponent as R, textLayout as Rt, ascending as S, size as Sn, safeArea as St, bakeSamples as T, sup as Tn, smoothRelease as Tt, ease as U, toSeconds as Ut, dist as V, toFrames as Vt, elevate as W, transformPathData as Wt, exitAnimation as X, withDefaults as Xt, evaluateGlyphExpression as Y, withAlpha as Yt, findRange as Z, within as Zt, after as _, italic as _n, resampleBands as _t, Media as a, PhysicsWorld2D as an, last as at, arcPath as b, parseMarkup as bn, rng as bt, section as c, Layer3D as cn, lineShift as ct, analyzeAudio as d, PersonTrack as dn, offsetCues as dt, Styles as en, hashRng as et, KeyBook as f, DEFAULT_CHART_COLORS as fn, parseColor as ft, UNIT_INDEX as g, color as gn, rendererChars as gt, Track as h, code as hn, rangeRects as ht, Light as i, PhysicsBody2D as in, isLight as it, boundsOf as j, staggerOffsets as jt, bind as k, ai as kn, springTrack as kt, bindComponent as l, Particles as ln, luminance as lt, SAFE_INSETS as m, bold as mn, quantize as mt, Effect as n, PhysicsBody3D as nn, holdFirstKeys as nt, blurRegion as o, Lighting as on, lerp2 as ot, MOTION_PRESETS as p, accent as pn, pulseKeys as pt, enterAnimation as q, valueAt as qt, Layer as r, PhysicsWorld3D as rn, inkOn as rt, editTrackedRegion as s, Transition as sn, linePath as st, Composition as t, Physics as tn, hashString as tt, z$2 as u, ClipVision as un, mix as ut, analyzeChannels as v, mark as vn, resolveMotion as vt, bakeFunction as w, sub as wn, scheduleExpression as wt, arrowPaths as x, rich as xn, round as xt, anchorPoint as y, normalizeTextSpans as yn, resolveTarget as yt, defineMeta as z, themeFrames as zt };
|
|
9460
|
-
//# sourceMappingURL=src-
|
|
9822
|
+
//# sourceMappingURL=src-CK5rGVbh.mjs.map
|