framefields 2.9.2 → 2.10.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +18 -0
- package/README.md +10 -7
- package/dist/audio/index.d.mts +5 -4
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-Ccpl9mjV.d.mts → audio-1X5qNNmk.d.mts} +4 -3
- package/dist/audio-1X5qNNmk.d.mts.map +1 -0
- package/dist/{audio-a0MFkK6J.mjs → audio-KHBadECb.mjs} +1 -1
- package/dist/{audio-a0MFkK6J.mjs.map → audio-KHBadECb.mjs.map} +1 -1
- package/dist/{audio-BfQg37MW.mjs → audio-YpBRdI7r.mjs} +4 -4
- package/dist/{audio-BfQg37MW.mjs.map → audio-YpBRdI7r.mjs.map} +1 -1
- package/dist/{check-result-C3jlgV2i.mjs → check-result-Culfu7Nx.mjs} +1 -1
- package/dist/{check-result-C3jlgV2i.mjs.map → check-result-Culfu7Nx.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +50 -50
- package/dist/cli.mjs +179 -3
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +118 -0
- package/dist/cloud/index.d.mts.map +1 -0
- package/dist/cloud/index.mjs +3 -0
- package/dist/cloud-xcfV4J03.mjs +233 -0
- package/dist/cloud-xcfV4J03.mjs.map +1 -0
- package/dist/components/index.d.mts +14 -11
- package/dist/components/index.mjs +47 -47
- package/dist/dist-2_lT3Dwc.mjs +1434 -0
- package/dist/dist-2_lT3Dwc.mjs.map +1 -0
- package/dist/{dist-Buaaj-Ul.mjs → dist-BIE8fvlv.mjs} +1 -1
- package/dist/{dist-Buaaj-Ul.mjs.map → dist-BIE8fvlv.mjs.map} +1 -1
- package/dist/{dist-BlIrsfcn.mjs → dist-Bf2_efYP.mjs} +1 -1
- package/dist/{dist-BlIrsfcn.mjs.map → dist-Bf2_efYP.mjs.map} +1 -1
- package/dist/dist-BwtxciN4.mjs +3 -0
- package/dist/{dist-C1cCW7Bt.mjs → dist-C4Vxgm0Q.mjs} +275 -78
- package/dist/dist-C4Vxgm0Q.mjs.map +1 -0
- package/dist/{dist-C8Xq3zgx.mjs → dist-Cu1fZ9Uy.mjs} +4 -4
- package/dist/{dist-C8Xq3zgx.mjs.map → dist-Cu1fZ9Uy.mjs.map} +1 -1
- package/dist/{dist-DVMepKaO.mjs → dist-CySGkG54.mjs} +2 -2
- package/dist/dist-CySGkG54.mjs.map +1 -0
- package/dist/effects/index.d.mts +6 -4
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-CemgqEPv.mjs → effects-DiWYouOK.mjs} +3 -3
- package/dist/{effects-CemgqEPv.mjs.map → effects-DiWYouOK.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-BW0pPcvJ.mjs → fonts-BnV-GB1o.mjs} +2 -2
- package/dist/{fonts-BW0pPcvJ.mjs.map → fonts-BnV-GB1o.mjs.map} +1 -1
- package/dist/{gpu-CMaa63nz.mjs → gpu-Bw35AMwY.mjs} +11 -3
- package/dist/gpu-Bw35AMwY.mjs.map +1 -0
- package/dist/{index-D5UDyVMb.d.mts → index-B7WqFBZA.d.mts} +35 -2401
- package/dist/index-B7WqFBZA.d.mts.map +1 -0
- package/dist/{index-BfDFmIBE.d.mts → index-BW0Q1ygn.d.mts} +1 -1
- package/dist/{index-BfDFmIBE.d.mts.map → index-BW0Q1ygn.d.mts.map} +1 -1
- package/dist/{index-CQ-bbZk3.d.mts → index-Bbv0VtxJ.d.mts} +7 -1165
- package/dist/index-Bbv0VtxJ.d.mts.map +1 -0
- package/dist/{index-CFoAmh7q.d.mts → index-CDQrdZ0J.d.mts} +3 -3
- package/dist/{index-CFoAmh7q.d.mts.map → index-CDQrdZ0J.d.mts.map} +1 -1
- package/dist/index-COYNQ_mf.d.mts +2402 -0
- package/dist/index-COYNQ_mf.d.mts.map +1 -0
- package/dist/{index-BIjMAW1h.d.mts → index-CdCrae-I.d.mts} +2 -2
- package/dist/{index-BIjMAW1h.d.mts.map → index-CdCrae-I.d.mts.map} +1 -1
- package/dist/index-DQa7mhzq.d.mts +330 -0
- package/dist/index-DQa7mhzq.d.mts.map +1 -0
- package/dist/{index-Bnh42ouE.d.mts → index-Dyt4yS-x.d.mts} +376 -287
- package/dist/index-Dyt4yS-x.d.mts.map +1 -0
- package/dist/index-WwuuX8ZJ.d.mts +1165 -0
- package/dist/index-WwuuX8ZJ.d.mts.map +1 -0
- package/dist/{index-CJL0JAU8.d.mts → index-gOVtTm-P.d.mts} +125 -3
- package/dist/index-gOVtTm-P.d.mts.map +1 -0
- package/dist/{index-7Z9_a_iB.d.mts → index-h7m8QgcL.d.mts} +3 -3
- package/dist/{index-7Z9_a_iB.d.mts.map → index-h7m8QgcL.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -13
- package/dist/index.mjs +59 -58
- package/dist/preview/index.d.mts +4 -3
- package/dist/preview/index.mjs +12 -12
- package/dist/{preview-DvP8AZuV.mjs → preview-BW7ilNWk.mjs} +3 -3
- package/dist/{preview-DvP8AZuV.mjs.map → preview-BW7ilNWk.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
- package/dist/preview-engine/{chunk-5AWAOMBR.mjs → chunk-4BWBX2HM.mjs} +1 -1
- package/dist/preview-engine/{chunk-BEYA25UZ.mjs → chunk-4DSOZ5QG.mjs} +1 -1
- package/dist/preview-engine/{chunk-VVE2QHVG.mjs → chunk-4FACCLLE.mjs} +1 -1
- package/dist/preview-engine/{chunk-DMSZXG56.mjs → chunk-4N25ZU43.mjs} +1 -1
- package/dist/preview-engine/{chunk-FTCEG3SF.mjs → chunk-4RLKHFV6.mjs} +1 -1
- package/dist/preview-engine/chunk-4TPXZNVR.mjs +483 -0
- package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
- package/dist/preview-engine/{chunk-CC4NNNIY.mjs → chunk-57WXGYEV.mjs} +1 -1
- package/dist/preview-engine/{chunk-C4M3B2Q2.mjs → chunk-5SLBE2FX.mjs} +1 -1
- package/dist/preview-engine/{chunk-PM2W4VLT.mjs → chunk-5Y7SO37Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
- package/dist/preview-engine/{chunk-Y5K5LVOR.mjs → chunk-6BE3IL7L.mjs} +1 -1
- package/dist/preview-engine/{chunk-GA4HNR44.mjs → chunk-6LBFSGCI.mjs} +1 -1
- package/dist/preview-engine/{chunk-IB6GZJOL.mjs → chunk-6O55UROD.mjs} +1 -1
- package/dist/preview-engine/{chunk-SPJPM43P.mjs → chunk-6SLCECHG.mjs} +1 -1
- package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
- package/dist/preview-engine/{chunk-QCSVT73T.mjs → chunk-7A3BNAWY.mjs} +84 -25
- package/dist/preview-engine/{chunk-CN2VLYLB.mjs → chunk-7HW7GA76.mjs} +1 -1
- package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
- package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
- package/dist/preview-engine/{chunk-LVYVXVZO.mjs → chunk-C2GX5L5S.mjs} +1 -1
- package/dist/preview-engine/{chunk-4WYM72ZN.mjs → chunk-CHXR5XZK.mjs} +1 -1
- package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
- package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-RJIAES3X.mjs → chunk-EKEKYGXE.mjs} +1 -1
- package/dist/preview-engine/{chunk-TNJEZKXM.mjs → chunk-FH72KTSM.mjs} +1 -1
- package/dist/preview-engine/{chunk-P5FKRQFU.mjs → chunk-FW2UDDUT.mjs} +1 -1
- package/dist/preview-engine/{chunk-S2ABWY5G.mjs → chunk-GTMZOMAN.mjs} +1 -1
- package/dist/preview-engine/{chunk-6R3UJBL5.mjs → chunk-HGWT3RVQ.mjs} +10 -10
- package/dist/preview-engine/{chunk-34RJ7GAS.mjs → chunk-HKYENGC5.mjs} +1 -1
- package/dist/preview-engine/{chunk-7U34VKNO.mjs → chunk-HO7FXISJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-73CNXGAK.mjs → chunk-HPQDCC4S.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZY47XIRK.mjs → chunk-IVAA5X5H.mjs} +1 -1
- package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
- package/dist/preview-engine/{chunk-UXYM2G6J.mjs → chunk-JFBSNFN6.mjs} +1 -1
- package/dist/preview-engine/{chunk-GIICZZQI.mjs → chunk-JSKEVYKD.mjs} +1 -1
- package/dist/preview-engine/{chunk-EJJITH6U.mjs → chunk-K3TJJXVC.mjs} +1 -1
- package/dist/preview-engine/{chunk-GZWA5QJS.mjs → chunk-L2NTIWW5.mjs} +1 -1
- package/dist/preview-engine/{chunk-VN36PRVD.mjs → chunk-LBP7E7SJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-34DL53D5.mjs → chunk-LTR5FXGU.mjs} +1 -1
- package/dist/preview-engine/{chunk-GRJJVSOV.mjs → chunk-ML7WO27M.mjs} +1 -1
- package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
- package/dist/preview-engine/{chunk-OH5W5EL6.mjs → chunk-NTTEGJD6.mjs} +1 -1
- package/dist/preview-engine/{chunk-2B722GXM.mjs → chunk-OD4CSXZL.mjs} +15 -15
- package/dist/preview-engine/{chunk-AHQCDTD6.mjs → chunk-OOUDE4XL.mjs} +1 -1
- package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
- package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
- package/dist/preview-engine/{chunk-ZJ5SWTCW.mjs → chunk-RAW2I27S.mjs} +1 -1
- package/dist/preview-engine/{chunk-BJV2LBII.mjs → chunk-RMHL4XZ3.mjs} +1 -1
- package/dist/preview-engine/chunk-T6L3DO3H.mjs +1 -0
- package/dist/preview-engine/{chunk-2PYTDN2C.mjs → chunk-V5HU6NIW.mjs} +1 -1
- package/dist/preview-engine/{chunk-DVZITDQS.mjs → chunk-VRJBOFFY.mjs} +1 -1
- package/dist/preview-engine/{chunk-SF37HXAH.mjs → chunk-WVIDORLK.mjs} +1 -1
- package/dist/preview-engine/{chunk-35HMRW4I.mjs → chunk-XCQ7KN4S.mjs} +1 -1
- package/dist/preview-engine/{chunk-KHJZMTOS.mjs → chunk-Y2SWIWIU.mjs} +1 -1
- package/dist/preview-engine/{chunk-H7BSN7V7.mjs → chunk-YS3ROS25.mjs} +1 -1
- package/dist/preview-engine/{chunk-2DWY7UBV.mjs → chunk-YXCTOCQ2.mjs} +1 -1
- package/dist/preview-engine/{chunk-BVDWS3D2.mjs → chunk-ZA5LWHRM.mjs} +1 -1
- package/dist/preview-engine/chunk-ZGEKF34E.mjs +1974 -0
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-33PIDDZC.mjs +1 -0
- package/dist/preview-engine/{renderers-ZACSHGNZ.mjs → renderers-36P2TKPC.mjs} +1 -1
- package/dist/preview-engine/{renderers-TSBV4KPE.mjs → renderers-37Y5LR2S.mjs} +1 -1
- package/dist/preview-engine/renderers-3AZ3HY53.mjs +1 -0
- package/dist/preview-engine/renderers-3FGKW52B.mjs +1 -0
- package/dist/preview-engine/renderers-4A2FBS3Y.mjs +1 -0
- package/dist/preview-engine/{renderers-5TO2SXFR.mjs → renderers-4MW4NW6O.mjs} +1 -1
- package/dist/preview-engine/{renderers-ENMY4DKF.mjs → renderers-4SNAK77B.mjs} +1 -1
- package/dist/preview-engine/{renderers-Y22VSOXF.mjs → renderers-4WFRXGMR.mjs} +1 -1
- package/dist/preview-engine/{renderers-5KANN7XF.mjs → renderers-5K3BSBI6.mjs} +1 -1
- package/dist/preview-engine/renderers-65DU2F5W.mjs +1 -0
- package/dist/preview-engine/renderers-6CTPYQR6.mjs +1 -0
- package/dist/preview-engine/{renderers-NUAI4TO5.mjs → renderers-6RRWA33X.mjs} +1 -1
- package/dist/preview-engine/{renderers-4F7WLQD5.mjs → renderers-6RYIPQ7W.mjs} +1 -1
- package/dist/preview-engine/{renderers-U4M7ZCV4.mjs → renderers-AUYCQNSS.mjs} +1 -1
- package/dist/preview-engine/renderers-AWODRI3B.mjs +1 -0
- package/dist/preview-engine/renderers-BO6HHGMZ.mjs +1 -0
- package/dist/preview-engine/renderers-BSXYDEV7.mjs +1 -0
- package/dist/preview-engine/{renderers-FSI5KNGZ.mjs → renderers-CMBI4JOC.mjs} +1 -1
- package/dist/preview-engine/{renderers-6Z7DWAPH.mjs → renderers-CQIPHCIW.mjs} +1 -1
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
- package/dist/preview-engine/renderers-ECW2CGNU.mjs +1 -0
- package/dist/preview-engine/renderers-EEX22FUO.mjs +1 -0
- package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
- package/dist/preview-engine/{renderers-NCGH2WWJ.mjs → renderers-G2FL3IFD.mjs} +1 -1
- package/dist/preview-engine/{renderers-5XRKZHVT.mjs → renderers-GCQKGJ7W.mjs} +1 -1
- package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
- package/dist/preview-engine/renderers-HZBXLDKG.mjs +1 -0
- package/dist/preview-engine/renderers-IOXNQPQK.mjs +1 -0
- package/dist/preview-engine/renderers-IR44E4ZZ.mjs +1 -0
- package/dist/preview-engine/{renderers-TGJSOKDY.mjs → renderers-JALV3B3A.mjs} +1 -1
- package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
- package/dist/preview-engine/{renderers-CUMVIVHI.mjs → renderers-JZYHX4XI.mjs} +1 -1
- package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +1 -0
- package/dist/preview-engine/renderers-K37YL3Z7.mjs +1 -0
- package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
- package/dist/preview-engine/renderers-KUJQV3K6.mjs +1 -0
- package/dist/preview-engine/renderers-KXVKLSSX.mjs +1 -0
- package/dist/preview-engine/{renderers-WEYAHOBK.mjs → renderers-LF6U4MR5.mjs} +1 -1
- package/dist/preview-engine/renderers-N4RVFX3G.mjs +1 -0
- package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
- package/dist/preview-engine/renderers-NZWWEAYA.mjs +1 -0
- package/dist/preview-engine/{renderers-5UZ3YFBD.mjs → renderers-OPRXVIGT.mjs} +1 -1
- package/dist/preview-engine/{renderers-7C5RA3R5.mjs → renderers-OZKPOUMW.mjs} +1 -1
- package/dist/preview-engine/renderers-P4JJEDZB.mjs +1 -0
- package/dist/preview-engine/{renderers-V3AQO7AR.mjs → renderers-PGZDFDSC.mjs} +1 -1
- package/dist/preview-engine/renderers-Q4572F5C.mjs +1 -0
- package/dist/preview-engine/{renderers-PIIEUKFE.mjs → renderers-Q5YCUPYE.mjs} +1 -1
- package/dist/preview-engine/renderers-QAX2QWWQ.mjs +1 -0
- package/dist/preview-engine/{renderers-SEIAUKJF.mjs → renderers-RQ3JZE3L.mjs} +1 -1
- package/dist/preview-engine/renderers-SRFIEVWL.mjs +1 -0
- package/dist/preview-engine/renderers-SYC6WFTM.mjs +1 -0
- package/dist/preview-engine/{renderers-QA2HKUJJ.mjs → renderers-TKHQRERE.mjs} +1 -1
- package/dist/preview-engine/{renderers-A24KZK2Q.mjs → renderers-U4S577ON.mjs} +1 -1
- package/dist/preview-engine/{renderers-KC6ZSKCW.mjs → renderers-UBIFSF37.mjs} +1 -1
- package/dist/preview-engine/renderers-UH4WN3QN.mjs +1 -0
- package/dist/preview-engine/renderers-V4FFCAS7.mjs +1 -0
- package/dist/preview-engine/renderers-VGDEOZUU.mjs +1 -0
- package/dist/preview-engine/renderers-VJJKBX5K.mjs +1 -0
- package/dist/preview-engine/renderers-VJOKVDYW.mjs +1 -0
- package/dist/preview-engine/renderers-VUUWZUOH.mjs +1 -0
- package/dist/preview-engine/renderers-WG756VF3.mjs +228 -0
- package/dist/preview-engine/renderers-WOP5GOZP.mjs +1 -0
- package/dist/preview-engine/{renderers-T74CQCEN.mjs → renderers-XZ3XDQIN.mjs} +1 -1
- package/dist/preview-engine/renderers-Y4MGN2FR.mjs +1 -0
- package/dist/preview-engine/renderers-YAMYH7IK.mjs +1 -0
- package/dist/preview-engine/{renderers-MD3PRFZL.mjs → renderers-YJ4PJEPG.mjs} +1 -1
- package/dist/preview-engine/renderers-ZNLSAWW3.mjs +1 -0
- package/dist/preview-engine/{renderers-L6YDX6GS.mjs → renderers-ZQVKE5AO.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-GPF7RIBU.mjs} +1 -1
- package/dist/{program-CKpKkllV.mjs → program-BUjUTdxq.mjs} +44 -17
- package/dist/program-BUjUTdxq.mjs.map +1 -0
- package/dist/registry/focus-zoom.json +9 -2
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +4 -4
- package/dist/{renderer-BF0hx_iJ.mjs → renderer--f8JHHyT.mjs} +5 -5
- package/dist/{renderer-BF0hx_iJ.mjs.map → renderer--f8JHHyT.mjs.map} +1 -1
- package/dist/{renderer-CHr7MiYW.mjs → renderer-1KgHl_ls.mjs} +5 -5
- package/dist/{renderer-CHr7MiYW.mjs.map → renderer-1KgHl_ls.mjs.map} +1 -1
- package/dist/renderer-6sNr6ZRJ.mjs +6 -0
- package/dist/{renderer-BgO6BA_z.mjs → renderer-7c0ecb-L.mjs} +74 -21
- package/dist/renderer-7c0ecb-L.mjs.map +1 -0
- package/dist/{renderer-D61B9bXF.mjs → renderer-7w9PZmWJ.mjs} +4 -4
- package/dist/{renderer-D61B9bXF.mjs.map → renderer-7w9PZmWJ.mjs.map} +1 -1
- package/dist/{renderer-DVCJjVn7.mjs → renderer-B3WHDQeB.mjs} +5 -5
- package/dist/{renderer-DVCJjVn7.mjs.map → renderer-B3WHDQeB.mjs.map} +1 -1
- package/dist/{renderer-C7eFJf0_.mjs → renderer-B84T5I98.mjs} +5 -5
- package/dist/{renderer-C7eFJf0_.mjs.map → renderer-B84T5I98.mjs.map} +1 -1
- package/dist/{renderer-EaLUCobW.mjs → renderer-B8i4d1Rc.mjs} +4 -4
- package/dist/{renderer-EaLUCobW.mjs.map → renderer-B8i4d1Rc.mjs.map} +1 -1
- package/dist/renderer-BDHGxD6p.mjs +5 -0
- package/dist/{renderer-WCZu2Rf5.mjs → renderer-BFmVDdVs.mjs} +4 -4
- package/dist/{renderer-WCZu2Rf5.mjs.map → renderer-BFmVDdVs.mjs.map} +1 -1
- package/dist/{renderer-bAKUeHF3.mjs → renderer-BG_cnGbF.mjs} +5 -5
- package/dist/{renderer-bAKUeHF3.mjs.map → renderer-BG_cnGbF.mjs.map} +1 -1
- package/dist/{renderer-BPWDsufX.mjs → renderer-BIToh0CA.mjs} +3 -3
- package/dist/{renderer-BPWDsufX.mjs.map → renderer-BIToh0CA.mjs.map} +1 -1
- package/dist/{renderer-mNSyac1V.mjs → renderer-BOg8i8eF.mjs} +11 -2
- package/dist/{renderer-mNSyac1V.mjs.map → renderer-BOg8i8eF.mjs.map} +1 -1
- package/dist/{renderer-BlPqTEii.mjs → renderer-BSW4CGZF.mjs} +4 -4
- package/dist/{renderer-BlPqTEii.mjs.map → renderer-BSW4CGZF.mjs.map} +1 -1
- package/dist/{renderer-D7Al3_-5.mjs → renderer-BT4im6c0.mjs} +5 -5
- package/dist/{renderer-D7Al3_-5.mjs.map → renderer-BT4im6c0.mjs.map} +1 -1
- package/dist/renderer-BT9dvpk2.mjs +5 -0
- package/dist/{renderer-BpIF1QIE.mjs → renderer-BTLZBD63.mjs} +5 -5
- package/dist/{renderer-BpIF1QIE.mjs.map → renderer-BTLZBD63.mjs.map} +1 -1
- package/dist/{renderer-CcvvoKiZ.mjs → renderer-Bb_HHUQ0.mjs} +5 -5
- package/dist/{renderer-CcvvoKiZ.mjs.map → renderer-Bb_HHUQ0.mjs.map} +1 -1
- package/dist/renderer-Bd-NuU3M.mjs +3 -0
- package/dist/{renderer-sCovEubT.mjs → renderer-BdRwbLLV.mjs} +4 -4
- package/dist/{renderer-sCovEubT.mjs.map → renderer-BdRwbLLV.mjs.map} +1 -1
- package/dist/{renderer-DNQvOrkY.mjs → renderer-BeJoW-nG.mjs} +5 -5
- package/dist/{renderer-DNQvOrkY.mjs.map → renderer-BeJoW-nG.mjs.map} +1 -1
- package/dist/renderer-BfaRh0qy.mjs +5 -0
- package/dist/{renderer-B522Dkdk.mjs → renderer-BhNZn2DU.mjs} +4 -4
- package/dist/{renderer-B522Dkdk.mjs.map → renderer-BhNZn2DU.mjs.map} +1 -1
- package/dist/{renderer-D47AEJE_.mjs → renderer-Bif8bwCq.mjs} +3 -3
- package/dist/{renderer-D47AEJE_.mjs.map → renderer-Bif8bwCq.mjs.map} +1 -1
- package/dist/renderer-BlwXKV7Y.mjs +5 -0
- package/dist/{renderer-CwFqqpWY.mjs → renderer-Bm91Xv6l.mjs} +4 -4
- package/dist/{renderer-CwFqqpWY.mjs.map → renderer-Bm91Xv6l.mjs.map} +1 -1
- package/dist/{renderer-SSBL4M1o.mjs → renderer-BnN3JH9u.mjs} +20 -7
- package/dist/renderer-BnN3JH9u.mjs.map +1 -0
- package/dist/{renderer-8QIwXh7O.mjs → renderer-Bo5GwErU.mjs} +6 -6
- package/dist/{renderer-8QIwXh7O.mjs.map → renderer-Bo5GwErU.mjs.map} +1 -1
- package/dist/{renderer-DF-yvIrV.mjs → renderer-Br_aJ_b7.mjs} +4 -4
- package/dist/{renderer-DF-yvIrV.mjs.map → renderer-Br_aJ_b7.mjs.map} +1 -1
- package/dist/{renderer-DmkWrWAk.mjs → renderer-BvRaVByi.mjs} +3 -3
- package/dist/{renderer-DmkWrWAk.mjs.map → renderer-BvRaVByi.mjs.map} +1 -1
- package/dist/renderer-C40yZK3x.mjs +5 -0
- package/dist/renderer-C5MjQ7L8.mjs +5 -0
- package/dist/renderer-C8LjKYnS.mjs +5 -0
- package/dist/renderer-C9q9H_qa.mjs +5 -0
- package/dist/renderer-CC4fhNup.mjs +3 -0
- package/dist/{renderer-GBmWjBvy.mjs → renderer-CDfCaqV4.mjs} +3 -3
- package/dist/{renderer-GBmWjBvy.mjs.map → renderer-CDfCaqV4.mjs.map} +1 -1
- package/dist/renderer-CF9ta9Rm.mjs +5 -0
- package/dist/{renderer-DkRSZg5g.mjs → renderer-CKlNHDKI.mjs} +5 -5
- package/dist/{renderer-DkRSZg5g.mjs.map → renderer-CKlNHDKI.mjs.map} +1 -1
- package/dist/{renderer-CYC32bDW.mjs → renderer-CLRrcT_3.mjs} +5 -5
- package/dist/{renderer-CYC32bDW.mjs.map → renderer-CLRrcT_3.mjs.map} +1 -1
- package/dist/{renderer-DpruWmZU.mjs → renderer-CO1PwItH.mjs} +4 -4
- package/dist/{renderer-DpruWmZU.mjs.map → renderer-CO1PwItH.mjs.map} +1 -1
- package/dist/renderer-CO205Gr9.mjs +5 -0
- package/dist/renderer-CSm8UXLP.mjs +5 -0
- package/dist/renderer-CSy8HRtF.mjs +5 -0
- package/dist/{renderer-pHWEHDnM.mjs → renderer-CTSvHf6g.mjs} +5 -5
- package/dist/{renderer-pHWEHDnM.mjs.map → renderer-CTSvHf6g.mjs.map} +1 -1
- package/dist/{renderer-hSCfnvaK.mjs → renderer-CWmlfdLb.mjs} +5 -5
- package/dist/{renderer-hSCfnvaK.mjs.map → renderer-CWmlfdLb.mjs.map} +1 -1
- package/dist/{renderer--fkmiVjl.mjs → renderer-CanNjQuL.mjs} +4 -4
- package/dist/{renderer--fkmiVjl.mjs.map → renderer-CanNjQuL.mjs.map} +1 -1
- package/dist/renderer-CdNRWDsA.mjs +5 -0
- package/dist/{renderer-DFzI3yI_.mjs → renderer-CeNAgCE2.mjs} +3 -3
- package/dist/{renderer-DFzI3yI_.mjs.map → renderer-CeNAgCE2.mjs.map} +1 -1
- package/dist/{renderer-BdyopiLC.mjs → renderer-Ch1qZ2PT.mjs} +4 -4
- package/dist/{renderer-BdyopiLC.mjs.map → renderer-Ch1qZ2PT.mjs.map} +1 -1
- package/dist/{renderer-CQvmbRQ5.mjs → renderer-Chfo4G9t.mjs} +5 -5
- package/dist/{renderer-CQvmbRQ5.mjs.map → renderer-Chfo4G9t.mjs.map} +1 -1
- package/dist/{renderer-DEmYyaqj.mjs → renderer-Ck-NLzz0.mjs} +4 -4
- package/dist/{renderer-DEmYyaqj.mjs.map → renderer-Ck-NLzz0.mjs.map} +1 -1
- package/dist/renderer-CkAjiGRB.mjs +5 -0
- package/dist/renderer-CmryuPBm.mjs +5 -0
- package/dist/renderer-CnEwne4L.mjs +5 -0
- package/dist/{renderer-BlvGcyAN.mjs → renderer-CsRuEpR2.mjs} +3 -3
- package/dist/{renderer-BlvGcyAN.mjs.map → renderer-CsRuEpR2.mjs.map} +1 -1
- package/dist/{renderer-SWr3vbrV.mjs → renderer-CtulmkqT.mjs} +3 -3
- package/dist/{renderer-SWr3vbrV.mjs.map → renderer-CtulmkqT.mjs.map} +1 -1
- package/dist/{renderer-DTqDy2m9.mjs → renderer-CwAuWLWm.mjs} +3 -3
- package/dist/{renderer-DTqDy2m9.mjs.map → renderer-CwAuWLWm.mjs.map} +1 -1
- package/dist/{renderer-B2jjxsjO.mjs → renderer-CxabOSkk.mjs} +4 -4
- package/dist/{renderer-B2jjxsjO.mjs.map → renderer-CxabOSkk.mjs.map} +1 -1
- package/dist/{renderer-DPAD6fL1.mjs → renderer-CybBR8AL.mjs} +425 -115
- package/dist/renderer-CybBR8AL.mjs.map +1 -0
- package/dist/{renderer-DO-KbpYZ.mjs → renderer-D1tDMuD0.mjs} +5 -5
- package/dist/{renderer-DO-KbpYZ.mjs.map → renderer-D1tDMuD0.mjs.map} +1 -1
- package/dist/renderer-D4QDoqOG.mjs +5 -0
- package/dist/{renderer-Bfk6A7UO.mjs → renderer-D7DlNOVi.mjs} +5 -5
- package/dist/{renderer-Bfk6A7UO.mjs.map → renderer-D7DlNOVi.mjs.map} +1 -1
- package/dist/renderer-D7cS2a8z.mjs +5 -0
- package/dist/{renderer-g_vrrAQU.mjs → renderer-D7lApyWZ.mjs} +3 -3
- package/dist/{renderer-g_vrrAQU.mjs.map → renderer-D7lApyWZ.mjs.map} +1 -1
- package/dist/renderer-D85CNC-b.mjs +5 -0
- package/dist/{renderer-DqvoMLca.mjs → renderer-DAfCcnCz.mjs} +5 -5
- package/dist/{renderer-DqvoMLca.mjs.map → renderer-DAfCcnCz.mjs.map} +1 -1
- package/dist/{renderer-D7r6onRT.mjs → renderer-DAug14gu.mjs} +4 -4
- package/dist/{renderer-D7r6onRT.mjs.map → renderer-DAug14gu.mjs.map} +1 -1
- package/dist/{renderer-DMvmf3T2.mjs → renderer-DBfx6QX1.mjs} +3 -3
- package/dist/renderer-DC9IoJNz.mjs +5 -0
- package/dist/renderer-DCMoBppL.mjs +1062 -0
- package/dist/renderer-DCMoBppL.mjs.map +1 -0
- package/dist/renderer-DIDh0gFm.mjs +5 -0
- package/dist/{renderer-DKgPVOLL.d.mts → renderer-DJuVX3c5.d.mts} +2 -2
- package/dist/{renderer-DKgPVOLL.d.mts.map → renderer-DJuVX3c5.d.mts.map} +1 -1
- package/dist/{renderer-sYSkIUfo.mjs → renderer-DKptrHeL.mjs} +5 -5
- package/dist/{renderer-sYSkIUfo.mjs.map → renderer-DKptrHeL.mjs.map} +1 -1
- package/dist/renderer-DLmJ9GWE.mjs +5 -0
- package/dist/renderer-DM7PUWP9.mjs +5 -0
- package/dist/{renderer-C41U1tK6.mjs → renderer-DMtzPqYo.mjs} +211 -72
- package/dist/renderer-DMtzPqYo.mjs.map +1 -0
- package/dist/renderer-DPWFDxIO.mjs +5 -0
- package/dist/renderer-DUCByhAk.mjs +5 -0
- package/dist/renderer-DVOtnCKH.mjs +5 -0
- package/dist/renderer-DVrN2bW8.mjs +5 -0
- package/dist/{renderer-zXPVLRlD.mjs → renderer-D_rEtJAH.mjs} +5 -5
- package/dist/{renderer-zXPVLRlD.mjs.map → renderer-D_rEtJAH.mjs.map} +1 -1
- package/dist/{renderer-BIGFP1cF.mjs → renderer-Dak_wVh9.mjs} +2 -2
- package/dist/{renderer-BIGFP1cF.mjs.map → renderer-Dak_wVh9.mjs.map} +1 -1
- package/dist/{renderer-DX41niRU.mjs → renderer-Dd2XrdqA.mjs} +4 -4
- package/dist/{renderer-DX41niRU.mjs.map → renderer-Dd2XrdqA.mjs.map} +1 -1
- package/dist/renderer-DdOVwfG4.mjs +5 -0
- package/dist/{renderer-1r-Uq-Ae.mjs → renderer-Dih1rtT6.mjs} +3 -3
- package/dist/{renderer-1r-Uq-Ae.mjs.map → renderer-Dih1rtT6.mjs.map} +1 -1
- package/dist/{renderer-BXJXziIt.mjs → renderer-DjiebKHO.mjs} +3 -3
- package/dist/{renderer-BXJXziIt.mjs.map → renderer-DjiebKHO.mjs.map} +1 -1
- package/dist/{renderer-DIw3UtEU.mjs → renderer-DkAFIpzB.mjs} +5 -5
- package/dist/{renderer-DIw3UtEU.mjs.map → renderer-DkAFIpzB.mjs.map} +1 -1
- package/dist/{renderer-DDEkFbVI.mjs → renderer-DlbSqOJR.mjs} +5 -5
- package/dist/{renderer-DDEkFbVI.mjs.map → renderer-DlbSqOJR.mjs.map} +1 -1
- package/dist/{renderer-C7L8Ceqr.mjs → renderer-DrExCXnp.mjs} +4 -4
- package/dist/{renderer-C7L8Ceqr.mjs.map → renderer-DrExCXnp.mjs.map} +1 -1
- package/dist/{renderer-_iMAO698.mjs → renderer-DsPLMzy1.mjs} +2 -2
- package/dist/{renderer-_iMAO698.mjs.map → renderer-DsPLMzy1.mjs.map} +1 -1
- package/dist/{renderer-BAYTI6jj.mjs → renderer-Dswrn-yi.mjs} +4 -4
- package/dist/{renderer-BAYTI6jj.mjs.map → renderer-Dswrn-yi.mjs.map} +1 -1
- package/dist/renderer-DtCe9ouu.mjs +5 -0
- package/dist/{renderer-DXEWbnRF.mjs → renderer-DtCmG-tT.mjs} +4 -4
- package/dist/{renderer-DXEWbnRF.mjs.map → renderer-DtCmG-tT.mjs.map} +1 -1
- package/dist/{renderer-B39I6CQw.mjs → renderer-DxiF4O6X.mjs} +4 -4
- package/dist/{renderer-B39I6CQw.mjs.map → renderer-DxiF4O6X.mjs.map} +1 -1
- package/dist/{renderer-BAusZ6Vu.mjs → renderer-DxkvDAA6.mjs} +4 -4
- package/dist/{renderer-BAusZ6Vu.mjs.map → renderer-DxkvDAA6.mjs.map} +1 -1
- package/dist/{renderer-ktWXVYka.mjs → renderer-FFLnACY-.mjs} +6 -6
- package/dist/{renderer-ktWXVYka.mjs.map → renderer-FFLnACY-.mjs.map} +1 -1
- package/dist/{renderer-Lth37j17.mjs → renderer-H4CZt3Z5.mjs} +3 -3
- package/dist/{renderer-B-ur0Ej8.mjs → renderer-JASAZUyY.mjs} +4 -4
- package/dist/{renderer-B-ur0Ej8.mjs.map → renderer-JASAZUyY.mjs.map} +1 -1
- package/dist/renderer-Mg0kr9Fm.mjs +5 -0
- package/dist/{renderer-CCycwCEB.mjs → renderer-R2kLaNuR.mjs} +3 -3
- package/dist/{renderer-CCycwCEB.mjs.map → renderer-R2kLaNuR.mjs.map} +1 -1
- package/dist/renderer-T35PsSw5.mjs +5 -0
- package/dist/{renderer-cod5Ona9.mjs → renderer-fWW0bsVl.mjs} +3 -3
- package/dist/renderer-iSZ5NT-J.mjs +5 -0
- package/dist/{renderer-oKRF4A0M.mjs → renderer-jBKpX3Xg.mjs} +4 -4
- package/dist/{renderer-oKRF4A0M.mjs.map → renderer-jBKpX3Xg.mjs.map} +1 -1
- package/dist/{renderer-Xv6GfNUI.mjs → renderer-kFx1_MmK.mjs} +3 -3
- package/dist/{renderer-Xv6GfNUI.mjs.map → renderer-kFx1_MmK.mjs.map} +1 -1
- package/dist/{renderer-DbRZe0Re.mjs → renderer-muB4slsV.mjs} +5 -5
- package/dist/{renderer-DbRZe0Re.mjs.map → renderer-muB4slsV.mjs.map} +1 -1
- package/dist/renderer-nEmMjQ1a.mjs +5 -0
- package/dist/{renderer-CpUJBOfb.mjs → renderer-oiDoNzhv.mjs} +3 -3
- package/dist/renderer-pG1nyfjE.mjs +5 -0
- package/dist/{renderer-BX7jS14r.d.mts → renderer-tcypOFaB.d.mts} +23 -4
- package/dist/renderer-tcypOFaB.d.mts.map +1 -0
- package/dist/{renderer-CiQhD8Gg.mjs → renderer-vPxMXiv8.mjs} +5 -5
- package/dist/{renderer-CiQhD8Gg.mjs.map → renderer-vPxMXiv8.mjs.map} +1 -1
- package/dist/renderer-vbb9e3E3.mjs +5 -0
- package/dist/{renderer-D8bBHrWC.mjs → renderer-vpsU_4XW.mjs} +5 -5
- package/dist/{renderer-D8bBHrWC.mjs.map → renderer-vpsU_4XW.mjs.map} +1 -1
- package/dist/{renderer-DiY70S8S.mjs → renderer-w7mlMSC-.mjs} +4 -4
- package/dist/{renderer-DiY70S8S.mjs.map → renderer-w7mlMSC-.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs → renderers-CP8CFWDs-OgyUiyrr.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs.map → renderers-CP8CFWDs-OgyUiyrr.mjs.map} +1 -1
- package/dist/sam/index.d.mts +4 -0
- package/dist/sam/index.mjs +3 -0
- package/dist/signals/index.d.mts +7 -6
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-CXwgAUp-.mjs → signals-BfJ1aqpT.mjs} +4 -4
- package/dist/{signals-CXwgAUp-.mjs.map → signals-BfJ1aqpT.mjs.map} +1 -1
- package/dist/{renderer-B2P1vgb7.mjs → src-BU6vm9sP-DFJ3phW0.mjs} +81 -1016
- package/dist/src-BU6vm9sP-DFJ3phW0.mjs.map +1 -0
- package/dist/{src-DFEqficI.mjs → src-C3f3zXYg.mjs} +251 -37
- package/dist/src-C3f3zXYg.mjs.map +1 -0
- package/package.json +75 -69
- package/dist/audio-Ccpl9mjV.d.mts.map +0 -1
- package/dist/dist-C1cCW7Bt.mjs.map +0 -1
- package/dist/dist-DVMepKaO.mjs.map +0 -1
- package/dist/gpu-CMaa63nz.mjs.map +0 -1
- package/dist/index-Bnh42ouE.d.mts.map +0 -1
- package/dist/index-CJL0JAU8.d.mts.map +0 -1
- package/dist/index-CQ-bbZk3.d.mts.map +0 -1
- package/dist/index-D5UDyVMb.d.mts.map +0 -1
- package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
- package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
- package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
- package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
- package/dist/preview-engine/chunk-FKG27DVO.mjs +0 -4
- package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
- package/dist/preview-engine/chunk-KXLXP66K.mjs +0 -1974
- package/dist/preview-engine/chunk-MIEH74UH.mjs +0 -480
- package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
- package/dist/preview-engine/renderers-3BOQOUEU.mjs +0 -1
- package/dist/preview-engine/renderers-3M2FESR2.mjs +0 -1
- package/dist/preview-engine/renderers-6LHIWKMZ.mjs +0 -1
- package/dist/preview-engine/renderers-7XHO6M3B.mjs +0 -228
- package/dist/preview-engine/renderers-A43VCJ7X.mjs +0 -1
- package/dist/preview-engine/renderers-AKY464RY.mjs +0 -1
- package/dist/preview-engine/renderers-C5UO6PL5.mjs +0 -1
- package/dist/preview-engine/renderers-C64QSZO4.mjs +0 -1
- package/dist/preview-engine/renderers-CIRCR6NG.mjs +0 -1
- package/dist/preview-engine/renderers-CIWOPETY.mjs +0 -1
- package/dist/preview-engine/renderers-CZEZCELP.mjs +0 -1
- package/dist/preview-engine/renderers-FSQMWHQM.mjs +0 -1
- package/dist/preview-engine/renderers-FZEW5C23.mjs +0 -1
- package/dist/preview-engine/renderers-HCET2IML.mjs +0 -1
- package/dist/preview-engine/renderers-IUOOC6K7.mjs +0 -1
- package/dist/preview-engine/renderers-KYYJLVIJ.mjs +0 -1
- package/dist/preview-engine/renderers-L4GE7WV3.mjs +0 -1
- package/dist/preview-engine/renderers-LRAFWKCO.mjs +0 -1
- package/dist/preview-engine/renderers-LU3XZWEB.mjs +0 -1
- package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
- package/dist/preview-engine/renderers-ND2WV4K3.mjs +0 -1
- package/dist/preview-engine/renderers-NJ5CWVVH.mjs +0 -1
- package/dist/preview-engine/renderers-NKXYPR3V.mjs +0 -1
- package/dist/preview-engine/renderers-NWR66CGK.mjs +0 -1
- package/dist/preview-engine/renderers-O22WTBRM.mjs +0 -1
- package/dist/preview-engine/renderers-PBBA7LQB.mjs +0 -1
- package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +0 -1
- package/dist/preview-engine/renderers-RMEACSRL.mjs +0 -1
- package/dist/preview-engine/renderers-SP42LCSI.mjs +0 -1
- package/dist/preview-engine/renderers-T7SZA3BX.mjs +0 -1
- package/dist/preview-engine/renderers-VADTDAHD.mjs +0 -1
- package/dist/preview-engine/renderers-VNNWI5C3.mjs +0 -1
- package/dist/preview-engine/renderers-WZ75MLP3.mjs +0 -1
- package/dist/preview-engine/renderers-XB5R4UQA.mjs +0 -1
- package/dist/preview-engine/renderers-YBIUZDGQ.mjs +0 -1
- package/dist/preview-engine/renderers-YESJR4O7.mjs +0 -1
- package/dist/preview-engine/renderers-YKSRZRRT.mjs +0 -1
- package/dist/program-CKpKkllV.mjs.map +0 -1
- package/dist/renderer--Ac-dg4A.mjs +0 -5
- package/dist/renderer--N7TMqzU.mjs +0 -5
- package/dist/renderer-2ecmdOae.mjs +0 -5
- package/dist/renderer-B2P1vgb7.mjs.map +0 -1
- package/dist/renderer-B5RJp5g-.mjs +0 -5
- package/dist/renderer-B7xyT1Vb.mjs +0 -5
- package/dist/renderer-BBeArN_x.mjs +0 -5
- package/dist/renderer-BCAZDu-r.mjs +0 -5
- package/dist/renderer-BJnhik7Y.mjs +0 -5
- package/dist/renderer-BX7jS14r.d.mts.map +0 -1
- package/dist/renderer-BgO6BA_z.mjs.map +0 -1
- package/dist/renderer-BxRW8MZO.mjs +0 -5
- package/dist/renderer-C-lfsEAN.mjs +0 -5
- package/dist/renderer-C41U1tK6.mjs.map +0 -1
- package/dist/renderer-C6nOFN4-.mjs +0 -5
- package/dist/renderer-C84TSQmS.mjs +0 -5
- package/dist/renderer-C8_6YofT.mjs +0 -5
- package/dist/renderer-COb3tOPG.mjs +0 -5
- package/dist/renderer-CSCIzaLy.mjs +0 -5
- package/dist/renderer-CmI4c8MS.mjs +0 -5
- package/dist/renderer-CqVltdX9.mjs +0 -5
- package/dist/renderer-D-FpMzLY.mjs +0 -5
- package/dist/renderer-D-Oyn9mG.mjs +0 -5
- package/dist/renderer-D2QrkA8_.mjs +0 -5
- package/dist/renderer-D5bjOx83.mjs +0 -3
- package/dist/renderer-D64r4iN-.mjs +0 -5
- package/dist/renderer-DCq6YkgP.mjs +0 -5
- package/dist/renderer-DDHG3GdR.mjs +0 -5
- package/dist/renderer-DMdNfcud.mjs +0 -6
- package/dist/renderer-DPAD6fL1.mjs.map +0 -1
- package/dist/renderer-DZQXZ4lK.mjs +0 -5
- package/dist/renderer-DczJJLA1.mjs +0 -5
- package/dist/renderer-DfqJj9oe.mjs +0 -5
- package/dist/renderer-DgO9ihVJ.mjs +0 -5
- package/dist/renderer-DhgnQZYb.mjs +0 -5
- package/dist/renderer-DjxKjHMf.mjs +0 -5
- package/dist/renderer-DnRDW2Oz.mjs +0 -3
- package/dist/renderer-DqLA5cdR.mjs +0 -5
- package/dist/renderer-Dudp6ZlH.mjs +0 -5
- package/dist/renderer-SSBL4M1o.mjs.map +0 -1
- package/dist/renderer-_jC5KIT1.mjs +0 -5
- package/dist/renderer-cTgAuVmJ.mjs +0 -5
- package/dist/renderer-nVKDvDLO.mjs +0 -5
- package/dist/renderer-pZ6_pUo1.mjs +0 -5
- package/dist/src-DFEqficI.mjs.map +0 -1
- /package/dist/{chunk-BcJoO4Nm.mjs → chunk-W71TSjRM.mjs} +0 -0
- /package/dist/{renderer-COqFNSfV.mjs → renderer-B6rZUBwE.mjs} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import "./chunk-W71TSjRM.mjs";
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
3
|
+
import "./dist-C4Vxgm0Q.mjs";
|
|
4
|
+
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bw35AMwY.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs
|
|
7
7
|
const COLOR_SPACE_MAP = {
|
|
@@ -203,4 +203,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURe
|
|
|
203
203
|
|
|
204
204
|
//#endregion
|
|
205
205
|
export { ChannelSplitterWebGPURenderer, renderers_default as default };
|
|
206
|
-
//# sourceMappingURL=renderer-
|
|
206
|
+
//# sourceMappingURL=renderer-D_rEtJAH.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-D_rEtJAH.mjs","names":[],"sources":["../../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_SPLITTER = `\nstruct SplitterUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\tchannelIndex : f32, // 0=Ch1, 1=Ch2, 2=Ch3, 3=Ch4\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SplitterUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn srgb2lin(v: f32) -> f32 {\n\tlet cv = clamp(v, 0.0, 1.0);\n\treturn select(cv / 12.92, pow((cv + 0.055) / 1.055, 2.4), cv > 0.04045);\n}\n\nfn lab_f(t: f32) -> f32 {\n\treturn select(pow(t, 1.0 / 3.0), (7.787 * t) + (16.0 / 116.0), t <= 0.008856);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(srcTex, srcSamp, in.uv);\n\tlet cs = u32(u.colorSpace + 0.5);\n\tlet idx = u32(u.channelIndex + 0.5);\n\n\tvar val: f32 = 0.0;\n\n\tif (cs == 0u) { // RGBA\n\t\tif (idx == 0u) { val = c.r; }\n\t\telse if (idx == 1u) { val = c.g; }\n\t\telse if (idx == 2u) { val = c.b; }\n\t\telse { val = c.a; }\n\t} else if (cs == 1u) { // HSLA\n\t\tlet maxV = max(c.r, max(c.g, c.b));\n\t\tlet minV = min(c.r, min(c.g, c.b));\n\t\tlet d = maxV - minV;\n\t\tlet L = (maxV + minV) * 0.5;\n\t\tlet S = select(select(d / (2.0 - maxV - minV), d / (maxV + minV), L < 0.5), 0.0, d < 0.00001);\n\t\tvar H: f32 = 0.0;\n\t\tif (d > 0.00001) {\n\t\t\tif (maxV == c.r) {\n\t\t\t\tH = ((c.g - c.b) / d + select(0.0, 6.0, c.g < c.b)) / 6.0;\n\t\t\t} else if (maxV == c.g) {\n\t\t\t\tH = ((c.b - c.r) / d + 2.0) / 6.0;\n\t\t\t} else {\n\t\t\t\tH = ((c.r - c.g) / d + 4.0) / 6.0;\n\t\t\t}\n\t\t}\n\t\tif (idx == 0u) { val = H; }\n\t\telse if (idx == 1u) { val = S; }\n\t\telse if (idx == 2u) { val = L; }\n\t\telse { val = c.a; }\n\t} else if (cs == 2u) { // CMYK\n\t\tlet K = 1.0 - max(c.r, max(c.g, c.b));\n\t\tif (K >= 1.0 - 0.00001) {\n\t\t\tval = select(0.0, 1.0, idx == 3u);\n\t\t} else {\n\t\t\tlet denom = 1.0 - K;\n\t\t\tif (idx == 0u) { val = (1.0 - c.r - K) / denom; }\n\t\t\telse if (idx == 1u) { val = (1.0 - c.g - K) / denom; }\n\t\t\telse if (idx == 2u) { val = (1.0 - c.b - K) / denom; }\n\t\t\telse { val = K; }\n\t\t}\n\t} else { // LAB\n\t\tlet lr = srgb2lin(c.r);\n\t\tlet lg = srgb2lin(c.g);\n\t\tlet lb = srgb2lin(c.b);\n\n\t\tlet X = lr * 0.4124564 + lg * 0.3575761 + lb * 0.1804375;\n\t\tlet Y = lr * 0.2126729 + lg * 0.7151522 + lb * 0.0721750;\n\t\tlet Z = lr * 0.0193339 + lg * 0.1191920 + lb * 0.9503041;\n\n\t\tlet x = X / 0.95047;\n\t\tlet y = Y / 1.00000;\n\t\tlet z = Z / 1.08883;\n\n\t\tlet fx = lab_f(x);\n\t\tlet fy = lab_f(y);\n\t\tlet fz = lab_f(z);\n\n\t\tlet L_star = 116.0 * fy - 16.0;\n\t\tlet a_star = 500.0 * (fx - fy);\n\t\tlet b_star = 200.0 * (fy - fz);\n\n\t\tlet L_norm = clamp(L_star / 100.0, 0.0, 1.0);\n\t\tlet a_norm = clamp((a_star + 128.0) / 255.0, 0.0, 1.0);\n\t\tlet b_norm = clamp((b_star + 128.0) / 255.0, 0.0, 1.0);\n\n\t\tif (idx == 0u) { val = L_norm; }\n\t\telse if (idx == 1u) { val = a_norm; }\n\t\telse if (idx == 2u) { val = b_norm; }\n\t\telse { val = c.a; }\n\t}\n\n\tval = clamp(val, 0.0, 1.0);\n\treturn vec4<f32>(val, val, val, 1.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `splitter_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelSplitterShader\",\n\t\t\tcode: WGSL_CHANNEL_SPLITTER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelSplitterPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelSplitterWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetTexture, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelSplitter\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst { view: srcView } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\targs.pass.end();\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst channelIndex = op.channelIndex ?? 0;\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = channelIndex;\n\tuniformData[2] = 0;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: srcView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURenderer });\n\n//#endregion\nexport { ChannelSplitterWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CBDMTYgr.mjs.map"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
1
|
+
import { n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
2
2
|
|
|
3
3
|
//#region ../../nodes/node-signal-gate/dist/renderer.mjs
|
|
4
4
|
var renderers_default = defineRenderer({});
|
|
5
5
|
|
|
6
6
|
//#endregion
|
|
7
7
|
export { renderers_default as t };
|
|
8
|
-
//# sourceMappingURL=renderer-
|
|
8
|
+
//# sourceMappingURL=renderer-Dak_wVh9.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-Dak_wVh9.mjs","names":[],"sources":["../../../nodes/node-signal-gate/dist/renderer.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({});\n\n//#endregion\nexport { renderers_default as default };\n//# sourceMappingURL=renderer.mjs.map"],"mappings":";;;AAGA,IAAI,oBAAoB,eAAe,EAAE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget,
|
|
1
|
+
import { c as resolveHandleParam, n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
2
|
+
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-CySGkG54.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTextureView, l as fragmentBindGroupLayout, m as texturesLayout, o as drawChildToTexture, p as signalTiming, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bw35AMwY.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-mask-math/dist/renderers-YQJYtdXA.mjs
|
|
@@ -585,4 +585,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
|
|
|
585
585
|
|
|
586
586
|
//#endregion
|
|
587
587
|
export { renderers_default as n, WebGPURenderer as t };
|
|
588
|
-
//# sourceMappingURL=renderer-
|
|
588
|
+
//# sourceMappingURL=renderer-Dd2XrdqA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DX41niRU.mjs","names":[],"sources":["../../../nodes/node-mask-math/dist/renderers-YQJYtdXA.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 200;\nconst MaskOperationEnum = z.enum([\n\t\"Union\",\n\t\"Intersect\",\n\t\"Subtract\",\n\t\"Difference\",\n\t\"Invert\",\n\t\"Dilate\",\n\t\"Erode\",\n\t\"Choke\",\n\t\"Feather\"\n]);\nconst MaskChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst MaskOutputFormatEnum = z.enum([\n\t\"WhiteWithAlpha\",\n\t\"GrayscaleRGB\",\n\t\"AlphaOnly\",\n\t\"PassthroughRGB\"\n]);\nconst maskMathConfig = configBuilder().field(\"operation\", MaskOperationEnum.default(\"Union\"), {\n\tlabel: \"Operation\",\n\tdescription: \"Morphological or Boolean set operation applied to input alpha masks.\"\n}).field(\"radius\", z.number().min(0).max(MAX_RADIUS).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius / Width (px)\",\n\tdescription: \"Kernel radius in pixels for Dilate, Erode, Choke, or Feather operations.\"\n}).field(\"threshold\", z.number().multipleOf(.01).min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Threshold\",\n\tdescription: \"Cutoff threshold level (0.0–1.0) for binarization step or non-linear choke.\"\n}).field(\"clampMin\", z.number().multipleOf(.01).min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Min\",\n\tdescription: \"Minimum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"clampMax\", z.number().multipleOf(.01).min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Max\",\n\tdescription: \"Maximum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"channelA\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask A Channel\",\n\tdescription: \"Source channel to extract mask from Mask A (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"channelB\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask B Channel\",\n\tdescription: \"Source channel to extract mask from Mask B (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"binarize\", z.boolean().default(false), {\n\tlabel: \"Binarize\",\n\tdescription: \"When enabled, outputs crisp 1-bit binary matte based on threshold.\"\n}).field(\"invertResult\", z.boolean().default(false), {\n\tlabel: \"Invert Result\",\n\tdescription: \"Inverts final matte output.\"\n}).field(\"outputFormat\", MaskOutputFormatEnum.default(\"WhiteWithAlpha\"), {\n\tlabel: \"Output Format\",\n\tdescription: \"WhiteWithAlpha (rgba(1,1,1,a)), GrayscaleRGB (rgba(a,a,a,1)), AlphaOnly (rgba(0,0,0,a)), PassthroughRGB (Mask A RGB with new alpha).\"\n}).build();\nconst MaskMathNodeConfigSchema = maskMathConfig.schema;\nconst MaskMathResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst MASK_MATH_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst OPERATION_MAP = {\n\tUnion: 0,\n\tIntersect: 1,\n\tSubtract: 2,\n\tDifference: 3,\n\tInvert: 4,\n\tDilate: 5,\n\tErode: 6,\n\tChoke: 7,\n\tFeather: 8\n};\nconst CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_FORMAT_MAP = {\n\tWhiteWithAlpha: 0,\n\tGrayscaleRGB: 1,\n\tAlphaOnly: 2,\n\tPassthroughRGB: 3\n};\nconst WGSL_MASKMATH = `\nstruct MaskMathUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tthreshold : f32,\n\n\tclampMin : f32,\n\tclampMax : f32,\n\toperation : f32,\n\tchannelA : f32,\n\n\tchannelB : f32,\n\tbinarize : f32,\n\tinvertResult : f32,\n\toutputFormat : f32,\n\n\thasMaskB : f32,\n\thasRadiusSig : f32,\n\thasThreshSig : f32,\n\thasClampMinSig : f32,\n\n\thasClampMaxSig : f32,\n\tisSecondPass : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskMathUniforms;\n\n@group(1) @binding(0) var texA : texture_2d<f32>;\n@group(1) @binding(1) var texB : texture_2d<f32>;\n@group(1) @binding(2) var origTexA : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var threshSigTex : texture_2d<f32>;\n@group(2) @binding(2) var clampMinSigTex : texture_2d<f32>;\n@group(2) @binding(3) var clampMaxSigTex : texture_2d<f32>;\n@group(2) @binding(4) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texA));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 200.0);\n\t}\n\tvar threshold = u.threshold;\n\tif (u.hasThreshSig > 0.5) {\n\t\tthreshold = clamp(textureSampleLevel(threshSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMin = u.clampMin;\n\tif (u.hasClampMinSig > 0.5) {\n\t\tclampMin = clamp(textureSampleLevel(clampMinSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMax = u.clampMax;\n\tif (u.hasClampMaxSig > 0.5) {\n\t\tclampMax = clamp(textureSampleLevel(clampMaxSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\n\tlet op = u.operation;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar val = 0.0;\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// -------------------------------------------------------------\n\t\t// PASS 1: Horizontal pass / Boolean operation\n\t\t// -------------------------------------------------------------\n\t\tlet sampleA = textureSampleLevel(texA, samp, in.uv, 0.0);\n\t\tlet sampleB = textureSampleLevel(texB, samp, in.uv, 0.0);\n\n\t\tlet a = extractChannel(sampleA, u.channelA);\n\t\tlet b = select(0.0, extractChannel(sampleB, u.channelB), u.hasMaskB > 0.5);\n\n\t\tif (op < 0.5) {\n\t\t\t// Union (A + B)\n\t\t\tval = select(a, clamp(a + b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 1.5) {\n\t\t\t// Intersect (min(A, B))\n\t\t\tval = select(a, min(a, b), u.hasMaskB > 0.5);\n\t\t} else if (op < 2.5) {\n\t\t\t// Subtract (clamp(A - B, 0, 1))\n\t\t\tval = select(a, clamp(a - b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 3.5) {\n\t\t\t// Difference (|A - B|)\n\t\t\tval = select(a, abs(a - b), u.hasMaskB > 0.5);\n\t\t} else if (op < 4.5) {\n\t\t\t// Invert (1 - A)\n\t\t\tval = 1.0 - a;\n\t\t} else if (op < 5.5) {\n\t\t\t// Dilate (Horizontal Max)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar maxVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tmaxVal = max(maxVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = maxVal;\n\t\t\t}\n\t\t} else if (op < 7.5) {\n\t\t\t// Erode & Choke (Horizontal Min)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar minVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tminVal = min(minVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = minVal;\n\t\t\t}\n\t\t} else {\n\t\t\t// Feather (Horizontal Gaussian Blur)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\t\tvar accum = 0.0;\n\t\t\t\tvar totalWeight = 0.0;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\taccum += extractChannel(s, u.channelA) * weight;\n\t\t\t\t\ttotalWeight += weight;\n\t\t\t\t}\n\t\t\t\tval = accum / max(totalWeight, 1e-5);\n\t\t\t}\n\t\t}\n\n\t\treturn vec4<f32>(val, val, val, val);\n\t}\n\n\t// -------------------------------------------------------------\n\t// PASS 2: Vertical pass & Post-processing (clamp, binarize, format)\n\t// -------------------------------------------------------------\n\tlet samplePass1 = textureSampleLevel(texA, samp, in.uv, 0.0);\n\tvar matte = samplePass1.r;\n\n\t// 1. Spatial kernel processing (Dilate, Erode, Choke, Feather) when radius > 0\n\tif (radius > 0.0) {\n\t\tif (op >= 4.5 && op < 5.5) {\n\t\t\t// Dilate (Vertical Max)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar maxVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tmaxVal = max(maxVal, s.r);\n\t\t\t}\n\t\t\tmatte = maxVal;\n\t\t} else if (op >= 5.5 && op < 7.5) {\n\t\t\t// Erode & Choke (Vertical Min)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar minVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tminVal = min(minVal, s.r);\n\t\t\t}\n\t\t\tmatte = minVal;\n\t\t} else if (op >= 7.5) {\n\t\t\t// Feather (Vertical Gaussian Blur)\n\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\tvar accum = 0.0;\n\t\t\tvar totalWeight = 0.0;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\taccum += s.r * weight;\n\t\t\t\ttotalWeight += weight;\n\t\t\t}\n\t\t\tmatte = accum / max(totalWeight, 1e-5);\n\t\t}\n\t}\n\n\t// 2. Choke non-linear threshold contraction curve (applies even if radius == 0)\n\tif (op >= 6.5 && op < 7.5) {\n\t\tlet threshRange = max(0.01, 1.0 - threshold);\n\t\tmatte = clamp((matte - threshold) / threshRange, 0.0, 1.0);\n\t}\n\n\t// Range clamping\n\tlet lowerLimit = min(clampMin, clampMax);\n\tlet upperLimit = max(clampMin, clampMax);\n\tmatte = clamp(matte, lowerLimit, upperLimit);\n\n\t// Optional Binarization\n\tif (u.binarize > 0.5) {\n\t\tmatte = select(0.0, 1.0, matte >= threshold);\n\t}\n\n\t// Optional Inversion\n\tif (u.invertResult > 0.5) {\n\t\tmatte = 1.0 - matte;\n\t}\n\n\t// Output format conversion\n\tlet fmt = u.outputFormat;\n\tif (fmt < 0.5) {\n\t\t// WhiteWithAlpha: vec4(matte, matte, matte, matte) (premultiplied standard mask)\n\t\treturn vec4<f32>(matte, matte, matte, matte);\n\t} else if (fmt < 1.5) {\n\t\t// GrayscaleRGB: vec4(matte, matte, matte, 1.0)\n\t\treturn vec4<f32>(matte, matte, matte, 1.0);\n\t} else if (fmt < 2.5) {\n\t\t// AlphaOnly: vec4(0.0, 0.0, 0.0, matte)\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, matte);\n\t} else {\n\t\t// PassthroughRGB: Mask A color with new alpha\n\t\tlet origCol = textureSampleLevel(origTexA, samp, in.uv, 0.0);\n\t\tif (origCol.a < 1e-4) {\n\t\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t}\n\t\tlet unpremult = origCol.rgb / origCol.a;\n\t\treturn vec4<f32>(unpremult * matte, matte);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskMathResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 3);\n\tconst signalTextureLayout = texturesLayout(device, 4);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_MASKMATH }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"MaskMath\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 0), 0, MAX_RADIUS);\n\tconst thresholdRes = resolveField(op.thresholdHandleId, Number(op.threshold ?? .5), 0, 1);\n\tconst clampMinRes = resolveField(op.clampMinHandleId, Number(op.clampMin ?? 0), 0, 1);\n\tconst clampMaxRes = resolveField(op.clampMaxHandleId, Number(op.clampMax ?? 1), 0, 1);\n\tconst { texture: tmpATex, view: tmpAView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-maskA`\n\t} });\n\tlet tmpBTex = null;\n\tif (op.maskBMedia) ({texture: tmpBTex} = await drawChildToTexture(args, op.maskBMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskBMedia,\n\t\t\trenderId: `${props.renderId}-maskB`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpATex]\n\t\t},\n\t\texclude: [tmpATex]\n\t}));\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getMaskMathResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, res.handleId ?? `${props.renderId ?? \"maskmath\"}_${suffix}`);\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst threshView = getSignalView(thresholdRes, \"threshold_sig\");\n\tconst clampMinView = getSignalView(clampMinRes, \"clampMin_sig\");\n\tconst clampMaxView = getSignalView(clampMaxRes, \"clampMax_sig\");\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: threshView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: clampMinView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: clampMaxView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst operationCode = OPERATION_MAP[op.operation ?? \"Union\"] ?? 0;\n\tconst channelACode = CHANNEL_MAP[op.channelA ?? \"Alpha\"] ?? 0;\n\tconst channelBCode = CHANNEL_MAP[op.channelB ?? \"Alpha\"] ?? 0;\n\tconst outputFormatCode = OUTPUT_FORMAT_MAP[op.outputFormat ?? \"WhiteWithAlpha\"] ?? 0;\n\tconst dummyBView = tmpBTex ? tmpBTex.createView() : tmpAView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tradiusRes.val,\n\t\tthresholdRes.val,\n\t\tclampMinRes.val,\n\t\tclampMaxRes.val,\n\t\toperationCode,\n\t\tchannelACode,\n\t\tchannelBCode,\n\t\top.binarize ? 1 : 0,\n\t\top.invertResult ? 1 : 0,\n\t\toutputFormatCode,\n\t\ttmpBTex ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tthresholdRes.hasStaticSig ? 1 : 0,\n\t\tclampMinRes.hasStaticSig ? 1 : 0,\n\t\tclampMaxRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[17] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[17] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyBView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: outTex1.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyBView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, props.opacity ?? op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MaskChannelEnum as a, MaskOperationEnum as c, MAX_RADIUS as i, MaskOutputFormatEnum as l, WebGPURenderer as n, MaskMathNodeConfigSchema as o, MASK_MATH_OUTPUT_TYPE_MAP as r, MaskMathResultSchema as s, renderers_default as t, maskMathConfig as u };\n//# sourceMappingURL=renderers-YQJYtdXA.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-Dd2XrdqA.mjs","names":[],"sources":["../../../nodes/node-mask-math/dist/renderers-YQJYtdXA.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 200;\nconst MaskOperationEnum = z.enum([\n\t\"Union\",\n\t\"Intersect\",\n\t\"Subtract\",\n\t\"Difference\",\n\t\"Invert\",\n\t\"Dilate\",\n\t\"Erode\",\n\t\"Choke\",\n\t\"Feather\"\n]);\nconst MaskChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst MaskOutputFormatEnum = z.enum([\n\t\"WhiteWithAlpha\",\n\t\"GrayscaleRGB\",\n\t\"AlphaOnly\",\n\t\"PassthroughRGB\"\n]);\nconst maskMathConfig = configBuilder().field(\"operation\", MaskOperationEnum.default(\"Union\"), {\n\tlabel: \"Operation\",\n\tdescription: \"Morphological or Boolean set operation applied to input alpha masks.\"\n}).field(\"radius\", z.number().min(0).max(MAX_RADIUS).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius / Width (px)\",\n\tdescription: \"Kernel radius in pixels for Dilate, Erode, Choke, or Feather operations.\"\n}).field(\"threshold\", z.number().multipleOf(.01).min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Threshold\",\n\tdescription: \"Cutoff threshold level (0.0–1.0) for binarization step or non-linear choke.\"\n}).field(\"clampMin\", z.number().multipleOf(.01).min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Min\",\n\tdescription: \"Minimum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"clampMax\", z.number().multipleOf(.01).min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Max\",\n\tdescription: \"Maximum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"channelA\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask A Channel\",\n\tdescription: \"Source channel to extract mask from Mask A (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"channelB\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask B Channel\",\n\tdescription: \"Source channel to extract mask from Mask B (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"binarize\", z.boolean().default(false), {\n\tlabel: \"Binarize\",\n\tdescription: \"When enabled, outputs crisp 1-bit binary matte based on threshold.\"\n}).field(\"invertResult\", z.boolean().default(false), {\n\tlabel: \"Invert Result\",\n\tdescription: \"Inverts final matte output.\"\n}).field(\"outputFormat\", MaskOutputFormatEnum.default(\"WhiteWithAlpha\"), {\n\tlabel: \"Output Format\",\n\tdescription: \"WhiteWithAlpha (rgba(1,1,1,a)), GrayscaleRGB (rgba(a,a,a,1)), AlphaOnly (rgba(0,0,0,a)), PassthroughRGB (Mask A RGB with new alpha).\"\n}).build();\nconst MaskMathNodeConfigSchema = maskMathConfig.schema;\nconst MaskMathResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst MASK_MATH_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst OPERATION_MAP = {\n\tUnion: 0,\n\tIntersect: 1,\n\tSubtract: 2,\n\tDifference: 3,\n\tInvert: 4,\n\tDilate: 5,\n\tErode: 6,\n\tChoke: 7,\n\tFeather: 8\n};\nconst CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_FORMAT_MAP = {\n\tWhiteWithAlpha: 0,\n\tGrayscaleRGB: 1,\n\tAlphaOnly: 2,\n\tPassthroughRGB: 3\n};\nconst WGSL_MASKMATH = `\nstruct MaskMathUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tthreshold : f32,\n\n\tclampMin : f32,\n\tclampMax : f32,\n\toperation : f32,\n\tchannelA : f32,\n\n\tchannelB : f32,\n\tbinarize : f32,\n\tinvertResult : f32,\n\toutputFormat : f32,\n\n\thasMaskB : f32,\n\thasRadiusSig : f32,\n\thasThreshSig : f32,\n\thasClampMinSig : f32,\n\n\thasClampMaxSig : f32,\n\tisSecondPass : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskMathUniforms;\n\n@group(1) @binding(0) var texA : texture_2d<f32>;\n@group(1) @binding(1) var texB : texture_2d<f32>;\n@group(1) @binding(2) var origTexA : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var threshSigTex : texture_2d<f32>;\n@group(2) @binding(2) var clampMinSigTex : texture_2d<f32>;\n@group(2) @binding(3) var clampMaxSigTex : texture_2d<f32>;\n@group(2) @binding(4) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texA));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 200.0);\n\t}\n\tvar threshold = u.threshold;\n\tif (u.hasThreshSig > 0.5) {\n\t\tthreshold = clamp(textureSampleLevel(threshSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMin = u.clampMin;\n\tif (u.hasClampMinSig > 0.5) {\n\t\tclampMin = clamp(textureSampleLevel(clampMinSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMax = u.clampMax;\n\tif (u.hasClampMaxSig > 0.5) {\n\t\tclampMax = clamp(textureSampleLevel(clampMaxSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\n\tlet op = u.operation;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar val = 0.0;\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// -------------------------------------------------------------\n\t\t// PASS 1: Horizontal pass / Boolean operation\n\t\t// -------------------------------------------------------------\n\t\tlet sampleA = textureSampleLevel(texA, samp, in.uv, 0.0);\n\t\tlet sampleB = textureSampleLevel(texB, samp, in.uv, 0.0);\n\n\t\tlet a = extractChannel(sampleA, u.channelA);\n\t\tlet b = select(0.0, extractChannel(sampleB, u.channelB), u.hasMaskB > 0.5);\n\n\t\tif (op < 0.5) {\n\t\t\t// Union (A + B)\n\t\t\tval = select(a, clamp(a + b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 1.5) {\n\t\t\t// Intersect (min(A, B))\n\t\t\tval = select(a, min(a, b), u.hasMaskB > 0.5);\n\t\t} else if (op < 2.5) {\n\t\t\t// Subtract (clamp(A - B, 0, 1))\n\t\t\tval = select(a, clamp(a - b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 3.5) {\n\t\t\t// Difference (|A - B|)\n\t\t\tval = select(a, abs(a - b), u.hasMaskB > 0.5);\n\t\t} else if (op < 4.5) {\n\t\t\t// Invert (1 - A)\n\t\t\tval = 1.0 - a;\n\t\t} else if (op < 5.5) {\n\t\t\t// Dilate (Horizontal Max)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar maxVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tmaxVal = max(maxVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = maxVal;\n\t\t\t}\n\t\t} else if (op < 7.5) {\n\t\t\t// Erode & Choke (Horizontal Min)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar minVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tminVal = min(minVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = minVal;\n\t\t\t}\n\t\t} else {\n\t\t\t// Feather (Horizontal Gaussian Blur)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\t\tvar accum = 0.0;\n\t\t\t\tvar totalWeight = 0.0;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\taccum += extractChannel(s, u.channelA) * weight;\n\t\t\t\t\ttotalWeight += weight;\n\t\t\t\t}\n\t\t\t\tval = accum / max(totalWeight, 1e-5);\n\t\t\t}\n\t\t}\n\n\t\treturn vec4<f32>(val, val, val, val);\n\t}\n\n\t// -------------------------------------------------------------\n\t// PASS 2: Vertical pass & Post-processing (clamp, binarize, format)\n\t// -------------------------------------------------------------\n\tlet samplePass1 = textureSampleLevel(texA, samp, in.uv, 0.0);\n\tvar matte = samplePass1.r;\n\n\t// 1. Spatial kernel processing (Dilate, Erode, Choke, Feather) when radius > 0\n\tif (radius > 0.0) {\n\t\tif (op >= 4.5 && op < 5.5) {\n\t\t\t// Dilate (Vertical Max)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar maxVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tmaxVal = max(maxVal, s.r);\n\t\t\t}\n\t\t\tmatte = maxVal;\n\t\t} else if (op >= 5.5 && op < 7.5) {\n\t\t\t// Erode & Choke (Vertical Min)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar minVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tminVal = min(minVal, s.r);\n\t\t\t}\n\t\t\tmatte = minVal;\n\t\t} else if (op >= 7.5) {\n\t\t\t// Feather (Vertical Gaussian Blur)\n\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\tvar accum = 0.0;\n\t\t\tvar totalWeight = 0.0;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\taccum += s.r * weight;\n\t\t\t\ttotalWeight += weight;\n\t\t\t}\n\t\t\tmatte = accum / max(totalWeight, 1e-5);\n\t\t}\n\t}\n\n\t// 2. Choke non-linear threshold contraction curve (applies even if radius == 0)\n\tif (op >= 6.5 && op < 7.5) {\n\t\tlet threshRange = max(0.01, 1.0 - threshold);\n\t\tmatte = clamp((matte - threshold) / threshRange, 0.0, 1.0);\n\t}\n\n\t// Range clamping\n\tlet lowerLimit = min(clampMin, clampMax);\n\tlet upperLimit = max(clampMin, clampMax);\n\tmatte = clamp(matte, lowerLimit, upperLimit);\n\n\t// Optional Binarization\n\tif (u.binarize > 0.5) {\n\t\tmatte = select(0.0, 1.0, matte >= threshold);\n\t}\n\n\t// Optional Inversion\n\tif (u.invertResult > 0.5) {\n\t\tmatte = 1.0 - matte;\n\t}\n\n\t// Output format conversion\n\tlet fmt = u.outputFormat;\n\tif (fmt < 0.5) {\n\t\t// WhiteWithAlpha: vec4(matte, matte, matte, matte) (premultiplied standard mask)\n\t\treturn vec4<f32>(matte, matte, matte, matte);\n\t} else if (fmt < 1.5) {\n\t\t// GrayscaleRGB: vec4(matte, matte, matte, 1.0)\n\t\treturn vec4<f32>(matte, matte, matte, 1.0);\n\t} else if (fmt < 2.5) {\n\t\t// AlphaOnly: vec4(0.0, 0.0, 0.0, matte)\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, matte);\n\t} else {\n\t\t// PassthroughRGB: Mask A color with new alpha\n\t\tlet origCol = textureSampleLevel(origTexA, samp, in.uv, 0.0);\n\t\tif (origCol.a < 1e-4) {\n\t\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t}\n\t\tlet unpremult = origCol.rgb / origCol.a;\n\t\treturn vec4<f32>(unpremult * matte, matte);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskMathResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 3);\n\tconst signalTextureLayout = texturesLayout(device, 4);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_MASKMATH }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"MaskMath\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 0), 0, MAX_RADIUS);\n\tconst thresholdRes = resolveField(op.thresholdHandleId, Number(op.threshold ?? .5), 0, 1);\n\tconst clampMinRes = resolveField(op.clampMinHandleId, Number(op.clampMin ?? 0), 0, 1);\n\tconst clampMaxRes = resolveField(op.clampMaxHandleId, Number(op.clampMax ?? 1), 0, 1);\n\tconst { texture: tmpATex, view: tmpAView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-maskA`\n\t} });\n\tlet tmpBTex = null;\n\tif (op.maskBMedia) ({texture: tmpBTex} = await drawChildToTexture(args, op.maskBMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskBMedia,\n\t\t\trenderId: `${props.renderId}-maskB`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpATex]\n\t\t},\n\t\texclude: [tmpATex]\n\t}));\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getMaskMathResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, res.handleId ?? `${props.renderId ?? \"maskmath\"}_${suffix}`);\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst threshView = getSignalView(thresholdRes, \"threshold_sig\");\n\tconst clampMinView = getSignalView(clampMinRes, \"clampMin_sig\");\n\tconst clampMaxView = getSignalView(clampMaxRes, \"clampMax_sig\");\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: threshView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: clampMinView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: clampMaxView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst operationCode = OPERATION_MAP[op.operation ?? \"Union\"] ?? 0;\n\tconst channelACode = CHANNEL_MAP[op.channelA ?? \"Alpha\"] ?? 0;\n\tconst channelBCode = CHANNEL_MAP[op.channelB ?? \"Alpha\"] ?? 0;\n\tconst outputFormatCode = OUTPUT_FORMAT_MAP[op.outputFormat ?? \"WhiteWithAlpha\"] ?? 0;\n\tconst dummyBView = tmpBTex ? tmpBTex.createView() : tmpAView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tradiusRes.val,\n\t\tthresholdRes.val,\n\t\tclampMinRes.val,\n\t\tclampMaxRes.val,\n\t\toperationCode,\n\t\tchannelACode,\n\t\tchannelBCode,\n\t\top.binarize ? 1 : 0,\n\t\top.invertResult ? 1 : 0,\n\t\toutputFormatCode,\n\t\ttmpBTex ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tthresholdRes.hasStaticSig ? 1 : 0,\n\t\tclampMinRes.hasStaticSig ? 1 : 0,\n\t\tclampMaxRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[17] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[17] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyBView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: outTex1.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyBView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpAView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, props.opacity ?? op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MaskChannelEnum as a, MaskOperationEnum as c, MAX_RADIUS as i, MaskOutputFormatEnum as l, WebGPURenderer as n, MaskMathNodeConfigSchema as o, MASK_MATH_OUTPUT_TYPE_MAP as r, MaskMathResultSchema as s, renderers_default as t, maskMathConfig as u };\n//# sourceMappingURL=renderers-YQJYtdXA.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
2
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import { n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bw35AMwY.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs
|
|
5
5
|
const easeIn = (t) => t * t;
|
|
@@ -261,4 +261,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer
|
|
|
261
261
|
|
|
262
262
|
//#endregion
|
|
263
263
|
export { renderers_default as t };
|
|
264
|
-
//# sourceMappingURL=renderer-
|
|
264
|
+
//# sourceMappingURL=renderer-Dih1rtT6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-1r-Uq-Ae.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-Dih1rtT6.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget,
|
|
1
|
+
import { d as unwrapFrameParam, n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTextureView, l as fragmentBindGroupLayout, m as texturesLayout, o as drawChildToTexture, p as signalTiming, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bw35AMwY.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.mjs
|
|
5
5
|
const TILE_OFFSET_SHADER = `
|
|
@@ -206,4 +206,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TileOffsetWebGPURendere
|
|
|
206
206
|
|
|
207
207
|
//#endregion
|
|
208
208
|
export { renderers_default as t };
|
|
209
|
-
//# sourceMappingURL=renderer-
|
|
209
|
+
//# sourceMappingURL=renderer-DjiebKHO.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BXJXziIt.mjs","names":[],"sources":["../../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst TILE_OFFSET_SHADER = `\nstruct TileOffsetUniforms {\n offsetX : f32,\n offsetY : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n layerWidth : f32,\n layerHeight : f32,\n edgeMode : f32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TileOffsetUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var offX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n let sigX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offX = offX + sigX;\n }\n\n var offY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n let sigY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offY = offY + sigY;\n }\n\n let normOffset = vec2<f32>(\n offX / max(1.0, u.layerWidth),\n offY / max(1.0, u.layerHeight)\n );\n var uv = in.uv - normOffset;\n\n // Edge Modes:\n // 0.0 = wrap (seamless modulo)\n // 1.0 = clamp (edge smear)\n // 2.0 = transparent (clear bounds)\n // 3.0 = mirror (ping-pong reflection)\n if (u.edgeMode < 0.5) {\n uv = fract(uv);\n } else if (u.edgeMode < 1.5) {\n uv = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n } else if (u.edgeMode < 2.5) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4<f32>(0.0);\n }\n } else {\n uv = 1.0 - abs(fract(uv * 0.5) * 2.0 - 1.0);\n }\n\n let color = textureSampleLevel(tex, samp, uv, 0.0);\n return color;\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getTileOffsetResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `tile_offset_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `tile_offset_${format}.wgsl`,\n\t\t\tcode: TILE_OFFSET_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `TileOffsetPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst TileOffsetWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"TileOffset\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"tile_offset_node\";\n\tconst resolveBindable = (configKey, defaultValue) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Number(input.outputItem.data ?? defaultValue);\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = isNaN(numVal) ? defaultValue : numVal;\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Number(sd.offset ?? 0);\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst offsetXRes = resolveBindable(\"offsetX\", 0);\n\tconst offsetYRes = resolveBindable(\"offsetY\", 0);\n\tlet edgeModeIndex = 0;\n\tconst edgeMode = op.edgeMode ?? (op.wrap !== false ? \"wrap\" : \"transparent\");\n\tif (edgeMode === \"clamp\") edgeModeIndex = 1;\n\telse if (edgeMode === \"transparent\" || op.wrap === false) edgeModeIndex = 2;\n\telse if (edgeMode === \"mirror\") edgeModeIndex = 3;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getTileOffsetResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\tuniformData[0] = offsetXRes.val;\n\tuniformData[1] = offsetYRes.val;\n\tuniformData[2] = offsetXRes.hasStaticSig ? 1 : 0;\n\tuniformData[3] = offsetYRes.hasStaticSig ? 1 : 0;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = edgeModeIndex;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\nconst WebGPURenderer = TileOffsetWebGPURenderer;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DQJJPfSd.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DjiebKHO.mjs","names":[],"sources":["../../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst TILE_OFFSET_SHADER = `\nstruct TileOffsetUniforms {\n offsetX : f32,\n offsetY : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n layerWidth : f32,\n layerHeight : f32,\n edgeMode : f32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TileOffsetUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var offX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n let sigX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offX = offX + sigX;\n }\n\n var offY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n let sigY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offY = offY + sigY;\n }\n\n let normOffset = vec2<f32>(\n offX / max(1.0, u.layerWidth),\n offY / max(1.0, u.layerHeight)\n );\n var uv = in.uv - normOffset;\n\n // Edge Modes:\n // 0.0 = wrap (seamless modulo)\n // 1.0 = clamp (edge smear)\n // 2.0 = transparent (clear bounds)\n // 3.0 = mirror (ping-pong reflection)\n if (u.edgeMode < 0.5) {\n uv = fract(uv);\n } else if (u.edgeMode < 1.5) {\n uv = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n } else if (u.edgeMode < 2.5) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4<f32>(0.0);\n }\n } else {\n uv = 1.0 - abs(fract(uv * 0.5) * 2.0 - 1.0);\n }\n\n let color = textureSampleLevel(tex, samp, uv, 0.0);\n return color;\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getTileOffsetResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `tile_offset_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `tile_offset_${format}.wgsl`,\n\t\t\tcode: TILE_OFFSET_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `TileOffsetPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst TileOffsetWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"TileOffset\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"tile_offset_node\";\n\tconst resolveBindable = (configKey, defaultValue) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Number(input.outputItem.data ?? defaultValue);\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = isNaN(numVal) ? defaultValue : numVal;\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Number(sd.offset ?? 0);\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst offsetXRes = resolveBindable(\"offsetX\", 0);\n\tconst offsetYRes = resolveBindable(\"offsetY\", 0);\n\tlet edgeModeIndex = 0;\n\tconst edgeMode = op.edgeMode ?? (op.wrap !== false ? \"wrap\" : \"transparent\");\n\tif (edgeMode === \"clamp\") edgeModeIndex = 1;\n\telse if (edgeMode === \"transparent\" || op.wrap === false) edgeModeIndex = 2;\n\telse if (edgeMode === \"mirror\") edgeModeIndex = 3;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getTileOffsetResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\tuniformData[0] = offsetXRes.val;\n\tuniformData[1] = offsetYRes.val;\n\tuniformData[2] = offsetXRes.hasStaticSig ? 1 : 0;\n\tuniformData[3] = offsetYRes.hasStaticSig ? 1 : 0;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = edgeModeIndex;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\nconst WebGPURenderer = TileOffsetWebGPURenderer;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DQJJPfSd.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
1
|
+
import "./chunk-W71TSjRM.mjs";
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
3
|
+
import "./dist-C4Vxgm0Q.mjs";
|
|
4
|
+
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bw35AMwY.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-iridescence/dist/renderers-qgYExzH6.mjs
|
|
7
7
|
const OP = "Iridescence";
|
|
@@ -200,4 +200,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: IridescenceWebGPURender
|
|
|
200
200
|
|
|
201
201
|
//#endregion
|
|
202
202
|
export { IridescenceWebGPURenderer, renderers_default as default };
|
|
203
|
-
//# sourceMappingURL=renderer-
|
|
203
|
+
//# sourceMappingURL=renderer-DkAFIpzB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DkAFIpzB.mjs","names":[],"sources":["../../../nodes/node-iridescence/dist/renderers-qgYExzH6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Iridescence\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet strength = u.v[1].x;\n\tlet scale = u.v[1].y;\n\tlet shift = u.v[1].z;\n\tlet mode = u32(u.v[1].w + 0.5);\n\n\tlet R = res();\n\tlet c = sampleS(in.uv);\n\tlet l = luma(c.rgb);\n\tvar phase = l;\n\tvar amount = strength;\n\tif (mode == 1u) {\n\t\tlet o = 5.0 / R;\n\t\tlet gx = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb) - luma(sampleS(in.uv - vec2<f32>(o.x, 0.0)).rgb);\n\t\tlet gy = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb) - luma(sampleS(in.uv - vec2<f32>(0.0, o.y)).rgb);\n\t\tlet n = normalize(vec3<f32>(-gx * 3.0, -gy * 3.0, 1.0));\n\t\tlet slope = 1.0 - n.z;\n\t\tphase = slope * 3.0 + l * 0.6 + in.uv.x * 0.4 + in.uv.y * 0.3;\n\t\tamount = strength * clamp(0.3 + slope * 6.0, 0.0, 1.0);\n\t}\n\tphase = phase * scale + shift / 360.0;\n\tlet rainbow = 0.5 + 0.5 * cos(6.2831853 * (phase + vec3<f32>(0.0, 0.33, 0.67)));\n\tlet screened = vec3<f32>(1.0) - (vec3<f32>(1.0) - c.rgb) * (vec3<f32>(1.0) - rainbow * 0.85);\n\treturn premul(vec4<f32>(mix(c.rgb, screened, amount), c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.strength, .6);\n\tdata[5] = num(raw.scale, 2);\n\tdata[6] = num(raw.shift, 0);\n\tdata[7] = Math.max(0, [\"luminance\", \"relief\"].indexOf(String(raw.mode ?? \"relief\")));\n}\nconst IridescenceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: IridescenceWebGPURenderer });\n\n//#endregion\nexport { IridescenceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-qgYExzH6.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
1
|
+
import "./chunk-W71TSjRM.mjs";
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BOg8i8eF.mjs";
|
|
3
|
+
import "./dist-C4Vxgm0Q.mjs";
|
|
4
|
+
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bw35AMwY.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-trails/dist/renderers-C37o-6Mg.mjs
|
|
7
7
|
const HISTORY_FORMAT = "rgba16float";
|
|
@@ -212,4 +212,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer })
|
|
|
212
212
|
|
|
213
213
|
//#endregion
|
|
214
214
|
export { TrailsWebGPURenderer, renderers_default as default };
|
|
215
|
-
//# sourceMappingURL=renderer-
|
|
215
|
+
//# sourceMappingURL=renderer-DlbSqOJR.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DDEkFbVI.mjs","names":[],"sources":["../../../nodes/node-trails/dist/renderers-C37o-6Mg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst TRAILS_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var historyTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// Hue rotation in YIQ: linear, so it works on premultiplied color.\nfn hueRotate(c : vec3<f32>, angle : f32) -> vec3<f32> {\n\tlet yiq = mat3x3<f32>(0.299, 0.596, 0.211, 0.587, -0.274, -0.523, 0.114, -0.322, 0.312) * c;\n\tlet cs = cos(angle);\n\tlet sn = sin(angle);\n\tlet rot = vec3<f32>(yiq.x, yiq.y * cs - yiq.z * sn, yiq.y * sn + yiq.z * cs);\n\treturn mat3x3<f32>(1.0, 1.0, 1.0, 0.956, -0.272, -1.106, 0.621, -0.647, 1.703) * rot;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet decay = u.a.x;\n\tlet mode = u.a.y;\n\tlet zoom = max(u.a.z, 1e-3);\n\tlet angle = u.a.w;\n\tlet offset = u.b.xy;\n\tlet hue = u.b.z;\n\tlet fresh = u.b.w;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (fresh > 0.5) { return cur; }\n\tlet c = in.uv - 0.5;\n\tlet cs = cos(-angle);\n\tlet sn = sin(-angle);\n\tlet src = vec2<f32>(c.x * cs - c.y * sn, c.x * sn + c.y * cs) / zoom + 0.5 - offset;\n\tvar hist = vec4<f32>(0.0);\n\tif (all(src >= vec2<f32>(0.0)) && all(src <= vec2<f32>(1.0))) {\n\t\thist = textureSampleLevel(historyTex, samp, src, 0.0);\n\t}\n\tif (hue != 0.0) { hist = vec4<f32>(max(hueRotate(hist.rgb, hue), vec3<f32>(0.0)), hist.a); }\n\thist *= decay;\n\tif (mode < 0.5) { return cur + hist * (1.0 - cur.a); }\n\tif (mode < 1.5) { return vec4<f32>(cur.rgb + hist.rgb, min(cur.a + hist.a, 1.0)); }\n\tif (mode < 2.5) { return max(cur, hist); }\n\t// blend: a running average, so opaque footage shows its own echoes.\n\treturn mix(cur, hist / max(decay, 1e-4), decay);\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"trails_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: TRAILS_WGSL,\n\t\tlabel: \"trails.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"trails\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\tconst make = (label) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: HISTORY_FORMAT,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"trails_front\"),\n\t\tback: make(\"trails_back\"),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [h.front, h.back],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepTrails(args, h, v, frame, compositionStart, fresh) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur) return;\n\tconst r = resources(args.ctx.device);\n\tconst uniforms = new Float32Array([\n\t\tv.decay,\n\t\t{\n\t\t\tover: 0,\n\t\t\tadd: 1,\n\t\t\tmax: 2,\n\t\t\tblend: 3\n\t\t}[v.mode] ?? 0,\n\t\tv.zoom,\n\t\tv.rotation * Math.PI / 180,\n\t\tv.offsetX / h.width,\n\t\tv.offsetY / h.height,\n\t\tv.hueShift * Math.PI / 180,\n\t\tfresh ? 1 : 0\n\t]);\n\tdrawFullscreenPass(args.encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst TrailsWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Trails\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight);\n\t{\n\t\tconst v = {\n\t\t\tdecay: Math.min(1, Math.max(0, num(raw.decay, .9))),\n\t\t\tmode: raw.mode ?? \"blend\",\n\t\t\tzoom: num(raw.zoom, 1),\n\t\t\trotation: num(raw.rotation, 0),\n\t\t\toffsetX: num(raw.offsetX, 0),\n\t\t\toffsetY: num(raw.offsetY, 0),\n\t\t\thueShift: num(raw.hueShift, 0),\n\t\t\twarmup: Math.max(0, Math.round(num(raw.warmup, 60)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame === local - 1) start = local;\n\t\t\telse {\n\t\t\t\tconst needed = v.decay > 0 && v.decay < 1 ? Math.ceil(Math.log(.005) / Math.log(v.decay)) : v.warmup;\n\t\t\t\tstart = Math.max(0, local - Math.min(v.warmup, needed));\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepTrails(args, h, v, f, compositionStart, h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer });\n\n//#endregion\nexport { TrailsWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C37o-6Mg.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DlbSqOJR.mjs","names":[],"sources":["../../../nodes/node-trails/dist/renderers-C37o-6Mg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst TRAILS_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var historyTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// Hue rotation in YIQ: linear, so it works on premultiplied color.\nfn hueRotate(c : vec3<f32>, angle : f32) -> vec3<f32> {\n\tlet yiq = mat3x3<f32>(0.299, 0.596, 0.211, 0.587, -0.274, -0.523, 0.114, -0.322, 0.312) * c;\n\tlet cs = cos(angle);\n\tlet sn = sin(angle);\n\tlet rot = vec3<f32>(yiq.x, yiq.y * cs - yiq.z * sn, yiq.y * sn + yiq.z * cs);\n\treturn mat3x3<f32>(1.0, 1.0, 1.0, 0.956, -0.272, -1.106, 0.621, -0.647, 1.703) * rot;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet decay = u.a.x;\n\tlet mode = u.a.y;\n\tlet zoom = max(u.a.z, 1e-3);\n\tlet angle = u.a.w;\n\tlet offset = u.b.xy;\n\tlet hue = u.b.z;\n\tlet fresh = u.b.w;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (fresh > 0.5) { return cur; }\n\tlet c = in.uv - 0.5;\n\tlet cs = cos(-angle);\n\tlet sn = sin(-angle);\n\tlet src = vec2<f32>(c.x * cs - c.y * sn, c.x * sn + c.y * cs) / zoom + 0.5 - offset;\n\tvar hist = vec4<f32>(0.0);\n\tif (all(src >= vec2<f32>(0.0)) && all(src <= vec2<f32>(1.0))) {\n\t\thist = textureSampleLevel(historyTex, samp, src, 0.0);\n\t}\n\tif (hue != 0.0) { hist = vec4<f32>(max(hueRotate(hist.rgb, hue), vec3<f32>(0.0)), hist.a); }\n\thist *= decay;\n\tif (mode < 0.5) { return cur + hist * (1.0 - cur.a); }\n\tif (mode < 1.5) { return vec4<f32>(cur.rgb + hist.rgb, min(cur.a + hist.a, 1.0)); }\n\tif (mode < 2.5) { return max(cur, hist); }\n\t// blend: a running average, so opaque footage shows its own echoes.\n\treturn mix(cur, hist / max(decay, 1e-4), decay);\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"trails_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: TRAILS_WGSL,\n\t\tlabel: \"trails.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"trails\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\tconst make = (label) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: HISTORY_FORMAT,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"trails_front\"),\n\t\tback: make(\"trails_back\"),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [h.front, h.back],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepTrails(args, h, v, frame, compositionStart, fresh) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur) return;\n\tconst r = resources(args.ctx.device);\n\tconst uniforms = new Float32Array([\n\t\tv.decay,\n\t\t{\n\t\t\tover: 0,\n\t\t\tadd: 1,\n\t\t\tmax: 2,\n\t\t\tblend: 3\n\t\t}[v.mode] ?? 0,\n\t\tv.zoom,\n\t\tv.rotation * Math.PI / 180,\n\t\tv.offsetX / h.width,\n\t\tv.offsetY / h.height,\n\t\tv.hueShift * Math.PI / 180,\n\t\tfresh ? 1 : 0\n\t]);\n\tdrawFullscreenPass(args.encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst TrailsWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Trails\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight);\n\t{\n\t\tconst v = {\n\t\t\tdecay: Math.min(1, Math.max(0, num(raw.decay, .9))),\n\t\t\tmode: raw.mode ?? \"blend\",\n\t\t\tzoom: num(raw.zoom, 1),\n\t\t\trotation: num(raw.rotation, 0),\n\t\t\toffsetX: num(raw.offsetX, 0),\n\t\t\toffsetY: num(raw.offsetY, 0),\n\t\t\thueShift: num(raw.hueShift, 0),\n\t\t\twarmup: Math.max(0, Math.round(num(raw.warmup, 60)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame === local - 1) start = local;\n\t\t\telse {\n\t\t\t\tconst needed = v.decay > 0 && v.decay < 1 ? Math.ceil(Math.log(.005) / Math.log(v.decay)) : v.warmup;\n\t\t\t\tstart = Math.max(0, local - Math.min(v.warmup, needed));\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepTrails(args, h, v, f, compositionStart, h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer });\n\n//#endregion\nexport { TrailsWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C37o-6Mg.mjs.map"],"mappings":"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"}
|