framefields 2.3.0 → 2.3.2
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.mjs +10 -10
- package/dist/{audio-ChRqnFwB.mjs → audio-C7Kn5xBm.mjs} +3 -3
- package/dist/{audio-ChRqnFwB.mjs.map → audio-C7Kn5xBm.mjs.map} +1 -1
- package/dist/{dist-t-NLlnhM.mjs → dist-CPUIfrtw.mjs} +2 -2
- package/dist/{dist-t-NLlnhM.mjs.map → dist-CPUIfrtw.mjs.map} +1 -1
- package/dist/{dist-PwT_Vmax.mjs → dist-CturBK2Z.mjs} +245 -91
- package/dist/dist-CturBK2Z.mjs.map +1 -0
- package/dist/effects/index.mjs +34 -34
- package/dist/{effects-Duoqc_Oa.mjs → effects-CW1VgdI5.mjs} +2 -2
- package/dist/{effects-Duoqc_Oa.mjs.map → effects-CW1VgdI5.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-CgNmeFXh.mjs → fonts-EgMNL8KE.mjs} +2 -2
- package/dist/{fonts-CgNmeFXh.mjs.map → fonts-EgMNL8KE.mjs.map} +1 -1
- package/dist/{gpu-1ZpAuQOR.mjs → gpu-CN14e7Bi.mjs} +2 -2
- package/dist/{gpu-1ZpAuQOR.mjs.map → gpu-CN14e7Bi.mjs.map} +1 -1
- package/dist/index-AdrZIWT0.d.mts.map +1 -1
- package/dist/index-CeRv1KC0.d.mts.map +1 -1
- package/dist/index.mjs +48 -48
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-CArsjmkd.mjs → preview-1sjnhHQL.mjs} +2 -2
- package/dist/{preview-CArsjmkd.mjs.map → preview-1sjnhHQL.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-VO2R3DWV.mjs → chunk-44CQSOYE.mjs} +1 -1
- package/dist/preview-engine/{chunk-FNE22WGA.mjs → chunk-6AEU4DC7.mjs} +4 -4
- package/dist/preview-engine/{chunk-PR2BUYCL.mjs → chunk-7G3XIOP7.mjs} +1 -1
- package/dist/preview-engine/{chunk-AXQZX3TC.mjs → chunk-AY7UX37L.mjs} +1 -1
- package/dist/preview-engine/{chunk-FPRXK2WD.mjs → chunk-DIGIQ5MJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-K773AOF3.mjs → chunk-EVXWDOCL.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZNL4W4DK.mjs → chunk-EYWPOCZW.mjs} +1 -1
- package/dist/preview-engine/{chunk-WSIURGP2.mjs → chunk-HE4R7EZM.mjs} +1 -1
- package/dist/preview-engine/{chunk-L3CHEZMZ.mjs → chunk-IR5DNNWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-2MZXSWVT.mjs → chunk-JXNG2ACR.mjs} +1 -1
- package/dist/preview-engine/{chunk-O2RNIQXT.mjs → chunk-L6BH5J4P.mjs} +1 -1
- package/dist/preview-engine/{chunk-BVA5NGSH.mjs → chunk-M5HZPZHQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-PFA427ZC.mjs → chunk-MLY5M7Y5.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZH5MZQTZ.mjs → chunk-OG62XGCT.mjs} +1 -1
- package/dist/preview-engine/{chunk-LBRVQ4GE.mjs → chunk-PSRQA3QW.mjs} +1 -1
- package/dist/preview-engine/{chunk-3UPI4EPV.mjs → chunk-Q22PJXFJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-E3HC4GRQ.mjs → chunk-T2FE5VOW.mjs} +1 -1
- package/dist/preview-engine/{chunk-Q2DPNVIA.mjs → chunk-TS3JI3BH.mjs} +1 -1
- package/dist/preview-engine/{chunk-NEE3KQTX.mjs → chunk-U4JIFQRR.mjs} +1 -1
- package/dist/preview-engine/{chunk-DLAHSLNX.mjs → chunk-U7NIY7UC.mjs} +14 -14
- package/dist/preview-engine/{chunk-BQY4BUMN.mjs → chunk-VGZZSPDN.mjs} +1 -1
- package/dist/preview-engine/{chunk-TPAEN6VV.mjs → chunk-VK2CVMWJ.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +3 -3
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -1
- package/dist/preview-engine/renderers-2ILG23ED.mjs +1 -0
- package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -1
- package/dist/preview-engine/{renderers-P4S7GL64.mjs → renderers-2VN3AH45.mjs} +1 -1
- package/dist/preview-engine/{renderers-LLUEOW5T.mjs → renderers-3GHEWWVX.mjs} +1 -1
- package/dist/preview-engine/renderers-3SRG77SC.mjs +1 -1
- package/dist/preview-engine/{renderers-YNFKFM7D.mjs → renderers-3YCJOINH.mjs} +1 -1
- package/dist/preview-engine/{renderers-WP67KK5K.mjs → renderers-4GRVAW2W.mjs} +1 -1
- package/dist/preview-engine/{renderers-BGGRPAVV.mjs → renderers-5FQA2DP4.mjs} +1 -1
- package/dist/preview-engine/{renderers-FGHOLJJK.mjs → renderers-5YEIUTVN.mjs} +1 -1
- package/dist/preview-engine/{renderers-JLFGBYN4.mjs → renderers-6CG7DBTB.mjs} +1 -1
- package/dist/preview-engine/{renderers-O2DZPBOJ.mjs → renderers-6OGFUSH6.mjs} +1 -1
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -1
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -1
- package/dist/preview-engine/{renderers-7JTNJE7M.mjs → renderers-A6HM64UZ.mjs} +1 -1
- package/dist/preview-engine/renderers-B7DSGUMI.mjs +1 -0
- package/dist/preview-engine/renderers-BFNJ7VCI.mjs +1 -0
- package/dist/preview-engine/{renderers-XCMVZ2XG.mjs → renderers-BSKZXITT.mjs} +1 -1
- package/dist/preview-engine/renderers-CGYIDAVV.mjs +1 -0
- package/dist/preview-engine/{renderers-LVDUZZ75.mjs → renderers-CRRLV7IO.mjs} +1 -1
- package/dist/preview-engine/{renderers-TFZST6WW.mjs → renderers-D6T6IPER.mjs} +1 -1
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -1
- package/dist/preview-engine/{renderers-6ODPWZ2R.mjs → renderers-E76OKK66.mjs} +1 -1
- package/dist/preview-engine/renderers-ECA3P4ON.mjs +1 -0
- package/dist/preview-engine/{renderers-7NCG6BYS.mjs → renderers-EJWPVVQR.mjs} +1 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -1
- package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -1
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -1
- package/dist/preview-engine/{renderers-ZSENYGIY.mjs → renderers-I5E2RSV4.mjs} +1 -1
- package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -1
- package/dist/preview-engine/renderers-JHFT27YU.mjs +1 -0
- package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -1
- package/dist/preview-engine/{renderers-FQWWAETX.mjs → renderers-MCECHPCL.mjs} +1 -1
- package/dist/preview-engine/renderers-MON4QFRF.mjs +1 -0
- package/dist/preview-engine/{renderers-UJ4YVJZT.mjs → renderers-N7FR54V2.mjs} +1 -1
- package/dist/preview-engine/{renderers-PVYP2ONH.mjs → renderers-N7TS5562.mjs} +1 -1
- package/dist/preview-engine/renderers-NQXMYNSY.mjs +1 -0
- package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -1
- package/dist/preview-engine/renderers-ORAIXUL3.mjs +1 -0
- package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -1
- package/dist/preview-engine/{renderers-WHBDHTRI.mjs → renderers-PYWXELLG.mjs} +1 -1
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -1
- package/dist/preview-engine/renderers-QVZVEYP5.mjs +1 -0
- package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -1
- package/dist/preview-engine/renderers-RKDPX5JU.mjs +1 -0
- package/dist/preview-engine/{renderers-D2EJULOJ.mjs → renderers-RLHTNLRE.mjs} +1 -1
- package/dist/preview-engine/renderers-SBFF7JP5.mjs +1 -0
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -1
- package/dist/preview-engine/{renderers-HMR2NAD7.mjs → renderers-TR2V2HZ2.mjs} +1 -1
- package/dist/preview-engine/{renderers-UPKB5OLS.mjs → renderers-U6KY34TP.mjs} +1 -1
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -1
- package/dist/preview-engine/renderers-UNK6I4JJ.mjs +1 -0
- package/dist/preview-engine/renderers-W773SBPV.mjs +1 -0
- package/dist/preview-engine/{renderers-527ONFIA.mjs → renderers-WP2LBR5U.mjs} +1 -1
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -1
- package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -1
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -1
- package/dist/preview-engine/{renderers-DN2GF3I7.mjs → renderers-YMPXGYRU.mjs} +1 -1
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -1
- package/dist/preview-engine/renderers-ZHTX73PR.mjs +1 -0
- package/dist/preview-engine/{renderers-TPBPNXWH.mjs → renderers-ZHZMGMLN.mjs} +1 -1
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-Dd9tJFkY.mjs → program-DtiNMTxO.mjs} +2 -2
- package/dist/{program-Dd9tJFkY.mjs.map → program-DtiNMTxO.mjs.map} +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-7OvgLE8w.mjs → renderer--Da6pAJ4.mjs} +2 -2
- package/dist/{renderer-yGAk7J9P.mjs → renderer--S2cNYXS.mjs} +3 -3
- package/dist/{renderer-yGAk7J9P.mjs.map → renderer--S2cNYXS.mjs.map} +1 -1
- package/dist/renderer-1hypa-l7.mjs +5 -0
- package/dist/renderer-6D8M4DRu.mjs +5 -0
- package/dist/{renderer-257LxOyx.mjs → renderer-6QAlE1Mp.mjs} +3 -3
- package/dist/{renderer-257LxOyx.mjs.map → renderer-6QAlE1Mp.mjs.map} +1 -1
- package/dist/{renderer-C-Qj0BnT.mjs → renderer-8k-TR_Cy.mjs} +3 -3
- package/dist/{renderer-C-Qj0BnT.mjs.map → renderer-8k-TR_Cy.mjs.map} +1 -1
- package/dist/renderer-APrj6tdP.mjs +5 -0
- package/dist/{renderer-CKpwEo1w.mjs → renderer-B3x-uogM.mjs} +3 -3
- package/dist/{renderer-CKpwEo1w.mjs.map → renderer-B3x-uogM.mjs.map} +1 -1
- package/dist/{renderer-C4tUATd_.mjs → renderer-B48vtpou.mjs} +3 -3
- package/dist/{renderer-C4tUATd_.mjs.map → renderer-B48vtpou.mjs.map} +1 -1
- package/dist/{renderer-aCDIEYb3.mjs → renderer-B5Icb0XW.mjs} +2 -2
- package/dist/{renderer-aCDIEYb3.mjs.map → renderer-B5Icb0XW.mjs.map} +1 -1
- package/dist/{renderer-2BnBo6CX.mjs → renderer-B6c_Rk_2.mjs} +3 -3
- package/dist/{renderer-2BnBo6CX.mjs.map → renderer-B6c_Rk_2.mjs.map} +1 -1
- package/dist/{renderer-CS-goRD3.mjs → renderer-BAmGO6Hj.mjs} +3 -3
- package/dist/{renderer-CS-goRD3.mjs.map → renderer-BAmGO6Hj.mjs.map} +1 -1
- package/dist/renderer-BF8wlbN1.mjs +5 -0
- package/dist/{renderer-CxP2e6Ov.mjs → renderer-BFHgl-0f.mjs} +2 -2
- package/dist/{renderer-CxP2e6Ov.mjs.map → renderer-BFHgl-0f.mjs.map} +1 -1
- package/dist/{renderer-D0xLIq1r.mjs → renderer-BI1nmIqA.mjs} +3 -3
- package/dist/{renderer-D0xLIq1r.mjs.map → renderer-BI1nmIqA.mjs.map} +1 -1
- package/dist/renderer-BOUcMCJB.mjs +5 -0
- package/dist/{renderer-D1T7A3NF.mjs → renderer-BRWpn3dT.mjs} +3 -3
- package/dist/{renderer-D1T7A3NF.mjs.map → renderer-BRWpn3dT.mjs.map} +1 -1
- package/dist/renderer-BSwn6KmG.mjs +5 -0
- package/dist/renderer-BUxvuC5A.mjs +5 -0
- package/dist/{renderer-72A4SvOE.mjs → renderer-BXCZev4l.mjs} +3 -3
- package/dist/{renderer-72A4SvOE.mjs.map → renderer-BXCZev4l.mjs.map} +1 -1
- package/dist/renderer-BYOsmJ8F.mjs +5 -0
- package/dist/{renderer-D1MOTlWS.mjs → renderer-BYj8x8YM.mjs} +2 -2
- package/dist/{renderer-D1MOTlWS.mjs.map → renderer-BYj8x8YM.mjs.map} +1 -1
- package/dist/{renderer-UT0CcmMZ.mjs → renderer-BaOC1Pd1.mjs} +3 -3
- package/dist/{renderer-UT0CcmMZ.mjs.map → renderer-BaOC1Pd1.mjs.map} +1 -1
- package/dist/{renderer-BY08hHFS.mjs → renderer-BebePsG7.mjs} +2 -2
- package/dist/{renderer-BY08hHFS.mjs.map → renderer-BebePsG7.mjs.map} +1 -1
- package/dist/{renderer-DzOzVxNS.mjs → renderer-Bf4BdBtb.mjs} +2 -2
- package/dist/{renderer-DzOzVxNS.mjs.map → renderer-Bf4BdBtb.mjs.map} +1 -1
- package/dist/{renderer-zQIB2VZZ.mjs → renderer-BkXqFmNO.mjs} +2 -2
- package/dist/{renderer-zQIB2VZZ.mjs.map → renderer-BkXqFmNO.mjs.map} +1 -1
- package/dist/{renderer-YyEBKPcE.mjs → renderer-BlafvK-L.mjs} +2 -2
- package/dist/{renderer-OxafT7Xm.mjs → renderer-BmWH4dK1.mjs} +5 -5
- package/dist/{renderer-OxafT7Xm.mjs.map → renderer-BmWH4dK1.mjs.map} +1 -1
- package/dist/renderer-Bp7LqSTt.mjs +5 -0
- package/dist/{renderer-D-yNHLG7.mjs → renderer-Bq9jXYJ5.mjs} +3 -3
- package/dist/{renderer-D-yNHLG7.mjs.map → renderer-Bq9jXYJ5.mjs.map} +1 -1
- package/dist/{renderer-BVR0mEIT.mjs → renderer-BqSiWRoD.mjs} +2 -2
- package/dist/{renderer-BVR0mEIT.mjs.map → renderer-BqSiWRoD.mjs.map} +1 -1
- package/dist/{renderer-DyPgVl1l.mjs → renderer-ButaUWLr.mjs} +3 -3
- package/dist/{renderer-DyPgVl1l.mjs.map → renderer-ButaUWLr.mjs.map} +1 -1
- package/dist/{renderer-94byj7Mk.mjs → renderer-C2Ff-9u_.mjs} +2 -2
- package/dist/{renderer-94byj7Mk.mjs.map → renderer-C2Ff-9u_.mjs.map} +1 -1
- package/dist/{renderer-DpQaiH6C.mjs → renderer-C4puWDLK.mjs} +2 -2
- package/dist/{renderer-DpQaiH6C.mjs.map → renderer-C4puWDLK.mjs.map} +1 -1
- package/dist/{renderer-D6YcQTLI.mjs → renderer-CBG6ewNf.mjs} +3 -3
- package/dist/{renderer-D6YcQTLI.mjs.map → renderer-CBG6ewNf.mjs.map} +1 -1
- package/dist/renderer-CD0amH_Q.mjs +5 -0
- package/dist/renderer-CIJGjrt7.mjs +5 -0
- package/dist/{renderer-CIMI33Yd.mjs → renderer-CJwgsecF.mjs} +2 -2
- package/dist/{renderer-CIMI33Yd.mjs.map → renderer-CJwgsecF.mjs.map} +1 -1
- package/dist/{renderer-aN60v8jR.mjs → renderer-CMzd3BrW.mjs} +2 -2
- package/dist/{renderer-aN60v8jR.mjs.map → renderer-CMzd3BrW.mjs.map} +1 -1
- package/dist/renderer-CNFTl94b.mjs +5 -0
- package/dist/{renderer-DJQD7tai.mjs → renderer-CPNLkir4.mjs} +2 -2
- package/dist/{renderer-DJQD7tai.mjs.map → renderer-CPNLkir4.mjs.map} +1 -1
- package/dist/{renderer-CLUyYFqS.mjs → renderer-CRYO5HQw.mjs} +2 -2
- package/dist/{renderer-CLUyYFqS.mjs.map → renderer-CRYO5HQw.mjs.map} +1 -1
- package/dist/renderer-CTJ0gHPS.mjs +5 -0
- package/dist/{renderer-Dju3SEAJ.mjs → renderer-CbNW0KHh.mjs} +3 -3
- package/dist/{renderer-Dju3SEAJ.mjs.map → renderer-CbNW0KHh.mjs.map} +1 -1
- package/dist/renderer-Cc3INn7w.mjs +5 -0
- package/dist/{renderer-BK32cV7E.mjs → renderer-CczmOPAO.mjs} +3 -3
- package/dist/{renderer-BK32cV7E.mjs.map → renderer-CczmOPAO.mjs.map} +1 -1
- package/dist/renderer-CeHh2lKY.mjs +5 -0
- package/dist/renderer-CfjwkQP4.mjs +5 -0
- package/dist/{renderer-0L9MEb3A.mjs → renderer-CgEMtLOL.mjs} +2 -2
- package/dist/{renderer-0L9MEb3A.mjs.map → renderer-CgEMtLOL.mjs.map} +1 -1
- package/dist/{renderer-CWQ-Bct7.mjs → renderer-Ch1rv1XP.mjs} +2 -2
- package/dist/{renderer-CWQ-Bct7.mjs.map → renderer-Ch1rv1XP.mjs.map} +1 -1
- package/dist/renderer-CiuOB-Md.mjs +5 -0
- package/dist/{renderer-DNYSf2Fl.mjs → renderer-ClK7_Yzz.mjs} +2 -2
- package/dist/{renderer-DNYSf2Fl.mjs.map → renderer-ClK7_Yzz.mjs.map} +1 -1
- package/dist/renderer-Cor66Y2X.mjs +5 -0
- package/dist/renderer-CtIM0LWe.mjs +5 -0
- package/dist/renderer-CyqgTsnx.mjs +5 -0
- package/dist/{renderer-DWcbrx2M.mjs → renderer-Cz11KJmQ.mjs} +2 -2
- package/dist/{renderer-DWcbrx2M.mjs.map → renderer-Cz11KJmQ.mjs.map} +1 -1
- package/dist/{renderer-B2aXfdW_.mjs → renderer-D-eTVnDS.mjs} +2 -2
- package/dist/{renderer-B2aXfdW_.mjs.map → renderer-D-eTVnDS.mjs.map} +1 -1
- package/dist/renderer-D2QG9yIW.mjs +5 -0
- package/dist/renderer-D2woU27o.mjs +6 -0
- package/dist/{renderer-EhCkD11e.mjs → renderer-D8tdGi2P.mjs} +3 -3
- package/dist/{renderer-EhCkD11e.mjs.map → renderer-D8tdGi2P.mjs.map} +1 -1
- package/dist/{renderer-DuxzqfoE.mjs → renderer-D90PpIKG.mjs} +2 -2
- package/dist/renderer-DAhDiQQY.mjs +5 -0
- package/dist/{renderer-BmQbSQHf.mjs → renderer-DDBmBmQN.mjs} +2 -2
- package/dist/{renderer-BmQbSQHf.mjs.map → renderer-DDBmBmQN.mjs.map} +1 -1
- package/dist/renderer-DIjxOQFi.mjs +5 -0
- package/dist/{renderer-_AuL8mAi.mjs → renderer-DJWQWN1E.mjs} +3 -3
- package/dist/{renderer-_AuL8mAi.mjs.map → renderer-DJWQWN1E.mjs.map} +1 -1
- package/dist/{renderer-JiEpssIz.mjs → renderer-DL4oR40b.mjs} +2 -2
- package/dist/{renderer-JiEpssIz.mjs.map → renderer-DL4oR40b.mjs.map} +1 -1
- package/dist/{renderer-CrUudSLP.mjs → renderer-DNhOjz6C.mjs} +2 -2
- package/dist/{renderer-CrUudSLP.mjs.map → renderer-DNhOjz6C.mjs.map} +1 -1
- package/dist/renderer-DRzalGhU.mjs +5 -0
- package/dist/{renderer-BpdzhZE7.mjs → renderer-DS64UaYK.mjs} +3 -3
- package/dist/{renderer-BpdzhZE7.mjs.map → renderer-DS64UaYK.mjs.map} +1 -1
- package/dist/renderer-DY6S1jWp.mjs +5 -0
- package/dist/{renderer-CSPpKLi3.mjs → renderer-DYo_a5-8.mjs} +2 -2
- package/dist/{renderer-CSPpKLi3.mjs.map → renderer-DYo_a5-8.mjs.map} +1 -1
- package/dist/{renderer-Ck2pRec0.mjs → renderer-DacnnTjY.mjs} +3 -3
- package/dist/{renderer-Ck2pRec0.mjs.map → renderer-DacnnTjY.mjs.map} +1 -1
- package/dist/renderer-DeW0KNQV.mjs +5 -0
- package/dist/{renderer-CvOzuDX3.mjs → renderer-DjPC9l3w.mjs} +3 -3
- package/dist/{renderer-CvOzuDX3.mjs.map → renderer-DjPC9l3w.mjs.map} +1 -1
- package/dist/{renderer-BId5hBLb.mjs → renderer-DjwF10p2.mjs} +3 -3
- package/dist/{renderer-BId5hBLb.mjs.map → renderer-DjwF10p2.mjs.map} +1 -1
- package/dist/{renderer-CraudZUC.mjs → renderer-DmOewVsB.mjs} +3 -3
- package/dist/{renderer-CraudZUC.mjs.map → renderer-DmOewVsB.mjs.map} +1 -1
- package/dist/{renderer-BHrqEgIA.mjs → renderer-DqlvbOUt.mjs} +3 -3
- package/dist/{renderer-BHrqEgIA.mjs.map → renderer-DqlvbOUt.mjs.map} +1 -1
- package/dist/renderer-DsVSVFkl.mjs +5 -0
- package/dist/{renderer-DIqwz7dV.mjs → renderer-DvoPplvC.mjs} +2 -2
- package/dist/{renderer-BEpANdcO.mjs → renderer-Dw1e5phO.mjs} +3 -3
- package/dist/{renderer-BEpANdcO.mjs.map → renderer-Dw1e5phO.mjs.map} +1 -1
- package/dist/renderer-DxvcIgEU.mjs +5 -0
- package/dist/renderer-F0MKqmol.mjs +5 -0
- package/dist/{renderer-CKSdl0Xf.mjs → renderer-F410V727.mjs} +3 -3
- package/dist/{renderer-CKSdl0Xf.mjs.map → renderer-F410V727.mjs.map} +1 -1
- package/dist/{renderer-B3ypX3MH.mjs → renderer-Fm2brScz.mjs} +3 -3
- package/dist/{renderer-B3ypX3MH.mjs.map → renderer-Fm2brScz.mjs.map} +1 -1
- package/dist/{renderer-CI9Pq77W.mjs → renderer-GlyeFl5R.mjs} +3 -3
- package/dist/{renderer-CI9Pq77W.mjs.map → renderer-GlyeFl5R.mjs.map} +1 -1
- package/dist/{renderer-DZnUiiBp.mjs → renderer-ITtBRR4o.mjs} +3 -3
- package/dist/{renderer-DZnUiiBp.mjs.map → renderer-ITtBRR4o.mjs.map} +1 -1
- package/dist/{renderer-CwwmwM7J.mjs → renderer-Kj9AhRCc.mjs} +3 -3
- package/dist/{renderer-CwwmwM7J.mjs.map → renderer-Kj9AhRCc.mjs.map} +1 -1
- package/dist/{renderer-DNaHFctD.mjs → renderer-MS70wrQB.mjs} +2 -2
- package/dist/{renderer-DNaHFctD.mjs.map → renderer-MS70wrQB.mjs.map} +1 -1
- package/dist/{renderer-BEdc-7JW.mjs → renderer-Mdyv_W8K.mjs} +3 -3
- package/dist/{renderer-BEdc-7JW.mjs.map → renderer-Mdyv_W8K.mjs.map} +1 -1
- package/dist/renderer-OkbovcAc.mjs +5 -0
- package/dist/{renderer-Dvq11SEA.mjs → renderer-QMGrRiab.mjs} +2 -2
- package/dist/{renderer-Dvq11SEA.mjs.map → renderer-QMGrRiab.mjs.map} +1 -1
- package/dist/renderer-QyBeWMEL.mjs +5 -0
- package/dist/{renderer-B3c-j-e5.mjs → renderer-R0sJId_6.mjs} +2 -2
- package/dist/{renderer-B3c-j-e5.mjs.map → renderer-R0sJId_6.mjs.map} +1 -1
- package/dist/{renderer-DKXK5hDm.mjs → renderer-Rg1BFv8B.mjs} +2 -2
- package/dist/{renderer-DKXK5hDm.mjs.map → renderer-Rg1BFv8B.mjs.map} +1 -1
- package/dist/{renderer-BmTDXIUI.mjs → renderer-S6ez0leJ.mjs} +2 -2
- package/dist/{renderer-BmTDXIUI.mjs.map → renderer-S6ez0leJ.mjs.map} +1 -1
- package/dist/{renderer-ChoYV7Ko.mjs → renderer-YtRSM2cv.mjs} +2 -2
- package/dist/{renderer-ChoYV7Ko.mjs.map → renderer-YtRSM2cv.mjs.map} +1 -1
- package/dist/{renderer-CC72sZ8l.mjs → renderer-_-MCpvGq.mjs} +91 -73
- package/dist/renderer-_-MCpvGq.mjs.map +1 -0
- package/dist/{renderer-xezE7IZX.mjs → renderer-_Fh9IBlE.mjs} +3 -3
- package/dist/{renderer-xezE7IZX.mjs.map → renderer-_Fh9IBlE.mjs.map} +1 -1
- package/dist/{renderer-mpInX4Iy.mjs → renderer-dJcu7WqI.mjs} +3 -3
- package/dist/{renderer-mpInX4Iy.mjs.map → renderer-dJcu7WqI.mjs.map} +1 -1
- package/dist/renderer-hSh5IrDp.mjs +5 -0
- package/dist/{renderer-Dvg5nbgU.mjs → renderer-ktpusVT2.mjs} +3 -3
- package/dist/{renderer-Dvg5nbgU.mjs.map → renderer-ktpusVT2.mjs.map} +1 -1
- package/dist/renderer-puLncHft.mjs +5 -0
- package/dist/{renderer-D8_UYdDb.mjs → renderer-w8LKBg_5.mjs} +2 -2
- package/dist/{renderer-D8_UYdDb.mjs.map → renderer-w8LKBg_5.mjs.map} +1 -1
- package/dist/renderer-wnFCaw7j.mjs +5 -0
- package/dist/renderer-xjtlyGS1.mjs +5 -0
- package/dist/{renderer-Cvysm2Jg.mjs → renderer-z3YOOR3k.mjs} +3 -3
- package/dist/{renderer-Cvysm2Jg.mjs.map → renderer-z3YOOR3k.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-i6u_rhCX.mjs → renderers-CP8CFWDs-DXiR_PLR.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-i6u_rhCX.mjs.map → renderers-CP8CFWDs-DXiR_PLR.mjs.map} +1 -1
- package/dist/signals/index.mjs +4 -4
- package/package.json +56 -56
- package/dist/dist-PwT_Vmax.mjs.map +0 -1
- package/dist/preview-engine/chunk-OCX5AD23.mjs +0 -1
- package/dist/preview-engine/renderers-3T7Q4SPP.mjs +0 -1
- package/dist/preview-engine/renderers-4DV4REGM.mjs +0 -1
- package/dist/preview-engine/renderers-CQXQHOW2.mjs +0 -1
- package/dist/preview-engine/renderers-IXGM55XK.mjs +0 -1
- package/dist/preview-engine/renderers-KVHUVWSN.mjs +0 -1
- package/dist/preview-engine/renderers-M7R2ZJUP.mjs +0 -1
- package/dist/preview-engine/renderers-PMOO7DLX.mjs +0 -1
- package/dist/preview-engine/renderers-QCCPCH73.mjs +0 -1
- package/dist/preview-engine/renderers-RRXFJRGI.mjs +0 -1
- package/dist/preview-engine/renderers-VLMQR3DW.mjs +0 -1
- package/dist/preview-engine/renderers-WVTTRCVI.mjs +0 -1
- package/dist/preview-engine/renderers-X5PUIPU5.mjs +0 -1
- package/dist/preview-engine/renderers-YDCDY3BR.mjs +0 -1
- package/dist/preview-engine/renderers-YJNQ4B7B.mjs +0 -1
- package/dist/preview-engine/renderers-Z7YQUFAY.mjs +0 -1
- package/dist/preview-engine/skia-canvas-QBXAOGPB.mjs +0 -1
- package/dist/renderer-0lp9ClNc.mjs +0 -5
- package/dist/renderer-4g_BfiKp.mjs +0 -5
- package/dist/renderer-7Aw6AHqW.mjs +0 -5
- package/dist/renderer-B82v8PyC.mjs +0 -5
- package/dist/renderer-B8BDMJNz.mjs +0 -5
- package/dist/renderer-BCPRrhP8.mjs +0 -5
- package/dist/renderer-BFhzO6En.mjs +0 -5
- package/dist/renderer-BH0KF-y-.mjs +0 -6
- package/dist/renderer-BTI5ybyH.mjs +0 -5
- package/dist/renderer-Ba7LH8U2.mjs +0 -5
- package/dist/renderer-BcQBlfhC.mjs +0 -5
- package/dist/renderer-BdMJzCTz.mjs +0 -5
- package/dist/renderer-Bxi2j-tG.mjs +0 -5
- package/dist/renderer-CC72sZ8l.mjs.map +0 -1
- package/dist/renderer-CCn5ISVM.mjs +0 -5
- package/dist/renderer-CDRsdhg9.mjs +0 -5
- package/dist/renderer-CiCK8ZG_.mjs +0 -5
- package/dist/renderer-CsEk9TFz.mjs +0 -5
- package/dist/renderer-D1gx_-hi.mjs +0 -5
- package/dist/renderer-D5MCGNAF.mjs +0 -5
- package/dist/renderer-DD_MzvM-.mjs +0 -5
- package/dist/renderer-DP7YoZ0K.mjs +0 -5
- package/dist/renderer-DXiWvKij.mjs +0 -5
- package/dist/renderer-Dc6fW-o1.mjs +0 -5
- package/dist/renderer-DiurlsNT.mjs +0 -5
- package/dist/renderer-DvCUdgVz.mjs +0 -5
- package/dist/renderer-IiwAh9-K.mjs +0 -5
- package/dist/renderer-JlGXqH0E.mjs +0 -5
- package/dist/renderer-TZFKKgL1.mjs +0 -5
- package/dist/renderer-aEecoNPX.mjs +0 -5
- package/dist/renderer-ewhliYYP.mjs +0 -5
- package/dist/renderer-hQc6GgTi.mjs +0 -5
- package/dist/renderer-iuX0RZIi.mjs +0 -5
- package/dist/renderer-j4vkTzHa.mjs +0 -5
- package/dist/renderer-msPjwx_9.mjs +0 -5
- package/dist/renderer-pI2ndu-b.mjs +0 -5
- package/dist/renderer-x1OGMhsC.mjs +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-EhCkD11e.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tflow: new OpticalFlowComputePipeline(device),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height, format) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\n\t]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-D8tdGi2P.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tflow: new OpticalFlowComputePipeline(device),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height, format) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\n\t]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-GBe2k3y8.mjs";
|
|
2
|
-
import "./dist-
|
|
3
|
-
import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-
|
|
2
|
+
import "./dist-CturBK2Z.mjs";
|
|
3
|
+
import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-R0sJId_6.mjs";
|
|
4
4
|
|
|
5
5
|
export { PatchHealWebGPURenderer, renderers_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Jt as resolveNumber, Pt as isSignal } from "./dist-fjKpBYkc.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import { g as WebGPUAudioProcessor } from "./dist-
|
|
3
|
+
import { g as WebGPUAudioProcessor } from "./dist-CturBK2Z.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs
|
|
6
6
|
const PARAM_ORDER = ["pan"];
|
|
@@ -96,4 +96,4 @@ var renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProce
|
|
|
96
96
|
|
|
97
97
|
//#endregion
|
|
98
98
|
export { renderers_default as t };
|
|
99
|
-
//# sourceMappingURL=renderer-
|
|
99
|
+
//# sourceMappingURL=renderer-DDBmBmQN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DDBmBmQN.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-GBe2k3y8.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-CturBK2Z.mjs";
|
|
4
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs
|
|
7
7
|
const CANVAS_SHADER = `
|
|
@@ -127,4 +127,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURe
|
|
|
127
127
|
|
|
128
128
|
//#endregion
|
|
129
129
|
export { CanvasGeneratorWebGPURenderer, renderers_default as default };
|
|
130
|
-
//# sourceMappingURL=renderer-
|
|
130
|
+
//# sourceMappingURL=renderer-DJWQWN1E.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DJWQWN1E.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer, o as resolveHandleParam } from "./renderer-BSitV56h.mjs";
|
|
2
2
|
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CN14e7Bi.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs
|
|
@@ -253,4 +253,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
|
|
|
253
253
|
|
|
254
254
|
//#endregion
|
|
255
255
|
export { renderers_default as t };
|
|
256
|
-
//# sourceMappingURL=renderer-
|
|
256
|
+
//# sourceMappingURL=renderer-DL4oR40b.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-JiEpssIz.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 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${FULLSCREEN_QUAD_WGSL}\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 = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 2);\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\thighPassUniformLayout,\n\t\t\t\tsingleTextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"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) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\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 { texture: tmpTex } = await drawChildToTexture(args, childMedia);\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, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst 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\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(outTex1, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\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-DUL8Peaw.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DL4oR40b.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 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${FULLSCREEN_QUAD_WGSL}\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 = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 2);\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\thighPassUniformLayout,\n\t\t\t\tsingleTextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"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) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\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 { texture: tmpTex } = await drawChildToTexture(args, childMedia);\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, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst 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\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(outTex1, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\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-DUL8Peaw.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CN14e7Bi.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs
|
|
5
5
|
const MAX_OPERATIONS = 1024;
|
|
@@ -184,4 +184,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer }
|
|
|
184
184
|
|
|
185
185
|
//#endregion
|
|
186
186
|
export { renderers_default as n, LiquifyWebGPURenderer as t };
|
|
187
|
-
//# sourceMappingURL=renderer-
|
|
187
|
+
//# sourceMappingURL=renderer-DNhOjz6C.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DNhOjz6C.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !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 aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.mjs.map"],"mappings":";;;;AAIA,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;EAuBrB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,SAAS,oBAAoB,QAAQ,QAAQ;CAC5C,IAAI,UAAU,oBAAoB,IAAI,OAAO;AAC7C,KAAI,CAAC,SAAS;AACb,YAAU;GACT,eAAe,wBAAwB,QAAQ,CAAC,UAAU,EAAE,uBAAuB;GACnF,qBAAqB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,EAAE,uBAAuB;GACpG,+BAA+B,IAAI,KAAK;GACxC;AACD,sBAAoB,IAAI,QAAQ,QAAQ;;CAEzC,MAAM,WAAW;CACjB,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,mBAAmB;GAC1B;GACA,SAAS,CAAC,QAAQ,eAAe,QAAQ,oBAAoB;GAC7D;GACA,OAAO;GACP,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,iBAAiB;EACjB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B;;AAEF,MAAM,gBAAgB;CACrB,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,SAAS;CACT,UAAU;CACV;AACD,MAAM,wBAAwB,OAAO,SAAS;CAC7C,MAAM,EAAE,KAAK,MAAM,aAAa,cAAc,UAAU;CACxD,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,aAAa,CAAC,GAAI;CACjC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,cAAc,SAAS,IAAI,QAAQ,SAAS;CAClD,MAAM,EAAE,SAAS,iBAAiB,MAAM,mBAAmB,MAAM,YAAY,EAAE,OAAO;EACrF,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,CAAC;CACJ,MAAM,aAAa,GAAG,cAAc,EAAE;CACtC,MAAM,UAAU,KAAK,IAAI,WAAW,QAAQ,eAAe;CAC3D,MAAM,cAAc,IAAI,aAAa,IAAI,iBAAiB,EAAE;AAC5D,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;EACjC,MAAM,OAAO,WAAW;AACxB,MAAI,CAAC,KAAM;EACX,MAAM,SAAS,IAAI,IAAI;AACvB,cAAY,SAAS,KAAK,cAAc,KAAK,SAAS;AACtD,cAAY,SAAS,KAAK,KAAK;AAC/B,cAAY,SAAS,KAAK,KAAK;AAC/B,cAAY,SAAS,KAAK,KAAK,UAAU;AACzC,cAAY,SAAS,KAAK,KAAK,YAAY;AAC3C,cAAY,SAAS,KAAK,KAAK,MAAM;AACrC,cAAY,SAAS,KAAK,KAAK,MAAM;AACrC,cAAY,SAAS,KAAK;;CAE3B,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,YAAY,oBAAoB,IAAI,QAAQ,IAAI,SAAS,OAAO;CACtE,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,mBAAmB,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,UAAU,qBAAqB,cAAc,QAAQ;CACnI,MAAM,UAAU,gBAAgB,KAAK;AACrC,SAAQ,YAAY,UAAU,gBAAgB;AAC9C,SAAQ,aAAa,GAAG,iBAAiB;AACzC,SAAQ,aAAa,GAAG,iBAAiB;AACzC,SAAQ,KAAK,GAAG,GAAG,GAAG,EAAE;;AAKzB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,uBAAuB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-GBe2k3y8.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-CturBK2Z.mjs";
|
|
4
|
+
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs
|
|
7
7
|
const OP = "CRT";
|
|
@@ -221,4 +221,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });
|
|
|
221
221
|
|
|
222
222
|
//#endregion
|
|
223
223
|
export { CRTWebGPURenderer, renderers_default as default };
|
|
224
|
-
//# sourceMappingURL=renderer-
|
|
224
|
+
//# sourceMappingURL=renderer-DS64UaYK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BpdzhZE7.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DS64UaYK.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Jt as resolveNumber, Xt as resolveString } from "./dist-fjKpBYkc.mjs";
|
|
2
2
|
import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import { g as WebGPUAudioProcessor } from "./dist-
|
|
3
|
+
import { g as WebGPUAudioProcessor } from "./dist-CturBK2Z.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs
|
|
6
6
|
const PARAM_ORDER = ["fadeInDuration", "fadeOutDuration"];
|
|
@@ -173,4 +173,4 @@ var renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });
|
|
|
173
173
|
|
|
174
174
|
//#endregion
|
|
175
175
|
export { renderers_default as t };
|
|
176
|
-
//# sourceMappingURL=renderer-
|
|
176
|
+
//# sourceMappingURL=renderer-DYo_a5-8.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DYo_a5-8.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { l as unwrapFrameParam, n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
2
|
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
|
|
3
|
-
import { Nn as signalRegistry } from "./dist-
|
|
4
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import { Nn as signalRegistry } from "./dist-CturBK2Z.mjs";
|
|
4
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
|
|
7
7
|
//#region ../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs
|
|
@@ -845,4 +845,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });
|
|
|
845
845
|
|
|
846
846
|
//#endregion
|
|
847
847
|
export { renderers_default as t };
|
|
848
|
-
//# sourceMappingURL=renderer-
|
|
848
|
+
//# sourceMappingURL=renderer-DacnnTjY.mjs.map
|