framefields 2.4.3 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -1
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-DJeVoE8b.mjs → audio-BluXgSeG.mjs} +1 -1
- package/dist/{audio-DJeVoE8b.mjs.map → audio-BluXgSeG.mjs.map} +1 -1
- package/dist/{audio-BymXfAvH.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
- package/dist/{audio-BymXfAvH.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
- package/dist/{audio-BzHHpImj.mjs → audio-CMHpfOoS.mjs} +4 -4
- package/dist/{audio-BzHHpImj.mjs.map → audio-CMHpfOoS.mjs.map} +1 -1
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +221 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/components/index.d.mts +12 -0
- package/dist/components/index.mjs +49 -0
- package/dist/{dist-hmWTJPik.mjs → dist-BBUrGwqd.mjs} +24 -3
- package/dist/{dist-hmWTJPik.mjs.map → dist-BBUrGwqd.mjs.map} +1 -1
- package/dist/{dist-Bo2_zeCn.mjs → dist-CQZ5_60A.mjs} +2 -2
- package/dist/{dist-Bo2_zeCn.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
- package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
- package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
- package/dist/{dist-TrtLGPvc.mjs → dist-DFeF-ygz.mjs} +1 -1
- package/dist/{dist-TrtLGPvc.mjs.map → dist-DFeF-ygz.mjs.map} +1 -1
- package/dist/{dist-DMa2BbYs.mjs → dist-QMVy31gR.mjs} +23 -4
- package/dist/dist-QMVy31gR.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-CiZjSwIh.mjs → effects-mRe-rLte.mjs} +3 -3
- package/dist/{effects-CiZjSwIh.mjs.map → effects-mRe-rLte.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-Da1JDKpc.mjs → fonts-wI3CUYHM.mjs} +2 -2
- package/dist/{fonts-Da1JDKpc.mjs.map → fonts-wI3CUYHM.mjs.map} +1 -1
- package/dist/{gpu-CHIgM_YH.mjs → gpu-I5fdrflL.mjs} +2 -2
- package/dist/{gpu-CHIgM_YH.mjs.map → gpu-I5fdrflL.mjs.map} +1 -1
- package/dist/{index-DIvWBm-q.d.mts → index-B-KVpJMb.d.mts} +2 -2
- package/dist/{index-DIvWBm-q.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
- package/dist/index-BJe_GEyj.d.mts +5968 -0
- package/dist/index-BJe_GEyj.d.mts.map +1 -0
- package/dist/{index-WMofVN02.d.mts → index-BpdVOlsV.d.mts} +3 -3
- package/dist/{index-WMofVN02.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
- package/dist/index-C2f4Hm-p.d.mts +89 -0
- package/dist/index-C2f4Hm-p.d.mts.map +1 -0
- package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
- package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
- package/dist/{index-CJkihekp.d.mts → index-D6-lH1Mx.d.mts} +189 -189
- package/dist/index-D6-lH1Mx.d.mts.map +1 -0
- package/dist/{index-Dwf76Qep.d.mts → index-DNKM3to5.d.mts} +3 -3
- package/dist/{index-Dwf76Qep.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
- package/dist/{index-DGe83M-p.d.mts → index-fymoeGNW.d.mts} +6 -1
- package/dist/index-fymoeGNW.d.mts.map +1 -0
- package/dist/index.d.mts +13 -4659
- package/dist/index.mjs +59 -6654
- package/dist/preview/index.d.mts +4 -90
- package/dist/preview/index.mjs +12 -12
- package/dist/{preview-5E4B96RD.mjs → preview--DEgW67P.mjs} +3 -3
- package/dist/{preview-5E4B96RD.mjs.map → preview--DEgW67P.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-TFFG5YFI.mjs → chunk-24H3QVYB.mjs} +1 -1
- package/dist/preview-engine/{chunk-7J4OK4VE.mjs → chunk-25T3M6MI.mjs} +1 -1
- package/dist/preview-engine/{chunk-YJ6GWVL4.mjs → chunk-2AV7HRRL.mjs} +1 -1
- package/dist/preview-engine/{chunk-U4SQUTDV.mjs → chunk-4EOS6ZWW.mjs} +1 -1
- package/dist/preview-engine/{chunk-O3NOB5IB.mjs → chunk-4UI3S3UG.mjs} +1 -1
- package/dist/preview-engine/{chunk-YQYLBXOX.mjs → chunk-5N3GW3NE.mjs} +1 -1
- package/dist/preview-engine/{chunk-JJYNYYPA.mjs → chunk-5P764TTF.mjs} +1 -1
- package/dist/preview-engine/{chunk-5CWQHYQP.mjs → chunk-7BUKVFWB.mjs} +1 -1
- package/dist/preview-engine/{chunk-6WKWYUOM.mjs → chunk-7EHUT5A3.mjs} +1 -1
- package/dist/preview-engine/{chunk-A2775RSO.mjs → chunk-7HTTYP6T.mjs} +1 -1
- package/dist/preview-engine/{chunk-AWX4YGC5.mjs → chunk-7JYMNGNK.mjs} +1 -1
- package/dist/preview-engine/{chunk-JTUK7ZXK.mjs → chunk-A5OUYV3I.mjs} +1 -1
- package/dist/preview-engine/{chunk-5JSSXOBB.mjs → chunk-AJLPRIXB.mjs} +1 -1
- package/dist/preview-engine/{chunk-KJ2DTA77.mjs → chunk-ANZDLSSM.mjs} +1 -1
- package/dist/preview-engine/{chunk-OZDZQMTB.mjs → chunk-C2TA65CH.mjs} +1 -1
- package/dist/preview-engine/{chunk-C45ROXI6.mjs → chunk-CBQOJAIS.mjs} +11 -11
- package/dist/preview-engine/{chunk-E7DH7EPX.mjs → chunk-DKXKOUQR.mjs} +1 -1
- package/dist/preview-engine/{chunk-5SVJIGPK.mjs → chunk-DPIED3EG.mjs} +1 -1
- package/dist/preview-engine/{chunk-AY2ZIXST.mjs → chunk-ENS4KUJV.mjs} +1 -1
- package/dist/preview-engine/{chunk-5EVEGKWT.mjs → chunk-HXHP3UHZ.mjs} +1 -1
- package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
- package/dist/preview-engine/{chunk-JJA4G3OU.mjs → chunk-ILKBHDFB.mjs} +1 -1
- package/dist/preview-engine/{chunk-7QE6II7R.mjs → chunk-JMOJKT5W.mjs} +1 -1
- package/dist/preview-engine/{chunk-ILBZQLUF.mjs → chunk-KKBJ7X3T.mjs} +1 -1
- package/dist/preview-engine/{chunk-EEOUHDUD.mjs → chunk-KRVXRP5F.mjs} +1 -1
- package/dist/preview-engine/{chunk-UVWGZUKZ.mjs → chunk-MLW6Y4RN.mjs} +1 -1
- package/dist/preview-engine/{chunk-UMF7NNUA.mjs → chunk-MRDJNDYV.mjs} +1 -1
- package/dist/preview-engine/{chunk-XTPEGKOZ.mjs → chunk-MZAAJXUL.mjs} +1 -1
- package/dist/preview-engine/{chunk-AKYUVDKM.mjs → chunk-NB55FW7D.mjs} +1 -1
- package/dist/preview-engine/{chunk-UDDK5QZF.mjs → chunk-NG5WSR3A.mjs} +1 -1
- package/dist/preview-engine/{chunk-FDNR4PRC.mjs → chunk-NXKXOSE6.mjs} +1 -1
- package/dist/preview-engine/{chunk-N3PRZLZJ.mjs → chunk-NYEDWUFS.mjs} +1 -1
- package/dist/preview-engine/{chunk-6TGNQ5FD.mjs → chunk-O6LGKH4S.mjs} +1 -1
- package/dist/preview-engine/{chunk-LSBCFJZM.mjs → chunk-OOJAQBS3.mjs} +1 -1
- package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-PJN7DD55.mjs} +3 -3
- package/dist/preview-engine/{chunk-V6LCSK6Q.mjs → chunk-QCUGWPYP.mjs} +1 -1
- package/dist/preview-engine/{chunk-BIS3W4Z5.mjs → chunk-QQJPPGH5.mjs} +1 -1
- package/dist/preview-engine/{chunk-37P2KIFE.mjs → chunk-QVUT3QNF.mjs} +1 -1
- package/dist/preview-engine/{chunk-FSAELHVT.mjs → chunk-RNFYEZLL.mjs} +1 -1
- package/dist/preview-engine/{chunk-3SOD7OTO.mjs → chunk-TA5OBYRR.mjs} +1 -1
- package/dist/preview-engine/{chunk-6MBYREBG.mjs → chunk-VRNN6H6Y.mjs} +1 -1
- package/dist/preview-engine/{chunk-GIH5QURF.mjs → chunk-VTE3IISK.mjs} +1 -1
- package/dist/preview-engine/{chunk-GQN35VLT.mjs → chunk-VZGDX7II.mjs} +1 -1
- package/dist/preview-engine/{chunk-54HE34HO.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-LMZHCWXP.mjs → chunk-XYRBFLFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-O5LA63CK.mjs → chunk-YMQMPBTL.mjs} +1 -1
- package/dist/preview-engine/{chunk-S7NG26UG.mjs → chunk-Z4ZO4RVT.mjs} +1 -1
- package/dist/preview-engine/{chunk-W3QGP5XF.mjs → chunk-ZFURUTVW.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +33 -31
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/renderers-2CBJYNOC.mjs +1 -0
- package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
- package/dist/preview-engine/renderers-3AZ5PMGC.mjs +1 -0
- package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
- package/dist/preview-engine/{renderers-ELARGDRC.mjs → renderers-3VXNHICC.mjs} +1 -1
- package/dist/preview-engine/{renderers-WNMRLGZS.mjs → renderers-3ZYXHUSW.mjs} +1 -1
- package/dist/preview-engine/{renderers-43LBWRY2.mjs → renderers-4FONYSBA.mjs} +1 -1
- package/dist/preview-engine/renderers-54I5SFXR.mjs +1 -0
- package/dist/preview-engine/renderers-5LXALKB4.mjs +1 -0
- package/dist/preview-engine/renderers-5TICPV2K.mjs +1 -0
- package/dist/preview-engine/{renderers-X2XGDF3R.mjs → renderers-5YS5WHAV.mjs} +1 -1
- package/dist/preview-engine/renderers-6UTRYW7Z.mjs +1 -0
- package/dist/preview-engine/{renderers-XPO2WQNF.mjs → renderers-6ZCFR7BL.mjs} +1 -1
- package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
- package/dist/preview-engine/{renderers-QJNGN722.mjs → renderers-BOT4H6KJ.mjs} +1 -1
- package/dist/preview-engine/{renderers-FNPXT2EH.mjs → renderers-C44CEIYB.mjs} +1 -1
- package/dist/preview-engine/{renderers-KW75FYFG.mjs → renderers-C4G7X7LD.mjs} +1 -1
- package/dist/preview-engine/renderers-CLCPP3TZ.mjs +1 -0
- package/dist/preview-engine/{renderers-7M3YOI7E.mjs → renderers-DBRC3SQE.mjs} +1 -1
- package/dist/preview-engine/{renderers-PM4Q5QOW.mjs → renderers-DSICQMRF.mjs} +1 -1
- package/dist/preview-engine/renderers-DTZ2AER5.mjs +1 -0
- package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
- package/dist/preview-engine/{renderers-5OGAF66H.mjs → renderers-EOIMH7UE.mjs} +1 -1
- package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
- package/dist/preview-engine/{renderers-K23EAM2J.mjs → renderers-GSRKNT75.mjs} +1 -1
- package/dist/preview-engine/{renderers-J6DEIWTU.mjs → renderers-GUJTPO37.mjs} +1 -1
- package/dist/preview-engine/{renderers-VD5GHHK6.mjs → renderers-HE42AT5T.mjs} +1 -1
- package/dist/preview-engine/{renderers-Q6AO5M54.mjs → renderers-JM7JEVBN.mjs} +1 -1
- package/dist/preview-engine/{renderers-WOLTH5VI.mjs → renderers-JRU2GNPE.mjs} +1 -1
- package/dist/preview-engine/{renderers-TFEDHXPY.mjs → renderers-K6J77OI5.mjs} +1 -1
- package/dist/preview-engine/{renderers-U2ZWRL25.mjs → renderers-L7EITUCD.mjs} +1 -1
- package/dist/preview-engine/renderers-LGUHDWWB.mjs +1 -0
- package/dist/preview-engine/renderers-LGXD24IJ.mjs +1 -0
- package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
- package/dist/preview-engine/{renderers-3YHETAPE.mjs → renderers-OBXNUQMP.mjs} +1 -1
- package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
- package/dist/preview-engine/{renderers-ZRR7BLB7.mjs → renderers-PJGFJGJS.mjs} +1 -1
- package/dist/preview-engine/{renderers-35G4KCQ2.mjs → renderers-PPGOYOID.mjs} +1 -1
- package/dist/preview-engine/{renderers-7UKFQ75V.mjs → renderers-PUJRHBUW.mjs} +1 -1
- package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
- package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
- package/dist/preview-engine/{renderers-2GE5HE56.mjs → renderers-QPHOG7QR.mjs} +1 -1
- package/dist/preview-engine/{renderers-2A7YDJMJ.mjs → renderers-RV62K5JC.mjs} +1 -1
- package/dist/preview-engine/{renderers-6GYRMHGQ.mjs → renderers-SBX64ERA.mjs} +1 -1
- package/dist/preview-engine/renderers-SCJTTOEJ.mjs +1 -0
- package/dist/preview-engine/{renderers-MHDLRY3S.mjs → renderers-SD35PBEM.mjs} +1 -1
- package/dist/preview-engine/{renderers-XTRFEQO4.mjs → renderers-SIHL5GLI.mjs} +1 -1
- package/dist/preview-engine/{renderers-UBO4ZNE6.mjs → renderers-SNUVYUDE.mjs} +1 -1
- package/dist/preview-engine/renderers-SPW4SWZ2.mjs +228 -0
- package/dist/preview-engine/renderers-SRKCF3LD.mjs +1 -0
- package/dist/preview-engine/{renderers-LF6W5P2I.mjs → renderers-T3S7QVM4.mjs} +1 -1
- package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
- package/dist/preview-engine/renderers-UN6YLFHW.mjs +1 -0
- package/dist/preview-engine/renderers-UTWKTBZI.mjs +1 -0
- package/dist/preview-engine/{renderers-DKOWLKDE.mjs → renderers-V5MJJH33.mjs} +1 -1
- package/dist/preview-engine/{renderers-NJAKGI25.mjs → renderers-V67L3MCY.mjs} +1 -1
- package/dist/preview-engine/{renderers-XTCBHTHC.mjs → renderers-VYK2BJID.mjs} +1 -1
- package/dist/preview-engine/renderers-W6762MNW.mjs +1 -0
- package/dist/preview-engine/{renderers-NPKRNXAT.mjs → renderers-W6ZTVA2I.mjs} +1 -1
- package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
- package/dist/preview-engine/{renderers-ATL5ARUV.mjs → renderers-WPBTAU2E.mjs} +1 -1
- package/dist/preview-engine/{renderers-C4XIAG3F.mjs → renderers-XP7YFWBV.mjs} +1 -1
- package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
- package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
- package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
- package/dist/preview-engine/{renderers-DFJDEPCU.mjs → renderers-ZAPIBQZC.mjs} +1 -1
- package/dist/preview-engine/renderers-ZRR4TUVQ.mjs +1 -0
- package/dist/preview-engine/{renderers-4H34AFW2.mjs → renderers-ZVKXIQ3E.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-KwDdbC0-.mjs → program-CEHCeDpG.mjs} +133 -30
- package/dist/program-CEHCeDpG.mjs.map +1 -0
- package/dist/registry/annotate.json +30 -0
- package/dist/registry/app-frame.json +38 -0
- package/dist/registry/backdrop.json +37 -0
- package/dist/registry/before-after.json +33 -0
- package/dist/registry/callout.json +30 -0
- package/dist/registry/captions.json +37 -0
- package/dist/registry/card-stack.json +30 -0
- package/dist/registry/chat-thread.json +32 -0
- package/dist/registry/code-block.json +45 -0
- package/dist/registry/confetti.json +29 -0
- package/dist/registry/counter.json +36 -0
- package/dist/registry/device-frame.json +36 -0
- package/dist/registry/focus-zoom.json +32 -0
- package/dist/registry/index.json +408 -0
- package/dist/registry/logo-reveal.json +37 -0
- package/dist/registry/lower-third.json +34 -0
- package/dist/registry/meter.json +35 -0
- package/dist/registry/mouse-pointer.json +44 -0
- package/dist/registry/selection.json +31 -0
- package/dist/registry/spotlight.json +28 -0
- package/dist/registry/terminal.json +40 -0
- package/dist/registry/text-reveal.json +39 -0
- package/dist/registry/title-card.json +34 -0
- package/dist/registry/toasts.json +28 -0
- package/dist/registry/touch-point.json +33 -0
- package/dist/registry/waveform.json +29 -0
- package/dist/registry/word-cycle.json +32 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-DcOT5c0t.mjs → renderer--wMbTRFg.mjs} +4 -4
- package/dist/{renderer-DcOT5c0t.mjs.map → renderer--wMbTRFg.mjs.map} +1 -1
- package/dist/{renderer-Ci6YMa4u.mjs → renderer-3aLw-la1.mjs} +5 -5
- package/dist/{renderer-Ci6YMa4u.mjs.map → renderer-3aLw-la1.mjs.map} +1 -1
- package/dist/renderer-7vCBWQVP.mjs +5 -0
- package/dist/{renderer-CUPWHfEY.mjs → renderer-AkRxGnFU.mjs} +5 -5
- package/dist/{renderer-CUPWHfEY.mjs.map → renderer-AkRxGnFU.mjs.map} +1 -1
- package/dist/renderer-B-XgGMCq.mjs +5 -0
- package/dist/renderer-B0yabPlf.mjs +5 -0
- package/dist/{renderer-CLxQ4rU6.mjs → renderer-B1yPBJQc.mjs} +74 -74
- package/dist/{renderer-CLxQ4rU6.mjs.map → renderer-B1yPBJQc.mjs.map} +1 -1
- package/dist/{renderer-DWG4Podv.mjs → renderer-B41jTHFs.mjs} +6 -6
- package/dist/{renderer-DWG4Podv.mjs.map → renderer-B41jTHFs.mjs.map} +1 -1
- package/dist/{renderer-BtWWpFvl.mjs → renderer-B5HG6Czb.mjs} +4 -4
- package/dist/{renderer-BtWWpFvl.mjs.map → renderer-B5HG6Czb.mjs.map} +1 -1
- package/dist/{renderer-OEpwc9Zk.mjs → renderer-B5oJN3A5.mjs} +5 -5
- package/dist/{renderer-OEpwc9Zk.mjs.map → renderer-B5oJN3A5.mjs.map} +1 -1
- package/dist/renderer-B9MYevrF.mjs +5 -0
- package/dist/renderer-BA2Ko4H1.mjs +3 -0
- package/dist/renderer-BCGosndi.mjs +5 -0
- package/dist/{renderer-CwO8T8l8.mjs → renderer-BEmDSqXg.mjs} +4 -4
- package/dist/{renderer-CwO8T8l8.mjs.map → renderer-BEmDSqXg.mjs.map} +1 -1
- package/dist/{renderer-B4ydDdo6.mjs → renderer-BG8jNTHr.mjs} +3 -3
- package/dist/{renderer-B4ydDdo6.mjs.map → renderer-BG8jNTHr.mjs.map} +1 -1
- package/dist/{renderer-Du8eOWWU.mjs → renderer-BMnrBPh1.mjs} +4 -4
- package/dist/{renderer-Du8eOWWU.mjs.map → renderer-BMnrBPh1.mjs.map} +1 -1
- package/dist/{renderer-CE83KHgr.mjs → renderer-BORzpTQP.mjs} +3 -3
- package/dist/{renderer-CE83KHgr.mjs.map → renderer-BORzpTQP.mjs.map} +1 -1
- package/dist/{renderer-BUwHWIf7.mjs → renderer-BWtI3wKu.mjs} +4 -4
- package/dist/{renderer-BUwHWIf7.mjs.map → renderer-BWtI3wKu.mjs.map} +1 -1
- package/dist/renderer-BXTHDEnd.mjs +5 -0
- package/dist/{renderer-gm0zoV4t.mjs → renderer-Baw30QRI.mjs} +3 -3
- package/dist/{renderer-gm0zoV4t.mjs.map → renderer-Baw30QRI.mjs.map} +1 -1
- package/dist/renderer-BbJoZ-zL.mjs +5 -0
- package/dist/{renderer-Bhfl-WFX.mjs → renderer-BbdgwkDB.mjs} +5 -5
- package/dist/{renderer-Bhfl-WFX.mjs.map → renderer-BbdgwkDB.mjs.map} +1 -1
- package/dist/{renderer-qYhNf6iB.mjs → renderer-BgOEqtZu.mjs} +3 -3
- package/dist/{renderer-qYhNf6iB.mjs.map → renderer-BgOEqtZu.mjs.map} +1 -1
- package/dist/{renderer-I3Wxk1tL.mjs → renderer-Bv0-WmP4.mjs} +4 -4
- package/dist/{renderer-I3Wxk1tL.mjs.map → renderer-Bv0-WmP4.mjs.map} +1 -1
- package/dist/renderer-BvcqncI2.mjs +3 -0
- package/dist/{renderer-DXSIstnn.mjs → renderer-Bvhj-05p.mjs} +4 -4
- package/dist/{renderer-DXSIstnn.mjs.map → renderer-Bvhj-05p.mjs.map} +1 -1
- package/dist/renderer-BxAZKOQy.mjs +5 -0
- package/dist/{renderer-C-z6bxj9.mjs → renderer-BxDhx8KM.mjs} +5 -5
- package/dist/{renderer-C-z6bxj9.mjs.map → renderer-BxDhx8KM.mjs.map} +1 -1
- package/dist/renderer-BxgkH__7.mjs +5 -0
- package/dist/{renderer-GapR_An3.mjs → renderer-C1XZ0fQ-.mjs} +4 -4
- package/dist/{renderer-GapR_An3.mjs.map → renderer-C1XZ0fQ-.mjs.map} +1 -1
- package/dist/{renderer-BAoKytKL.mjs → renderer-C8KEfda3.mjs} +4 -4
- package/dist/{renderer-BAoKytKL.mjs.map → renderer-C8KEfda3.mjs.map} +1 -1
- package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
- package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
- package/dist/{renderer-B9ssmkbx.mjs → renderer-CF25oNd3.mjs} +5 -5
- package/dist/{renderer-B9ssmkbx.mjs.map → renderer-CF25oNd3.mjs.map} +1 -1
- package/dist/renderer-CFEvikBH.mjs +5 -0
- package/dist/{renderer-DGT141pN.mjs → renderer-CHFUJyul.mjs} +5 -5
- package/dist/{renderer-DGT141pN.mjs.map → renderer-CHFUJyul.mjs.map} +1 -1
- package/dist/{renderer-C5WkQZGR.mjs → renderer-CKGOKBZi.mjs} +5 -5
- package/dist/{renderer-C5WkQZGR.mjs.map → renderer-CKGOKBZi.mjs.map} +1 -1
- package/dist/{renderer-CzgDJcot.mjs → renderer-CNs1vBUy.mjs} +4 -4
- package/dist/{renderer-CzgDJcot.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
- package/dist/{index-B0BZMhtw.d.mts → renderer-COXKPofU.d.mts} +13 -13
- package/dist/renderer-COXKPofU.d.mts.map +1 -0
- package/dist/{renderer-QaN-aejD.mjs → renderer-COZCwiIr.mjs} +3 -3
- package/dist/{renderer-QaN-aejD.mjs.map → renderer-COZCwiIr.mjs.map} +1 -1
- package/dist/{renderer-DP_In2uT.mjs → renderer-CPmoA87K.mjs} +4 -4
- package/dist/{renderer-DP_In2uT.mjs.map → renderer-CPmoA87K.mjs.map} +1 -1
- package/dist/{renderer-BCLmYH4S.mjs → renderer-CYZb9uoO.mjs} +4 -4
- package/dist/{renderer-BCLmYH4S.mjs.map → renderer-CYZb9uoO.mjs.map} +1 -1
- package/dist/renderer-C_u9B-_7.mjs +5 -0
- package/dist/{renderer-PuN2_AL_.mjs → renderer-CaUJlGoB.mjs} +5 -5
- package/dist/{renderer-PuN2_AL_.mjs.map → renderer-CaUJlGoB.mjs.map} +1 -1
- package/dist/{renderer-Blm4Dv_h.mjs → renderer-CcS3Zntx.mjs} +3 -3
- package/dist/{renderer-DZhIe8Gj.mjs → renderer-CddpdCL3.mjs} +4 -4
- package/dist/{renderer-DZhIe8Gj.mjs.map → renderer-CddpdCL3.mjs.map} +1 -1
- package/dist/{renderer-GbVNyv-E.mjs → renderer-Cg-d78nf.mjs} +192 -27
- package/dist/renderer-Cg-d78nf.mjs.map +1 -0
- package/dist/renderer-Cgx_qzGT.mjs +5 -0
- package/dist/{renderer-kNjMhwiZ.mjs → renderer-ChNCtBMR.mjs} +3 -3
- package/dist/{renderer-kNjMhwiZ.mjs.map → renderer-ChNCtBMR.mjs.map} +1 -1
- package/dist/renderer-ClOkY1Ny.mjs +5 -0
- package/dist/{renderer-plx7_lUQ.mjs → renderer-CrU0kbiB.mjs} +5 -5
- package/dist/{renderer-plx7_lUQ.mjs.map → renderer-CrU0kbiB.mjs.map} +1 -1
- package/dist/renderer-CtDub_ig.mjs +5 -0
- package/dist/{renderer-DQeUc1yY.mjs → renderer-CyhSWLKq.mjs} +4 -4
- package/dist/{renderer-DQeUc1yY.mjs.map → renderer-CyhSWLKq.mjs.map} +1 -1
- package/dist/{renderer-D96Pu8yX.mjs → renderer-D-bmSKv4.mjs} +5 -5
- package/dist/{renderer-D96Pu8yX.mjs.map → renderer-D-bmSKv4.mjs.map} +1 -1
- package/dist/renderer-D0duAhCo.mjs +5 -0
- package/dist/{renderer-CPLfsRe1.mjs → renderer-D2tdNoM6.mjs} +6 -6
- package/dist/{renderer-CPLfsRe1.mjs.map → renderer-D2tdNoM6.mjs.map} +1 -1
- package/dist/renderer-D4wM1dqg.mjs +6 -0
- package/dist/renderer-D5U3d09T.mjs +5 -0
- package/dist/{renderer-DOxmmN6Q.mjs → renderer-D86Y5YYi.mjs} +5 -5
- package/dist/{renderer-DOxmmN6Q.mjs.map → renderer-D86Y5YYi.mjs.map} +1 -1
- package/dist/{renderer-mqUBkx-a.mjs → renderer-D8D7dKxq.mjs} +4 -4
- package/dist/{renderer-mqUBkx-a.mjs.map → renderer-D8D7dKxq.mjs.map} +1 -1
- package/dist/{renderer-CTYKUnDq.mjs → renderer-DATAjI6x.mjs} +3 -3
- package/dist/{renderer-CTYKUnDq.mjs.map → renderer-DATAjI6x.mjs.map} +1 -1
- package/dist/{renderer-C4vHq0X8.mjs → renderer-DGhCIVI4.mjs} +5 -5
- package/dist/{renderer-C4vHq0X8.mjs.map → renderer-DGhCIVI4.mjs.map} +1 -1
- package/dist/{renderer-CrwYWVsV.mjs → renderer-DILjs1tz.mjs} +3 -3
- package/dist/{renderer-DYbgd6Ye.mjs → renderer-DIyzKouj.mjs} +4 -4
- package/dist/{renderer-DYbgd6Ye.mjs.map → renderer-DIyzKouj.mjs.map} +1 -1
- package/dist/{renderer-f7A01ArI.mjs → renderer-DJ78Bgv7.mjs} +5 -5
- package/dist/{renderer-f7A01ArI.mjs.map → renderer-DJ78Bgv7.mjs.map} +1 -1
- package/dist/renderer-DKqFxYfP.mjs +5 -0
- package/dist/renderer-DQZNI1zf.mjs +5 -0
- package/dist/{renderer-C1U85w9f.mjs → renderer-DVnrUnkh.mjs} +3 -3
- package/dist/{renderer-C1U85w9f.mjs.map → renderer-DVnrUnkh.mjs.map} +1 -1
- package/dist/{renderer-1P3yS8YM.mjs → renderer-DWtquP0s.mjs} +4 -4
- package/dist/{renderer-1P3yS8YM.mjs.map → renderer-DWtquP0s.mjs.map} +1 -1
- package/dist/renderer-DXITcVbS.mjs +5 -0
- package/dist/renderer-DY1QgdDC.mjs +5 -0
- package/dist/renderer-DYEz06xn.mjs +5 -0
- package/dist/renderer-D_2OrSMc.mjs +5 -0
- package/dist/renderer-DcCl9CO6.mjs +5 -0
- package/dist/{renderer-OsA-Lg4d.mjs → renderer-DetTl6bQ.mjs} +3 -3
- package/dist/{renderer-OsA-Lg4d.mjs.map → renderer-DetTl6bQ.mjs.map} +1 -1
- package/dist/{renderer-Bkq1PT0g.mjs → renderer-DfxwJVjW.mjs} +3 -3
- package/dist/{renderer-DK9etIAz.mjs → renderer-DhQZiRL3.mjs} +5 -5
- package/dist/{renderer-DK9etIAz.mjs.map → renderer-DhQZiRL3.mjs.map} +1 -1
- package/dist/{renderer-C0ds-UfM.mjs → renderer-Djn4BYtz.mjs} +5 -5
- package/dist/{renderer-C0ds-UfM.mjs.map → renderer-Djn4BYtz.mjs.map} +1 -1
- package/dist/{renderer-B4jxP8vF.mjs → renderer-DkS6cblv.mjs} +5 -5
- package/dist/{renderer-B4jxP8vF.mjs.map → renderer-DkS6cblv.mjs.map} +1 -1
- package/dist/{renderer-CjQAYeYz.mjs → renderer-DkeJefRk.mjs} +5 -5
- package/dist/{renderer-CjQAYeYz.mjs.map → renderer-DkeJefRk.mjs.map} +1 -1
- package/dist/renderer-DotZXhrh.mjs +5 -0
- package/dist/renderer-DpYDVTzs.mjs +5 -0
- package/dist/renderer-DpZxLVQF.mjs +5 -0
- package/dist/{renderer-BHLYKy8b.mjs → renderer-DqabtpGN.mjs} +5 -5
- package/dist/{renderer-BHLYKy8b.mjs.map → renderer-DqabtpGN.mjs.map} +1 -1
- package/dist/{renderer-DVFFVy9v.mjs → renderer-DqdD8gzX.mjs} +5 -5
- package/dist/{renderer-DVFFVy9v.mjs.map → renderer-DqdD8gzX.mjs.map} +1 -1
- package/dist/{renderer-CDky5Gva.mjs → renderer-DstROEvX.mjs} +4 -4
- package/dist/{renderer-CDky5Gva.mjs.map → renderer-DstROEvX.mjs.map} +1 -1
- package/dist/{renderer-Cy4a31rZ.mjs → renderer-DuawUm8D.mjs} +3 -3
- package/dist/{renderer-Cy4a31rZ.mjs.map → renderer-DuawUm8D.mjs.map} +1 -1
- package/dist/{renderer-CS8VMTp1.mjs → renderer-DvIWhLnY.mjs} +5 -5
- package/dist/{renderer-CS8VMTp1.mjs.map → renderer-DvIWhLnY.mjs.map} +1 -1
- package/dist/renderer-DvJbouz0.mjs +5 -0
- package/dist/{renderer-BI8QhEj9.mjs → renderer-Dw2ZFwDT.mjs} +5 -5
- package/dist/{renderer-BI8QhEj9.mjs.map → renderer-Dw2ZFwDT.mjs.map} +1 -1
- package/dist/{renderer-DBtt-7wt.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
- package/dist/{renderer-DBtt-7wt.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
- package/dist/{renderer-BT0x6KPK.mjs → renderer-DxLkZGUK.mjs} +4 -4
- package/dist/{renderer-BT0x6KPK.mjs.map → renderer-DxLkZGUK.mjs.map} +1 -1
- package/dist/{renderer-y6k54AM6.mjs → renderer-GY7D1oAn.mjs} +4 -4
- package/dist/{renderer-y6k54AM6.mjs.map → renderer-GY7D1oAn.mjs.map} +1 -1
- package/dist/{renderer-D4No_jA4.mjs → renderer-JaSEubRQ.mjs} +4 -4
- package/dist/{renderer-D4No_jA4.mjs.map → renderer-JaSEubRQ.mjs.map} +1 -1
- package/dist/{renderer-CAi-lhR2.mjs → renderer-MrvH4L7b.mjs} +4 -4
- package/dist/{renderer-CAi-lhR2.mjs.map → renderer-MrvH4L7b.mjs.map} +1 -1
- package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
- package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
- package/dist/renderer-S305xm67.mjs +5 -0
- package/dist/renderer-TgUloP-y.mjs +5 -0
- package/dist/{renderer-DSbRWfgl.mjs → renderer-VcPoZAM2.mjs} +3 -3
- package/dist/{renderer-DSbRWfgl.mjs.map → renderer-VcPoZAM2.mjs.map} +1 -1
- package/dist/{renderer-DCsTCvdo.mjs → renderer-ZGJWn-_L.mjs} +4 -4
- package/dist/{renderer-DCsTCvdo.mjs.map → renderer-ZGJWn-_L.mjs.map} +1 -1
- package/dist/{renderer-B_b8-ztW.mjs → renderer-aXwxbXcE.mjs} +5 -5
- package/dist/{renderer-B_b8-ztW.mjs.map → renderer-aXwxbXcE.mjs.map} +1 -1
- package/dist/renderer-gZ5SMvbU.mjs +5 -0
- package/dist/{renderer-BMLJgnbU.mjs → renderer-gniIzAsk.mjs} +3 -3
- package/dist/renderer-kEpx7pUy.mjs +5 -0
- package/dist/{renderer-DOvzHN60.mjs → renderer-mSlww_MA.mjs} +4 -4
- package/dist/{renderer-DOvzHN60.mjs.map → renderer-mSlww_MA.mjs.map} +1 -1
- package/dist/{renderer-DBKyuPl1.mjs → renderer-mWfgWQy_.mjs} +5 -5
- package/dist/{renderer-DBKyuPl1.mjs.map → renderer-mWfgWQy_.mjs.map} +1 -1
- package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
- package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
- package/dist/renderer-oPWZmzua.mjs +5 -0
- package/dist/{renderer-C4xvz_Ft.mjs → renderer-pcpDwv3K.mjs} +4 -4
- package/dist/{renderer-C4xvz_Ft.mjs.map → renderer-pcpDwv3K.mjs.map} +1 -1
- package/dist/renderer-qCNOffLy.mjs +5 -0
- package/dist/{renderer-BaJQx0Bp.mjs → renderer-vPJRRVNN.mjs} +5 -5
- package/dist/{renderer-BaJQx0Bp.mjs.map → renderer-vPJRRVNN.mjs.map} +1 -1
- package/dist/{renderer-DHUlVqST.mjs → renderer-vQrX7Qsw.mjs} +3 -3
- package/dist/{renderer-DHUlVqST.mjs.map → renderer-vQrX7Qsw.mjs.map} +1 -1
- package/dist/{renderer-P4OPsD82.mjs → renderer-wld_ZR0-.mjs} +3 -3
- package/dist/{renderer-P4OPsD82.mjs.map → renderer-wld_ZR0-.mjs.map} +1 -1
- package/dist/renderer-xEVoeq12.mjs +5 -0
- package/dist/renderer-ypw8fzVD.mjs +5 -0
- package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs → renderers-CP8CFWDs-DgKdGMvS.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs.map → renderers-CP8CFWDs-DgKdGMvS.mjs.map} +1 -1
- package/dist/signals/index.d.mts +6 -6
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BwdVfK3p.mjs → signals-Cf9mfNGE.mjs} +4 -4
- package/dist/{signals-BwdVfK3p.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
- package/dist/src-CU_7ui4I.mjs +8373 -0
- package/dist/src-CU_7ui4I.mjs.map +1 -0
- package/package.json +68 -58
- package/dist/dist-DMa2BbYs.mjs.map +0 -1
- package/dist/index-B0BZMhtw.d.mts.map +0 -1
- package/dist/index-CJkihekp.d.mts.map +0 -1
- package/dist/index-DGe83M-p.d.mts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/preview/index.d.mts.map +0 -1
- package/dist/preview-engine/chunk-PCWWKYFO.mjs +0 -1
- package/dist/preview-engine/renderers-2AD6AHAO.mjs +0 -1
- package/dist/preview-engine/renderers-37UYW266.mjs +0 -1
- package/dist/preview-engine/renderers-4I4UDLDR.mjs +0 -1
- package/dist/preview-engine/renderers-5EITT2FW.mjs +0 -1
- package/dist/preview-engine/renderers-AIRDDXRB.mjs +0 -1
- package/dist/preview-engine/renderers-BUOGMWAA.mjs +0 -1
- package/dist/preview-engine/renderers-EU5VM2S2.mjs +0 -1
- package/dist/preview-engine/renderers-GEPP3YKK.mjs +0 -1
- package/dist/preview-engine/renderers-IQNZQWYU.mjs +0 -1
- package/dist/preview-engine/renderers-JQ7AI473.mjs +0 -228
- package/dist/preview-engine/renderers-JTVCE5PV.mjs +0 -1
- package/dist/preview-engine/renderers-KCNUETAD.mjs +0 -1
- package/dist/preview-engine/renderers-KKBHXAWS.mjs +0 -1
- package/dist/preview-engine/renderers-LER7SUT2.mjs +0 -1
- package/dist/preview-engine/renderers-MOERLDWF.mjs +0 -1
- package/dist/preview-engine/renderers-O57YIIAO.mjs +0 -1
- package/dist/preview-engine/renderers-OPUIAD7I.mjs +0 -1
- package/dist/preview-engine/renderers-PENUAXDD.mjs +0 -1
- package/dist/preview-engine/renderers-PFCI7ZFW.mjs +0 -1
- package/dist/preview-engine/renderers-Q4HDP2IE.mjs +0 -1
- package/dist/preview-engine/renderers-QMHUOKMM.mjs +0 -1
- package/dist/preview-engine/renderers-R26YPECG.mjs +0 -1
- package/dist/preview-engine/renderers-TAFDMFEA.mjs +0 -1
- package/dist/preview-engine/renderers-TMZLWQP2.mjs +0 -1
- package/dist/preview-engine/renderers-TP6ZMGU4.mjs +0 -1
- package/dist/preview-engine/renderers-TY63VTZB.mjs +0 -1
- package/dist/preview-engine/renderers-UCNQ536S.mjs +0 -1
- package/dist/preview-engine/renderers-WOZQDE4A.mjs +0 -1
- package/dist/preview-engine/renderers-XG3BDROH.mjs +0 -1
- package/dist/preview-engine/renderers-XS4CFZWR.mjs +0 -1
- package/dist/preview-engine/renderers-ZQDMRWN7.mjs +0 -1
- package/dist/program-KwDdbC0-.mjs.map +0 -1
- package/dist/renderer-5C41E6gT.mjs +0 -5
- package/dist/renderer-6SXF9Ykm.mjs +0 -5
- package/dist/renderer-B2C2w3Wr.mjs +0 -5
- package/dist/renderer-B2QSfPYZ.mjs +0 -5
- package/dist/renderer-B5cQcMl1.mjs +0 -5
- package/dist/renderer-BDhD8Yab.mjs +0 -3
- package/dist/renderer-BSDdTHDh.mjs +0 -5
- package/dist/renderer-BTUjk8uY.mjs +0 -5
- package/dist/renderer-Bcey5Gvk.mjs +0 -5
- package/dist/renderer-Bd2MuOeJ.mjs +0 -5
- package/dist/renderer-Bd5A0zer.mjs +0 -5
- package/dist/renderer-CC-WlYa2.mjs +0 -5
- package/dist/renderer-Cb0qf1UG.mjs +0 -5
- package/dist/renderer-CfX13dgQ.mjs +0 -5
- package/dist/renderer-ChFkRLrv.mjs +0 -5
- package/dist/renderer-CjkfJj5R.mjs +0 -5
- package/dist/renderer-Ck7Lu6c9.mjs +0 -5
- package/dist/renderer-CuquqG_c.mjs +0 -5
- package/dist/renderer-Cwz2E4QD.mjs +0 -5
- package/dist/renderer-Czkt9YYp.mjs +0 -5
- package/dist/renderer-DFTIhSdJ.mjs +0 -5
- package/dist/renderer-DFaa-Ats.mjs +0 -5
- package/dist/renderer-DIHXKvPl.mjs +0 -5
- package/dist/renderer-DMzOqVM3.mjs +0 -5
- package/dist/renderer-DOId5U8x.mjs +0 -5
- package/dist/renderer-DQXFOup8.mjs +0 -5
- package/dist/renderer-DRt3BSTj.mjs +0 -5
- package/dist/renderer-Di_5vQ81.mjs +0 -6
- package/dist/renderer-DkmpsPIa.mjs +0 -5
- package/dist/renderer-Ds6wd9Gk.mjs +0 -5
- package/dist/renderer-DuuOlYIG.mjs +0 -3
- package/dist/renderer-Dv4p0lp9.mjs +0 -5
- package/dist/renderer-DzWoOlVc.mjs +0 -5
- package/dist/renderer-GbVNyv-E.mjs.map +0 -1
- package/dist/renderer-IOz63OWg.mjs +0 -5
- package/dist/renderer-JkSrsUa5.mjs +0 -5
- package/dist/renderer-Ocs1Djwu.mjs +0 -5
- package/dist/renderer-Wdn7m_uN.mjs +0 -5
- package/dist/renderer-mKpjaoE3.mjs +0 -5
- /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
- /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DZhIe8Gj.mjs","names":[],"sources":["../../../nodes/node-film-grain/dist/renderers-C10tt2eD.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst FILM_GRAIN_SHADER = `\nstruct FilmUniforms {\n strength : f32,\n size : f32,\n monochrome : f32,\n animated : f32,\n\n frameIndex : f32, // discrete per-output-frame counter (speed-scaled), NOT continuous time\n shadows : f32,\n midtones : f32,\n highlights : f32,\n\n hasSignal : f32,\n _pad0 : f32,\n _pad1 : f32,\n _pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FilmUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var signalTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash2D(p: vec2<f32>) -> f32 {\n var p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nfn smoothNoise(p: vec2<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n\n // Quintic interpolation\n let w = pf * pf * pf * (pf * (pf * 6.0 - 15.0) + 10.0);\n\n let h00 = hash2D(pi + vec2<f32>(0.0, 0.0));\n let h10 = hash2D(pi + vec2<f32>(1.0, 0.0));\n let h01 = hash2D(pi + vec2<f32>(0.0, 1.0));\n let h11 = hash2D(pi + vec2<f32>(1.0, 1.0));\n\n let n0 = mix(h00, h10, w.x);\n let n1 = mix(h01, h11, w.x);\n\n return mix(n0, n1, w.y);\n}\n\n// Produces a pseudo-random, NON-directional offset that changes once per\n// output frame. This replaces the old time * constant translation, which\n// smoothly scrolled the noise lattice in a fixed direction (17.31, 43.19)\n// every frame -- that's why grain visibly drifted instead of flickering.\n//\n// The frame index is wrapped into a bounded range before hashing so the\n// pattern stays high quality over long renders (f32 precision degrades on\n// very large hash inputs); the wrap period is long enough that any repeat\n// is imperceptible in grain.\nfn frameJitter(frameIndex: f32) -> vec2<f32> {\n let raw = floor(frameIndex);\n let n = raw - floor(raw / 4096.0) * 4096.0;\n let hx = hash2D(vec2<f32>(n, n * 1.6180339887));\n let hy = hash2D(vec2<f32>(n * 3.14159265, n + 91.7));\n return vec2<f32>(hx, hy) * 1024.0;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n var strength = u.strength;\n if (u.hasSignal > 0.5) {\n let sigVal = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n strength = sigVal;\n }\n\n if (strength <= 0.0) {\n return color;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let grainCoord = (in.uv * dimensions) / u.size;\n\n let jitter = select(vec2<f32>(0.0), frameJitter(u.frameIndex), u.animated > 0.5);\n\n let luminance = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n // Luminance response curve logic\n let shadowFactor = exp(-luminance * luminance / 0.1);\n let highlightFactor = exp(-(1.0 - luminance) * (1.0 - luminance) / 0.1);\n let midtoneFactor = max(0.0, 1.0 - shadowFactor - highlightFactor);\n\n let response = (u.shadows * shadowFactor) + (u.midtones * midtoneFactor) + (u.highlights * highlightFactor);\n let finalGrainStrength = (strength / 100.0) * response * 0.15; // Normalized scale\n\n if (u.monochrome > 0.5) {\n let seed = grainCoord + jitter;\n let noiseVal = smoothNoise(seed);\n let grain = (noiseVal - 0.5) * finalGrainStrength;\n color.r += grain;\n color.g += grain;\n color.b += grain;\n } else {\n // Fixed per-channel spatial offsets (unrelated to time) keep the\n // R/G/B lattices decorrelated from each other; temporal variation\n // comes entirely from jitter now.\n let seedR = grainCoord + jitter;\n let seedG = grainCoord + jitter + vec2<f32>(173.3, 281.9);\n let seedB = grainCoord + jitter + vec2<f32>(391.7, 127.1);\n\n let noiseR = smoothNoise(seedR);\n let noiseG = smoothNoise(seedG);\n let noiseB = smoothNoise(seedB);\n\n color.r += (noiseR - 0.5) * finalGrainStrength;\n color.g += (noiseG - 0.5) * finalGrainStrength;\n color.b += (noiseB - 0.5) * finalGrainStrength;\n }\n\n return clamp(color, vec4<f32>(0.0), vec4<f32>(1.0));\n}\n`;\nconst filmGrainUniformData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tfilmUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getFilmGrainResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `filmgrain_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst filmModule = device.createShaderModule({\n\t\t\tlabel: `filmgrain_${format}.wgsl`,\n\t\t\tcode: FILM_GRAIN_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `FilmGrainPipeline_${format}`,\n\t\t\tmodule: filmModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.filmUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tfilmPipeline: pipeline,\n\t\tfilmUniformLayout: layouts.filmUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst FilmGrainWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"FilmGrain\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst signalInput = op.strengthHandleId ? op.inputs?.[op.strengthHandleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tconst resolveVal = (val, fallback) => {\n\t\tif (val === void 0 || val === null) return fallback;\n\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\tframe: compositionFrame,\n\t\t\t\tfps\n\t\t\t});\n\t\t\telse if (\"value\" in val) val = val.value;\n\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\tconst n = Number(val);\n\t\treturn Number.isFinite(n) ? n : fallback;\n\t};\n\tlet strength = 0;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") strength = Math.max(0, Number(signalInput.outputItem.data ?? 0));\n\telse strength = Math.max(0, resolveVal(op.strength, 15));\n\telse if (sd) {\n\t\tstrength = Math.max(0, Number(sd.offset ?? 0));\n\t\thasStaticSignal = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { filmPipeline: pipeline, filmUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getFilmGrainResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet signalView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (hasStaticSignal && sd) signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"filmgrain_strength_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\telse signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst size = Math.max(.5, resolveVal(op.size, 1.5)) * dpiScale;\n\tconst animated = op.animated ?? true;\n\tconst grainFrameIndex = frame * (resolveVal(op.speed, 50) / 50);\n\tfilmGrainUniformData[0] = strength;\n\tfilmGrainUniformData[1] = size;\n\tfilmGrainUniformData[2] = op.monochrome ?? true ? 1 : 0;\n\tfilmGrainUniformData[3] = animated ? 1 : 0;\n\tfilmGrainUniformData[4] = grainFrameIndex;\n\tfilmGrainUniformData[5] = resolveVal(op.shadows, .2);\n\tfilmGrainUniformData[6] = resolveVal(op.midtones, 1);\n\tfilmGrainUniformData[7] = resolveVal(op.highlights, .2);\n\tfilmGrainUniformData[8] = hasStaticSignal ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(filmGrainUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, resolveVal(op.opacity, 1));\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: FilmGrainWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C10tt2eD.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CddpdCL3.mjs","names":[],"sources":["../../../nodes/node-film-grain/dist/renderers-C10tt2eD.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst FILM_GRAIN_SHADER = `\nstruct FilmUniforms {\n strength : f32,\n size : f32,\n monochrome : f32,\n animated : f32,\n\n frameIndex : f32, // discrete per-output-frame counter (speed-scaled), NOT continuous time\n shadows : f32,\n midtones : f32,\n highlights : f32,\n\n hasSignal : f32,\n _pad0 : f32,\n _pad1 : f32,\n _pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FilmUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var signalTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash2D(p: vec2<f32>) -> f32 {\n var p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nfn smoothNoise(p: vec2<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n\n // Quintic interpolation\n let w = pf * pf * pf * (pf * (pf * 6.0 - 15.0) + 10.0);\n\n let h00 = hash2D(pi + vec2<f32>(0.0, 0.0));\n let h10 = hash2D(pi + vec2<f32>(1.0, 0.0));\n let h01 = hash2D(pi + vec2<f32>(0.0, 1.0));\n let h11 = hash2D(pi + vec2<f32>(1.0, 1.0));\n\n let n0 = mix(h00, h10, w.x);\n let n1 = mix(h01, h11, w.x);\n\n return mix(n0, n1, w.y);\n}\n\n// Produces a pseudo-random, NON-directional offset that changes once per\n// output frame. This replaces the old time * constant translation, which\n// smoothly scrolled the noise lattice in a fixed direction (17.31, 43.19)\n// every frame -- that's why grain visibly drifted instead of flickering.\n//\n// The frame index is wrapped into a bounded range before hashing so the\n// pattern stays high quality over long renders (f32 precision degrades on\n// very large hash inputs); the wrap period is long enough that any repeat\n// is imperceptible in grain.\nfn frameJitter(frameIndex: f32) -> vec2<f32> {\n let raw = floor(frameIndex);\n let n = raw - floor(raw / 4096.0) * 4096.0;\n let hx = hash2D(vec2<f32>(n, n * 1.6180339887));\n let hy = hash2D(vec2<f32>(n * 3.14159265, n + 91.7));\n return vec2<f32>(hx, hy) * 1024.0;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n var strength = u.strength;\n if (u.hasSignal > 0.5) {\n let sigVal = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n strength = sigVal;\n }\n\n if (strength <= 0.0) {\n return color;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let grainCoord = (in.uv * dimensions) / u.size;\n\n let jitter = select(vec2<f32>(0.0), frameJitter(u.frameIndex), u.animated > 0.5);\n\n let luminance = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n // Luminance response curve logic\n let shadowFactor = exp(-luminance * luminance / 0.1);\n let highlightFactor = exp(-(1.0 - luminance) * (1.0 - luminance) / 0.1);\n let midtoneFactor = max(0.0, 1.0 - shadowFactor - highlightFactor);\n\n let response = (u.shadows * shadowFactor) + (u.midtones * midtoneFactor) + (u.highlights * highlightFactor);\n let finalGrainStrength = (strength / 100.0) * response * 0.15; // Normalized scale\n\n if (u.monochrome > 0.5) {\n let seed = grainCoord + jitter;\n let noiseVal = smoothNoise(seed);\n let grain = (noiseVal - 0.5) * finalGrainStrength;\n color.r += grain;\n color.g += grain;\n color.b += grain;\n } else {\n // Fixed per-channel spatial offsets (unrelated to time) keep the\n // R/G/B lattices decorrelated from each other; temporal variation\n // comes entirely from jitter now.\n let seedR = grainCoord + jitter;\n let seedG = grainCoord + jitter + vec2<f32>(173.3, 281.9);\n let seedB = grainCoord + jitter + vec2<f32>(391.7, 127.1);\n\n let noiseR = smoothNoise(seedR);\n let noiseG = smoothNoise(seedG);\n let noiseB = smoothNoise(seedB);\n\n color.r += (noiseR - 0.5) * finalGrainStrength;\n color.g += (noiseG - 0.5) * finalGrainStrength;\n color.b += (noiseB - 0.5) * finalGrainStrength;\n }\n\n return clamp(color, vec4<f32>(0.0), vec4<f32>(1.0));\n}\n`;\nconst filmGrainUniformData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tfilmUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getFilmGrainResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `filmgrain_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst filmModule = device.createShaderModule({\n\t\t\tlabel: `filmgrain_${format}.wgsl`,\n\t\t\tcode: FILM_GRAIN_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `FilmGrainPipeline_${format}`,\n\t\t\tmodule: filmModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.filmUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tfilmPipeline: pipeline,\n\t\tfilmUniformLayout: layouts.filmUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst FilmGrainWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"FilmGrain\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst signalInput = op.strengthHandleId ? op.inputs?.[op.strengthHandleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tconst resolveVal = (val, fallback) => {\n\t\tif (val === void 0 || val === null) return fallback;\n\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\tframe: compositionFrame,\n\t\t\t\tfps\n\t\t\t});\n\t\t\telse if (\"value\" in val) val = val.value;\n\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\tconst n = Number(val);\n\t\treturn Number.isFinite(n) ? n : fallback;\n\t};\n\tlet strength = 0;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") strength = Math.max(0, Number(signalInput.outputItem.data ?? 0));\n\telse strength = Math.max(0, resolveVal(op.strength, 15));\n\telse if (sd) {\n\t\tstrength = Math.max(0, Number(sd.offset ?? 0));\n\t\thasStaticSignal = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { filmPipeline: pipeline, filmUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getFilmGrainResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet signalView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (hasStaticSignal && sd) signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"filmgrain_strength_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\telse signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst size = Math.max(.5, resolveVal(op.size, 1.5)) * dpiScale;\n\tconst animated = op.animated ?? true;\n\tconst grainFrameIndex = frame * (resolveVal(op.speed, 50) / 50);\n\tfilmGrainUniformData[0] = strength;\n\tfilmGrainUniformData[1] = size;\n\tfilmGrainUniformData[2] = op.monochrome ?? true ? 1 : 0;\n\tfilmGrainUniformData[3] = animated ? 1 : 0;\n\tfilmGrainUniformData[4] = grainFrameIndex;\n\tfilmGrainUniformData[5] = resolveVal(op.shadows, .2);\n\tfilmGrainUniformData[6] = resolveVal(op.midtones, 1);\n\tfilmGrainUniformData[7] = resolveVal(op.highlights, .2);\n\tfilmGrainUniformData[8] = hasStaticSignal ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(filmGrainUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, resolveVal(op.opacity, 1));\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: FilmGrainWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C10tt2eD.mjs.map"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import { Ot as getActiveMediaMetadata, an as reportRenderDiagnostic, cn as resolveNumber, on as resolveBoolean, p as DEFAULT_DURATION_MS } from "./dist-
|
|
3
|
-
import { a as resolveFrameNumber, c as solveHomography, n as defineRenderer, t as audioRegistry } from "./renderer-
|
|
4
|
-
import { $ as resolveTextSpans, G as parseColor, M as generateExtrudedTextGeometry, P as getPrimitiveGeometry, R as jointMatrices, U as measureMaxCaptionHeight, X as poseNodes, at as resolveMediaSourceUrl, d as ScreenSpaceRelightPipeline, dt as Matrix4Math, j as fitSpansToText, l as Renderer3D, lt as Light3D, n as AudioLatentTrackCache, nt as srtLoader, ot as Camera3D, p as SlugFontCache, pt as Vector3Math, tt as spansText } from "./dist-
|
|
5
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
6
|
-
import { a as resolveLayerDuration, f as measureText, n as decodeAudioSource } from "./dist-
|
|
7
|
-
import { o as TemporalDeflickerPipeline } from "./dist-
|
|
8
|
-
import { B as evaluateTrackAtFrame, F as computeLayout, H as initLayout, M as collectNodeOps, z as evaluateKeyframes } from "./program-
|
|
1
|
+
import "./chunk-D7gtBK74.mjs";
|
|
2
|
+
import { Ot as getActiveMediaMetadata, an as reportRenderDiagnostic, cn as resolveNumber, on as resolveBoolean, p as DEFAULT_DURATION_MS } from "./dist-DFeF-ygz.mjs";
|
|
3
|
+
import { a as resolveFrameNumber, c as solveHomography, n as defineRenderer, t as audioRegistry } from "./renderer-C9r0-KY4.mjs";
|
|
4
|
+
import { $ as resolveTextSpans, G as parseColor, M as generateExtrudedTextGeometry, P as getPrimitiveGeometry, R as jointMatrices, U as measureMaxCaptionHeight, X as poseNodes, at as resolveMediaSourceUrl, d as ScreenSpaceRelightPipeline, dt as Matrix4Math, j as fitSpansToText, l as Renderer3D, lt as Light3D, n as AudioLatentTrackCache, nt as srtLoader, ot as Camera3D, p as SlugFontCache, pt as Vector3Math, tt as spansText } from "./dist-BBUrGwqd.mjs";
|
|
5
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-I5fdrflL.mjs";
|
|
6
|
+
import { a as resolveLayerDuration, f as measureText, n as decodeAudioSource } from "./dist-QMVy31gR.mjs";
|
|
7
|
+
import { o as TemporalDeflickerPipeline } from "./dist-C_SMBmHr.mjs";
|
|
8
|
+
import { B as evaluateTrackAtFrame, F as computeLayout, H as initLayout, M as collectNodeOps, z as evaluateKeyframes } from "./program-CEHCeDpG.mjs";
|
|
9
9
|
import gsapModule from "gsap";
|
|
10
10
|
|
|
11
|
-
//#region ../../nodes/node-compositor/dist/renderers-
|
|
11
|
+
//#region ../../nodes/node-compositor/dist/renderers-1O3UOrUy.mjs
|
|
12
12
|
/**
|
|
13
13
|
* Solves a cubic bezier curve defined by control points (x1, y1) and (x2, y2)
|
|
14
14
|
* for a given progress parameter t in [0, 1].
|
|
@@ -741,6 +741,12 @@ function multiply(m1, m2) {
|
|
|
741
741
|
f: m1.b * m2.e + m1.d * m2.f + m1.f
|
|
742
742
|
};
|
|
743
743
|
}
|
|
744
|
+
function transformPoint(m, x, y) {
|
|
745
|
+
return {
|
|
746
|
+
x: m.a * x + m.c * y + m.e,
|
|
747
|
+
y: m.b * x + m.d * y + m.f
|
|
748
|
+
};
|
|
749
|
+
}
|
|
744
750
|
/** Materialize into a DOMMatrix for the renderer's transform stack. */
|
|
745
751
|
function toDOMMatrix(m) {
|
|
746
752
|
return new DOMMatrix([
|
|
@@ -770,7 +776,45 @@ function buildLayerMatrix(params) {
|
|
|
770
776
|
const ay = params.anchorY ?? .5;
|
|
771
777
|
const px = ax * params.width;
|
|
772
778
|
const py = ay * params.height;
|
|
773
|
-
|
|
779
|
+
const uniformScale = params.scale ?? 1;
|
|
780
|
+
const sx = (params.scaleX ?? 1) * uniformScale;
|
|
781
|
+
const sy = (params.scaleY ?? 1) * uniformScale;
|
|
782
|
+
return multiply(translate(params.x, params.y), multiply(translate(px, py), multiply(rotate(params.rotation), multiply(scale(sx, sy), translate(-px, -py)))));
|
|
783
|
+
}
|
|
784
|
+
/**
|
|
785
|
+
* Resolves a layer's 2D world position on the canvas.
|
|
786
|
+
*
|
|
787
|
+
* For top-level layers, this is the layout position + animated translation delta.
|
|
788
|
+
* For children inside a 2D parent container, this inherits the parent container's
|
|
789
|
+
* 2D translation and transformation (parentMatrix).
|
|
790
|
+
*/
|
|
791
|
+
function resolveLayer2DPosition(params) {
|
|
792
|
+
const baseX = params.baseX ?? 0;
|
|
793
|
+
const baseY = params.baseY ?? 0;
|
|
794
|
+
const sampledX = params.sampledX ?? baseX;
|
|
795
|
+
const sampledY = params.sampledY ?? baseY;
|
|
796
|
+
let localX = 0;
|
|
797
|
+
let localY = 0;
|
|
798
|
+
if (params.rect && params.parentRect) {
|
|
799
|
+
localX = params.rect.x - params.parentRect.x + (sampledX - baseX);
|
|
800
|
+
localY = params.rect.y - params.parentRect.y + (sampledY - baseY);
|
|
801
|
+
} else if (params.rect) {
|
|
802
|
+
localX = params.rect.x + (sampledX - baseX);
|
|
803
|
+
localY = params.rect.y + (sampledY - baseY);
|
|
804
|
+
} else {
|
|
805
|
+
localX = sampledX;
|
|
806
|
+
localY = sampledY;
|
|
807
|
+
}
|
|
808
|
+
const pm = params.parentMatrix;
|
|
809
|
+
if (!pm) return {
|
|
810
|
+
x: localX,
|
|
811
|
+
y: localY
|
|
812
|
+
};
|
|
813
|
+
if ("isIdentity" in pm && pm.isIdentity) return {
|
|
814
|
+
x: localX,
|
|
815
|
+
y: localY
|
|
816
|
+
};
|
|
817
|
+
return transformPoint(pm, localX, localY);
|
|
774
818
|
}
|
|
775
819
|
const Transform3DMath = {
|
|
776
820
|
identity() {
|
|
@@ -1239,6 +1283,90 @@ function computeContainerScissor(matrix, width, height) {
|
|
|
1239
1283
|
height: Math.max(0, Math.round(maxY - minY))
|
|
1240
1284
|
};
|
|
1241
1285
|
}
|
|
1286
|
+
async function applyLayerEffects(effects, sourceTex, width, height, ctx, encoder, props, drawChild, excludes, shiftedFrame, compositionFrame, fps, isVideoMode, layerId) {
|
|
1287
|
+
const remainingEffects = effects.filter((e) => {
|
|
1288
|
+
if (!e || typeof e !== "object") return false;
|
|
1289
|
+
const op = e?.op;
|
|
1290
|
+
const name = e?.constructor?.name;
|
|
1291
|
+
if (op === "TemporalDeflicker" || op === "Deflicker" || op === "Relight3D" || name === "TemporalDeflicker" || name === "Relight3D") return false;
|
|
1292
|
+
return true;
|
|
1293
|
+
});
|
|
1294
|
+
if (remainingEffects.length === 0) return {
|
|
1295
|
+
texture: sourceTex,
|
|
1296
|
+
view: sourceTex.createView()
|
|
1297
|
+
};
|
|
1298
|
+
let currentMedia = {
|
|
1299
|
+
metadata: {
|
|
1300
|
+
width,
|
|
1301
|
+
height
|
|
1302
|
+
},
|
|
1303
|
+
operation: {
|
|
1304
|
+
op: "TextureSource",
|
|
1305
|
+
sourceTexture: sourceTex,
|
|
1306
|
+
dataType: "Image"
|
|
1307
|
+
},
|
|
1308
|
+
children: []
|
|
1309
|
+
};
|
|
1310
|
+
for (let i = 0; i < remainingEffects.length; i++) {
|
|
1311
|
+
const eff = remainingEffects[i];
|
|
1312
|
+
const effOp = eff && typeof eff.toOperation === "function" ? eff.toOperation() : eff;
|
|
1313
|
+
const opName = String(effOp.op ?? "effect");
|
|
1314
|
+
currentMedia = {
|
|
1315
|
+
metadata: {
|
|
1316
|
+
width,
|
|
1317
|
+
height
|
|
1318
|
+
},
|
|
1319
|
+
operation: {
|
|
1320
|
+
op: opName,
|
|
1321
|
+
id: `${layerId}-${opName}_${i}`,
|
|
1322
|
+
effect: eff,
|
|
1323
|
+
...effOp,
|
|
1324
|
+
dataType: "Image"
|
|
1325
|
+
},
|
|
1326
|
+
children: [currentMedia]
|
|
1327
|
+
};
|
|
1328
|
+
}
|
|
1329
|
+
const outTex = ctx.renderer.getTemporaryTexture(width, height, [sourceTex, ...excludes]);
|
|
1330
|
+
const outView = outTex.createView();
|
|
1331
|
+
ctx.renderer.beginFrame(encoder, outView, {
|
|
1332
|
+
r: 0,
|
|
1333
|
+
g: 0,
|
|
1334
|
+
b: 0,
|
|
1335
|
+
a: 0
|
|
1336
|
+
}, width, height, "clear").end();
|
|
1337
|
+
ctx.renderer.pushScissor({
|
|
1338
|
+
x: 0,
|
|
1339
|
+
y: 0,
|
|
1340
|
+
width,
|
|
1341
|
+
height
|
|
1342
|
+
});
|
|
1343
|
+
ctx.renderer.pushIdentity();
|
|
1344
|
+
try {
|
|
1345
|
+
await drawChild(currentMedia, {
|
|
1346
|
+
...props,
|
|
1347
|
+
containerWidth: width,
|
|
1348
|
+
containerHeight: height,
|
|
1349
|
+
renderId: `${props.renderId}-${layerId}-fx`,
|
|
1350
|
+
frame: shiftedFrame,
|
|
1351
|
+
compositionFrame,
|
|
1352
|
+
fps,
|
|
1353
|
+
isVideoMode,
|
|
1354
|
+
signals: props.signals,
|
|
1355
|
+
excludeTextures: [
|
|
1356
|
+
sourceTex,
|
|
1357
|
+
outTex,
|
|
1358
|
+
...excludes
|
|
1359
|
+
]
|
|
1360
|
+
}, outView, outTex, width, height);
|
|
1361
|
+
} finally {
|
|
1362
|
+
ctx.renderer.popTransform();
|
|
1363
|
+
ctx.renderer.popScissor();
|
|
1364
|
+
}
|
|
1365
|
+
return {
|
|
1366
|
+
texture: outTex,
|
|
1367
|
+
view: outView
|
|
1368
|
+
};
|
|
1369
|
+
}
|
|
1242
1370
|
const CompositorWebGPURenderer = async (args) => {
|
|
1243
1371
|
const { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;
|
|
1244
1372
|
const { virtualMedia, fps, frame } = props;
|
|
@@ -1814,9 +1942,26 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
1814
1942
|
return;
|
|
1815
1943
|
}
|
|
1816
1944
|
if (!model || model.meshes.length === 0) return;
|
|
1817
|
-
const
|
|
1818
|
-
const
|
|
1945
|
+
const baseX$1 = lop.x ?? 0;
|
|
1946
|
+
const baseY$1 = lop.y ?? 0;
|
|
1947
|
+
const sampledX$1 = target?.x ?? baseX$1;
|
|
1948
|
+
const sampledY$1 = target?.y ?? baseY$1;
|
|
1819
1949
|
const posZ = target?.z ?? lop.z ?? 0;
|
|
1950
|
+
let posX = sampledX$1;
|
|
1951
|
+
let posY = sampledY$1;
|
|
1952
|
+
if (!parent3DMatrix) {
|
|
1953
|
+
const pos = resolveLayer2DPosition({
|
|
1954
|
+
rect: null,
|
|
1955
|
+
parentRect: null,
|
|
1956
|
+
baseX: baseX$1,
|
|
1957
|
+
baseY: baseY$1,
|
|
1958
|
+
sampledX: sampledX$1,
|
|
1959
|
+
sampledY: sampledY$1,
|
|
1960
|
+
parentMatrix
|
|
1961
|
+
});
|
|
1962
|
+
posX = pos.x;
|
|
1963
|
+
posY = pos.y;
|
|
1964
|
+
}
|
|
1820
1965
|
const rotX = target?.rotateX ?? lop.rotateX ?? 0;
|
|
1821
1966
|
const rotY = target?.rotateY ?? lop.rotateY ?? 0;
|
|
1822
1967
|
const rotZ = (target?.rotateZ ?? lop.rotateZ ?? 0) !== 0 ? target?.rotateZ ?? lop.rotateZ ?? 0 : target?.rotation ?? lop.rotation ?? 0;
|
|
@@ -2079,6 +2224,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2079
2224
|
localY = rect.y + (sampledY - baseY);
|
|
2080
2225
|
}
|
|
2081
2226
|
const scale$1 = target?.scale ?? lop.scale ?? 1;
|
|
2227
|
+
const scaleX = target?.scaleX ?? lop.scaleX ?? 1;
|
|
2228
|
+
const scaleY = target?.scaleY ?? lop.scaleY ?? 1;
|
|
2082
2229
|
const rotation = target?.rotation ?? lop.rotation ?? 0;
|
|
2083
2230
|
const layerOpacity = (target?.opacity ?? lop.opacity ?? 1) * accumulatedOpacity;
|
|
2084
2231
|
const rawAnimators = target?.animators ?? lop.animators;
|
|
@@ -2122,6 +2269,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2122
2269
|
height: layerH,
|
|
2123
2270
|
rotation,
|
|
2124
2271
|
scale: scale$1,
|
|
2272
|
+
scaleX,
|
|
2273
|
+
scaleY,
|
|
2125
2274
|
anchorX: isPathText ? anchorX * rect.width / layerW : anchorX,
|
|
2126
2275
|
anchorY: isPathText ? anchorY * rect.height / layerH : anchorY
|
|
2127
2276
|
}));
|
|
@@ -2148,8 +2297,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2148
2297
|
rotateXDeg: rotateX,
|
|
2149
2298
|
rotateYDeg: rotateY,
|
|
2150
2299
|
rotateZDeg: rotateZ !== 0 ? rotateZ : rotation,
|
|
2151
|
-
scaleX: scale$1,
|
|
2152
|
-
scaleY: scale$1,
|
|
2300
|
+
scaleX: scaleX * scale$1,
|
|
2301
|
+
scaleY: scaleY * scale$1,
|
|
2153
2302
|
perspectivePx: perspective,
|
|
2154
2303
|
originXRatio: perspectiveOriginX,
|
|
2155
2304
|
originYRatio: perspectiveOriginY,
|
|
@@ -2263,8 +2412,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2263
2412
|
if (rzRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateZ(rzRad));
|
|
2264
2413
|
if (ryRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateY(ryRad));
|
|
2265
2414
|
if (rxRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateX(rxRad));
|
|
2266
|
-
const sx = layerW * scale$1;
|
|
2267
|
-
const sy = layerH * scale$1;
|
|
2415
|
+
const sx = layerW * scale$1 * scaleX;
|
|
2416
|
+
const sy = layerH * scale$1 * scaleY;
|
|
2268
2417
|
const sz = target?.scaleZ ?? lop.scaleZ ?? 1;
|
|
2269
2418
|
localM = Matrix4Math.multiply(localM, Matrix4Math.scale(sx, sy, sz));
|
|
2270
2419
|
const ax = lop.anchorX ?? .5;
|
|
@@ -2289,8 +2438,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2289
2438
|
(target?.rotateZ ?? lop.rotateZ ?? 0) !== 0 ? target?.rotateZ ?? lop.rotateZ ?? 0 : rotation
|
|
2290
2439
|
],
|
|
2291
2440
|
scale: [
|
|
2292
|
-
scale$1,
|
|
2293
|
-
scale$1,
|
|
2441
|
+
scale$1 * scaleX,
|
|
2442
|
+
scale$1 * scaleY,
|
|
2294
2443
|
target?.scaleZ ?? lop.scaleZ ?? 1
|
|
2295
2444
|
],
|
|
2296
2445
|
anchor: [lop.anchorX ?? .5, lop.anchorY ?? .5],
|
|
@@ -2420,8 +2569,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2420
2569
|
const shouldClip = lop.overflow !== "visible";
|
|
2421
2570
|
const scissorRect = shouldClip ? computeContainerScissor(layerMatrix, layerW, layerH) : null;
|
|
2422
2571
|
const clipRadius = shouldClip ? Math.min(target?.borderRadius ?? lop.borderRadius ?? 0, layerW / 2, layerH / 2) : 0;
|
|
2423
|
-
if ((kind === "flex" || kind === "block") && clipRadius <= 0 && !shouldPaintContainerBackground(kind, lop.background) && layerOpacity === 1 && blendMode === "normal" && !lop.borderWidth && !lop.borderColor && (typeof lop.relighting !== "object" || !lop.relighting) && (typeof lop.relight !== "object" || !lop.relight) && (typeof target?.relighting !== "object" || !target?.relighting) && (typeof target?.relight !== "object" || !target?.relight) && (typeof lop.deflicker !== "object" || !lop.deflicker) && (typeof target?.deflicker !== "object" || !target?.deflicker)) {
|
|
2424
|
-
if (scissorRect) ctx.renderer.
|
|
2572
|
+
if ((kind === "flex" || kind === "block") && (!Array.isArray(lop.effects) || lop.effects.length === 0) && clipRadius <= 0 && !shouldPaintContainerBackground(kind, lop.background) && layerOpacity === 1 && blendMode === "normal" && !lop.borderWidth && !lop.borderColor && (typeof lop.relighting !== "object" || !lop.relighting) && (typeof lop.relight !== "object" || !lop.relight) && (typeof target?.relighting !== "object" || !target?.relighting) && (typeof target?.relight !== "object" || !target?.relight) && (typeof lop.deflicker !== "object" || !lop.deflicker) && (typeof target?.deflicker !== "object" || !target?.deflicker)) {
|
|
2573
|
+
if (scissorRect) ctx.renderer.pushScissorIntersect(scissorRect);
|
|
2425
2574
|
const res = await renderNodeTree(nodeVM.children ?? [], activeTex, activeView, excludes, accumulatedOpacity, layerMatrix, rect, targetW, targetH, null, isRootScene);
|
|
2426
2575
|
if (scissorRect) ctx.renderer.popScissor();
|
|
2427
2576
|
return res;
|
|
@@ -2460,7 +2609,7 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2460
2609
|
let activeGroupTex = groupTex;
|
|
2461
2610
|
let activeGroupView = groupView;
|
|
2462
2611
|
if (nodeVM.children && nodeVM.children.length > 0) {
|
|
2463
|
-
if (scissorRect) ctx.renderer.
|
|
2612
|
+
if (scissorRect) ctx.renderer.pushScissorIntersect(scissorRect);
|
|
2464
2613
|
const res = await renderNodeTree(nodeVM.children, groupTex, groupView, [groupTex, ...groupExcludes], layerOpacity, layerMatrix, rect, targetW, targetH, null, false);
|
|
2465
2614
|
if (scissorRect) ctx.renderer.popScissor();
|
|
2466
2615
|
activeGroupTex = res.finalTex;
|
|
@@ -2566,6 +2715,15 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2566
2715
|
activeGroupTex = relitTex;
|
|
2567
2716
|
activeGroupView = relitView;
|
|
2568
2717
|
}
|
|
2718
|
+
if (Array.isArray(lop.effects) && lop.effects.length > 0) {
|
|
2719
|
+
const postEffects = await applyLayerEffects(lop.effects, activeGroupTex, targetW, targetH, ctx, encoder, props, drawChild, [
|
|
2720
|
+
activeTex,
|
|
2721
|
+
targetTexture,
|
|
2722
|
+
...excludes
|
|
2723
|
+
], shiftedFrame, compositionFrame, fps ?? 24, isVideoMode, lop.id ?? `container_${i}`);
|
|
2724
|
+
activeGroupTex = postEffects.texture;
|
|
2725
|
+
activeGroupView = postEffects.view;
|
|
2726
|
+
}
|
|
2569
2727
|
const compositeExcludes = [
|
|
2570
2728
|
activeTex,
|
|
2571
2729
|
targetTexture,
|
|
@@ -2842,7 +3000,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2842
3000
|
const rawLeafRelight = target?.relighting ?? lop.relighting ?? (typeof lop.relight === "object" ? lop.relight : void 0) ?? leafRelightEffect;
|
|
2843
3001
|
const relightOpts = typeof rawLeafRelight === "object" && rawLeafRelight !== null ? rawLeafRelight : void 0;
|
|
2844
3002
|
const shutterAngle = target?.motionBlurShutter ?? lop.motionBlurShutter ?? 0;
|
|
2845
|
-
|
|
3003
|
+
const hasEffects = kind !== "media" && Array.isArray(lop.effects) && lop.effects.length > 0;
|
|
3004
|
+
if (glyphBatches && glyphBatches.length > 0 && (deflickerOpts || relightOpts || shutterAngle > 0 || hasEffects)) {
|
|
2846
3005
|
const glyphPass = ctx.renderer.beginFrame(encoder, localView, {
|
|
2847
3006
|
r: 0,
|
|
2848
3007
|
g: 0,
|
|
@@ -2975,6 +3134,12 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
2975
3134
|
]);
|
|
2976
3135
|
}
|
|
2977
3136
|
}
|
|
3137
|
+
if (kind !== "media" && Array.isArray(lop.effects) && lop.effects.length > 0) finalTex = (await applyLayerEffects(lop.effects, finalTex, texW, texH, ctx, encoder, props, drawChild, [
|
|
3138
|
+
localTex,
|
|
3139
|
+
activeTex,
|
|
3140
|
+
targetTexture,
|
|
3141
|
+
...excludes
|
|
3142
|
+
], shiftedFrame, compositionFrame, fps ?? 24, isVideoMode, lop.id ?? `leaf_${i}`)).texture;
|
|
2978
3143
|
const borderExcludes = [
|
|
2979
3144
|
localTex,
|
|
2980
3145
|
finalTex,
|
|
@@ -3014,8 +3179,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
3014
3179
|
if (rzRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateZ(rzRad));
|
|
3015
3180
|
if (ryRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateY(ryRad));
|
|
3016
3181
|
if (rxRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateX(rxRad));
|
|
3017
|
-
const sx = layerW * scale$1;
|
|
3018
|
-
const sy = layerH * scale$1;
|
|
3182
|
+
const sx = layerW * scale$1 * scaleX;
|
|
3183
|
+
const sy = layerH * scale$1 * scaleY;
|
|
3019
3184
|
const sz = target?.scaleZ ?? lop.scaleZ ?? 1;
|
|
3020
3185
|
localM = Matrix4Math.multiply(localM, Matrix4Math.scale(sx, sy, sz));
|
|
3021
3186
|
const ax = lop.anchorX ?? .5;
|
|
@@ -3040,8 +3205,8 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
3040
3205
|
(target?.rotateZ ?? lop.rotateZ ?? 0) !== 0 ? target?.rotateZ ?? lop.rotateZ ?? 0 : rotation
|
|
3041
3206
|
],
|
|
3042
3207
|
scale: [
|
|
3043
|
-
scale$1,
|
|
3044
|
-
scale$1,
|
|
3208
|
+
scale$1 * scaleX,
|
|
3209
|
+
scale$1 * scaleY,
|
|
3045
3210
|
target?.scaleZ ?? lop.scaleZ ?? 1
|
|
3046
3211
|
],
|
|
3047
3212
|
anchor: [lop.anchorX ?? .5, lop.anchorY ?? .5],
|
|
@@ -3365,4 +3530,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CompositorWebGPURendere
|
|
|
3365
3530
|
|
|
3366
3531
|
//#endregion
|
|
3367
3532
|
export { Transform3DMath, renderers_default as default, has3DTransform };
|
|
3368
|
-
//# sourceMappingURL=renderer-
|
|
3533
|
+
//# sourceMappingURL=renderer-Cg-d78nf.mjs.map
|