framefields 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +11 -11
- package/dist/{audio-C2fLC3Tx.d.mts → audio-CfBpzxn9.d.mts} +3 -3
- package/dist/{audio-C2fLC3Tx.d.mts.map → audio-CfBpzxn9.d.mts.map} +1 -1
- package/dist/{audio-D_4SeMRK.mjs → audio-GGuQ_JI0.mjs} +3 -3
- package/dist/{audio-D_4SeMRK.mjs.map → audio-GGuQ_JI0.mjs.map} +1 -1
- package/dist/{chunk-GMkBE123.mjs → chunk-GBe2k3y8.mjs} +1 -4
- package/dist/{dist-DlzqyRar.mjs → dist-Bb8BoMiw.mjs} +3 -10
- package/dist/dist-Bb8BoMiw.mjs.map +1 -0
- package/dist/{dist-Bun_TUvZ.mjs → dist-DkuDAIrG.mjs} +2 -2
- package/dist/{dist-Bun_TUvZ.mjs.map → dist-DkuDAIrG.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-FTlu0dri.mjs → effects-D6wFg2FR.mjs} +2 -2
- package/dist/{effects-FTlu0dri.mjs.map → effects-D6wFg2FR.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-UM5xaBOx.mjs → fonts-CZMYtbP7.mjs} +2 -2
- package/dist/{fonts-UM5xaBOx.mjs.map → fonts-CZMYtbP7.mjs.map} +1 -1
- package/dist/{gpu-RkpiFGOA.mjs → gpu-DG3gI88-.mjs} +2 -2
- package/dist/{gpu-RkpiFGOA.mjs.map → gpu-DG3gI88-.mjs.map} +1 -1
- package/dist/{index-DsOqONsj.d.mts → index--0vVZDPM.d.mts} +3 -3
- package/dist/{index-DsOqONsj.d.mts.map → index--0vVZDPM.d.mts.map} +1 -1
- package/dist/{index-l03NV8JS.d.mts → index-BcA8rep0.d.mts} +1 -1
- package/dist/{index-l03NV8JS.d.mts.map → index-BcA8rep0.d.mts.map} +1 -1
- package/dist/{index-Db8Z3AtX.d.mts → index-BzQc812z.d.mts} +3 -3
- package/dist/{index-Db8Z3AtX.d.mts.map → index-BzQc812z.d.mts.map} +1 -1
- package/dist/{index-D67p-rHX.d.mts → index-Cpkzy5XR.d.mts} +1 -1
- package/dist/{index-D67p-rHX.d.mts.map → index-Cpkzy5XR.d.mts.map} +1 -1
- package/dist/{index-CzQseCtg.d.mts → index-D__HdInU.d.mts} +4 -4
- package/dist/{index-CzQseCtg.d.mts.map → index-D__HdInU.d.mts.map} +1 -1
- package/dist/{index-CHQ39_Oe.d.mts → index-DpWia6iH.d.mts} +4 -11
- package/dist/index-DpWia6iH.d.mts.map +1 -0
- package/dist/{index-DPicEt8H.d.mts → index-Fciq8bcC.d.mts} +2 -2
- package/dist/{index-DPicEt8H.d.mts.map → index-Fciq8bcC.d.mts.map} +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +50 -51
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +11 -13
- package/dist/{preview-DwClLMlU.mjs → preview--rOXbBxl.mjs} +2 -3
- package/dist/preview--rOXbBxl.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-2MZXSWVT.mjs} +1 -1
- package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-3UPI4EPV.mjs} +1 -1
- package/dist/preview-engine/{chunk-S2CTIJSI.mjs → chunk-7EPDVSCL.mjs} +1 -1
- package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-AXQZX3TC.mjs} +1 -1
- package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-E3HC4GRQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-FPRXK2WD.mjs} +1 -1
- package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-K773AOF3.mjs} +1 -1
- package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-L3CHEZMZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-LBRVQ4GE.mjs} +1 -1
- package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-NEE3KQTX.mjs} +1 -1
- package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-O2RNIQXT.mjs} +1 -1
- package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-PFA427ZC.mjs} +1 -1
- package/dist/preview-engine/chunk-PNB3ERR3.mjs +1 -0
- package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-PR2BUYCL.mjs} +1 -1
- package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-Q2DPNVIA.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZDQF3OTC.mjs → chunk-QY7MHWZW.mjs} +1 -1
- package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-VO2R3DWV.mjs} +1 -1
- package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-WSIURGP2.mjs} +1 -1
- package/dist/preview-engine/{chunk-OG62XGCT.mjs → chunk-ZH5MZQTZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-ZNL4W4DK.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +2 -2
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -1
- package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -1
- package/dist/preview-engine/renderers-2SVWAB42.mjs +1 -1
- package/dist/preview-engine/renderers-3T7Q4SPP.mjs +1 -0
- package/dist/preview-engine/renderers-4DV4REGM.mjs +1 -0
- package/dist/preview-engine/renderers-57WDL6XN.mjs +1 -1
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -1
- package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-7JTNJE7M.mjs} +1 -1
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -1
- package/dist/preview-engine/renderers-CQXQHOW2.mjs +1 -0
- package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-D2EJULOJ.mjs} +1 -1
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -1
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -1
- package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -1
- package/dist/preview-engine/renderers-IXGM55XK.mjs +1 -0
- package/dist/preview-engine/renderers-KVHUVWSN.mjs +1 -0
- package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -1
- package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-LVDUZZ75.mjs} +1 -1
- package/dist/preview-engine/renderers-M7R2ZJUP.mjs +1 -0
- package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -1
- package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-O2DZPBOJ.mjs} +1 -1
- package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -1
- package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-P4S7GL64.mjs} +1 -1
- package/dist/preview-engine/renderers-PMOO7DLX.mjs +1 -0
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -1
- package/dist/preview-engine/renderers-QCCPCH73.mjs +1 -0
- package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -1
- package/dist/preview-engine/renderers-RRXFJRGI.mjs +1 -0
- package/dist/preview-engine/renderers-T4JMJXWL.mjs +1 -1
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -1
- package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-TFZST6WW.mjs} +1 -1
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -1
- package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-UPKB5OLS.mjs} +1 -1
- package/dist/preview-engine/renderers-VLMQR3DW.mjs +1 -0
- package/dist/preview-engine/renderers-WVTTRCVI.mjs +1 -0
- package/dist/preview-engine/renderers-X5PUIPU5.mjs +1 -0
- package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-XCMVZ2XG.mjs} +1 -1
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -1
- package/dist/preview-engine/renderers-YDCDY3BR.mjs +1 -0
- package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -1
- package/dist/preview-engine/renderers-YJNQ4B7B.mjs +1 -0
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -1
- package/dist/preview-engine/{renderers-H46TS3IG.mjs → renderers-YZEVPHPQ.mjs} +1 -1
- package/dist/preview-engine/renderers-Z7YQUFAY.mjs +1 -0
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -1
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-BqFVw5Mu.mjs → program-Cc5AsBHz.mjs} +2 -2
- package/dist/{program-BqFVw5Mu.mjs.map → program-Cc5AsBHz.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +3 -4
- package/dist/renderer-1VSi7Vum.mjs +5 -0
- package/dist/renderer-4BlpUHQT.mjs +5 -0
- package/dist/{renderer-BLcu9RDt.mjs → renderer-9L0p8IT3.mjs} +3 -3
- package/dist/renderer-AzSX2-mZ.mjs +5 -0
- package/dist/renderer-B-cxK24t.mjs +5 -0
- package/dist/{renderer-CGldH-Zx.mjs → renderer-B1Zn91xt.mjs} +3 -3
- package/dist/{renderer-CGldH-Zx.mjs.map → renderer-B1Zn91xt.mjs.map} +1 -1
- package/dist/renderer-B5d5oM_D.mjs +5 -0
- package/dist/renderer-B8BdNjaN.mjs +5 -0
- package/dist/{renderer-BYqfkwLf.mjs → renderer-BI5rvAyo.mjs} +3 -3
- package/dist/{renderer-BYqfkwLf.mjs.map → renderer-BI5rvAyo.mjs.map} +1 -1
- package/dist/renderer-BKEfeg-4.mjs +5 -0
- package/dist/{renderer-BvpSIFkw.mjs → renderer-BKf1qDwL.mjs} +4 -4
- package/dist/{renderer-BvpSIFkw.mjs.map → renderer-BKf1qDwL.mjs.map} +1 -1
- package/dist/renderer-BLLOkeFB.mjs +5 -0
- package/dist/renderer-BTvov1NH.mjs +5 -0
- package/dist/renderer-BVun05IK.mjs +5 -0
- package/dist/{renderer-DZrQffIP.mjs → renderer-BWVsBB3t.mjs} +2 -2
- package/dist/{renderer-DZrQffIP.mjs.map → renderer-BWVsBB3t.mjs.map} +1 -1
- package/dist/{renderer-Bs4tz_pw.mjs → renderer-BXQQxeNC.mjs} +3 -3
- package/dist/{renderer-Bs4tz_pw.mjs.map → renderer-BXQQxeNC.mjs.map} +1 -1
- package/dist/renderer-B_3h5nhy.mjs +5 -0
- package/dist/renderer-BaZjoFYK.mjs +5 -0
- package/dist/{renderer-DOEsFT7Q.mjs → renderer-BaaOR3Ao.mjs} +2 -2
- package/dist/{renderer-DOEsFT7Q.mjs.map → renderer-BaaOR3Ao.mjs.map} +1 -1
- package/dist/{renderer-DRsPCkxr.mjs → renderer-Bb8T5eRX.mjs} +2 -2
- package/dist/{renderer-DRsPCkxr.mjs.map → renderer-Bb8T5eRX.mjs.map} +1 -1
- package/dist/{renderer-CRIM_XRK.mjs → renderer-Bc6J0iVG.mjs} +2 -2
- package/dist/{renderer-CRIM_XRK.mjs.map → renderer-Bc6J0iVG.mjs.map} +1 -1
- package/dist/renderer-BcApaCVe.mjs +5 -0
- package/dist/{renderer-DAtBnNGC.mjs → renderer-Bg7647VN.mjs} +4 -4
- package/dist/{renderer-DAtBnNGC.mjs.map → renderer-Bg7647VN.mjs.map} +1 -1
- package/dist/{renderer-CLyuu_19.mjs → renderer-BhKIZDsm.mjs} +2 -2
- package/dist/{renderer-CLyuu_19.mjs.map → renderer-BhKIZDsm.mjs.map} +1 -1
- package/dist/{renderer-BqsV75Ml.mjs → renderer-BhhSyHKF.mjs} +3 -3
- package/dist/{renderer-BvG1GF1c.mjs → renderer-Br9BOkQs.mjs} +2 -2
- package/dist/{renderer-BvG1GF1c.mjs.map → renderer-Br9BOkQs.mjs.map} +1 -1
- package/dist/{renderer-CTGe8SqQ.d.mts → renderer-Bs_f_App.d.mts} +2 -2
- package/dist/{renderer-CTGe8SqQ.d.mts.map → renderer-Bs_f_App.d.mts.map} +1 -1
- package/dist/{renderer-DG1NFsSV.mjs → renderer-BygIYH8s.mjs} +2 -2
- package/dist/{renderer-DG1NFsSV.mjs.map → renderer-BygIYH8s.mjs.map} +1 -1
- package/dist/{renderer-BGr_cBKV.mjs → renderer-C--Dqe-3.mjs} +3 -3
- package/dist/{renderer-BGr_cBKV.mjs.map → renderer-C--Dqe-3.mjs.map} +1 -1
- package/dist/renderer-C14mKYCw.mjs +5 -0
- package/dist/{renderer-2Nf9ypST.mjs → renderer-C27RfwXN.mjs} +3 -3
- package/dist/{renderer-2Nf9ypST.mjs.map → renderer-C27RfwXN.mjs.map} +1 -1
- package/dist/{renderer-CgyOylPO.mjs → renderer-C5caYAA3.mjs} +2 -2
- package/dist/{renderer-CgyOylPO.mjs.map → renderer-C5caYAA3.mjs.map} +1 -1
- package/dist/{renderer-Cwhux4VX.mjs → renderer-C5zpaQed.mjs} +2 -2
- package/dist/{renderer-Cwhux4VX.mjs.map → renderer-C5zpaQed.mjs.map} +1 -1
- package/dist/{renderer-Bq_dO0LG.mjs → renderer-C7UZLOYk.mjs} +2 -2
- package/dist/{renderer-Bq_dO0LG.mjs.map → renderer-C7UZLOYk.mjs.map} +1 -1
- package/dist/{renderer-D0nWLogn.mjs → renderer-C92mwhZz.mjs} +2 -2
- package/dist/{renderer-D0nWLogn.mjs.map → renderer-C92mwhZz.mjs.map} +1 -1
- package/dist/{renderer-v0vuUUUI.mjs → renderer-CAJe9eLS.mjs} +2 -2
- package/dist/{renderer-v0vuUUUI.mjs.map → renderer-CAJe9eLS.mjs.map} +1 -1
- package/dist/renderer-CFqhAXkH.mjs +5 -0
- package/dist/renderer-CK-spD4j.mjs +5 -0
- package/dist/renderer-CLLzQTIk.mjs +5 -0
- package/dist/{renderer-C3RfT8Gv.mjs → renderer-CMsjnZ0G.mjs} +3 -3
- package/dist/{renderer-C3RfT8Gv.mjs.map → renderer-CMsjnZ0G.mjs.map} +1 -1
- package/dist/renderer-COwa6xlF.mjs +5 -0
- package/dist/renderer-CQPuuoVf.mjs +6 -0
- package/dist/renderer-CRd-cDqZ.mjs +5 -0
- package/dist/renderer-CTVnQAUm.mjs +5 -0
- package/dist/renderer-CbiEBSGx.mjs +5 -0
- package/dist/renderer-Cl7PruQ1.mjs +5 -0
- package/dist/renderer-CmuGGUDR.mjs +5 -0
- package/dist/{renderer-D8C-pamu.mjs → renderer-CoGP4Mvf.mjs} +2 -2
- package/dist/{renderer-D8C-pamu.mjs.map → renderer-CoGP4Mvf.mjs.map} +1 -1
- package/dist/renderer-CoNRrfqx.mjs +5 -0
- package/dist/{renderer-2uN2cd0y.mjs → renderer-CrAqu3Rg.mjs} +2 -2
- package/dist/{renderer-2uN2cd0y.mjs.map → renderer-CrAqu3Rg.mjs.map} +1 -1
- package/dist/renderer-CvIGa0mE.mjs +5 -0
- package/dist/renderer-CwMDPv0p.mjs +5 -0
- package/dist/{renderer-Dpj68gTn.mjs → renderer-CydWqyf0.mjs} +2 -2
- package/dist/{renderer-Dpj68gTn.mjs.map → renderer-CydWqyf0.mjs.map} +1 -1
- package/dist/{renderer-B4oS8ZFO.mjs → renderer-CzBQgGD2.mjs} +4 -4
- package/dist/{renderer-B4oS8ZFO.mjs.map → renderer-CzBQgGD2.mjs.map} +1 -1
- package/dist/{renderer-Dmv_Aj6x.mjs → renderer-D0aZNkQE.mjs} +3 -3
- package/dist/{renderer-Dmv_Aj6x.mjs.map → renderer-D0aZNkQE.mjs.map} +1 -1
- package/dist/{renderer-BwAqwTQq.mjs → renderer-D2BRlqof.mjs} +2 -2
- package/dist/{renderer-BwAqwTQq.mjs.map → renderer-D2BRlqof.mjs.map} +1 -1
- package/dist/{renderer-D4sYVV-I.mjs → renderer-D2FFvxsq.mjs} +3 -3
- package/dist/{renderer-D4sYVV-I.mjs.map → renderer-D2FFvxsq.mjs.map} +1 -1
- package/dist/{renderer-DPYB6ZcB.mjs → renderer-D8-zNjyz.mjs} +2 -2
- package/dist/{renderer-DPYB6ZcB.mjs.map → renderer-D8-zNjyz.mjs.map} +1 -1
- package/dist/{renderer-DhEyjn6Q.mjs → renderer-DDqwds9R.mjs} +2 -2
- package/dist/{renderer-DhEyjn6Q.mjs.map → renderer-DDqwds9R.mjs.map} +1 -1
- package/dist/{renderer-CpKNqciR.mjs → renderer-DGtBOdst.mjs} +3 -3
- package/dist/{renderer-BwVfhrEx.mjs → renderer-DKqG9Lek.mjs} +2 -2
- package/dist/{renderer-BwVfhrEx.mjs.map → renderer-DKqG9Lek.mjs.map} +1 -1
- package/dist/renderer-DOHbhGPu.mjs +5 -0
- package/dist/renderer-DOmA6IKc.mjs +5 -0
- package/dist/{renderer-BgnJUx24.mjs → renderer-DUhXH5Tz.mjs} +3 -3
- package/dist/{renderer-BgnJUx24.mjs.map → renderer-DUhXH5Tz.mjs.map} +1 -1
- package/dist/{renderer-CH9Qtpy7.mjs → renderer-DVnVnS3c.mjs} +2 -2
- package/dist/{renderer-CH9Qtpy7.mjs.map → renderer-DVnVnS3c.mjs.map} +1 -1
- package/dist/{renderer-DZLJnnU2.mjs → renderer-DWEvQ-hQ.mjs} +3 -3
- package/dist/{renderer-DZLJnnU2.mjs.map → renderer-DWEvQ-hQ.mjs.map} +1 -1
- package/dist/renderer-DX2qEJTL.mjs +2173 -0
- package/dist/renderer-DX2qEJTL.mjs.map +1 -0
- package/dist/{renderer-CEGbqT2m.mjs → renderer-DX8aBDqR.mjs} +2 -2
- package/dist/{renderer-CEGbqT2m.mjs.map → renderer-DX8aBDqR.mjs.map} +1 -1
- package/dist/{renderer-BkN20ZKO.mjs → renderer-DYIPWN_B.mjs} +4 -4
- package/dist/{renderer-BkN20ZKO.mjs.map → renderer-DYIPWN_B.mjs.map} +1 -1
- package/dist/{renderer-Q63y7HP_.mjs → renderer-DZD2G76E.mjs} +2 -2
- package/dist/{renderer-Q63y7HP_.mjs.map → renderer-DZD2G76E.mjs.map} +1 -1
- package/dist/{renderer-B12_76qk.mjs → renderer-Da06_9FZ.mjs} +3 -3
- package/dist/{renderer-B12_76qk.mjs.map → renderer-Da06_9FZ.mjs.map} +1 -1
- package/dist/{renderer-DHAErBtJ.mjs → renderer-DkyXqrQ6.mjs} +2 -2
- package/dist/{renderer-DHAErBtJ.mjs.map → renderer-DkyXqrQ6.mjs.map} +1 -1
- package/dist/renderer-DmCWc4JL.mjs +5 -0
- package/dist/{renderer-DKtP7-fr.mjs → renderer-Dno-fujw.mjs} +2 -2
- package/dist/{renderer-DKtP7-fr.mjs.map → renderer-Dno-fujw.mjs.map} +1 -1
- package/dist/{renderer-BO2lYmtE.mjs → renderer-DoYdfDEA.mjs} +4 -4
- package/dist/{renderer-BO2lYmtE.mjs.map → renderer-DoYdfDEA.mjs.map} +1 -1
- package/dist/{renderer-Cjq1s3br.mjs → renderer-DqjITuT-.mjs} +2 -2
- package/dist/{renderer-Cjq1s3br.mjs.map → renderer-DqjITuT-.mjs.map} +1 -1
- package/dist/{renderer-BjTq3a0L.mjs → renderer-Dy-DBU0X.mjs} +3 -3
- package/dist/{renderer-BjTq3a0L.mjs.map → renderer-Dy-DBU0X.mjs.map} +1 -1
- package/dist/{renderer-to9DwqXK.mjs → renderer-DyzNM721.mjs} +2 -2
- package/dist/{renderer-to9DwqXK.mjs.map → renderer-DyzNM721.mjs.map} +1 -1
- package/dist/{renderer-CjT5Zy-J.mjs → renderer-DzrM1KMN.mjs} +3 -3
- package/dist/{renderer-CjT5Zy-J.mjs.map → renderer-DzrM1KMN.mjs.map} +1 -1
- package/dist/{renderer-D5z3WDkm.mjs → renderer-FHyZn0em.mjs} +2 -2
- package/dist/{renderer-D5z3WDkm.mjs.map → renderer-FHyZn0em.mjs.map} +1 -1
- package/dist/{renderer-Bsaokil3.mjs → renderer-NXdm6HLb.mjs} +3 -3
- package/dist/{renderer-Bsaokil3.mjs.map → renderer-NXdm6HLb.mjs.map} +1 -1
- package/dist/renderer-OLaYikwi.mjs +5 -0
- package/dist/renderer-Q75RC5Uz.mjs +5 -0
- package/dist/renderer-T0LJ4Po3.mjs +5 -0
- package/dist/renderer-VuXt1hfq.mjs +5 -0
- package/dist/{renderer-DzhRNdBS.mjs → renderer-_1xGBbxn.mjs} +6 -6
- package/dist/{renderer-DzhRNdBS.mjs.map → renderer-_1xGBbxn.mjs.map} +1 -1
- package/dist/{renderer-C3cYDT3m.mjs → renderer-c4AorKyw.mjs} +3 -3
- package/dist/renderer-hY_2WLt3.mjs +5 -0
- package/dist/{renderer-BpZaHFRc.mjs → renderer-qsg-JMuN.mjs} +4 -4
- package/dist/{renderer-BpZaHFRc.mjs.map → renderer-qsg-JMuN.mjs.map} +1 -1
- package/dist/{renderer-D1lynYuy.mjs → renderer-timEC0Gl.mjs} +4 -4
- package/dist/{renderer-D1lynYuy.mjs.map → renderer-timEC0Gl.mjs.map} +1 -1
- package/dist/renderer-y4EqE06a.mjs +5 -0
- package/dist/{renderers-CP8CFWDs-DlFq8jmz.mjs → renderers-CP8CFWDs-CMYe4kvZ.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-DlFq8jmz.mjs.map → renderers-CP8CFWDs-CMYe4kvZ.mjs.map} +1 -1
- package/dist/signals/index.d.mts +6 -6
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-BDkO0xcZ.mjs → signals-DGRs6ddH.mjs} +2 -2
- package/dist/{signals-BDkO0xcZ.mjs.map → signals-DGRs6ddH.mjs.map} +1 -1
- package/package.json +55 -55
- package/dist/client-dVxUnmHz.mjs +0 -66
- package/dist/client-dVxUnmHz.mjs.map +0 -1
- package/dist/dist-DlzqyRar.mjs.map +0 -1
- package/dist/dist-cjs-91nR6B7Z.mjs +0 -48
- package/dist/dist-cjs-91nR6B7Z.mjs.map +0 -1
- package/dist/dist-cjs-BAIenEMC.mjs +0 -9069
- package/dist/dist-cjs-BAIenEMC.mjs.map +0 -1
- package/dist/dist-cjs-BEQhh76X.mjs +0 -153
- package/dist/dist-cjs-BEQhh76X.mjs.map +0 -1
- package/dist/dist-cjs-BYPq7pfw.mjs +0 -43
- package/dist/dist-cjs-BYPq7pfw.mjs.map +0 -1
- package/dist/dist-cjs-BocDqSCX.mjs +0 -66
- package/dist/dist-cjs-BocDqSCX.mjs.map +0 -1
- package/dist/dist-cjs-CWiNggTl.mjs +0 -323
- package/dist/dist-cjs-CWiNggTl.mjs.map +0 -1
- package/dist/dist-cjs-CwabutT6.mjs +0 -1091
- package/dist/dist-cjs-CwabutT6.mjs.map +0 -1
- package/dist/dist-cjs-D-EE4Ahy.mjs +0 -51
- package/dist/dist-cjs-D-EE4Ahy.mjs.map +0 -1
- package/dist/dist-cjs-DNtDUWfk.mjs +0 -137
- package/dist/dist-cjs-DNtDUWfk.mjs.map +0 -1
- package/dist/dist-cjs-DbZhsgS0.mjs +0 -98
- package/dist/dist-cjs-DbZhsgS0.mjs.map +0 -1
- package/dist/dist-cjs-Dh7REKcN.mjs +0 -85
- package/dist/dist-cjs-Dh7REKcN.mjs.map +0 -1
- package/dist/dist-cjs-Dobx0Nz-.mjs +0 -181
- package/dist/dist-cjs-Dobx0Nz-.mjs.map +0 -1
- package/dist/dist-cjs-Du0UpNof.mjs +0 -437
- package/dist/dist-cjs-Du0UpNof.mjs.map +0 -1
- package/dist/dist-cjs-DyHiUfsr.mjs +0 -6
- package/dist/dist-cjs-HHMfMF5a.mjs +0 -209
- package/dist/dist-cjs-HHMfMF5a.mjs.map +0 -1
- package/dist/dist-cjs-UJYQzLNT.mjs +0 -64
- package/dist/dist-cjs-UJYQzLNT.mjs.map +0 -1
- package/dist/dist-cjs-UKxm5cFR.mjs +0 -5015
- package/dist/dist-cjs-UKxm5cFR.mjs.map +0 -1
- package/dist/event-streams-DnRe8uwT.mjs +0 -204
- package/dist/event-streams-DnRe8uwT.mjs.map +0 -1
- package/dist/index-CHQ39_Oe.d.mts.map +0 -1
- package/dist/package-CudzAF-n.mjs +0 -6
- package/dist/package-CudzAF-n.mjs.map +0 -1
- package/dist/preview-DwClLMlU.mjs.map +0 -1
- package/dist/preview-engine/chunk-QBEUICZD.mjs +0 -1
- package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
- package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
- package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
- package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
- package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
- package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
- package/dist/preview-engine/renderers-MON4QFRF.mjs +0 -1
- package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
- package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
- package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
- package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
- package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
- package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
- package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
- package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
- package/dist/preview-engine/server-utils-2FAIV45N.mjs +0 -1
- package/dist/renderer-31jAuNzF.mjs +0 -5
- package/dist/renderer-36EI7Rsz.mjs +0 -5
- package/dist/renderer-3io-cjTt.mjs +0 -5
- package/dist/renderer-9_zWTHbg.mjs +0 -5
- package/dist/renderer-B6KnbfdA.mjs +0 -5
- package/dist/renderer-B7Y2bmRc.mjs +0 -5
- package/dist/renderer-BA6miaaI.mjs +0 -5
- package/dist/renderer-BHi-Q6Z_.mjs +0 -5
- package/dist/renderer-BOlN9HeG.mjs +0 -5
- package/dist/renderer-BTOW-ceB.mjs +0 -5
- package/dist/renderer-BiQ0PYOp.mjs +0 -5
- package/dist/renderer-Bla7GDyV.mjs +0 -5
- package/dist/renderer-BoYyLVKy.mjs +0 -5
- package/dist/renderer-BqOgb7bM.mjs +0 -5
- package/dist/renderer-BqeM8yTJ.mjs +0 -5
- package/dist/renderer-BzpRe50i.mjs +0 -5
- package/dist/renderer-C0eAPwpr.mjs +0 -5
- package/dist/renderer-CGn8V63v.mjs +0 -5
- package/dist/renderer-CM5Syo9r.mjs +0 -5
- package/dist/renderer-CWCEW6Wv.mjs +0 -5
- package/dist/renderer-Cl70zxkP.mjs +0 -5
- package/dist/renderer-ClJjoVpB.mjs +0 -6
- package/dist/renderer-DIDSmoFA.mjs +0 -23900
- package/dist/renderer-DIDSmoFA.mjs.map +0 -1
- package/dist/renderer-DLnF-V_h.mjs +0 -5
- package/dist/renderer-DN1rjmcL.mjs +0 -5
- package/dist/renderer-DXTw9Oqb.mjs +0 -5
- package/dist/renderer-DbAVSBNI.mjs +0 -5
- package/dist/renderer-Dg8rD--8.mjs +0 -5
- package/dist/renderer-DnFxegGu.mjs +0 -5
- package/dist/renderer-DnfmelHn.mjs +0 -5
- package/dist/renderer-DuOjzggd.mjs +0 -5
- package/dist/renderer-DvYql0Cl.mjs +0 -5
- package/dist/renderer-LfUdjgjF.mjs +0 -5
- package/dist/renderer-SecCv3U8.mjs +0 -5
- package/dist/renderer-oZyoB4CT.mjs +0 -5
- package/dist/renderer-rzci_kTy.mjs +0 -5
- package/dist/renderer-vLaZuZbX.mjs +0 -5
- package/dist/signin-SVSXQw9i.mjs +0 -865
- package/dist/signin-SVSXQw9i.mjs.map +0 -1
- package/dist/sso-oidc-B3Sagl43.mjs +0 -1051
- package/dist/sso-oidc-B3Sagl43.mjs.map +0 -1
- package/dist/sts-CYeWec9i.mjs +0 -6
- package/dist/sts-ClVtt-bV.mjs +0 -1395
- package/dist/sts-ClVtt-bV.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as resolveFrameNumber, n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-
|
|
2
|
+
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-DG3gI88-.mjs";
|
|
3
3
|
import { o as TemporalDeflickerPipeline } from "./dist-0QGroRYZ.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs
|
|
@@ -62,4 +62,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPU
|
|
|
62
62
|
|
|
63
63
|
//#endregion
|
|
64
64
|
export { renderers_default as t };
|
|
65
|
-
//# sourceMappingURL=renderer-
|
|
65
|
+
//# sourceMappingURL=renderer-DkyXqrQ6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-DkyXqrQ6.mjs","names":[],"sources":["../../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { drawChildToTexture, drawTextureToTarget } from \"@framefields/node-sdk/gpu\";\nimport { TemporalDeflickerPipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveProp(op, fieldName, defaultValue, minVal, maxVal, frame, fps) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst input = handleId ? op.inputs?.[handleId] : null;\n\tlet raw;\n\tif (input?.connectionValid && input.outputItem) {\n\t\tconst outData = input.outputItem.data;\n\t\traw = outData && typeof outData === \"object\" && \"offset\" in outData ? outData.offset : input.outputItem.data;\n\t} else raw = op[fieldName];\n\tconst resolved = resolveFrameNumber(raw, defaultValue, frame, fps);\n\treturn Math.max(minVal, Math.min(maxVal, resolved));\n}\nconst pipelineCache = /* @__PURE__ */ new Map();\nfunction getOrCreatePipeline(device, key) {\n\tlet pipe = pipelineCache.get(key);\n\tif (!pipe) {\n\t\tpipe = new TemporalDeflickerPipeline(device);\n\t\tpipelineCache.set(key, pipe);\n\t}\n\treturn pipe;\n}\nconst TemporalDeflickerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"TemporalDeflicker\" && op.op !== \"Deflicker\") return;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst blendWeight = resolveProp(op, \"blendWeight\", .35, 0, 1, compositionFrame, fps);\n\tconst disocclusionThreshold = resolveProp(op, \"disocclusionThreshold\", .15, .01, 1, compositionFrame, fps);\n\tconst maxMotionPixels = resolveProp(op, \"maxMotionPixels\", 64, 1, 256, compositionFrame, fps);\n\tconst scale = resolveProp(op, \"scale\", .5, .1, 1, compositionFrame, fps);\n\tconst windowSize = Math.round(resolveProp(op, \"windowSize\", 2, 1, 5, compositionFrame, fps));\n\tconst pipelineKey = props.virtualMedia?.metadata?.id || op.id || `deflicker_${props.renderId ?? \"global\"}`;\n\tconst deflickerPipe = getOrCreatePipeline(ctx.device, pipelineKey);\n\tif (frame === 0) deflickerPipe.reset();\n\tdrawTextureToTarget(args, deflickerPipe.execute(srcTex, {\n\t\tblendWeight,\n\t\tdisocclusionThreshold,\n\t\tmaxMotionPixels,\n\t\tscale,\n\t\twindowSize\n\t}, encoder), typeof op.opacity === \"number\" ? op.opacity : 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BEAP_hnG.mjs.map"],"mappings":";;;;;AAMA,SAAS,YAAY,IAAI,WAAW,cAAc,QAAQ,QAAQ,OAAO,KAAK;CAC7E,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;CACjD,IAAI;AACJ,KAAI,OAAO,mBAAmB,MAAM,YAAY;EAC/C,MAAM,UAAU,MAAM,WAAW;AACjC,QAAM,WAAW,OAAO,YAAY,YAAY,YAAY,UAAU,QAAQ,SAAS,MAAM,WAAW;OAClG,OAAM,GAAG;CAChB,MAAM,WAAW,mBAAmB,KAAK,cAAc,OAAO,IAAI;AAClE,QAAO,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,SAAS,CAAC;;AAEpD,MAAM,gCAAgC,IAAI,KAAK;AAC/C,SAAS,oBAAoB,QAAQ,KAAK;CACzC,IAAI,OAAO,cAAc,IAAI,IAAI;AACjC,KAAI,CAAC,MAAM;AACV,SAAO,IAAI,0BAA0B,OAAO;AAC5C,gBAAc,IAAI,KAAK,KAAK;;AAE7B,QAAO;;AAER,MAAM,kCAAkC,OAAO,SAAS;CACvD,MAAM,EAAE,KAAK,SAAS,MAAM,aAAa,cAAc,UAAU;CACjE,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,CAAC,MAAM,GAAG,OAAO,uBAAuB,GAAG,OAAO,YAAa;CACnE,MAAM,cAAc,MAAM,cAAc,WAAW;AACnD,KAAI,CAAC,YAAa;AAClB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,aAAa,EAAE,OAAO;EAChF,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,YAAY,IAAI,eAAe,KAAK,GAAG,GAAG,kBAAkB,IAAI;CACpF,MAAM,wBAAwB,YAAY,IAAI,yBAAyB,KAAK,KAAK,GAAG,kBAAkB,IAAI;CAC1G,MAAM,kBAAkB,YAAY,IAAI,mBAAmB,IAAI,GAAG,KAAK,kBAAkB,IAAI;CAC7F,MAAM,QAAQ,YAAY,IAAI,SAAS,IAAI,IAAI,GAAG,kBAAkB,IAAI;CACxE,MAAM,aAAa,KAAK,MAAM,YAAY,IAAI,cAAc,GAAG,GAAG,GAAG,kBAAkB,IAAI,CAAC;CAC5F,MAAM,cAAc,MAAM,cAAc,UAAU,MAAM,GAAG,MAAM,aAAa,MAAM,YAAY;CAChG,MAAM,gBAAgB,oBAAoB,IAAI,QAAQ,YAAY;AAClE,KAAI,UAAU,EAAG,eAAc,OAAO;AACtC,qBAAoB,MAAM,cAAc,QAAQ,QAAQ;EACvD;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,OAAO,GAAG,YAAY,WAAW,GAAG,UAAU,EAAE;;AAK9D,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,iCAAiC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { 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-DG3gI88-.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-shadows-highlights/dist/renderers-CCz2R7ss.mjs
|
|
@@ -498,4 +498,4 @@ var renderers_default = { WebGPURenderer };
|
|
|
498
498
|
|
|
499
499
|
//#endregion
|
|
500
500
|
export { renderers_default as n, WebGPURenderer as t };
|
|
501
|
-
//# sourceMappingURL=renderer-
|
|
501
|
+
//# sourceMappingURL=renderer-Dno-fujw.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DKtP7-fr.mjs","names":[],"sources":["../../../nodes/node-shadows-highlights/dist/renderers-CCz2R7ss.mjs"],"sourcesContent":["import { 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 MIN_RADIUS = 1;\nconst MAX_AMOUNT = 100;\nconst shadowsHighlightsConfig = configBuilder().field(\"shadowAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Boost (%)\",\n\tdescription: \"Percentage to lift and recover crushed shadow details (0–100%).\"\n}).field(\"shadowTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Range (%)\",\n\tdescription: \"Range of dark tones affected by shadow adjustments (0–100%).\"\n}).field(\"shadowRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine shadow illumination (1–250px).\"\n}).field(\"highlightAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Suppression (%)\",\n\tdescription: \"Percentage to suppress and recover blown highlight details (0–100%).\"\n}).field(\"highlightTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Range (%)\",\n\tdescription: \"Range of bright tones affected by highlight adjustments (0–100%).\"\n}).field(\"highlightRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine highlight exposure (1–250px).\"\n}).field(\"colorCorrection\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Correction (%)\",\n\tdescription: \"Fine-tunes color saturation in recovered shadow/highlight zones (-100 to +100%).\"\n}).field(\"midtoneContrast\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Midtone Contrast (%)\",\n\tdescription: \"Adjusts contrast centered on the midtones (-100 to +100%).\"\n}).build();\nconst ShadowsHighlightsNodeConfigSchema = shadowsHighlightsConfig.schema;\nconst ShadowsHighlightsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ShadowsHighlightsOperationSchema = ShadowsHighlightsNodeConfigSchema.extend({\n\top: z.literal(\"ShadowsHighlights\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultShadowsHighlightsConfig = ShadowsHighlightsNodeConfigSchema.parse({});\nconst SHADOWS_HIGHLIGHTS_PRESETS = [\n\t{\n\t\tid: \"default\",\n\t\tname: \"Default (Neutral)\",\n\t\tdescription: \"Zero adjustments across dynamic range\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 0,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"shadow-lift\",\n\t\tname: \"Shadow Detail Lift\",\n\t\tdescription: \"Gently opens up underexposed shadows without bleaching midtones\",\n\t\tconfig: {\n\t\t\tshadowAmount: 40,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 35,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 10,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"highlight-recovery\",\n\t\tname: \"Highlight Recovery\",\n\t\tdescription: \"Pulls back blown sky, cloud, and specular highlight clipping\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 45,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: -5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"hdr-balance\",\n\t\tname: \"HDR Dynamic Range\",\n\t\tdescription: \"Balanced recovery expanding visible dynamic range in high contrast scenes\",\n\t\tconfig: {\n\t\t\tshadowAmount: 35,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 40,\n\t\t\thighlightAmount: 35,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 40,\n\t\t\tcolorCorrection: 15,\n\t\t\tmidtoneContrast: 10\n\t\t}\n\t},\n\t{\n\t\tid: \"backlight-correction\",\n\t\tname: \"Backlight Correction\",\n\t\tdescription: \"Compensates for harsh backlighting illuminating silhouetted subjects\",\n\t\tconfig: {\n\t\t\tshadowAmount: 60,\n\t\t\tshadowTonalWidth: 60,\n\t\t\tshadowRadius: 50,\n\t\t\thighlightAmount: 20,\n\t\t\thighlightTonalWidth: 35,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 20,\n\t\t\tmidtoneContrast: 5\n\t\t}\n\t},\n\t{\n\t\tid: \"dramatic-punch\",\n\t\tname: \"Dramatic Contrast & Clarity\",\n\t\tdescription: \"Deepens shadows, compresses highlights, and boosts midtone punch\",\n\t\tconfig: {\n\t\t\tshadowAmount: 10,\n\t\t\tshadowTonalWidth: 30,\n\t\t\tshadowRadius: 25,\n\t\t\thighlightAmount: 30,\n\t\t\thighlightTonalWidth: 55,\n\t\t\thighlightRadius: 25,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 25\n\t\t}\n\t},\n\t{\n\t\tid: \"gentle-fill\",\n\t\tname: \"Gentle Fill Light\",\n\t\tdescription: \"Subtle lift to low-light areas preserving photographic atmosphere\",\n\t\tconfig: {\n\t\t\tshadowAmount: 20,\n\t\t\tshadowTonalWidth: 40,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 15,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t}\n];\nconst SHADOWS_HIGHLIGHTS_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_SHADOWS_HIGHLIGHTS_UNIFORMS = `\nstruct ShadowsHighlightsUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tshadowRadius : f32,\n\thighlightRadius : f32,\n\n\tshadowAmount : f32,\n\tshadowTonalWidth : f32,\n\thighlightAmount : f32,\n\thighlightTonalWidth : f32,\n\n\tcolorCorrection : f32,\n\tmidtoneContrast : f32,\n\tisSecondPass : f32,\n\t_pad0 : f32,\n\n\thasShadowAmountSig : f32,\n\thasShadowTonalWidthSig : f32,\n\thasShadowRadiusSig : f32,\n\thasHighlightAmountSig : f32,\n\n\thasHighlightTonalWidthSig : f32,\n\thasHighlightRadiusSig : f32,\n\thasColorCorrectionSig : f32,\n\thasMidtoneContrastSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ShadowsHighlightsUniforms;\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 shadowAmountSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(3) var highlightAmountSigTex : texture_2d<f32>;\n@group(2) @binding(4) var highlightTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(5) var highlightRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(6) var colorCorrectionSigTex : texture_2d<f32>;\n@group(2) @binding(7) var midtoneContrastSigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar sAmount = u.shadowAmount;\n\tif (u.hasShadowAmountSig > 0.5) {\n\t\tsAmount = textureSampleLevel(shadowAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsAmount = clamp(sAmount, 0.0, 100.0);\n\n\tvar sTonalWidthVal = u.shadowTonalWidth;\n\tif (u.hasShadowTonalWidthSig > 0.5) {\n\t\tsTonalWidthVal = textureSampleLevel(shadowTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsTonalWidthVal = clamp(sTonalWidthVal, 0.0, 100.0);\n\n\tvar sRadius = u.shadowRadius;\n\tif (u.hasShadowRadiusSig > 0.5) {\n\t\tsRadius = textureSampleLevel(shadowRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsRadius = clamp(sRadius, 1.0, 250.0);\n\n\tvar hAmount = u.highlightAmount;\n\tif (u.hasHighlightAmountSig > 0.5) {\n\t\thAmount = textureSampleLevel(highlightAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thAmount = clamp(hAmount, 0.0, 100.0);\n\n\tvar hTonalWidthVal = u.highlightTonalWidth;\n\tif (u.hasHighlightTonalWidthSig > 0.5) {\n\t\thTonalWidthVal = textureSampleLevel(highlightTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thTonalWidthVal = clamp(hTonalWidthVal, 0.0, 100.0);\n\n\tvar hRadius = u.highlightRadius;\n\tif (u.hasHighlightRadiusSig > 0.5) {\n\t\thRadius = textureSampleLevel(highlightRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thRadius = clamp(hRadius, 1.0, 250.0);\n\n\tvar colCorrVal = u.colorCorrection;\n\tif (u.hasColorCorrectionSig > 0.5) {\n\t\tcolCorrVal = textureSampleLevel(colorCorrectionSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolCorrVal = clamp(colCorrVal, -100.0, 100.0);\n\n\tvar midContrastVal = u.midtoneContrast;\n\tif (u.hasMidtoneContrastSig > 0.5) {\n\t\tmidContrastVal = textureSampleLevel(midtoneContrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tmidContrastVal = clamp(midContrastVal, -100.0, 100.0);\n\n\tif (sAmount <= 0.0 && hAmount <= 0.0 && abs(midContrastVal) <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn origCol;\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tlet lumaOrig = get_luminance(origCol.rgb / max(origCol.a, 1e-5));\n\n\t// Shadow blur parameters\n\tlet sSpatialSigma = sRadius;\n\tlet stepScaleS = max(1.0, sSpatialSigma / 20.0);\n\tlet effectiveSigmaS = sSpatialSigma / stepScaleS;\n\tlet sampleRadiusS = min(i32(ceil(3.0 * effectiveSigmaS)), 64);\n\n\t// Highlight blur parameters\n\tlet hSpatialSigma = hRadius;\n\tlet stepScaleH = max(1.0, hSpatialSigma / 20.0);\n\tlet effectiveSigmaH = hSpatialSigma / stepScaleH;\n\tlet sampleRadiusH = min(i32(ceil(3.0 * effectiveSigmaH)), 64);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// PASS 1: Horizontal blur of luminance from origTex\n\t\t// Output packed channels: R = sLumaPass1, G = hLumaPass1, B = sAlphaPass1, A = hAlphaPass1\n\t\tvar sSum = 0.0;\n\t\tvar sWeightSum = 0.0;\n\t\tvar sAlphaSum = 0.0;\n\t\tvar sKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleS;\n\t\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\t\tsWeightSum += weight * sampleAlpha;\n\t\t\tsAlphaSum += sampleAlpha * weight;\n\t\t\tsKernelSum += weight;\n\t\t}\n\n\t\tvar hSum = 0.0;\n\t\tvar hWeightSum = 0.0;\n\t\tvar hAlphaSum = 0.0;\n\t\tvar hKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleH;\n\t\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\t\thWeightSum += weight * sampleAlpha;\n\t\t\thAlphaSum += sampleAlpha * weight;\n\t\t\thKernelSum += weight;\n\t\t}\n\n\t\tlet sLumaPass1 = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\t\tlet sAlphaPass1 = sAlphaSum / max(sKernelSum, 1e-5);\n\t\tlet hLumaPass1 = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\t\tlet hAlphaPass1 = hAlphaSum / max(hKernelSum, 1e-5);\n\n\t\treturn vec4<f32>(sLumaPass1, hLumaPass1, sAlphaPass1, hAlphaPass1);\n\t}\n\n\t// PASS 2: Vertical blur of Pass 1 + Dynamic Range Recovery\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tvar sSum = 0.0;\n\tvar sWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleS;\n\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.b;\n\t\tlet sampleLuma = samplePass1.r;\n\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\tsWeightSum += weight * sampleAlpha;\n\t}\n\n\tvar hSum = 0.0;\n\tvar hWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleH;\n\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.a;\n\t\tlet sampleLuma = samplePass1.g;\n\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\thWeightSum += weight * sampleAlpha;\n\t}\n\n\tlet sLumaBlur = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\tlet hLumaBlur = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\n\tlet alpha = origCol.a;\n\tlet rgb = origCol.rgb / alpha;\n\n\tlet sAmountNorm = sAmount / 100.0;\n\tlet hAmountNorm = hAmount / 100.0;\n\tlet sTonalWidth = clamp(sTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet hTonalWidth = clamp(hTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet colCorrNorm = colCorrVal / 100.0;\n\tlet midContrastNorm = midContrastVal / 100.0;\n\n\tlet sEvalLuma = 0.65 * sLumaBlur + 0.35 * lumaOrig;\n\tlet hEvalLuma = 0.65 * hLumaBlur + 0.35 * lumaOrig;\n\n\tlet wShadow = 1.0 - smoothstep(0.0, sTonalWidth, sEvalLuma);\n\tlet wHighlight = smoothstep(1.0 - hTonalWidth, 1.0, hEvalLuma);\n\n\tlet shadowBoost = sAmountNorm * wShadow * (1.0 - lumaOrig) * (1.0 - sqrt(clamp(sLumaBlur, 0.0, 1.0)));\n\tlet highlightSuppression = hAmountNorm * wHighlight * lumaOrig * sqrt(clamp(hLumaBlur, 0.0, 1.0));\n\n\tvar targetLuma = clamp(lumaOrig + shadowBoost - highlightSuppression, 0.0, 1.0);\n\n\tif (abs(midContrastNorm) > 0.001) {\n\t\tlet midDiff = targetLuma - 0.5;\n\t\tlet sCurve = midDiff * (1.0 - 4.0 * midDiff * midDiff);\n\t\ttargetLuma = clamp(targetLuma + midContrastNorm * sCurve * 0.4, 0.0, 1.0);\n\t}\n\n\tvar adjustedRgb = rgb * ((targetLuma + 1e-4) / (lumaOrig + 1e-4));\n\n\tlet effectIntensity = sAmountNorm * wShadow + hAmountNorm * wHighlight;\n\tlet satFactor = clamp(1.0 + colCorrNorm * effectIntensity * 1.5, 0.0, 3.0);\n\tadjustedRgb = mix(vec3<f32>(targetLuma), adjustedRgb, satFactor);\n\n\tlet finalRgb = clamp(adjustedRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst shadowsHighlightsUniformData = new Float32Array(20);\nfunction getShadowsHighlightsResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_SHADOWS_HIGHLIGHTS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ShadowsHighlights\" || !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 = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"shadowshighlights_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst shadowAmountRes = resolveField(op.shadowAmountHandleId, Number(op.shadowAmount ?? 0), 0, MAX_AMOUNT);\n\tconst shadowTonalWidthRes = resolveField(op.shadowTonalWidthHandleId, Number(op.shadowTonalWidth ?? 50), 0, 100);\n\tconst shadowRadiusRes = resolveField(op.shadowRadiusHandleId, Number(op.shadowRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst highlightAmountRes = resolveField(op.highlightAmountHandleId, Number(op.highlightAmount ?? 0), 0, MAX_AMOUNT);\n\tconst highlightTonalWidthRes = resolveField(op.highlightTonalWidthHandleId, Number(op.highlightTonalWidth ?? 50), 0, 100);\n\tconst highlightRadiusRes = resolveField(op.highlightRadiusHandleId, Number(op.highlightRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst colorCorrectionRes = resolveField(op.colorCorrectionHandleId, Number(op.colorCorrection ?? 0), -100, 100);\n\tconst midtoneContrastRes = resolveField(op.midtoneContrastHandleId, Number(op.midtoneContrast ?? 0), -100, 100);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (shadowAmountRes.val <= 0 && !shadowAmountRes.hasStaticSig && highlightAmountRes.val <= 0 && !highlightAmountRes.hasStaticSig && midtoneContrastRes.val === 0 && !midtoneContrastRes.hasStaticSig) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getShadowsHighlightsResources(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 shadowAmountView = getSignalView(shadowAmountRes, \"shadow_amount_sig\");\n\tconst shadowTonalWidthView = getSignalView(shadowTonalWidthRes, \"shadow_tonal_width_sig\");\n\tconst shadowRadiusView = getSignalView(shadowRadiusRes, \"shadow_radius_sig\");\n\tconst highlightAmountView = getSignalView(highlightAmountRes, \"highlight_amount_sig\");\n\tconst highlightTonalWidthView = getSignalView(highlightTonalWidthRes, \"highlight_tonal_width_sig\");\n\tconst highlightRadiusView = getSignalView(highlightRadiusRes, \"highlight_radius_sig\");\n\tconst colorCorrectionView = getSignalView(colorCorrectionRes, \"color_correction_sig\");\n\tconst midtoneContrastView = getSignalView(midtoneContrastRes, \"midtone_contrast_sig\");\n\tconst createBindGroup = (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\tshadowsHighlightsUniformData[2] = shadowRadiusRes.val;\n\tshadowsHighlightsUniformData[3] = highlightRadiusRes.val;\n\tshadowsHighlightsUniformData[4] = shadowAmountRes.val;\n\tshadowsHighlightsUniformData[5] = shadowTonalWidthRes.val;\n\tshadowsHighlightsUniformData[6] = highlightAmountRes.val;\n\tshadowsHighlightsUniformData[7] = highlightTonalWidthRes.val;\n\tshadowsHighlightsUniformData[8] = colorCorrectionRes.val;\n\tshadowsHighlightsUniformData[9] = midtoneContrastRes.val;\n\tshadowsHighlightsUniformData[10] = 0;\n\tshadowsHighlightsUniformData[11] = 0;\n\tshadowsHighlightsUniformData[12] = shadowAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[13] = shadowTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[14] = shadowRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[15] = highlightAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[16] = highlightTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[17] = highlightRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[18] = colorCorrectionRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[19] = midtoneContrastRes.hasStaticSig ? 1 : 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: shadowAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: shadowTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: shadowRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: highlightAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: highlightTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: highlightRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: colorCorrectionView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: midtoneContrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tshadowsHighlightsUniformData[0] = 1;\n\tshadowsHighlightsUniformData[1] = 0;\n\tshadowsHighlightsUniformData[10] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\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\tcreateBindGroup(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tshadowsHighlightsUniformData[0] = 0;\n\tshadowsHighlightsUniformData[1] = 1;\n\tshadowsHighlightsUniformData[10] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\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\tcreateBindGroup(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 = { WebGPURenderer };\n\n//#endregion\nexport { MIN_RADIUS as a, ShadowsHighlightsNodeConfigSchema as c, defaultShadowsHighlightsConfig as d, shadowsHighlightsConfig as f, MAX_RADIUS as i, ShadowsHighlightsOperationSchema as l, WebGPURenderer as n, SHADOWS_HIGHLIGHTS_OUTPUT_TYPE_MAP as o, MAX_AMOUNT as r, SHADOWS_HIGHLIGHTS_PRESETS as s, renderers_default as t, ShadowsHighlightsResultSchema as u };\n//# sourceMappingURL=renderers-CCz2R7ss.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-Dno-fujw.mjs","names":[],"sources":["../../../nodes/node-shadows-highlights/dist/renderers-CCz2R7ss.mjs"],"sourcesContent":["import { 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 MIN_RADIUS = 1;\nconst MAX_AMOUNT = 100;\nconst shadowsHighlightsConfig = configBuilder().field(\"shadowAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Boost (%)\",\n\tdescription: \"Percentage to lift and recover crushed shadow details (0–100%).\"\n}).field(\"shadowTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Range (%)\",\n\tdescription: \"Range of dark tones affected by shadow adjustments (0–100%).\"\n}).field(\"shadowRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine shadow illumination (1–250px).\"\n}).field(\"highlightAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Suppression (%)\",\n\tdescription: \"Percentage to suppress and recover blown highlight details (0–100%).\"\n}).field(\"highlightTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Range (%)\",\n\tdescription: \"Range of bright tones affected by highlight adjustments (0–100%).\"\n}).field(\"highlightRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine highlight exposure (1–250px).\"\n}).field(\"colorCorrection\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Correction (%)\",\n\tdescription: \"Fine-tunes color saturation in recovered shadow/highlight zones (-100 to +100%).\"\n}).field(\"midtoneContrast\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Midtone Contrast (%)\",\n\tdescription: \"Adjusts contrast centered on the midtones (-100 to +100%).\"\n}).build();\nconst ShadowsHighlightsNodeConfigSchema = shadowsHighlightsConfig.schema;\nconst ShadowsHighlightsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ShadowsHighlightsOperationSchema = ShadowsHighlightsNodeConfigSchema.extend({\n\top: z.literal(\"ShadowsHighlights\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultShadowsHighlightsConfig = ShadowsHighlightsNodeConfigSchema.parse({});\nconst SHADOWS_HIGHLIGHTS_PRESETS = [\n\t{\n\t\tid: \"default\",\n\t\tname: \"Default (Neutral)\",\n\t\tdescription: \"Zero adjustments across dynamic range\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 0,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"shadow-lift\",\n\t\tname: \"Shadow Detail Lift\",\n\t\tdescription: \"Gently opens up underexposed shadows without bleaching midtones\",\n\t\tconfig: {\n\t\t\tshadowAmount: 40,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 35,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 10,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"highlight-recovery\",\n\t\tname: \"Highlight Recovery\",\n\t\tdescription: \"Pulls back blown sky, cloud, and specular highlight clipping\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 45,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: -5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"hdr-balance\",\n\t\tname: \"HDR Dynamic Range\",\n\t\tdescription: \"Balanced recovery expanding visible dynamic range in high contrast scenes\",\n\t\tconfig: {\n\t\t\tshadowAmount: 35,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 40,\n\t\t\thighlightAmount: 35,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 40,\n\t\t\tcolorCorrection: 15,\n\t\t\tmidtoneContrast: 10\n\t\t}\n\t},\n\t{\n\t\tid: \"backlight-correction\",\n\t\tname: \"Backlight Correction\",\n\t\tdescription: \"Compensates for harsh backlighting illuminating silhouetted subjects\",\n\t\tconfig: {\n\t\t\tshadowAmount: 60,\n\t\t\tshadowTonalWidth: 60,\n\t\t\tshadowRadius: 50,\n\t\t\thighlightAmount: 20,\n\t\t\thighlightTonalWidth: 35,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 20,\n\t\t\tmidtoneContrast: 5\n\t\t}\n\t},\n\t{\n\t\tid: \"dramatic-punch\",\n\t\tname: \"Dramatic Contrast & Clarity\",\n\t\tdescription: \"Deepens shadows, compresses highlights, and boosts midtone punch\",\n\t\tconfig: {\n\t\t\tshadowAmount: 10,\n\t\t\tshadowTonalWidth: 30,\n\t\t\tshadowRadius: 25,\n\t\t\thighlightAmount: 30,\n\t\t\thighlightTonalWidth: 55,\n\t\t\thighlightRadius: 25,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 25\n\t\t}\n\t},\n\t{\n\t\tid: \"gentle-fill\",\n\t\tname: \"Gentle Fill Light\",\n\t\tdescription: \"Subtle lift to low-light areas preserving photographic atmosphere\",\n\t\tconfig: {\n\t\t\tshadowAmount: 20,\n\t\t\tshadowTonalWidth: 40,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 15,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t}\n];\nconst SHADOWS_HIGHLIGHTS_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_SHADOWS_HIGHLIGHTS_UNIFORMS = `\nstruct ShadowsHighlightsUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tshadowRadius : f32,\n\thighlightRadius : f32,\n\n\tshadowAmount : f32,\n\tshadowTonalWidth : f32,\n\thighlightAmount : f32,\n\thighlightTonalWidth : f32,\n\n\tcolorCorrection : f32,\n\tmidtoneContrast : f32,\n\tisSecondPass : f32,\n\t_pad0 : f32,\n\n\thasShadowAmountSig : f32,\n\thasShadowTonalWidthSig : f32,\n\thasShadowRadiusSig : f32,\n\thasHighlightAmountSig : f32,\n\n\thasHighlightTonalWidthSig : f32,\n\thasHighlightRadiusSig : f32,\n\thasColorCorrectionSig : f32,\n\thasMidtoneContrastSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ShadowsHighlightsUniforms;\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 shadowAmountSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(3) var highlightAmountSigTex : texture_2d<f32>;\n@group(2) @binding(4) var highlightTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(5) var highlightRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(6) var colorCorrectionSigTex : texture_2d<f32>;\n@group(2) @binding(7) var midtoneContrastSigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar sAmount = u.shadowAmount;\n\tif (u.hasShadowAmountSig > 0.5) {\n\t\tsAmount = textureSampleLevel(shadowAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsAmount = clamp(sAmount, 0.0, 100.0);\n\n\tvar sTonalWidthVal = u.shadowTonalWidth;\n\tif (u.hasShadowTonalWidthSig > 0.5) {\n\t\tsTonalWidthVal = textureSampleLevel(shadowTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsTonalWidthVal = clamp(sTonalWidthVal, 0.0, 100.0);\n\n\tvar sRadius = u.shadowRadius;\n\tif (u.hasShadowRadiusSig > 0.5) {\n\t\tsRadius = textureSampleLevel(shadowRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsRadius = clamp(sRadius, 1.0, 250.0);\n\n\tvar hAmount = u.highlightAmount;\n\tif (u.hasHighlightAmountSig > 0.5) {\n\t\thAmount = textureSampleLevel(highlightAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thAmount = clamp(hAmount, 0.0, 100.0);\n\n\tvar hTonalWidthVal = u.highlightTonalWidth;\n\tif (u.hasHighlightTonalWidthSig > 0.5) {\n\t\thTonalWidthVal = textureSampleLevel(highlightTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thTonalWidthVal = clamp(hTonalWidthVal, 0.0, 100.0);\n\n\tvar hRadius = u.highlightRadius;\n\tif (u.hasHighlightRadiusSig > 0.5) {\n\t\thRadius = textureSampleLevel(highlightRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thRadius = clamp(hRadius, 1.0, 250.0);\n\n\tvar colCorrVal = u.colorCorrection;\n\tif (u.hasColorCorrectionSig > 0.5) {\n\t\tcolCorrVal = textureSampleLevel(colorCorrectionSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolCorrVal = clamp(colCorrVal, -100.0, 100.0);\n\n\tvar midContrastVal = u.midtoneContrast;\n\tif (u.hasMidtoneContrastSig > 0.5) {\n\t\tmidContrastVal = textureSampleLevel(midtoneContrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tmidContrastVal = clamp(midContrastVal, -100.0, 100.0);\n\n\tif (sAmount <= 0.0 && hAmount <= 0.0 && abs(midContrastVal) <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn origCol;\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tlet lumaOrig = get_luminance(origCol.rgb / max(origCol.a, 1e-5));\n\n\t// Shadow blur parameters\n\tlet sSpatialSigma = sRadius;\n\tlet stepScaleS = max(1.0, sSpatialSigma / 20.0);\n\tlet effectiveSigmaS = sSpatialSigma / stepScaleS;\n\tlet sampleRadiusS = min(i32(ceil(3.0 * effectiveSigmaS)), 64);\n\n\t// Highlight blur parameters\n\tlet hSpatialSigma = hRadius;\n\tlet stepScaleH = max(1.0, hSpatialSigma / 20.0);\n\tlet effectiveSigmaH = hSpatialSigma / stepScaleH;\n\tlet sampleRadiusH = min(i32(ceil(3.0 * effectiveSigmaH)), 64);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// PASS 1: Horizontal blur of luminance from origTex\n\t\t// Output packed channels: R = sLumaPass1, G = hLumaPass1, B = sAlphaPass1, A = hAlphaPass1\n\t\tvar sSum = 0.0;\n\t\tvar sWeightSum = 0.0;\n\t\tvar sAlphaSum = 0.0;\n\t\tvar sKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleS;\n\t\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\t\tsWeightSum += weight * sampleAlpha;\n\t\t\tsAlphaSum += sampleAlpha * weight;\n\t\t\tsKernelSum += weight;\n\t\t}\n\n\t\tvar hSum = 0.0;\n\t\tvar hWeightSum = 0.0;\n\t\tvar hAlphaSum = 0.0;\n\t\tvar hKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleH;\n\t\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\t\thWeightSum += weight * sampleAlpha;\n\t\t\thAlphaSum += sampleAlpha * weight;\n\t\t\thKernelSum += weight;\n\t\t}\n\n\t\tlet sLumaPass1 = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\t\tlet sAlphaPass1 = sAlphaSum / max(sKernelSum, 1e-5);\n\t\tlet hLumaPass1 = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\t\tlet hAlphaPass1 = hAlphaSum / max(hKernelSum, 1e-5);\n\n\t\treturn vec4<f32>(sLumaPass1, hLumaPass1, sAlphaPass1, hAlphaPass1);\n\t}\n\n\t// PASS 2: Vertical blur of Pass 1 + Dynamic Range Recovery\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tvar sSum = 0.0;\n\tvar sWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleS;\n\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.b;\n\t\tlet sampleLuma = samplePass1.r;\n\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\tsWeightSum += weight * sampleAlpha;\n\t}\n\n\tvar hSum = 0.0;\n\tvar hWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleH;\n\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.a;\n\t\tlet sampleLuma = samplePass1.g;\n\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\thWeightSum += weight * sampleAlpha;\n\t}\n\n\tlet sLumaBlur = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\tlet hLumaBlur = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\n\tlet alpha = origCol.a;\n\tlet rgb = origCol.rgb / alpha;\n\n\tlet sAmountNorm = sAmount / 100.0;\n\tlet hAmountNorm = hAmount / 100.0;\n\tlet sTonalWidth = clamp(sTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet hTonalWidth = clamp(hTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet colCorrNorm = colCorrVal / 100.0;\n\tlet midContrastNorm = midContrastVal / 100.0;\n\n\tlet sEvalLuma = 0.65 * sLumaBlur + 0.35 * lumaOrig;\n\tlet hEvalLuma = 0.65 * hLumaBlur + 0.35 * lumaOrig;\n\n\tlet wShadow = 1.0 - smoothstep(0.0, sTonalWidth, sEvalLuma);\n\tlet wHighlight = smoothstep(1.0 - hTonalWidth, 1.0, hEvalLuma);\n\n\tlet shadowBoost = sAmountNorm * wShadow * (1.0 - lumaOrig) * (1.0 - sqrt(clamp(sLumaBlur, 0.0, 1.0)));\n\tlet highlightSuppression = hAmountNorm * wHighlight * lumaOrig * sqrt(clamp(hLumaBlur, 0.0, 1.0));\n\n\tvar targetLuma = clamp(lumaOrig + shadowBoost - highlightSuppression, 0.0, 1.0);\n\n\tif (abs(midContrastNorm) > 0.001) {\n\t\tlet midDiff = targetLuma - 0.5;\n\t\tlet sCurve = midDiff * (1.0 - 4.0 * midDiff * midDiff);\n\t\ttargetLuma = clamp(targetLuma + midContrastNorm * sCurve * 0.4, 0.0, 1.0);\n\t}\n\n\tvar adjustedRgb = rgb * ((targetLuma + 1e-4) / (lumaOrig + 1e-4));\n\n\tlet effectIntensity = sAmountNorm * wShadow + hAmountNorm * wHighlight;\n\tlet satFactor = clamp(1.0 + colCorrNorm * effectIntensity * 1.5, 0.0, 3.0);\n\tadjustedRgb = mix(vec3<f32>(targetLuma), adjustedRgb, satFactor);\n\n\tlet finalRgb = clamp(adjustedRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst shadowsHighlightsUniformData = new Float32Array(20);\nfunction getShadowsHighlightsResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_SHADOWS_HIGHLIGHTS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ShadowsHighlights\" || !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 = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"shadowshighlights_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst shadowAmountRes = resolveField(op.shadowAmountHandleId, Number(op.shadowAmount ?? 0), 0, MAX_AMOUNT);\n\tconst shadowTonalWidthRes = resolveField(op.shadowTonalWidthHandleId, Number(op.shadowTonalWidth ?? 50), 0, 100);\n\tconst shadowRadiusRes = resolveField(op.shadowRadiusHandleId, Number(op.shadowRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst highlightAmountRes = resolveField(op.highlightAmountHandleId, Number(op.highlightAmount ?? 0), 0, MAX_AMOUNT);\n\tconst highlightTonalWidthRes = resolveField(op.highlightTonalWidthHandleId, Number(op.highlightTonalWidth ?? 50), 0, 100);\n\tconst highlightRadiusRes = resolveField(op.highlightRadiusHandleId, Number(op.highlightRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst colorCorrectionRes = resolveField(op.colorCorrectionHandleId, Number(op.colorCorrection ?? 0), -100, 100);\n\tconst midtoneContrastRes = resolveField(op.midtoneContrastHandleId, Number(op.midtoneContrast ?? 0), -100, 100);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (shadowAmountRes.val <= 0 && !shadowAmountRes.hasStaticSig && highlightAmountRes.val <= 0 && !highlightAmountRes.hasStaticSig && midtoneContrastRes.val === 0 && !midtoneContrastRes.hasStaticSig) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getShadowsHighlightsResources(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 shadowAmountView = getSignalView(shadowAmountRes, \"shadow_amount_sig\");\n\tconst shadowTonalWidthView = getSignalView(shadowTonalWidthRes, \"shadow_tonal_width_sig\");\n\tconst shadowRadiusView = getSignalView(shadowRadiusRes, \"shadow_radius_sig\");\n\tconst highlightAmountView = getSignalView(highlightAmountRes, \"highlight_amount_sig\");\n\tconst highlightTonalWidthView = getSignalView(highlightTonalWidthRes, \"highlight_tonal_width_sig\");\n\tconst highlightRadiusView = getSignalView(highlightRadiusRes, \"highlight_radius_sig\");\n\tconst colorCorrectionView = getSignalView(colorCorrectionRes, \"color_correction_sig\");\n\tconst midtoneContrastView = getSignalView(midtoneContrastRes, \"midtone_contrast_sig\");\n\tconst createBindGroup = (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\tshadowsHighlightsUniformData[2] = shadowRadiusRes.val;\n\tshadowsHighlightsUniformData[3] = highlightRadiusRes.val;\n\tshadowsHighlightsUniformData[4] = shadowAmountRes.val;\n\tshadowsHighlightsUniformData[5] = shadowTonalWidthRes.val;\n\tshadowsHighlightsUniformData[6] = highlightAmountRes.val;\n\tshadowsHighlightsUniformData[7] = highlightTonalWidthRes.val;\n\tshadowsHighlightsUniformData[8] = colorCorrectionRes.val;\n\tshadowsHighlightsUniformData[9] = midtoneContrastRes.val;\n\tshadowsHighlightsUniformData[10] = 0;\n\tshadowsHighlightsUniformData[11] = 0;\n\tshadowsHighlightsUniformData[12] = shadowAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[13] = shadowTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[14] = shadowRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[15] = highlightAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[16] = highlightTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[17] = highlightRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[18] = colorCorrectionRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[19] = midtoneContrastRes.hasStaticSig ? 1 : 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: shadowAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: shadowTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: shadowRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: highlightAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: highlightTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: highlightRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: colorCorrectionView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: midtoneContrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tshadowsHighlightsUniformData[0] = 1;\n\tshadowsHighlightsUniformData[1] = 0;\n\tshadowsHighlightsUniformData[10] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\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\tcreateBindGroup(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tshadowsHighlightsUniformData[0] = 0;\n\tshadowsHighlightsUniformData[1] = 1;\n\tshadowsHighlightsUniformData[10] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\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\tcreateBindGroup(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 = { WebGPURenderer };\n\n//#endregion\nexport { MIN_RADIUS as a, ShadowsHighlightsNodeConfigSchema as c, defaultShadowsHighlightsConfig as d, shadowsHighlightsConfig as f, MAX_RADIUS as i, ShadowsHighlightsOperationSchema as l, WebGPURenderer as n, SHADOWS_HIGHLIGHTS_OUTPUT_TYPE_MAP as o, MAX_AMOUNT as r, SHADOWS_HIGHLIGHTS_PRESETS as s, renderers_default as t, ShadowsHighlightsResultSchema as u };\n//# sourceMappingURL=renderers-CCz2R7ss.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-GBe2k3y8.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
3
|
+
import "./dist-DkuDAIrG.mjs";
|
|
4
|
+
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DG3gI88-.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs
|
|
7
7
|
const COLOR_SPACE_MAP = {
|
|
@@ -290,4 +290,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURend
|
|
|
290
290
|
|
|
291
291
|
//#endregion
|
|
292
292
|
export { ChannelMergerWebGPURenderer, renderers_default as default };
|
|
293
|
-
//# sourceMappingURL=renderer-
|
|
293
|
+
//# sourceMappingURL=renderer-DoYdfDEA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BO2lYmtE.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\n\n\t\tlet X = x * 0.95047;\n\t\tlet Y = y * 1.00000;\n\t\tlet Z = z * 1.08883;\n\n\t\tlet lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: texturesLayout(device, 4),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DoYdfDEA.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\n\n\t\tlet X = x * 0.95047;\n\t\tlet Y = y * 1.00000;\n\t\tlet Z = z * 1.08883;\n\n\t\tlet lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: texturesLayout(device, 4),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.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, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DG3gI88-.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs
|
|
5
5
|
const easeIn = (t) => t * t;
|
|
@@ -261,4 +261,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer
|
|
|
261
261
|
|
|
262
262
|
//#endregion
|
|
263
263
|
export { renderers_default as t };
|
|
264
|
-
//# sourceMappingURL=renderer-
|
|
264
|
+
//# sourceMappingURL=renderer-DqjITuT-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Cjq1s3br.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DqjITuT-.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-GBe2k3y8.mjs";
|
|
2
2
|
import { Et as getFingerprint } from "./dist-fjKpBYkc.mjs";
|
|
3
3
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
4
|
-
import { z as lutStore } from "./dist-
|
|
4
|
+
import { z as lutStore } from "./dist-DkuDAIrG.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs
|
|
7
7
|
const extractionCache = /* @__PURE__ */ new Map();
|
|
@@ -979,4 +979,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURendere
|
|
|
979
979
|
|
|
980
980
|
//#endregion
|
|
981
981
|
export { renderers_default as default };
|
|
982
|
-
//# sourceMappingURL=renderer-
|
|
982
|
+
//# sourceMappingURL=renderer-Dy-DBU0X.mjs.map
|