framefields 2.0.5 → 2.0.6
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/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-COkiXyDb.mjs → audio-D6enPyAG.mjs} +4 -4
- package/dist/{audio-COkiXyDb.mjs.map → audio-D6enPyAG.mjs.map} +1 -1
- package/dist/{audio-nmU-BWxI.d.mts → audio-a6pY05g2.d.mts} +3 -3
- package/dist/{audio-nmU-BWxI.d.mts.map → audio-a6pY05g2.d.mts.map} +1 -1
- package/dist/{dist-Bx6J0VcM.mjs → dist-B9Afsv83.mjs} +47 -2
- package/dist/dist-B9Afsv83.mjs.map +1 -0
- package/dist/{dist-DKm2IyEJ.mjs → dist-DzUJmIHt.mjs} +2 -2
- package/dist/dist-DzUJmIHt.mjs.map +1 -0
- package/dist/{dist-55MP0aN4.mjs → dist-JkiL-qy7.mjs} +3 -3
- package/dist/{dist-55MP0aN4.mjs.map → dist-JkiL-qy7.mjs.map} +1 -1
- package/dist/{dist-DgIKXWZ1.mjs → dist-sHqWCB9M.mjs} +156 -113
- package/dist/dist-sHqWCB9M.mjs.map +1 -0
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +25 -25
- package/dist/effects-l0T61DPU.mjs +2086 -0
- package/dist/effects-l0T61DPU.mjs.map +1 -0
- package/dist/fonts/index.mjs +1 -1
- package/dist/{fonts-C_AWIMdb.mjs → fonts-CuG-05-_.mjs} +2 -2
- package/dist/{fonts-C_AWIMdb.mjs.map → fonts-CuG-05-_.mjs.map} +1 -1
- package/dist/{index-Bx7JBFT6.d.mts → index-BJUS4Nx6.d.mts} +2 -2
- package/dist/{index-Bx7JBFT6.d.mts.map → index-BJUS4Nx6.d.mts.map} +1 -1
- package/dist/{index-C8rstr3Y.d.mts → index-BJx_Qxc_.d.mts} +2510 -125
- package/dist/{index-C8rstr3Y.d.mts.map → index-BJx_Qxc_.d.mts.map} +1 -1
- package/dist/{index-i0xPY4Fe.d.mts → index-BLbUQolI.d.mts} +3 -3
- package/dist/{index-i0xPY4Fe.d.mts.map → index-BLbUQolI.d.mts.map} +1 -1
- package/dist/{index-CAGDH7l6.d.mts → index-Bi2nRZ_g.d.mts} +3 -3
- package/dist/{index-CAGDH7l6.d.mts.map → index-Bi2nRZ_g.d.mts.map} +1 -1
- package/dist/{index-DY3mLoPO.d.mts → index-CZChQhXZ.d.mts} +2 -2
- package/dist/index-CZChQhXZ.d.mts.map +1 -0
- package/dist/{index-ogL8Y-Ng.d.mts → index-WIPHLy5m.d.mts} +23 -2
- package/dist/index-WIPHLy5m.d.mts.map +1 -0
- package/dist/index.d.mts +100 -69
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +47 -45
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-BM0Zzcn1.mjs → preview-CcooLR2s.mjs} +2 -2
- package/dist/{preview-BM0Zzcn1.mjs.map → preview-CcooLR2s.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-H5BPCY7N.mjs → chunk-24DXIKXL.mjs} +2 -2
- package/dist/preview-engine/{chunk-QP2NI4XD.mjs → chunk-2XXICKQV.mjs} +1 -1
- package/dist/preview-engine/{chunk-EDIZNO3P.mjs → chunk-3ROJ7JVY.mjs} +1 -1
- package/dist/preview-engine/{chunk-2RMSCL6V.mjs → chunk-5NYKHIQN.mjs} +10 -10
- package/dist/preview-engine/{chunk-VSSB73UU.mjs → chunk-66NVL4BN.mjs} +2 -2
- package/dist/preview-engine/{chunk-AOLAHYVV.mjs → chunk-6JW37VJA.mjs} +1 -1
- package/dist/preview-engine/chunk-7MJVROKR.mjs +98 -0
- package/dist/preview-engine/{chunk-Z4ERCLNF.mjs → chunk-7NVDTELW.mjs} +1 -1
- package/dist/preview-engine/{chunk-SXX7HX34.mjs → chunk-AMBSW6OA.mjs} +2 -2
- package/dist/preview-engine/{chunk-UDNCEHUI.mjs → chunk-BE3CEVJB.mjs} +1 -1
- package/dist/preview-engine/{chunk-CA5N7JRZ.mjs → chunk-BQ65MU6H.mjs} +1 -1
- package/dist/preview-engine/{chunk-LEEZXHQO.mjs → chunk-BWDARDO6.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZX6APG6E.mjs → chunk-CXFEQ5PM.mjs} +1 -1
- package/dist/preview-engine/chunk-D3TETPLI.mjs +5 -0
- package/dist/preview-engine/{chunk-B6PLCMBM.mjs → chunk-DMWSTYFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-6ZOXGAYA.mjs → chunk-EJTGJVUA.mjs} +2 -2
- package/dist/preview-engine/{chunk-3O5OKR6D.mjs → chunk-EQ4QZRXB.mjs} +2 -2
- package/dist/preview-engine/{chunk-I4FH6HYU.mjs → chunk-FE6RSVKZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-U446SQP3.mjs → chunk-GHMCGTJ2.mjs} +1 -1
- package/dist/preview-engine/{chunk-M2GRYRLM.mjs → chunk-HPIULG7P.mjs} +1 -1
- package/dist/preview-engine/{chunk-G3HW4VER.mjs → chunk-HRIKNYPF.mjs} +1 -1
- package/dist/preview-engine/{chunk-G76HSKOS.mjs → chunk-IGFT3XLN.mjs} +1 -1
- package/dist/preview-engine/{chunk-NWRSVVTF.mjs → chunk-JQ4WY6BZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-JWNHTRED.mjs → chunk-LIHUEYI5.mjs} +2 -2
- package/dist/preview-engine/{chunk-DPPH3NK2.mjs → chunk-NRHSNPZV.mjs} +1 -1
- package/dist/preview-engine/{chunk-BUIQ5TUH.mjs → chunk-OWOSYNMF.mjs} +1 -1
- package/dist/preview-engine/{chunk-7S6ZFYLI.mjs → chunk-OZVCWK27.mjs} +1 -1
- package/dist/preview-engine/{chunk-D5PHI6ET.mjs → chunk-PO4VAAQC.mjs} +1 -1
- package/dist/preview-engine/{chunk-LP3EP33S.mjs → chunk-POPVFC5P.mjs} +1 -1
- package/dist/preview-engine/chunk-PQD5UPHG.mjs +5 -0
- package/dist/preview-engine/{chunk-SA3JUR6D.mjs → chunk-QGBSLNFI.mjs} +1 -1
- package/dist/preview-engine/{chunk-H2F5NVQ6.mjs → chunk-QM3XFEJN.mjs} +1 -1
- package/dist/preview-engine/{chunk-L62MRHGZ.mjs → chunk-R3ZH7YF3.mjs} +1 -1
- package/dist/preview-engine/{chunk-V7ZVVUQU.mjs → chunk-R6YNSBKL.mjs} +1 -1
- package/dist/preview-engine/chunk-S3P3MJYU.mjs +1 -0
- package/dist/preview-engine/chunk-SUUUYXXT.mjs +1 -0
- package/dist/preview-engine/{chunk-55CCFPUX.mjs → chunk-TNZENER3.mjs} +1 -1
- package/dist/preview-engine/chunk-V6VU46ZG.mjs +52 -0
- package/dist/preview-engine/{chunk-5XDHHOF2.mjs → chunk-XCYFPA34.mjs} +1 -1
- package/dist/preview-engine/{chunk-EHIIT4ZR.mjs → chunk-XFYXT76H.mjs} +1 -1
- package/dist/preview-engine/{chunk-V3H7WWOT.mjs → chunk-XLFYM7KH.mjs} +2 -2
- package/dist/preview-engine/{chunk-D7MZHP2Y.mjs → chunk-XSMK5E2V.mjs} +1 -1
- package/dist/preview-engine/{chunk-5UP7FSGT.mjs → chunk-Y6FEU4TV.mjs} +1 -1
- package/dist/preview-engine/{chunk-HXMDPMLB.mjs → chunk-YG35X5R5.mjs} +1 -1
- package/dist/preview-engine/{chunk-KZOLCZIV.mjs → chunk-YITWSOG4.mjs} +1 -1
- package/dist/preview-engine/chunk-ZNGOAGAI.mjs +1 -0
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +24 -24
- package/dist/preview-engine/player.mjs +4 -4
- package/dist/preview-engine/renderers-3Y3EMRDJ.mjs +1 -0
- package/dist/preview-engine/renderers-47UITXLZ.mjs +1 -0
- package/dist/preview-engine/renderers-4AHH6BHF.mjs +1 -0
- package/dist/preview-engine/renderers-54AQK6RF.mjs +1 -0
- package/dist/preview-engine/renderers-6PRVCTYV.mjs +1 -0
- package/dist/preview-engine/{renderers-GUKQUMGG.mjs → renderers-B52QT6MT.mjs} +1 -1
- package/dist/preview-engine/{renderers-AGMH5CRH.mjs → renderers-BE6RVJSE.mjs} +1 -1
- package/dist/preview-engine/renderers-BMM2BH56.mjs +1 -0
- package/dist/preview-engine/{renderers-YWRP23SZ.mjs → renderers-CAUWP4XH.mjs} +2 -2
- package/dist/preview-engine/renderers-CHJWUJVI.mjs +1 -0
- package/dist/preview-engine/renderers-CHOGQHVQ.mjs +1 -0
- package/dist/preview-engine/renderers-DEYDSGJX.mjs +1 -0
- package/dist/preview-engine/renderers-DZTNRCR7.mjs +1 -0
- package/dist/preview-engine/{renderers-BHVPLYNN.mjs → renderers-E3JYRLSD.mjs} +1 -1
- package/dist/preview-engine/renderers-ELO3KWTK.mjs +1 -0
- package/dist/preview-engine/{renderers-YKUQUCTO.mjs → renderers-F2KJNDWA.mjs} +1 -1
- package/dist/preview-engine/renderers-FCV4COVB.mjs +1 -0
- package/dist/preview-engine/{renderers-F2NFJI5L.mjs → renderers-GC7EGB5Z.mjs} +1 -1
- package/dist/preview-engine/renderers-GXCRINGC.mjs +1 -0
- package/dist/preview-engine/renderers-GYJTBVV2.mjs +1 -0
- package/dist/preview-engine/renderers-JA4SLMG3.mjs +1 -0
- package/dist/preview-engine/renderers-JLN77CFZ.mjs +1 -0
- package/dist/preview-engine/{renderers-6BJA6MSU.mjs → renderers-JQHUBWLL.mjs} +1 -1
- package/dist/preview-engine/{renderers-LX654SZ3.mjs → renderers-KBFW7B5F.mjs} +1 -1
- package/dist/preview-engine/{renderers-LK3NRMGR.mjs → renderers-KCP4TFHG.mjs} +1 -1
- package/dist/preview-engine/renderers-KS4HPV6Q.mjs +1 -0
- package/dist/preview-engine/renderers-LJRJMFCR.mjs +1 -0
- package/dist/preview-engine/renderers-LPAPZ5QS.mjs +1 -0
- package/dist/preview-engine/renderers-N5UPJY73.mjs +1 -0
- package/dist/preview-engine/renderers-NS3AIJVG.mjs +1 -0
- package/dist/preview-engine/renderers-OBMTU3QY.mjs +1 -0
- package/dist/preview-engine/{renderers-ZPWOUWZJ.mjs → renderers-PW4OJWHF.mjs} +1 -1
- package/dist/preview-engine/renderers-PXGLEFZO.mjs +1 -0
- package/dist/preview-engine/{renderers-7AO5746S.mjs → renderers-Q2ZDD5K2.mjs} +1 -1
- package/dist/preview-engine/renderers-Q3MD34JN.mjs +1 -0
- package/dist/preview-engine/renderers-QECJP22T.mjs +1 -0
- package/dist/preview-engine/{renderers-LFA5NW4V.mjs → renderers-R5WSHETG.mjs} +4 -4
- package/dist/preview-engine/renderers-RXGNA2Q7.mjs +1 -0
- package/dist/preview-engine/renderers-TG62LZTF.mjs +1 -0
- package/dist/preview-engine/{renderers-AHSGP6LY.mjs → renderers-TUYQLKHJ.mjs} +1 -1
- package/dist/preview-engine/renderers-VTTGFO55.mjs +1 -0
- package/dist/preview-engine/{renderers-UTFXZE3G.mjs → renderers-WG7QBD4D.mjs} +1 -1
- package/dist/preview-engine/{renderers-VGU3LNLT.mjs → renderers-WLH4HRUE.mjs} +1 -1
- package/dist/preview-engine/{renderers-5QYK6766.mjs → renderers-WSMLLSWX.mjs} +1 -1
- package/dist/preview-engine/renderers-XFC6ZPO5.mjs +1 -0
- package/dist/preview-engine/{renderers-UWPH7HBH.mjs → renderers-XUHRY3XH.mjs} +1 -1
- package/dist/preview-engine/renderers-YAOB5XU6.mjs +1 -0
- package/dist/preview-engine/renderers-YTB4FOHT.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-DGqyGGvj.mjs → program-DPFDbeL9.mjs} +12 -7
- package/dist/{program-DGqyGGvj.mjs.map → program-DPFDbeL9.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-CXUohIJ9.mjs → renderer--akPySto.mjs} +2 -2
- package/dist/{renderer-CXUohIJ9.mjs.map → renderer--akPySto.mjs.map} +1 -1
- package/dist/{renderer-2r4EgfdZ.mjs → renderer-0ty5QtXg.mjs} +9 -8
- package/dist/renderer-0ty5QtXg.mjs.map +1 -0
- package/dist/renderer-145WIXyW.mjs +3 -0
- package/dist/{renderer-BJiL-BQY.mjs → renderer-7v-ZNKEJ.mjs} +2 -2
- package/dist/{renderer-BJiL-BQY.mjs.map → renderer-7v-ZNKEJ.mjs.map} +1 -1
- package/dist/renderer-9W8q4Y8D.mjs +3 -0
- package/dist/{renderer-QfSB-cRU.mjs → renderer-B1IXTeF2.mjs} +2 -2
- package/dist/{renderer-QfSB-cRU.mjs.map → renderer-B1IXTeF2.mjs.map} +1 -1
- package/dist/{renderer-CwAjqb2o.mjs → renderer-B52Y2SDC.mjs} +1 -1
- package/dist/renderer-B5HBViEG.mjs +3 -0
- package/dist/renderer-B7naoaVH.mjs +3 -0
- package/dist/{renderer-z6Qb5Z-W.mjs → renderer-BD6Jkc8j.mjs} +2 -2
- package/dist/{renderer-z6Qb5Z-W.mjs.map → renderer-BD6Jkc8j.mjs.map} +1 -1
- package/dist/renderer-BHYmRBem.mjs +3 -0
- package/dist/{renderer-CnRoblJF.mjs → renderer-BHsEOp1I.mjs} +2 -2
- package/dist/{renderer-CnRoblJF.mjs.map → renderer-BHsEOp1I.mjs.map} +1 -1
- package/dist/renderer-BL51bhvQ.mjs +3 -0
- package/dist/{renderer-Q7_DUcnu.mjs → renderer-BNBh4omF.mjs} +2 -2
- package/dist/{renderer-Q7_DUcnu.mjs.map → renderer-BNBh4omF.mjs.map} +1 -1
- package/dist/{renderer-Cx5H41JR.mjs → renderer-BShK_xMJ.mjs} +1 -1
- package/dist/{renderer-D5N2JO7g.mjs → renderer-BUJ6uaJE.mjs} +3 -3
- package/dist/{renderer-D5N2JO7g.mjs.map → renderer-BUJ6uaJE.mjs.map} +1 -1
- package/dist/{renderer-CeADvUU_.mjs → renderer-BV_d3D_3.mjs} +3 -3
- package/dist/{renderer-CeADvUU_.mjs.map → renderer-BV_d3D_3.mjs.map} +1 -1
- package/dist/{renderer-BMrm2Zbz.mjs → renderer-BXWu8aHU.mjs} +3 -3
- package/dist/{renderer-BMrm2Zbz.mjs.map → renderer-BXWu8aHU.mjs.map} +1 -1
- package/dist/{renderer-DcPOsAVu.d.mts → renderer-Bal8734U.d.mts} +2 -2
- package/dist/{renderer-DcPOsAVu.d.mts.map → renderer-Bal8734U.d.mts.map} +1 -1
- package/dist/{renderer-vUjNMbLq.mjs → renderer-BbwOEawB.mjs} +2 -2
- package/dist/{renderer-vUjNMbLq.mjs.map → renderer-BbwOEawB.mjs.map} +1 -1
- package/dist/renderer-BfvBHHNr.mjs +3 -0
- package/dist/{renderer-JjMO41Cv.mjs → renderer-BgrDGRNW.mjs} +2 -2
- package/dist/{renderer-JjMO41Cv.mjs.map → renderer-BgrDGRNW.mjs.map} +1 -1
- package/dist/{renderer-D_QS6p1q.mjs → renderer-BhfFVqCx.mjs} +2 -2
- package/dist/{renderer-D_QS6p1q.mjs.map → renderer-BhfFVqCx.mjs.map} +1 -1
- package/dist/{renderer-CsQ7nY0z.mjs → renderer-Bl9C9lIo.mjs} +1 -1
- package/dist/{renderer-Bwsh5TUv.mjs → renderer-BpTwFaja.mjs} +3 -3
- package/dist/{renderer-Bwsh5TUv.mjs.map → renderer-BpTwFaja.mjs.map} +1 -1
- package/dist/{renderer-Dcd-Pkzd.mjs → renderer-Bpf8EGY1.mjs} +2 -2
- package/dist/{renderer-Dcd-Pkzd.mjs.map → renderer-Bpf8EGY1.mjs.map} +1 -1
- package/dist/renderer-ByxrzTRg.mjs +3 -0
- package/dist/{renderer-eC1gRPRo.mjs → renderer-C-F91lPu.mjs} +2 -2
- package/dist/{renderer-eC1gRPRo.mjs.map → renderer-C-F91lPu.mjs.map} +1 -1
- package/dist/{renderer-B9l641o-.mjs → renderer-C5lJvf-h.mjs} +2 -2
- package/dist/{renderer-B9l641o-.mjs.map → renderer-C5lJvf-h.mjs.map} +1 -1
- package/dist/renderer-CDirzReW.mjs +3 -0
- package/dist/renderer-CGCmbeJ2.mjs +3 -0
- package/dist/renderer-CL3evUmF.mjs +3 -0
- package/dist/{renderer-BtkU0BT-.mjs → renderer-CLUPc9do.mjs} +3 -3
- package/dist/{renderer-BtkU0BT-.mjs.map → renderer-CLUPc9do.mjs.map} +1 -1
- package/dist/{renderer-C28Bab-M.mjs → renderer-CLWAbaCS.mjs} +9 -8
- package/dist/renderer-CLWAbaCS.mjs.map +1 -0
- package/dist/{renderer-COkFM1KL.mjs → renderer-CM5c8a7B.mjs} +8 -7
- package/dist/renderer-CM5c8a7B.mjs.map +1 -0
- package/dist/renderer-CO0KsnEg.mjs +3 -0
- package/dist/renderer-COO44HDO.mjs +3 -0
- package/dist/renderer-C_9SIgZX.mjs +3 -0
- package/dist/{renderer-BYsmLk63.mjs → renderer-Cgy1H0Ql.mjs} +2 -2
- package/dist/{renderer-BYsmLk63.mjs.map → renderer-Cgy1H0Ql.mjs.map} +1 -1
- package/dist/{renderer-5OiVjQan.mjs → renderer-CmMNU1-P.mjs} +9 -9
- package/dist/renderer-CmMNU1-P.mjs.map +1 -0
- package/dist/{renderer-DjiUZ0Vs.mjs → renderer-Cn-p1SyO.mjs} +34 -18
- package/dist/renderer-Cn-p1SyO.mjs.map +1 -0
- package/dist/renderer-CntaTaNq.mjs +3 -0
- package/dist/{renderer-C3L9SNRO.mjs → renderer-CsE9ztUa.mjs} +3 -3
- package/dist/{renderer-C3L9SNRO.mjs.map → renderer-CsE9ztUa.mjs.map} +1 -1
- package/dist/renderer-CtVkU_GA.mjs.map +1 -1
- package/dist/renderer-Cv9JLpL6.mjs +3 -0
- package/dist/{renderer-x2s9LmVL.mjs → renderer-D-4Yh-RK.mjs} +2 -2
- package/dist/{renderer-x2s9LmVL.mjs.map → renderer-D-4Yh-RK.mjs.map} +1 -1
- package/dist/renderer-D0FWIsWn.mjs +3 -0
- package/dist/{renderer-C9BKcHZb.mjs → renderer-D3FsnptO.mjs} +1 -1
- package/dist/renderer-D3jUYUDU.mjs +3 -0
- package/dist/renderer-D5Je-AeQ.mjs +3 -0
- package/dist/{renderer-bebAt6Dz.mjs → renderer-DJPuwTbS.mjs} +10 -8
- package/dist/renderer-DJPuwTbS.mjs.map +1 -0
- package/dist/{renderer-D1Zs78PQ.mjs → renderer-DM79djHG.mjs} +42 -42
- package/dist/{renderer-D1Zs78PQ.mjs.map → renderer-DM79djHG.mjs.map} +1 -1
- package/dist/renderer-DNPwpmYS.mjs +3 -0
- package/dist/{renderer-D54yO_M_.mjs → renderer-DRf4FLSq.mjs} +10 -9
- package/dist/renderer-DRf4FLSq.mjs.map +1 -0
- package/dist/{renderer-DI2RcpKU.mjs → renderer-DVj8jfmO.mjs} +9 -8
- package/dist/renderer-DVj8jfmO.mjs.map +1 -0
- package/dist/renderer-DawVsNLw.mjs +3 -0
- package/dist/renderer-Dl_6Kn87.mjs +3 -0
- package/dist/renderer-DlrJSfaw.mjs +3 -0
- package/dist/{renderer-BUHMkkLU.mjs → renderer-DnXQXk-8.mjs} +2 -2
- package/dist/{renderer-BUHMkkLU.mjs.map → renderer-DnXQXk-8.mjs.map} +1 -1
- package/dist/{renderer-CgVdRbc-.mjs → renderer-Dntxca07.mjs} +2 -2
- package/dist/{renderer-CgVdRbc-.mjs.map → renderer-Dntxca07.mjs.map} +1 -1
- package/dist/renderer-DpScOWGG.mjs +4 -0
- package/dist/{renderer-CMM4DZ1i.mjs → renderer-DvHpzsUV.mjs} +2 -2
- package/dist/{renderer-CMM4DZ1i.mjs.map → renderer-DvHpzsUV.mjs.map} +1 -1
- package/dist/renderer-DxYOA1MM.mjs +3 -0
- package/dist/{renderer-DBp6A7tR.mjs → renderer-E5D4H5dK.mjs} +3 -3
- package/dist/{renderer-DBp6A7tR.mjs.map → renderer-E5D4H5dK.mjs.map} +1 -1
- package/dist/{renderer-D1ib-wB3.mjs → renderer-L72D1mwv.mjs} +3 -3
- package/dist/{renderer-D1ib-wB3.mjs.map → renderer-L72D1mwv.mjs.map} +1 -1
- package/dist/renderer-S7jOr_jF.mjs +3 -0
- package/dist/{renderer-WXylxlu2.mjs → renderer-XRGwrdg8.mjs} +5 -5
- package/dist/renderer-XRGwrdg8.mjs.map +1 -0
- package/dist/{renderer-0gJC-sc8.mjs → renderer-doPt4zQZ.mjs} +2 -2
- package/dist/{renderer-0gJC-sc8.mjs.map → renderer-doPt4zQZ.mjs.map} +1 -1
- package/dist/{renderer-Dm08-hAU.mjs → renderer-h-HOoLwD.mjs} +2 -2
- package/dist/{renderer-Dm08-hAU.mjs.map → renderer-h-HOoLwD.mjs.map} +1 -1
- package/dist/renderer-kN2TeWks.mjs +3 -0
- package/dist/{renderers-BWg16W-V-jhdCp6Vd.mjs → renderers-CP8CFWDs-CAs5DgWj.mjs} +16 -13
- package/dist/renderers-CP8CFWDs-CAs5DgWj.mjs.map +1 -0
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-BwbdO3AN.mjs → signals-CsxqD2AA.mjs} +3 -3
- package/dist/{signals-BwbdO3AN.mjs.map → signals-CsxqD2AA.mjs.map} +1 -1
- package/package.json +54 -54
- package/dist/dist-Bx6J0VcM.mjs.map +0 -1
- package/dist/dist-DKm2IyEJ.mjs.map +0 -1
- package/dist/dist-DgIKXWZ1.mjs.map +0 -1
- package/dist/effects-m3FuatqZ.mjs +0 -811
- package/dist/effects-m3FuatqZ.mjs.map +0 -1
- package/dist/index-DY3mLoPO.d.mts.map +0 -1
- package/dist/index-ogL8Y-Ng.d.mts.map +0 -1
- package/dist/preview-engine/chunk-4Q7JG6WJ.mjs +0 -1
- package/dist/preview-engine/chunk-CVGM2U4J.mjs +0 -47
- package/dist/preview-engine/chunk-N4PWLBZ7.mjs +0 -5
- package/dist/preview-engine/chunk-P3HBP725.mjs +0 -1
- package/dist/preview-engine/chunk-PCB2VB5K.mjs +0 -98
- package/dist/preview-engine/chunk-TMRLZV5X.mjs +0 -1
- package/dist/preview-engine/chunk-XD4GKD6H.mjs +0 -5
- package/dist/preview-engine/chunk-YSTLMWCG.mjs +0 -1
- package/dist/preview-engine/renderers-2AUSIYZN.mjs +0 -1
- package/dist/preview-engine/renderers-2QN6KZJP.mjs +0 -1
- package/dist/preview-engine/renderers-32SKW7ML.mjs +0 -1
- package/dist/preview-engine/renderers-6QAF3LQ2.mjs +0 -1
- package/dist/preview-engine/renderers-76MPTVZK.mjs +0 -1
- package/dist/preview-engine/renderers-AFYKNM6N.mjs +0 -1
- package/dist/preview-engine/renderers-ASTBICLA.mjs +0 -1
- package/dist/preview-engine/renderers-D7PVQFVU.mjs +0 -1
- package/dist/preview-engine/renderers-DB4ABTNA.mjs +0 -1
- package/dist/preview-engine/renderers-FI7YHNLY.mjs +0 -1
- package/dist/preview-engine/renderers-GBHULMPH.mjs +0 -1
- package/dist/preview-engine/renderers-HGT7QDY3.mjs +0 -1
- package/dist/preview-engine/renderers-HOYLA7ZK.mjs +0 -1
- package/dist/preview-engine/renderers-KKI2D3MZ.mjs +0 -1
- package/dist/preview-engine/renderers-KRAJNV4E.mjs +0 -1
- package/dist/preview-engine/renderers-KUGZKSVE.mjs +0 -1
- package/dist/preview-engine/renderers-L2EQQIOC.mjs +0 -1
- package/dist/preview-engine/renderers-MCFQFYEL.mjs +0 -1
- package/dist/preview-engine/renderers-OEVXCGE2.mjs +0 -1
- package/dist/preview-engine/renderers-QVD6C4CS.mjs +0 -1
- package/dist/preview-engine/renderers-RBFWJWVM.mjs +0 -1
- package/dist/preview-engine/renderers-RX3VLVLO.mjs +0 -1
- package/dist/preview-engine/renderers-SM6JP64K.mjs +0 -1
- package/dist/preview-engine/renderers-TKMAATVS.mjs +0 -1
- package/dist/preview-engine/renderers-UZGECFVO.mjs +0 -1
- package/dist/preview-engine/renderers-WJUTT5BB.mjs +0 -1
- package/dist/preview-engine/renderers-XA2M4YXK.mjs +0 -1
- package/dist/preview-engine/renderers-XIHRFEFQ.mjs +0 -1
- package/dist/preview-engine/renderers-XJTA5MFG.mjs +0 -1
- package/dist/preview-engine/renderers-XLTY5APF.mjs +0 -1
- package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +0 -1
- package/dist/renderer--fkO4O8d.mjs +0 -3
- package/dist/renderer-2r4EgfdZ.mjs.map +0 -1
- package/dist/renderer-5OiVjQan.mjs.map +0 -1
- package/dist/renderer-6x7CgHhJ.mjs +0 -3
- package/dist/renderer-B0RDWv1C.mjs +0 -3
- package/dist/renderer-BFOkGS0N.mjs +0 -3
- package/dist/renderer-BaoJiMJO.mjs +0 -3
- package/dist/renderer-C28Bab-M.mjs.map +0 -1
- package/dist/renderer-C4O-L73n.mjs +0 -3
- package/dist/renderer-CGVuhBbA.mjs +0 -3
- package/dist/renderer-CHKB-Or4.mjs +0 -3
- package/dist/renderer-CL9gPcfZ.mjs +0 -3
- package/dist/renderer-COkFM1KL.mjs.map +0 -1
- package/dist/renderer-CSkFF-qe.mjs +0 -3
- package/dist/renderer-CU2c6zWc.mjs +0 -3
- package/dist/renderer-CiLiH6w_.mjs +0 -3
- package/dist/renderer-D54yO_M_.mjs.map +0 -1
- package/dist/renderer-DI2RcpKU.mjs.map +0 -1
- package/dist/renderer-DMaYsSM4.mjs +0 -3
- package/dist/renderer-DPSsf8-t.mjs +0 -3
- package/dist/renderer-DZ7t_l1d.mjs +0 -3
- package/dist/renderer-DjiUZ0Vs.mjs.map +0 -1
- package/dist/renderer-DkJEnKQu.mjs +0 -3
- package/dist/renderer-DlkrKqQj.mjs +0 -3
- package/dist/renderer-DxOQ5S8T.mjs +0 -3
- package/dist/renderer-Ibvw1tE_.mjs +0 -3
- package/dist/renderer-M0jeFo6S.mjs +0 -4
- package/dist/renderer-NhSzqWsQ.mjs +0 -3
- package/dist/renderer-OrhgkzVu.mjs +0 -3
- package/dist/renderer-WXylxlu2.mjs.map +0 -1
- package/dist/renderer-WrFAaLxW.mjs +0 -3
- package/dist/renderer-bbOALT4F.mjs +0 -3
- package/dist/renderer-bebAt6Dz.mjs.map +0 -1
- package/dist/renderer-lXmyzdcx.mjs +0 -3
- package/dist/renderer-ospMsCzr.mjs +0 -3
- package/dist/renderer-xc9wkiC7.mjs +0 -3
- package/dist/renderers-BWg16W-V-jhdCp6Vd.mjs.map +0 -1
- /package/dist/preview-engine/{chunk-VJGK7MLJ.mjs → chunk-CBM7B7EW.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DBp6A7tR.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-jYhoQpYz.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst highPassConfig = configBuilder().field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The cutoff radius in pixels. Frequencies smaller than this radius are preserved.\"\n}).field(\"contrastBoost\", z.number().multipleOf(.01).min(1).max(10).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Contrast Boost Signal\",\n\tdescription: \"Multiplier applied to the extracted high-frequency detail delta.\"\n}).field(\"monochrome\", z.boolean().default(true), { description: \"When enabled, high-pass delta is converted to luminance before centering on 50% neutral gray.\" }).build();\nconst HighPassNodeConfigSchema = highPassConfig.schema;\nconst HighPassResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst HIGH_PASS_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 WGSL_HIGHPASS_UNIFORMS = `\nstruct HighPassUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tcontrastBoost : f32,\n\n\tmonochrome : f32,\n\thasRadiusSig : f32,\n\thasContrastSig : f32,\n\tisSecondPass : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HighPassUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar contrastBoost = u.contrastBoost;\n\tif (u.hasContrastSig > 0.5) {\n\t\tcontrastBoost = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn vec4<f32>(vec3<f32>(0.5) * origCol.a, origCol.a);\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate High Pass difference against original\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet origUnpremult = origCol.rgb / origCol.a;\n\tlet blurUnpremult = blurResult.rgb / max(blurResult.a, 1e-5);\n\tlet diff = origUnpremult - blurUnpremult;\n\n\tvar highPassRgb : vec3<f32>;\n\tif (u.monochrome > 0.5) {\n\t\tlet lumaDiff = dot(diff, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\thighPassRgb = vec3<f32>(0.5) + vec3<f32>(lumaDiff * contrastBoost);\n\t} else {\n\t\thighPassRgb = vec3<f32>(0.5) + diff * contrastBoost;\n\t}\n\n\tlet clampedRgb = clamp(highPassRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(clampedRgb * origCol.a, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst highPassUniformData = new Float32Array(8);\nfunction getHighPassResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst highPassUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HighPass\" || !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 nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"highpass_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 3), .1, MAX_RADIUS);\n\tconst contrastRes = resolveField(op.contrastBoostHandleId, Number(op.contrastBoost ?? 1), 1, 10);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { highPassPipeline: pipeline, highPassUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHighPassResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst createHighPassBindGroup1 = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[2] = radiusRes.val;\n\thighPassUniformData[3] = contrastRes.val;\n\thighPassUniformData[4] = op.monochrome ?? true ? 1 : 0;\n\thighPassUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[6] = contrastRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[7] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\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: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[0] = 1;\n\thighPassUniformData[1] = 0;\n\thighPassUniformData[7] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, createHighPassBindGroup1(tmpTex, tmpTex));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, createHighPassBindGroup1(outTex1, tmpTex));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = 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\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, HighPassResultSchema as i, HIGH_PASS_OUTPUT_TYPE_MAP as n, highPassConfig as o, HighPassNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-jYhoQpYz.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-E5D4H5dK.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-jYhoQpYz.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst highPassConfig = configBuilder().field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The cutoff radius in pixels. Frequencies smaller than this radius are preserved.\"\n}).field(\"contrastBoost\", z.number().multipleOf(.01).min(1).max(10).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Contrast Boost Signal\",\n\tdescription: \"Multiplier applied to the extracted high-frequency detail delta.\"\n}).field(\"monochrome\", z.boolean().default(true), { description: \"When enabled, high-pass delta is converted to luminance before centering on 50% neutral gray.\" }).build();\nconst HighPassNodeConfigSchema = highPassConfig.schema;\nconst HighPassResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst HIGH_PASS_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 WGSL_HIGHPASS_UNIFORMS = `\nstruct HighPassUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tcontrastBoost : f32,\n\n\tmonochrome : f32,\n\thasRadiusSig : f32,\n\thasContrastSig : f32,\n\tisSecondPass : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HighPassUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar contrastBoost = u.contrastBoost;\n\tif (u.hasContrastSig > 0.5) {\n\t\tcontrastBoost = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn vec4<f32>(vec3<f32>(0.5) * origCol.a, origCol.a);\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate High Pass difference against original\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet origUnpremult = origCol.rgb / origCol.a;\n\tlet blurUnpremult = blurResult.rgb / max(blurResult.a, 1e-5);\n\tlet diff = origUnpremult - blurUnpremult;\n\n\tvar highPassRgb : vec3<f32>;\n\tif (u.monochrome > 0.5) {\n\t\tlet lumaDiff = dot(diff, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\thighPassRgb = vec3<f32>(0.5) + vec3<f32>(lumaDiff * contrastBoost);\n\t} else {\n\t\thighPassRgb = vec3<f32>(0.5) + diff * contrastBoost;\n\t}\n\n\tlet clampedRgb = clamp(highPassRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(clampedRgb * origCol.a, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst highPassUniformData = new Float32Array(8);\nfunction getHighPassResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst highPassUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HighPass\" || !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 nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"highpass_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 3), .1, MAX_RADIUS);\n\tconst contrastRes = resolveField(op.contrastBoostHandleId, Number(op.contrastBoost ?? 1), 1, 10);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { highPassPipeline: pipeline, highPassUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHighPassResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst createHighPassBindGroup1 = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[2] = radiusRes.val;\n\thighPassUniformData[3] = contrastRes.val;\n\thighPassUniformData[4] = op.monochrome ?? true ? 1 : 0;\n\thighPassUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[6] = contrastRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[7] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\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: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[0] = 1;\n\thighPassUniformData[1] = 0;\n\thighPassUniformData[7] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, createHighPassBindGroup1(tmpTex, tmpTex));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, createHighPassBindGroup1(outTex1, tmpTex));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = 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\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, HighPassResultSchema as i, HIGH_PASS_OUTPUT_TYPE_MAP as n, highPassConfig as o, HighPassNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-jYhoQpYz.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { i as VideoResultSchema, n as ImageResultSchema } from "./dist-DzUJmIHt.mjs";
|
|
3
|
+
import { E as colorMatrixWgsl } from "./dist-sHqWCB9M.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-levels/dist/renderers-JnzIgDj9.mjs
|
|
@@ -240,4 +240,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer })
|
|
|
240
240
|
|
|
241
241
|
//#endregion
|
|
242
242
|
export { renderers_default as t };
|
|
243
|
-
//# sourceMappingURL=renderer-
|
|
243
|
+
//# sourceMappingURL=renderer-L72D1mwv.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-D1ib-wB3.mjs","names":[],"sources":["../../../nodes/node-levels/dist/renderers-JnzIgDj9.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { colorMatrixWgsl } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst LevelChannelSchema = z.object({\n\tinBlack: z.number().min(0).max(1).default(0),\n\tinWhite: z.number().min(0).max(1).default(1),\n\toutBlack: z.number().min(0).max(1).default(0),\n\toutWhite: z.number().min(0).max(1).default(1)\n}).strict().superRefine((val, ctx) => {\n\tif (val.inBlack >= val.inWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"inWhite\"],\n\t\tmessage: \"inWhite must be greater than inBlack\"\n\t});\n\tif (val.outBlack >= val.outWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"outWhite\"],\n\t\tmessage: \"outWhite must be greater than outBlack\"\n\t});\n});\nconst LevelsNodeConfigSchema = z.object({\n\tmaster: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tred: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tgreen: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tblue: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t})\n}).strict();\nconst LevelsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LevelsOperationSchema = LevelsNodeConfigSchema.extend({\n\top: z.literal(\"Levels\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultLevelChannel = {\n\tinBlack: 0,\n\tinWhite: 1,\n\toutBlack: 0,\n\toutWhite: 1\n};\nconst defaultLevelsConfig = {\n\tmaster: { ...defaultLevelChannel },\n\tred: { ...defaultLevelChannel },\n\tgreen: { ...defaultLevelChannel },\n\tblue: { ...defaultLevelChannel }\n};\nconst LEVELS_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 deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorMatrixData = new Float32Array(20);\nfunction getColorMatrixResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst colorMatrixUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst colorMatrixModule = device.createShaderModule({\n\t\t\tlabel: \"color-matrix.wgsl\",\n\t\t\tcode: colorMatrixWgsl\n\t\t});\n\t\tres = {\n\t\t\tcolorMatrixPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"ColorMatrixPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [colorMatrixUniformLayout, singleTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: colorMatrixModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: colorMatrixModule,\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\tcolorMatrixUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getTransform(ch) {\n\tconst inRange = Math.max(ch.inWhite - ch.inBlack, 1e-5);\n\tconst scale = (ch.outWhite - ch.outBlack) / inRange;\n\treturn {\n\t\tscale,\n\t\tbias: ch.outBlack - ch.inBlack * scale\n\t};\n}\nconst LevelsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Levels\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst m = getTransform(op.master ?? defaultLevelChannel);\n\tconst r = getTransform(op.red ?? defaultLevelChannel);\n\tconst g = getTransform(op.green ?? defaultLevelChannel);\n\tconst b = getTransform(op.blue ?? defaultLevelChannel);\n\tconst matrix = [\n\t\tr.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\tr.bias * m.scale + m.bias,\n\t\t0,\n\t\tg.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\tg.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\tb.scale * m.scale,\n\t\t0,\n\t\tb.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t0\n\t];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { colorMatrixPipeline: pipeline, colorMatrixUniformLayout: uLayout, singleTextureLayout: tLayout } = getColorMatrixResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tcolorMatrixData[0] = matrix[0];\n\tcolorMatrixData[1] = matrix[1];\n\tcolorMatrixData[2] = matrix[2];\n\tcolorMatrixData[3] = matrix[3];\n\tcolorMatrixData[4] = matrix[5];\n\tcolorMatrixData[5] = matrix[6];\n\tcolorMatrixData[6] = matrix[7];\n\tcolorMatrixData[7] = matrix[8];\n\tcolorMatrixData[8] = matrix[10];\n\tcolorMatrixData[9] = matrix[11];\n\tcolorMatrixData[10] = matrix[12];\n\tcolorMatrixData[11] = matrix[13];\n\tcolorMatrixData[12] = matrix[15];\n\tcolorMatrixData[13] = matrix[16];\n\tcolorMatrixData[14] = matrix[17];\n\tcolorMatrixData[15] = matrix[18];\n\tcolorMatrixData[16] = matrix[4];\n\tcolorMatrixData[17] = matrix[9];\n\tcolorMatrixData[18] = matrix[14];\n\tcolorMatrixData[19] = matrix[19];\n\tconst buffer = ctx.renderer.getTemporaryBuffer(colorMatrixData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = 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\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer });\n\n//#endregion\nexport { LevelsOperationSchema as a, defaultLevelsConfig as c, LevelsNodeConfigSchema as i, LEVELS_OUTPUT_TYPE_MAP as n, LevelsResultSchema as o, LevelChannelSchema as r, defaultLevelChannel as s, renderers_default as t };\n//# sourceMappingURL=renderers-JnzIgDj9.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-L72D1mwv.mjs","names":[],"sources":["../../../nodes/node-levels/dist/renderers-JnzIgDj9.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { colorMatrixWgsl } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst LevelChannelSchema = z.object({\n\tinBlack: z.number().min(0).max(1).default(0),\n\tinWhite: z.number().min(0).max(1).default(1),\n\toutBlack: z.number().min(0).max(1).default(0),\n\toutWhite: z.number().min(0).max(1).default(1)\n}).strict().superRefine((val, ctx) => {\n\tif (val.inBlack >= val.inWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"inWhite\"],\n\t\tmessage: \"inWhite must be greater than inBlack\"\n\t});\n\tif (val.outBlack >= val.outWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"outWhite\"],\n\t\tmessage: \"outWhite must be greater than outBlack\"\n\t});\n});\nconst LevelsNodeConfigSchema = z.object({\n\tmaster: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tred: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tgreen: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tblue: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t})\n}).strict();\nconst LevelsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LevelsOperationSchema = LevelsNodeConfigSchema.extend({\n\top: z.literal(\"Levels\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultLevelChannel = {\n\tinBlack: 0,\n\tinWhite: 1,\n\toutBlack: 0,\n\toutWhite: 1\n};\nconst defaultLevelsConfig = {\n\tmaster: { ...defaultLevelChannel },\n\tred: { ...defaultLevelChannel },\n\tgreen: { ...defaultLevelChannel },\n\tblue: { ...defaultLevelChannel }\n};\nconst LEVELS_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 deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorMatrixData = new Float32Array(20);\nfunction getColorMatrixResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst colorMatrixUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst colorMatrixModule = device.createShaderModule({\n\t\t\tlabel: \"color-matrix.wgsl\",\n\t\t\tcode: colorMatrixWgsl\n\t\t});\n\t\tres = {\n\t\t\tcolorMatrixPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"ColorMatrixPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [colorMatrixUniformLayout, singleTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: colorMatrixModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: colorMatrixModule,\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\tcolorMatrixUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getTransform(ch) {\n\tconst inRange = Math.max(ch.inWhite - ch.inBlack, 1e-5);\n\tconst scale = (ch.outWhite - ch.outBlack) / inRange;\n\treturn {\n\t\tscale,\n\t\tbias: ch.outBlack - ch.inBlack * scale\n\t};\n}\nconst LevelsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Levels\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst m = getTransform(op.master ?? defaultLevelChannel);\n\tconst r = getTransform(op.red ?? defaultLevelChannel);\n\tconst g = getTransform(op.green ?? defaultLevelChannel);\n\tconst b = getTransform(op.blue ?? defaultLevelChannel);\n\tconst matrix = [\n\t\tr.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\tr.bias * m.scale + m.bias,\n\t\t0,\n\t\tg.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\tg.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\tb.scale * m.scale,\n\t\t0,\n\t\tb.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t0\n\t];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { colorMatrixPipeline: pipeline, colorMatrixUniformLayout: uLayout, singleTextureLayout: tLayout } = getColorMatrixResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tcolorMatrixData[0] = matrix[0];\n\tcolorMatrixData[1] = matrix[1];\n\tcolorMatrixData[2] = matrix[2];\n\tcolorMatrixData[3] = matrix[3];\n\tcolorMatrixData[4] = matrix[5];\n\tcolorMatrixData[5] = matrix[6];\n\tcolorMatrixData[6] = matrix[7];\n\tcolorMatrixData[7] = matrix[8];\n\tcolorMatrixData[8] = matrix[10];\n\tcolorMatrixData[9] = matrix[11];\n\tcolorMatrixData[10] = matrix[12];\n\tcolorMatrixData[11] = matrix[13];\n\tcolorMatrixData[12] = matrix[15];\n\tcolorMatrixData[13] = matrix[16];\n\tcolorMatrixData[14] = matrix[17];\n\tcolorMatrixData[15] = matrix[18];\n\tcolorMatrixData[16] = matrix[4];\n\tcolorMatrixData[17] = matrix[9];\n\tcolorMatrixData[18] = matrix[14];\n\tcolorMatrixData[19] = matrix[19];\n\tconst buffer = ctx.renderer.getTemporaryBuffer(colorMatrixData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = 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\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer });\n\n//#endregion\nexport { LevelsOperationSchema as a, defaultLevelsConfig as c, LevelsNodeConfigSchema as i, LEVELS_OUTPUT_TYPE_MAP as n, LevelsResultSchema as o, LevelChannelSchema as r, defaultLevelChannel as s, renderers_default as t };\n//# sourceMappingURL=renderers-JnzIgDj9.mjs.map"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-DzUJmIHt.mjs";
|
|
3
|
+
import { tt as signalRegistry } from "./dist-sHqWCB9M.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
|
-
//#region ../../nodes/node-patch-heal/dist/renderers-
|
|
6
|
+
//#region ../../nodes/node-patch-heal/dist/renderers-BvV4Wgnj.mjs
|
|
7
7
|
const MAX_RADIUS = 500;
|
|
8
8
|
const MAX_FEATHER = 100;
|
|
9
9
|
const MAX_OFFSET = 4096;
|
|
10
10
|
const PatchItemSchema = z.object({
|
|
11
|
-
id: z.string().default(
|
|
11
|
+
id: z.string().default("patch"),
|
|
12
12
|
centerX: z.number().min(0).max(1).default(.5),
|
|
13
13
|
centerY: z.number().min(0).max(1).default(.5),
|
|
14
14
|
offsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),
|
|
@@ -694,4 +694,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer
|
|
|
694
694
|
|
|
695
695
|
//#endregion
|
|
696
696
|
export { renderers_default as n, PatchHealWebGPURenderer as t };
|
|
697
|
-
//# sourceMappingURL=renderer-
|
|
697
|
+
//# sourceMappingURL=renderer-XRGwrdg8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-XRGwrdg8.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-BvV4Wgnj.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_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 WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) 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 centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 4,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 5,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 6,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 7,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 8,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs_main\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !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 frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst signalRegistry$1 = signalRegistry;\n\tconst tmpSrcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpSrcView = tmpSrcTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpSrcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`,\n\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t}, tmpSrcView, tmpSrcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tlet maskTex = null;\n\tif (op.maskMedia) {\n\t\tmaskTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\ttmpSrcTex\n\t\t]);\n\t\tconst maskView = maskTex.createView();\n\t\tctx.renderer.beginFrame(encoder, maskView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(op.maskMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttmpSrcTex,\n\t\t\t\tmaskTex\n\t\t\t]\n\t\t}, maskView, maskTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t}\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\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 = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else val = Math.max(minVal, Math.min(maxVal, fallbackVal));\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, 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 dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst getSignalView = (res, suffix) => {\n\t\t\tif (res.hasStaticSig && res.sd && signalRegistry$1) return signalRegistry$1.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\t\treturn signalRegistry$1 ? signalRegistry$1.getDummy1x1TextureView(ctx.device) : tmpSrcView;\n\t\t};\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\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\tconst sigBindGroup = ctx.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: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst healPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: destinationTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\thealPass.setPipeline(pipeline);\n\t\thealPass.setBindGroup(0, 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}));\n\t\thealPass.setBindGroup(1, texBindGroup);\n\t\thealPass.setBindGroup(2, sigBindGroup);\n\t\thealPass.draw(4);\n\t\thealPass.end();\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"load\");\n\tctx.renderer.drawTexture(finalPass, currentInputTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t}, { opacity: 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-BvV4Wgnj.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import { N as drawSvgNode } from "./dist-
|
|
2
|
+
import { N as drawSvgNode } from "./dist-sHqWCB9M.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs
|
|
5
5
|
/**
|
|
@@ -237,4 +237,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURen
|
|
|
237
237
|
|
|
238
238
|
//#endregion
|
|
239
239
|
export { ShapeGeneratorWebGPURenderer, renderers_default as default };
|
|
240
|
-
//# sourceMappingURL=renderer-
|
|
240
|
+
//# sourceMappingURL=renderer-doPt4zQZ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-0gJC-sc8.mjs","names":[],"sources":["../../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawSvgNode } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/geometry.ts\n/**\n* Scale corner radii proportionally if their sum exceeds the box dimensions (W3C CSS standard).\n*/\nfunction normalizeCornerRadii(w, h, rTL, rTR, rBR, rBL) {\n\tconst topSum = rTL + rTR;\n\tconst bottomSum = rBL + rBR;\n\tconst leftSum = rTL + rBL;\n\tconst rightSum = rTR + rBR;\n\tlet scale = 1;\n\tif (topSum > w && topSum > 0) scale = Math.min(scale, w / topSum);\n\tif (bottomSum > w && bottomSum > 0) scale = Math.min(scale, w / bottomSum);\n\tif (leftSum > h && leftSum > 0) scale = Math.min(scale, h / leftSum);\n\tif (rightSum > h && rightSum > 0) scale = Math.min(scale, h / rightSum);\n\treturn [\n\t\tMath.max(0, rTL * scale),\n\t\tMath.max(0, rTR * scale),\n\t\tMath.max(0, rBR * scale),\n\t\tMath.max(0, rBL * scale)\n\t];\n}\n/**\n* Generates an SVG path string for a rounded rectangle with 4 independent corner radii.\n*/\nfunction buildRectanglePath(w, h, rTL, rTR, rBR, rBL, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst x = inset;\n\tconst y = inset;\n\tconst boxW = Math.max(.1, w - strokeWidth);\n\tconst boxH = Math.max(.1, h - strokeWidth);\n\tconst [rtl, rtr, rbr, rbl] = normalizeCornerRadii(boxW, boxH, rTL, rTR, rBR, rBL);\n\treturn [\n\t\t`M ${x + rtl} ${y}`,\n\t\t`L ${x + boxW - rtr} ${y}`,\n\t\trtr > 0 ? `A ${rtr} ${rtr} 0 0 1 ${x + boxW} ${y + rtr}` : \"\",\n\t\t`L ${x + boxW} ${y + boxH - rbr}`,\n\t\trbr > 0 ? `A ${rbr} ${rbr} 0 0 1 ${x + boxW - rbr} ${y + boxH}` : \"\",\n\t\t`L ${x + rbl} ${y + boxH}`,\n\t\trbl > 0 ? `A ${rbl} ${rbl} 0 0 1 ${x} ${y + boxH - rbl}` : \"\",\n\t\t`L ${x} ${y + rtl}`,\n\t\trtl > 0 ? `A ${rtl} ${rtl} 0 0 1 ${x + rtl} ${y}` : \"\",\n\t\t\"Z\"\n\t].filter(Boolean).join(\" \");\n}\n/**\n* Generates an SVG path string for an ellipse/circle.\n*/\nfunction buildEllipsePath(w, h, strokeWidth = 0) {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = Math.max(.1, (w - strokeWidth) / 2);\n\tconst ry = Math.max(.1, (h - strokeWidth) / 2);\n\treturn `M ${cx - rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx + rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx - rx} ${cy} Z`;\n}\n/**\n* Generates an SVG path string for a regular polygon with N sides.\n*/\nfunction buildPolygonPath(w, h, sides, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(sides)));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst radius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst points = [];\n\tconst angleStep = 2 * Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + radius * Math.cos(angle),\n\t\t\ty: cy + radius * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a star with N spikes and configurable inner radius ratio.\n*/\nfunction buildStarPath(w, h, pointsCount, innerRadiusRatio, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(pointsCount)));\n\tconst ratio = Math.max(.01, Math.min(.99, innerRadiusRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst outerRadius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst innerRadius = outerRadius * ratio;\n\tconst points = [];\n\tconst totalVertices = n * 2;\n\tconst angleStep = Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < totalVertices; i++) {\n\t\tconst r = i % 2 === 0 ? outerRadius : innerRadius;\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a parametric arrow pointing right.\n*/\nfunction buildArrowPath(w, h, headWidth, headLength, shaftWidth, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst boxW = Math.max(1, w - strokeWidth);\n\tconst boxH = Math.max(1, h - strokeWidth);\n\tconst cy = h / 2;\n\tconst hw = Math.min(boxH, Math.max(4, headWidth));\n\tconst hl = Math.min(boxW * .9, Math.max(4, headLength));\n\tconst sw = Math.min(hw * .95, Math.max(2, shaftWidth));\n\tconst leftX = inset;\n\tconst rightX = inset + boxW;\n\tconst headBaseX = rightX - hl;\n\tconst topShaftY = cy - sw / 2;\n\tconst bottomShaftY = cy + sw / 2;\n\tconst topHeadY = cy - hw / 2;\n\tconst bottomHeadY = cy + hw / 2;\n\treturn [\n\t\t`M ${leftX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topHeadY.toFixed(2)}`,\n\t\t`L ${rightX.toFixed(2)} ${cy.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomHeadY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t`L ${leftX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\n/**\n* Calculates linear gradient coordinate vector from an angle in degrees.\n*/\nfunction calculateLinearGradientCoords(angleDeg = 0) {\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst cos = Math.cos(rad);\n\tconst sin = Math.sin(rad);\n\tconst x1 = ((.5 - cos * .5) * 100).toFixed(2);\n\tconst y1 = ((.5 - sin * .5) * 100).toFixed(2);\n\tconst x2 = ((.5 + cos * .5) * 100).toFixed(2);\n\tconst y2 = ((.5 + sin * .5) * 100).toFixed(2);\n\treturn {\n\t\tx1: `${x1}%`,\n\t\ty1: `${y1}%`,\n\t\tx2: `${x2}%`,\n\t\ty2: `${y2}%`\n\t};\n}\n/**\n* Builds the complete shape geometry path for any ShapeGenerator config.\n*/\nfunction generateShapePath(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst strokeWidth = config.strokeWidth ?? 0;\n\tswitch (config.shapeType) {\n\t\tcase \"Rectangle\": return buildRectanglePath(width, height, config.radiusTL ?? 0, config.radiusTR ?? 0, config.radiusBR ?? 0, config.radiusBL ?? 0, strokeWidth);\n\t\tcase \"Ellipse\": return buildEllipsePath(width, height, strokeWidth);\n\t\tcase \"Polygon\": return buildPolygonPath(width, height, config.polygonSides ?? 5, strokeWidth);\n\t\tcase \"Star\": return buildStarPath(width, height, config.starPoints ?? 5, config.starInnerRadius ?? .5, strokeWidth);\n\t\tcase \"Arrow\": return buildArrowPath(width, height, config.arrowHeadWidth ?? 40, config.arrowHeadLength ?? 40, config.arrowShaftWidth ?? 20, strokeWidth);\n\t\tcase \"CustomPath\": return config.customPath?.trim() || buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t\tdefault: return buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t}\n}\n\n//#endregion\n//#region src/shared/svg-generator.ts\n/**\n* Generates an SVG string representation of the parametric shape configuration.\n*/\nfunction generateShapeSvg(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst pathD = generateShapePath(config);\n\tconst fillType = config.fillType ?? \"solid\";\n\tconst fillColor = config.fillColor ?? \"#3b82f6\";\n\tconst gradientEndColor = config.gradientEndColor ?? \"#1d4ed8\";\n\tconst gradientAngle = config.gradientAngle ?? 0;\n\tconst strokeColor = config.strokeColor ?? \"#ffffff\";\n\tconst strokeWidth = Math.max(0, config.strokeWidth ?? 0);\n\tconst strokeDashArray = config.strokeDashArray?.trim();\n\tconst strokeLineCap = config.strokeLineCap ?? \"round\";\n\tconst strokeLineJoin = config.strokeLineJoin ?? \"round\";\n\tconst strokeDashOffset = config.strokeDashOffset ?? 0;\n\tconst rotation = config.rotation ?? 0;\n\tconst opacity = Math.max(0, Math.min(1, config.opacity ?? 1));\n\tconst customPathScale = config.shapeType === \"CustomPath\" ? config.customPathScale ?? 1 : 1;\n\tconst gradId = `gw_shape_grad_${Math.abs(Math.round(gradientAngle) * 31 + (fillType === \"linear\" ? 1 : 2))}`;\n\tlet defs = \"\";\n\tlet fillAttr = fillColor;\n\tif (fillType === \"none\") fillAttr = \"none\";\n\telse if (fillType === \"linear\") {\n\t\tconst coords = calculateLinearGradientCoords(gradientAngle);\n\t\tdefs = `<defs><linearGradient id=\"${gradId}\" x1=\"${coords.x1}\" y1=\"${coords.y1}\" x2=\"${coords.x2}\" y2=\"${coords.y2}\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></linearGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t} else if (fillType === \"radial\") {\n\t\tdefs = `<defs><radialGradient id=\"${gradId}\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></radialGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t}\n\tconst strokeAttrs = strokeWidth > 0 ? `stroke=\"${strokeColor}\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"${strokeLineCap}\" stroke-linejoin=\"${strokeLineJoin}\" ${strokeDashArray ? `stroke-dasharray=\"${strokeDashArray}\"` : \"\"} ${strokeDashOffset ? `stroke-dashoffset=\"${strokeDashOffset}\"` : \"\"}` : \"stroke=\\\"none\\\"\";\n\tconst cx = width / 2;\n\tconst cy = height / 2;\n\tconst transformParts = [];\n\tif (rotation !== 0) transformParts.push(`rotate(${rotation} ${cx} ${cy})`);\n\tif (customPathScale !== 1) transformParts.push(`scale(${customPathScale})`);\n\tconst transformAttr = transformParts.length > 0 ? `transform=\"${transformParts.join(\" \")}\"` : \"\";\n\tconst opacityAttr = opacity < 1 ? `opacity=\"${opacity}\"` : \"\";\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${defs}<g ${transformAttr} ${opacityAttr}><path d=\"${pathD}\" fill=\"${fillAttr}\" ${strokeAttrs} /></g></svg>`;\n}\n/**\n* Encodes the SVG into a base64 data URL for robust cross-environment rendering.\n*/\nfunction generateShapeSvgDataUrl(config) {\n\tconst svgString = generateShapeSvg(config);\n\tif (typeof Buffer !== \"undefined\") return `data:image/svg+xml;base64,${Buffer.from(svgString).toString(\"base64\")}`;\n\treturn `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst ShapeGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props, targetWidth, targetHeight } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"ShapeGenerator\" && op.op !== \"source\") return;\n\tconst svgDataUrl = generateShapeSvgDataUrl(op);\n\tconst width = targetWidth > 0 ? targetWidth : op.width ?? 500;\n\tconst height = targetHeight > 0 ? targetHeight : op.height ?? 500;\n\tconst isHeadless = Boolean(ctx.isHeadless || typeof window === \"undefined\");\n\tawait drawSvgNode(ctx, pass, {\n\t\tsrc: svgDataUrl,\n\t\tdstRect: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t},\n\t\topacity: op.opacity ?? 1,\n\t\tisHeadless\n\t});\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURenderer });\n\n//#endregion\nexport { buildArrowPath as a, buildRectanglePath as c, generateShapePath as d, normalizeCornerRadii as f, generateShapeSvgDataUrl as i, buildStarPath as l, ShapeGeneratorWebGPURenderer as n, buildEllipsePath as o, generateShapeSvg as r, buildPolygonPath as s, renderers_default as t, calculateLinearGradientCoords as u };\n//# sourceMappingURL=renderers-CpnJ1Qiz.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-doPt4zQZ.mjs","names":[],"sources":["../../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawSvgNode } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/geometry.ts\n/**\n* Scale corner radii proportionally if their sum exceeds the box dimensions (W3C CSS standard).\n*/\nfunction normalizeCornerRadii(w, h, rTL, rTR, rBR, rBL) {\n\tconst topSum = rTL + rTR;\n\tconst bottomSum = rBL + rBR;\n\tconst leftSum = rTL + rBL;\n\tconst rightSum = rTR + rBR;\n\tlet scale = 1;\n\tif (topSum > w && topSum > 0) scale = Math.min(scale, w / topSum);\n\tif (bottomSum > w && bottomSum > 0) scale = Math.min(scale, w / bottomSum);\n\tif (leftSum > h && leftSum > 0) scale = Math.min(scale, h / leftSum);\n\tif (rightSum > h && rightSum > 0) scale = Math.min(scale, h / rightSum);\n\treturn [\n\t\tMath.max(0, rTL * scale),\n\t\tMath.max(0, rTR * scale),\n\t\tMath.max(0, rBR * scale),\n\t\tMath.max(0, rBL * scale)\n\t];\n}\n/**\n* Generates an SVG path string for a rounded rectangle with 4 independent corner radii.\n*/\nfunction buildRectanglePath(w, h, rTL, rTR, rBR, rBL, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst x = inset;\n\tconst y = inset;\n\tconst boxW = Math.max(.1, w - strokeWidth);\n\tconst boxH = Math.max(.1, h - strokeWidth);\n\tconst [rtl, rtr, rbr, rbl] = normalizeCornerRadii(boxW, boxH, rTL, rTR, rBR, rBL);\n\treturn [\n\t\t`M ${x + rtl} ${y}`,\n\t\t`L ${x + boxW - rtr} ${y}`,\n\t\trtr > 0 ? `A ${rtr} ${rtr} 0 0 1 ${x + boxW} ${y + rtr}` : \"\",\n\t\t`L ${x + boxW} ${y + boxH - rbr}`,\n\t\trbr > 0 ? `A ${rbr} ${rbr} 0 0 1 ${x + boxW - rbr} ${y + boxH}` : \"\",\n\t\t`L ${x + rbl} ${y + boxH}`,\n\t\trbl > 0 ? `A ${rbl} ${rbl} 0 0 1 ${x} ${y + boxH - rbl}` : \"\",\n\t\t`L ${x} ${y + rtl}`,\n\t\trtl > 0 ? `A ${rtl} ${rtl} 0 0 1 ${x + rtl} ${y}` : \"\",\n\t\t\"Z\"\n\t].filter(Boolean).join(\" \");\n}\n/**\n* Generates an SVG path string for an ellipse/circle.\n*/\nfunction buildEllipsePath(w, h, strokeWidth = 0) {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = Math.max(.1, (w - strokeWidth) / 2);\n\tconst ry = Math.max(.1, (h - strokeWidth) / 2);\n\treturn `M ${cx - rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx + rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx - rx} ${cy} Z`;\n}\n/**\n* Generates an SVG path string for a regular polygon with N sides.\n*/\nfunction buildPolygonPath(w, h, sides, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(sides)));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst radius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst points = [];\n\tconst angleStep = 2 * Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + radius * Math.cos(angle),\n\t\t\ty: cy + radius * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a star with N spikes and configurable inner radius ratio.\n*/\nfunction buildStarPath(w, h, pointsCount, innerRadiusRatio, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(pointsCount)));\n\tconst ratio = Math.max(.01, Math.min(.99, innerRadiusRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst outerRadius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst innerRadius = outerRadius * ratio;\n\tconst points = [];\n\tconst totalVertices = n * 2;\n\tconst angleStep = Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < totalVertices; i++) {\n\t\tconst r = i % 2 === 0 ? outerRadius : innerRadius;\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a parametric arrow pointing right.\n*/\nfunction buildArrowPath(w, h, headWidth, headLength, shaftWidth, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst boxW = Math.max(1, w - strokeWidth);\n\tconst boxH = Math.max(1, h - strokeWidth);\n\tconst cy = h / 2;\n\tconst hw = Math.min(boxH, Math.max(4, headWidth));\n\tconst hl = Math.min(boxW * .9, Math.max(4, headLength));\n\tconst sw = Math.min(hw * .95, Math.max(2, shaftWidth));\n\tconst leftX = inset;\n\tconst rightX = inset + boxW;\n\tconst headBaseX = rightX - hl;\n\tconst topShaftY = cy - sw / 2;\n\tconst bottomShaftY = cy + sw / 2;\n\tconst topHeadY = cy - hw / 2;\n\tconst bottomHeadY = cy + hw / 2;\n\treturn [\n\t\t`M ${leftX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topHeadY.toFixed(2)}`,\n\t\t`L ${rightX.toFixed(2)} ${cy.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomHeadY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t`L ${leftX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\n/**\n* Calculates linear gradient coordinate vector from an angle in degrees.\n*/\nfunction calculateLinearGradientCoords(angleDeg = 0) {\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst cos = Math.cos(rad);\n\tconst sin = Math.sin(rad);\n\tconst x1 = ((.5 - cos * .5) * 100).toFixed(2);\n\tconst y1 = ((.5 - sin * .5) * 100).toFixed(2);\n\tconst x2 = ((.5 + cos * .5) * 100).toFixed(2);\n\tconst y2 = ((.5 + sin * .5) * 100).toFixed(2);\n\treturn {\n\t\tx1: `${x1}%`,\n\t\ty1: `${y1}%`,\n\t\tx2: `${x2}%`,\n\t\ty2: `${y2}%`\n\t};\n}\n/**\n* Builds the complete shape geometry path for any ShapeGenerator config.\n*/\nfunction generateShapePath(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst strokeWidth = config.strokeWidth ?? 0;\n\tswitch (config.shapeType) {\n\t\tcase \"Rectangle\": return buildRectanglePath(width, height, config.radiusTL ?? 0, config.radiusTR ?? 0, config.radiusBR ?? 0, config.radiusBL ?? 0, strokeWidth);\n\t\tcase \"Ellipse\": return buildEllipsePath(width, height, strokeWidth);\n\t\tcase \"Polygon\": return buildPolygonPath(width, height, config.polygonSides ?? 5, strokeWidth);\n\t\tcase \"Star\": return buildStarPath(width, height, config.starPoints ?? 5, config.starInnerRadius ?? .5, strokeWidth);\n\t\tcase \"Arrow\": return buildArrowPath(width, height, config.arrowHeadWidth ?? 40, config.arrowHeadLength ?? 40, config.arrowShaftWidth ?? 20, strokeWidth);\n\t\tcase \"CustomPath\": return config.customPath?.trim() || buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t\tdefault: return buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t}\n}\n\n//#endregion\n//#region src/shared/svg-generator.ts\n/**\n* Generates an SVG string representation of the parametric shape configuration.\n*/\nfunction generateShapeSvg(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst pathD = generateShapePath(config);\n\tconst fillType = config.fillType ?? \"solid\";\n\tconst fillColor = config.fillColor ?? \"#3b82f6\";\n\tconst gradientEndColor = config.gradientEndColor ?? \"#1d4ed8\";\n\tconst gradientAngle = config.gradientAngle ?? 0;\n\tconst strokeColor = config.strokeColor ?? \"#ffffff\";\n\tconst strokeWidth = Math.max(0, config.strokeWidth ?? 0);\n\tconst strokeDashArray = config.strokeDashArray?.trim();\n\tconst strokeLineCap = config.strokeLineCap ?? \"round\";\n\tconst strokeLineJoin = config.strokeLineJoin ?? \"round\";\n\tconst strokeDashOffset = config.strokeDashOffset ?? 0;\n\tconst rotation = config.rotation ?? 0;\n\tconst opacity = Math.max(0, Math.min(1, config.opacity ?? 1));\n\tconst customPathScale = config.shapeType === \"CustomPath\" ? config.customPathScale ?? 1 : 1;\n\tconst gradId = `gw_shape_grad_${Math.abs(Math.round(gradientAngle) * 31 + (fillType === \"linear\" ? 1 : 2))}`;\n\tlet defs = \"\";\n\tlet fillAttr = fillColor;\n\tif (fillType === \"none\") fillAttr = \"none\";\n\telse if (fillType === \"linear\") {\n\t\tconst coords = calculateLinearGradientCoords(gradientAngle);\n\t\tdefs = `<defs><linearGradient id=\"${gradId}\" x1=\"${coords.x1}\" y1=\"${coords.y1}\" x2=\"${coords.x2}\" y2=\"${coords.y2}\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></linearGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t} else if (fillType === \"radial\") {\n\t\tdefs = `<defs><radialGradient id=\"${gradId}\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></radialGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t}\n\tconst strokeAttrs = strokeWidth > 0 ? `stroke=\"${strokeColor}\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"${strokeLineCap}\" stroke-linejoin=\"${strokeLineJoin}\" ${strokeDashArray ? `stroke-dasharray=\"${strokeDashArray}\"` : \"\"} ${strokeDashOffset ? `stroke-dashoffset=\"${strokeDashOffset}\"` : \"\"}` : \"stroke=\\\"none\\\"\";\n\tconst cx = width / 2;\n\tconst cy = height / 2;\n\tconst transformParts = [];\n\tif (rotation !== 0) transformParts.push(`rotate(${rotation} ${cx} ${cy})`);\n\tif (customPathScale !== 1) transformParts.push(`scale(${customPathScale})`);\n\tconst transformAttr = transformParts.length > 0 ? `transform=\"${transformParts.join(\" \")}\"` : \"\";\n\tconst opacityAttr = opacity < 1 ? `opacity=\"${opacity}\"` : \"\";\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${defs}<g ${transformAttr} ${opacityAttr}><path d=\"${pathD}\" fill=\"${fillAttr}\" ${strokeAttrs} /></g></svg>`;\n}\n/**\n* Encodes the SVG into a base64 data URL for robust cross-environment rendering.\n*/\nfunction generateShapeSvgDataUrl(config) {\n\tconst svgString = generateShapeSvg(config);\n\tif (typeof Buffer !== \"undefined\") return `data:image/svg+xml;base64,${Buffer.from(svgString).toString(\"base64\")}`;\n\treturn `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst ShapeGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props, targetWidth, targetHeight } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"ShapeGenerator\" && op.op !== \"source\") return;\n\tconst svgDataUrl = generateShapeSvgDataUrl(op);\n\tconst width = targetWidth > 0 ? targetWidth : op.width ?? 500;\n\tconst height = targetHeight > 0 ? targetHeight : op.height ?? 500;\n\tconst isHeadless = Boolean(ctx.isHeadless || typeof window === \"undefined\");\n\tawait drawSvgNode(ctx, pass, {\n\t\tsrc: svgDataUrl,\n\t\tdstRect: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t},\n\t\topacity: op.opacity ?? 1,\n\t\tisHeadless\n\t});\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURenderer });\n\n//#endregion\nexport { buildArrowPath as a, buildRectanglePath as c, generateShapePath as d, normalizeCornerRadii as f, generateShapeSvgDataUrl as i, buildStarPath as l, ShapeGeneratorWebGPURenderer as n, buildEllipsePath as o, generateShapeSvg as r, buildPolygonPath as s, renderers_default as t, calculateLinearGradientCoords as u };\n//# sourceMappingURL=renderers-CpnJ1Qiz.mjs.map"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bt as getActiveMediaMetadata } from "./dist-
|
|
1
|
+
import { bt as getActiveMediaMetadata } from "./dist-B9Afsv83.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs
|
|
@@ -320,4 +320,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURend
|
|
|
320
320
|
|
|
321
321
|
//#endregion
|
|
322
322
|
export { renderers_default as default };
|
|
323
|
-
//# sourceMappingURL=renderer-
|
|
323
|
+
//# sourceMappingURL=renderer-h-HOoLwD.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Dm08-hAU.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.scalerUniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: scalerModule,\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\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(srcWidth, srcHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, srcWidth, srcHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: srcWidth,\n\t\theight: srcHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: srcWidth,\n\t\tcontainerHeight: srcHeight\n\t}, tmpView, tmpTex, srcWidth, srcHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: targetView,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\targs.pass = 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};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Bs0GSowy.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-h-HOoLwD.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.scalerUniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: scalerModule,\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\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(srcWidth, srcHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, srcWidth, srcHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: srcWidth,\n\t\theight: srcHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: srcWidth,\n\t\tcontainerHeight: srcHeight\n\t}, tmpView, tmpTex, srcWidth, srcHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: targetView,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\targs.pass = 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};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Bs0GSowy.mjs.map"],"mappings":"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"}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
|
+
import { It as resolveNumber, Rt as resolveString } from "./dist-B9Afsv83.mjs";
|
|
1
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import { et as shaderStore, i as AudioSignalComputePipeline, tt as signalRegistry } from "./dist-
|
|
3
|
+
import { et as shaderStore, i as AudioSignalComputePipeline, tt as signalRegistry } from "./dist-sHqWCB9M.mjs";
|
|
3
4
|
|
|
4
|
-
//#region ../../nodes/node-audio-signal-extractor/dist/renderers-
|
|
5
|
+
//#region ../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs
|
|
5
6
|
const audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {
|
|
6
7
|
if (!ctx?.device) return;
|
|
7
8
|
if (!channels || channels.length === 0 || channels[0].length === 0) return;
|
|
8
9
|
const op = virtualMedia.operation || {};
|
|
9
10
|
const nodeId = op.nodeId || op.id || "audio-signal-extractor";
|
|
10
11
|
const fps = ctx.fps ?? 24;
|
|
12
|
+
const mode = resolveString(op.extractionMode, "");
|
|
13
|
+
const curveStr = resolveString(op.curve, "");
|
|
11
14
|
const config = {
|
|
12
|
-
extractionMode:
|
|
13
|
-
attackMs:
|
|
14
|
-
releaseMs:
|
|
15
|
-
sensitivity:
|
|
16
|
-
noiseFloorDb:
|
|
17
|
-
dynamicRangeDb:
|
|
18
|
-
smoothing:
|
|
19
|
-
curve:
|
|
20
|
-
beatThreshold:
|
|
21
|
-
beatDecayMs:
|
|
15
|
+
extractionMode: mode || void 0,
|
|
16
|
+
attackMs: resolveNumber(op.attackMs, 10),
|
|
17
|
+
releaseMs: resolveNumber(op.releaseMs, 120),
|
|
18
|
+
sensitivity: resolveNumber(op.sensitivity, 1),
|
|
19
|
+
noiseFloorDb: resolveNumber(op.noiseFloorDb, -45),
|
|
20
|
+
dynamicRangeDb: resolveNumber(op.dynamicRangeDb, 36),
|
|
21
|
+
smoothing: resolveNumber(op.smoothing, .15),
|
|
22
|
+
curve: curveStr || void 0,
|
|
23
|
+
beatThreshold: resolveNumber(op.beatThreshold, .55),
|
|
24
|
+
beatDecayMs: resolveNumber(op.beatDecayMs, 80)
|
|
22
25
|
};
|
|
23
26
|
const signals = await AudioSignalComputePipeline.extractFeatures(ctx.device, channels, sampleRate, fps, config, 512);
|
|
24
27
|
signalRegistry.registerBuffer(ctx.device, nodeId, signals.primaryBuffer, ctx.renderId);
|
|
@@ -46,4 +49,4 @@ var renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAud
|
|
|
46
49
|
|
|
47
50
|
//#endregion
|
|
48
51
|
export { renderers_default as t };
|
|
49
|
-
//# sourceMappingURL=renderers-
|
|
52
|
+
//# sourceMappingURL=renderers-CP8CFWDs-CAs5DgWj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers-CP8CFWDs-CAs5DgWj.mjs","names":[],"sources":["../../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { AudioSignalComputePipeline, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) return;\n\tif (!channels || channels.length === 0 || channels[0].length === 0) return;\n\tconst op = virtualMedia.operation || {};\n\tconst nodeId = op.nodeId || op.id || \"audio-signal-extractor\";\n\tconst fps = ctx.fps ?? 24;\n\tconst mode = resolveString(op.extractionMode, \"\");\n\tconst curveStr = resolveString(op.curve, \"\");\n\tconst config = {\n\t\textractionMode: mode || void 0,\n\t\tattackMs: resolveNumber(op.attackMs, 10),\n\t\treleaseMs: resolveNumber(op.releaseMs, 120),\n\t\tsensitivity: resolveNumber(op.sensitivity, 1),\n\t\tnoiseFloorDb: resolveNumber(op.noiseFloorDb, -45),\n\t\tdynamicRangeDb: resolveNumber(op.dynamicRangeDb, 36),\n\t\tsmoothing: resolveNumber(op.smoothing, .15),\n\t\tcurve: curveStr || void 0,\n\t\tbeatThreshold: resolveNumber(op.beatThreshold, .55),\n\t\tbeatDecayMs: resolveNumber(op.beatDecayMs, 80)\n\t};\n\tconst signals = await AudioSignalComputePipeline.extractFeatures(ctx.device, channels, sampleRate, fps, config, 512);\n\tsignalRegistry.registerBuffer(ctx.device, nodeId, signals.primaryBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_beat`, signals.beatBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_bass`, signals.bassBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_energy`, signals.energyBuffer, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, nodeId, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_beat`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_bass`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_energy`, signals.texture, signals.textureView, ctx.renderId);\n\tconst fnName = `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n\tconst wgsl = `\nfn ${fnName}(t: f32, x: f32, y: f32, z: f32, i: u32, n: u32, frame: u32, color: vec4f, t_elapsed: f32, duration: f32) -> f32 {\n return 0.0f;\n}\n`;\n\tshaderStore.register(nodeId, {\n\t\twgsl,\n\t\tname: fnName,\n\t\toutputType: \"f32\",\n\t\tfnParams: []\n\t}, ctx.renderId);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CP8CFWDs.mjs.map"],"mappings":";;;;;AAKA,MAAM,qCAAqC,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7F,KAAI,CAAC,KAAK,OAAQ;AAClB,KAAI,CAAC,YAAY,SAAS,WAAW,KAAK,SAAS,GAAG,WAAW,EAAG;CACpE,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM;CACrC,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG;CACjD,MAAM,WAAW,cAAc,GAAG,OAAO,GAAG;CAC5C,MAAM,SAAS;EACd,gBAAgB,QAAQ,KAAK;EAC7B,UAAU,cAAc,GAAG,UAAU,GAAG;EACxC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,aAAa,cAAc,GAAG,aAAa,EAAE;EAC7C,cAAc,cAAc,GAAG,cAAc,IAAI;EACjD,gBAAgB,cAAc,GAAG,gBAAgB,GAAG;EACpD,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,OAAO,YAAY,KAAK;EACxB,eAAe,cAAc,GAAG,eAAe,IAAI;EACnD,aAAa,cAAc,GAAG,aAAa,GAAG;EAC9C;CACD,MAAM,UAAU,MAAM,2BAA2B,gBAAgB,IAAI,QAAQ,UAAU,YAAY,KAAK,QAAQ,IAAI;AACpH,gBAAe,eAAe,IAAI,QAAQ,QAAQ,QAAQ,eAAe,IAAI,SAAS;AACtF,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,cAAc,IAAI,SAAS;AACjG,gBAAe,gBAAgB,IAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AACtG,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;CAClH,MAAM,SAAS,UAAU,OAAO,QAAQ,iBAAiB,IAAI;CAC7D,MAAM,OAAO;KACT,OAAO;;;;AAIX,aAAY,SAAS,QAAQ;EAC5B;EACA,MAAM;EACN,YAAY;EACZ,UAAU,EAAE;EACZ,EAAE,IAAI,SAAS;;AAKjB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oCAAoC,CAAC"}
|
package/dist/signals/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../chunk-GMkBE123.mjs";
|
|
2
|
-
import { A as SignalRegistryResource, F as buildWGSLSignalFn, Fr as computed, Ir as cosineSignal, Jn as SineSignalOptions, Pn as Signal, Rn as SignalContext, _ as MasterAudioEntry,
|
|
3
|
-
import "../index-
|
|
4
|
-
import "../renderer-
|
|
5
|
-
import { i as _default, n as AudioSignalOptions, r as ExtractedAudioSignalsBundle, t as AudioSignal } from "../audio-
|
|
6
|
-
import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-
|
|
2
|
+
import { A as SignalRegistryResource, F as buildWGSLSignalFn, Fr as computed, Ir as cosineSignal, Jn as SineSignalOptions, Pn as Signal, Rn as SignalContext, _ as MasterAudioEntry, fi as signal, k as SignalRegistry, mi as sineSignal, pi as signalBuilder, q as signalRegistry, qn as SignalValue, s as AudioSignalComputePipeline, zt as FrameSignal } from "../index-WIPHLy5m.mjs";
|
|
3
|
+
import "../index-CZChQhXZ.mjs";
|
|
4
|
+
import "../renderer-Bal8734U.mjs";
|
|
5
|
+
import { i as _default, n as AudioSignalOptions, r as ExtractedAudioSignalsBundle, t as AudioSignal } from "../audio-a6pY05g2.mjs";
|
|
6
|
+
import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-BLbUQolI.mjs";
|
|
7
7
|
export { AudioSignal, AudioSignalComputePipeline, index_d_exports as AudioSignalExtractorNode, AudioSignalOptions, ExtractedAudioSignalsBundle, FrameSignal, MasterAudioEntry, Signal, SignalContext, index_d_exports$1 as SignalGateNode, index_d_exports$2 as SignalMathNode, index_d_exports$3 as SignalNode, SignalRegistry, SignalRegistryResource, SignalValue, SineSignalOptions, buildWGSLSignalFn, computed, cosineSignal, _default as modulateRenderer, signal, signalBuilder, signalRegistry, sineSignal };
|