framefields 2.13.0 → 2.14.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 +9 -4
- package/dist/audio/index.d.mts +5 -5
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-CHV33Od9.d.mts → audio-CdCuGK5d.d.mts} +3 -3
- package/dist/{audio-CHV33Od9.d.mts.map → audio-CdCuGK5d.d.mts.map} +1 -1
- package/dist/{audio-DHzLQ_RG.mjs → audio-DFwRbID_.mjs} +3 -3
- package/dist/{audio-DHzLQ_RG.mjs.map → audio-DFwRbID_.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +43 -43
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/components/index.d.mts +13 -13
- package/dist/components/index.mjs +42 -42
- package/dist/{dist-D3BeAZ7X.mjs → dist--Uu5bQ_6.mjs} +870 -348
- package/dist/dist--Uu5bQ_6.mjs.map +1 -0
- package/dist/{dist-CUNvNDS3.mjs → dist-B8Nby2CU.mjs} +18 -4
- package/dist/dist-B8Nby2CU.mjs.map +1 -0
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +34 -34
- package/dist/{effects-BiDgCK1L.mjs → effects-WMgv8ZaD.mjs} +2 -2
- package/dist/{effects-BiDgCK1L.mjs.map → effects-WMgv8ZaD.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DeDPWdvJ.mjs → fonts-OW3yAfO5.mjs} +2 -2
- package/dist/{fonts-DeDPWdvJ.mjs.map → fonts-OW3yAfO5.mjs.map} +1 -1
- package/dist/{gpu-CWjgql4C.mjs → gpu-R4T2Tndu.mjs} +2 -2
- package/dist/{gpu-CWjgql4C.mjs.map → gpu-R4T2Tndu.mjs.map} +1 -1
- package/dist/{index-E2IXX0Cz.d.mts → index-9xte4JgL.d.mts} +110 -61
- package/dist/index-9xte4JgL.d.mts.map +1 -0
- package/dist/{index-YB9j9KUx.d.mts → index-B0Vq8Bwf.d.mts} +3 -3
- package/dist/{index-YB9j9KUx.d.mts.map → index-B0Vq8Bwf.d.mts.map} +1 -1
- package/dist/{index-BFTtXosj.d.mts → index-BVd6nXd5.d.mts} +2 -2
- package/dist/index-BVd6nXd5.d.mts.map +1 -0
- package/dist/{index-CnZhBlob.d.mts → index-Bv7gxGK1.d.mts} +2 -2
- package/dist/{index-CnZhBlob.d.mts.map → index-Bv7gxGK1.d.mts.map} +1 -1
- package/dist/{index-a6JrbAK0.d.mts → index-C-V6CAhP.d.mts} +32 -2
- package/dist/index-C-V6CAhP.d.mts.map +1 -0
- package/dist/{index-DQ1U3HC3.d.mts → index-C7-p9zwU.d.mts} +3 -3
- package/dist/{index-DQ1U3HC3.d.mts.map → index-C7-p9zwU.d.mts.map} +1 -1
- package/dist/{index-rtCXNxGO.d.mts → index-CEKxvGY-.d.mts} +2 -2
- package/dist/{index-rtCXNxGO.d.mts.map → index-CEKxvGY-.d.mts.map} +1 -1
- package/dist/{index-X2u96TEo.d.mts → index-CRaydvLi.d.mts} +29 -11
- package/dist/index-CRaydvLi.d.mts.map +1 -0
- package/dist/{index-DBh3WphX.d.mts → index-D1FqV1eu.d.mts} +2 -2
- package/dist/{index-DBh3WphX.d.mts.map → index-D1FqV1eu.d.mts.map} +1 -1
- package/dist/{index-Dibc_xpC.d.mts → index-DoP6EiHj.d.mts} +5 -5
- package/dist/{index-Dibc_xpC.d.mts.map → index-DoP6EiHj.d.mts.map} +1 -1
- package/dist/{index-D68eGFNE.d.mts → index-GA9_Z8Fn.d.mts} +2 -2
- package/dist/{index-D68eGFNE.d.mts.map → index-GA9_Z8Fn.d.mts.map} +1 -1
- package/dist/index.d.mts +14 -14
- package/dist/index.mjs +50 -50
- package/dist/preview/index.d.mts +5 -5
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-PDz7o2xg.mjs → preview-D7BGmE1E.mjs} +3 -3
- package/dist/{preview-PDz7o2xg.mjs.map → preview-D7BGmE1E.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-IEEV5RB3.mjs → chunk-3C2XT64C.mjs} +1 -1
- package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
- package/dist/preview-engine/{chunk-XYCR3STG.mjs → chunk-5DZTPUMH.mjs} +198 -92
- package/dist/preview-engine/{chunk-4P3MMJWD.mjs → chunk-FZ4RD7HV.mjs} +1 -1
- package/dist/preview-engine/chunk-GNDE3OXQ.mjs +5 -0
- package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
- package/dist/preview-engine/{chunk-SMHEMYCV.mjs → chunk-UBY2UYEL.mjs} +1 -1
- package/dist/preview-engine/{chunk-UFPA36D2.mjs → chunk-UPZURPJY.mjs} +31 -31
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-DLJOA3BM.mjs +228 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-Bn6ko_I4.mjs → program-tFKCWU2j.mjs} +109 -12
- package/dist/program-tFKCWU2j.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -4
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-BCTUqJG7.mjs → renderer-03mYJLgX.mjs} +3 -3
- package/dist/{renderer-BCTUqJG7.mjs.map → renderer-03mYJLgX.mjs.map} +1 -1
- package/dist/{renderer-CyUiXLRa.mjs → renderer-0rveCDm-.mjs} +3 -3
- package/dist/{renderer-CyUiXLRa.mjs.map → renderer-0rveCDm-.mjs.map} +1 -1
- package/dist/{renderer-BUj7jE6t.mjs → renderer-2PjR3w-q.mjs} +3 -3
- package/dist/{renderer-BUj7jE6t.mjs.map → renderer-2PjR3w-q.mjs.map} +1 -1
- package/dist/{renderer-BqUAyzCZ.mjs → renderer-47y12Z37.mjs} +2 -2
- package/dist/{renderer-BqUAyzCZ.mjs.map → renderer-47y12Z37.mjs.map} +1 -1
- package/dist/renderer-6_bzbbXt.mjs +5 -0
- package/dist/renderer-8M-9G6F_.mjs +5 -0
- package/dist/{renderer-CwlY8Tb-.mjs → renderer-B0yVUOPP.mjs} +2 -2
- package/dist/{renderer-CwlY8Tb-.mjs.map → renderer-B0yVUOPP.mjs.map} +1 -1
- package/dist/renderer-B5OzKvF8.mjs +5 -0
- package/dist/{renderer-CgK7Q1G8.mjs → renderer-B7G1KohJ.mjs} +2 -2
- package/dist/renderer-BBCZ2qbE.mjs +5 -0
- package/dist/{renderer-CuPAQjDK.mjs → renderer-BBMtmxks.mjs} +3 -3
- package/dist/{renderer-CuPAQjDK.mjs.map → renderer-BBMtmxks.mjs.map} +1 -1
- package/dist/renderer-BChbxCux.mjs +5 -0
- package/dist/{renderer-C-GTxnfv.mjs → renderer-BDzn1AKF.mjs} +2 -2
- package/dist/{renderer-C-GTxnfv.mjs.map → renderer-BDzn1AKF.mjs.map} +1 -1
- package/dist/renderer-BGeMPr8C.mjs +5 -0
- package/dist/{renderer-RzkU_O1i.mjs → renderer-BGp0An5A.mjs} +3 -3
- package/dist/{renderer-RzkU_O1i.mjs.map → renderer-BGp0An5A.mjs.map} +1 -1
- package/dist/{renderer-BZgJj8Cl.mjs → renderer-BH7UCMPQ.mjs} +2 -2
- package/dist/{renderer-BZgJj8Cl.mjs.map → renderer-BH7UCMPQ.mjs.map} +1 -1
- package/dist/{renderer-aRk849b3.d.mts → renderer-BHYJlK6H.d.mts} +2 -2
- package/dist/{renderer-aRk849b3.d.mts.map → renderer-BHYJlK6H.d.mts.map} +1 -1
- package/dist/{renderer-Cu3iKMSJ.mjs → renderer-BJ8ea92W.mjs} +3 -3
- package/dist/{renderer-Cu3iKMSJ.mjs.map → renderer-BJ8ea92W.mjs.map} +1 -1
- package/dist/{renderer-Dp5ChuOs.mjs → renderer-BOSZAdgF.mjs} +2 -2
- package/dist/{renderer-Dp5ChuOs.mjs.map → renderer-BOSZAdgF.mjs.map} +1 -1
- package/dist/renderer-BPQ8Pkjb.mjs +5 -0
- package/dist/renderer-BTRpA3HD.mjs +5 -0
- package/dist/{renderer-vll8LX0I.mjs → renderer-BVIXKfbC.mjs} +132 -116
- package/dist/renderer-BVIXKfbC.mjs.map +1 -0
- package/dist/{renderer-DpZballM.mjs → renderer-BVU22lBS.mjs} +2 -2
- package/dist/{renderer-DpZballM.mjs.map → renderer-BVU22lBS.mjs.map} +1 -1
- package/dist/renderer-BVsECSn-.mjs +5 -0
- package/dist/{renderer-DwGlDNOV.mjs → renderer-BWSRryIA.mjs} +2 -2
- package/dist/{renderer-DwGlDNOV.mjs.map → renderer-BWSRryIA.mjs.map} +1 -1
- package/dist/{renderer-BMpmmYOq.mjs → renderer-BacY4nh8.mjs} +2 -2
- package/dist/{renderer-BMpmmYOq.mjs.map → renderer-BacY4nh8.mjs.map} +1 -1
- package/dist/{renderer-CZ5mwBW1.mjs → renderer-Baw6Utxi.mjs} +2 -2
- package/dist/{renderer-CZ5mwBW1.mjs.map → renderer-Baw6Utxi.mjs.map} +1 -1
- package/dist/{renderer-NBMmvqWl.mjs → renderer-Bcu3UrI-.mjs} +3 -3
- package/dist/{renderer-NBMmvqWl.mjs.map → renderer-Bcu3UrI-.mjs.map} +1 -1
- package/dist/{renderer-DxB_OfLs.mjs → renderer-BeNl_6EG.mjs} +2 -2
- package/dist/{renderer-DxB_OfLs.mjs.map → renderer-BeNl_6EG.mjs.map} +1 -1
- package/dist/{renderer-BHPgkoEL.mjs → renderer-BfZNIiSv.mjs} +2 -2
- package/dist/{renderer-BHPgkoEL.mjs.map → renderer-BfZNIiSv.mjs.map} +1 -1
- package/dist/renderer-Bgos68gc.mjs +6 -0
- package/dist/{renderer-CnL8Cmmr.mjs → renderer-BjDddtw9.mjs} +2 -2
- package/dist/renderer-BjHOvoqO.mjs +5 -0
- package/dist/renderer-BjXMPPlV.mjs +5 -0
- package/dist/{renderer-FPiLBwj5.mjs → renderer-BpVOk9ux.mjs} +2 -2
- package/dist/{renderer-FPiLBwj5.mjs.map → renderer-BpVOk9ux.mjs.map} +1 -1
- package/dist/{renderer-DJPZs_zV.mjs → renderer-Bpm145BW.mjs} +3 -3
- package/dist/{renderer-DJPZs_zV.mjs.map → renderer-Bpm145BW.mjs.map} +1 -1
- package/dist/{renderer-45ifiDkn.mjs → renderer-Brmbl12Y.mjs} +3 -3
- package/dist/{renderer-45ifiDkn.mjs.map → renderer-Brmbl12Y.mjs.map} +1 -1
- package/dist/renderer-Byobxqkv.mjs +5 -0
- package/dist/{renderer-DOZPZTxe.mjs → renderer-C20efMI0.mjs} +3 -3
- package/dist/{renderer-DOZPZTxe.mjs.map → renderer-C20efMI0.mjs.map} +1 -1
- package/dist/{renderer-puQhVfDS.mjs → renderer-C5AoaymD.mjs} +3 -3
- package/dist/{renderer-puQhVfDS.mjs.map → renderer-C5AoaymD.mjs.map} +1 -1
- package/dist/{renderer-B-LUGB9h.mjs → renderer-CCxk-RJR.mjs} +2 -2
- package/dist/{renderer-B-LUGB9h.mjs.map → renderer-CCxk-RJR.mjs.map} +1 -1
- package/dist/{renderer-BKi6jDi_.mjs → renderer-CKo7VR8x.mjs} +3 -3
- package/dist/{renderer-BKi6jDi_.mjs.map → renderer-CKo7VR8x.mjs.map} +1 -1
- package/dist/renderer-CKrsg3EG.mjs +5 -0
- package/dist/{renderer--Q0pM9Vh.mjs → renderer-COgwYqev.mjs} +3 -3
- package/dist/{renderer--Q0pM9Vh.mjs.map → renderer-COgwYqev.mjs.map} +1 -1
- package/dist/{renderer-B5b-ehRb.mjs → renderer-CP108ABB.mjs} +2 -2
- package/dist/{renderer-B5b-ehRb.mjs.map → renderer-CP108ABB.mjs.map} +1 -1
- package/dist/{renderer-BPOh9x5X.mjs → renderer-CP8wLzTU.mjs} +2 -2
- package/dist/{renderer-BPOh9x5X.mjs.map → renderer-CP8wLzTU.mjs.map} +1 -1
- package/dist/{renderer-BPiWsrC2.mjs → renderer-CT3zkfbf.mjs} +2 -2
- package/dist/{renderer-BPiWsrC2.mjs.map → renderer-CT3zkfbf.mjs.map} +1 -1
- package/dist/{renderer-CQFMyC_c.mjs → renderer-Ca1KjNCO.mjs} +2 -2
- package/dist/{renderer-CQFMyC_c.mjs.map → renderer-Ca1KjNCO.mjs.map} +1 -1
- package/dist/renderer-Cj875NuH.mjs +5 -0
- package/dist/{renderer-CMnlgAGs.mjs → renderer-Cm0tsbQH.mjs} +2 -2
- package/dist/{renderer-CMnlgAGs.mjs.map → renderer-Cm0tsbQH.mjs.map} +1 -1
- package/dist/renderer-CnmzJoMv.mjs +5 -0
- package/dist/{renderer-BtgqTg2K.mjs → renderer-Cqb7PGrI.mjs} +2 -2
- package/dist/{renderer-C9dqx3U7.mjs → renderer-CrxwW6VQ.mjs} +3 -3
- package/dist/{renderer-C9dqx3U7.mjs.map → renderer-CrxwW6VQ.mjs.map} +1 -1
- package/dist/renderer-CtklDaMg.mjs +5 -0
- package/dist/{renderer-dRXP2dJU.mjs → renderer-Cw6_NL2i.mjs} +3 -3
- package/dist/{renderer-dRXP2dJU.mjs.map → renderer-Cw6_NL2i.mjs.map} +1 -1
- package/dist/{renderer-C_1eqfI0.mjs → renderer-D-KHHWQD.mjs} +3 -3
- package/dist/{renderer-C_1eqfI0.mjs.map → renderer-D-KHHWQD.mjs.map} +1 -1
- package/dist/{renderer-CxSFvKd1.mjs → renderer-D-RhYvVl.mjs} +2 -2
- package/dist/{renderer-CxSFvKd1.mjs.map → renderer-D-RhYvVl.mjs.map} +1 -1
- package/dist/renderer-D1tK3in_.mjs +5 -0
- package/dist/{renderer-Nnu32rqg.mjs → renderer-D2wNFNRf.mjs} +2 -2
- package/dist/{renderer-Nnu32rqg.mjs.map → renderer-D2wNFNRf.mjs.map} +1 -1
- package/dist/renderer-D2yc9P61.mjs +5 -0
- package/dist/renderer-D4v-JvSr.mjs +5 -0
- package/dist/renderer-D7WRWDwB.mjs +5 -0
- package/dist/{renderer-DXFJv_e6.mjs → renderer-DA8YEo_d.mjs} +3 -3
- package/dist/{renderer-DXFJv_e6.mjs.map → renderer-DA8YEo_d.mjs.map} +1 -1
- package/dist/{renderer-CYwVNbUh.mjs → renderer-DEjo6dw_.mjs} +2 -2
- package/dist/{renderer-CYwVNbUh.mjs.map → renderer-DEjo6dw_.mjs.map} +1 -1
- package/dist/renderer-DGvA0tdB.mjs +5 -0
- package/dist/{renderer-Br8km655.mjs → renderer-DIEeHiQA.mjs} +2 -2
- package/dist/{renderer-Br8km655.mjs.map → renderer-DIEeHiQA.mjs.map} +1 -1
- package/dist/{renderer-SJyp9-62.mjs → renderer-DNxWOz8Q.mjs} +2 -2
- package/dist/{renderer-SJyp9-62.mjs.map → renderer-DNxWOz8Q.mjs.map} +1 -1
- package/dist/renderer-DO7v5Sdm.mjs +5 -0
- package/dist/renderer-DRVvt7-V.mjs +5 -0
- package/dist/{renderer-DGb_wgTW.mjs → renderer-DVPgWHZw.mjs} +3 -3
- package/dist/{renderer-DGb_wgTW.mjs.map → renderer-DVPgWHZw.mjs.map} +1 -1
- package/dist/{renderer-BjgFpwVK.mjs → renderer-DWq9gYRw.mjs} +3 -3
- package/dist/{renderer-BjgFpwVK.mjs.map → renderer-DWq9gYRw.mjs.map} +1 -1
- package/dist/renderer-DYMCd3jL.mjs +5 -0
- package/dist/{renderer-C1ctHdXl.mjs → renderer-D_j1WKMD.mjs} +3 -3
- package/dist/{renderer-C1ctHdXl.mjs.map → renderer-D_j1WKMD.mjs.map} +1 -1
- package/dist/{renderer-BsMZ5Iaq.mjs → renderer-DcAKDAnS.mjs} +3 -3
- package/dist/{renderer-BsMZ5Iaq.mjs.map → renderer-DcAKDAnS.mjs.map} +1 -1
- package/dist/{renderer-g9SstkTz.mjs → renderer-Dgj46uEU.mjs} +2 -2
- package/dist/{renderer-DRal7Goa.mjs → renderer-DhyMfG1v.mjs} +3 -3
- package/dist/{renderer-DRal7Goa.mjs.map → renderer-DhyMfG1v.mjs.map} +1 -1
- package/dist/{renderer-BO_wuUKA.mjs → renderer-Dj2H5JPR.mjs} +3 -3
- package/dist/{renderer-BO_wuUKA.mjs.map → renderer-Dj2H5JPR.mjs.map} +1 -1
- package/dist/{renderer-BlZgyBSo.mjs → renderer-DkOuQi84.mjs} +3 -3
- package/dist/{renderer-BlZgyBSo.mjs.map → renderer-DkOuQi84.mjs.map} +1 -1
- package/dist/renderer-DmHKw-MM.mjs +5 -0
- package/dist/renderer-DoDsuZ6G.mjs +5 -0
- package/dist/{renderer-BgjPbgbn.mjs → renderer-Dr0tXA4k.mjs} +3 -3
- package/dist/{renderer-BgjPbgbn.mjs.map → renderer-Dr0tXA4k.mjs.map} +1 -1
- package/dist/{renderer-opVuiAQR.mjs → renderer-DtMVitEF.mjs} +2 -2
- package/dist/{renderer-opVuiAQR.mjs.map → renderer-DtMVitEF.mjs.map} +1 -1
- package/dist/{renderer-D-fzEZfX.mjs → renderer-Dwwnx7Dk.mjs} +2 -2
- package/dist/{renderer-D-fzEZfX.mjs.map → renderer-Dwwnx7Dk.mjs.map} +1 -1
- package/dist/{renderer-dGEMVaZ3.mjs → renderer-DzLrvCB2.mjs} +2 -2
- package/dist/{renderer-dGEMVaZ3.mjs.map → renderer-DzLrvCB2.mjs.map} +1 -1
- package/dist/renderer-EpgclS70.mjs +5 -0
- package/dist/{renderer-549d94qG.mjs → renderer-FYOL5Za6.mjs} +3 -3
- package/dist/{renderer-549d94qG.mjs.map → renderer-FYOL5Za6.mjs.map} +1 -1
- package/dist/renderer-GroKiYyK.mjs +5 -0
- package/dist/{renderer-CciiDHuU.mjs → renderer-I0Hh9cLK.mjs} +3 -3
- package/dist/{renderer-CciiDHuU.mjs.map → renderer-I0Hh9cLK.mjs.map} +1 -1
- package/dist/renderer-MQ5K_xIS.mjs +5 -0
- package/dist/{renderer-C7m7Yxgc.mjs → renderer-NRMlYkX6.mjs} +3 -3
- package/dist/{renderer-C7m7Yxgc.mjs.map → renderer-NRMlYkX6.mjs.map} +1 -1
- package/dist/{renderer-BIieU9pY.mjs → renderer-Nnmi8Gt6.mjs} +3 -3
- package/dist/{renderer-BIieU9pY.mjs.map → renderer-Nnmi8Gt6.mjs.map} +1 -1
- package/dist/renderer-U43SflML.mjs +5 -0
- package/dist/renderer-UqOmBgCv.mjs +5 -0
- package/dist/{renderer-KgsVk9c6.mjs → renderer-W1bVNVR6.mjs} +3 -3
- package/dist/{renderer-KgsVk9c6.mjs.map → renderer-W1bVNVR6.mjs.map} +1 -1
- package/dist/renderer-XLULgJM0.mjs +5 -0
- package/dist/{renderer-CE4535aW.mjs → renderer-ZnrEfkYh.mjs} +2 -2
- package/dist/{renderer-CE4535aW.mjs.map → renderer-ZnrEfkYh.mjs.map} +1 -1
- package/dist/{renderer-RAq3LnNy.mjs → renderer-_pC-jB9O.mjs} +2 -2
- package/dist/{renderer-RAq3LnNy.mjs.map → renderer-_pC-jB9O.mjs.map} +1 -1
- package/dist/{renderer-Dz6P-rPI.mjs → renderer-iMiYStcW.mjs} +2 -2
- package/dist/{renderer-Dz6P-rPI.mjs.map → renderer-iMiYStcW.mjs.map} +1 -1
- package/dist/{renderer-S9tVGneU.mjs → renderer-jUKdkmG5.mjs} +69 -69
- package/dist/{renderer-S9tVGneU.mjs.map → renderer-jUKdkmG5.mjs.map} +1 -1
- package/dist/{renderer-_54hiCq0.mjs → renderer-k5d7JSbs.mjs} +3 -3
- package/dist/{renderer-_54hiCq0.mjs.map → renderer-k5d7JSbs.mjs.map} +1 -1
- package/dist/renderer-lNjxY1GG.mjs +5 -0
- package/dist/{renderer-CL-vyXgX.mjs → renderer-nHS3Sius.mjs} +3 -3
- package/dist/{renderer-CL-vyXgX.mjs.map → renderer-nHS3Sius.mjs.map} +1 -1
- package/dist/{renderer-Cp_HOmp7.mjs → renderer-ngmYIIob.mjs} +3 -3
- package/dist/{renderer-Cp_HOmp7.mjs.map → renderer-ngmYIIob.mjs.map} +1 -1
- package/dist/{renderer-LXhEPCmy.mjs → renderer-raxwsiGI.mjs} +3 -3
- package/dist/{renderer-LXhEPCmy.mjs.map → renderer-raxwsiGI.mjs.map} +1 -1
- package/dist/renderer-ukufL7pl.mjs +5 -0
- package/dist/renderer-wb0NCKdF.mjs +5 -0
- package/dist/{renderer-D8gN7aqk.mjs → renderer-zRq0j6Xy.mjs} +3 -3
- package/dist/{renderer-D8gN7aqk.mjs.map → renderer-zRq0j6Xy.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs → renderers-CP8CFWDs-CshljORp.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs.map → renderers-CP8CFWDs-CshljORp.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-BzFGotRc.mjs → src-Dy4gnc6w.mjs} +43 -13
- package/dist/src-Dy4gnc6w.mjs.map +1 -0
- package/package.json +60 -60
- package/dist/dist-CUNvNDS3.mjs.map +0 -1
- package/dist/dist-D3BeAZ7X.mjs.map +0 -1
- package/dist/index-BFTtXosj.d.mts.map +0 -1
- package/dist/index-E2IXX0Cz.d.mts.map +0 -1
- package/dist/index-X2u96TEo.d.mts.map +0 -1
- package/dist/index-a6JrbAK0.d.mts.map +0 -1
- package/dist/preview-engine/chunk-77WWW75O.mjs +0 -5
- package/dist/preview-engine/chunk-7M5LE6EM.mjs +0 -483
- package/dist/preview-engine/chunk-FRJPXWAG.mjs +0 -1
- package/dist/preview-engine/renderers-TTXTV4PC.mjs +0 -228
- package/dist/program-Bn6ko_I4.mjs.map +0 -1
- package/dist/renderer-1aSF5BmY.mjs +0 -5
- package/dist/renderer-B2e4Gr9u.mjs +0 -5
- package/dist/renderer-B6fz4j50.mjs +0 -5
- package/dist/renderer-BEftIYw-.mjs +0 -5
- package/dist/renderer-BHTnO-7e.mjs +0 -5
- package/dist/renderer-BMlnQqTO.mjs +0 -5
- package/dist/renderer-BOzcFezY.mjs +0 -5
- package/dist/renderer-BVbjJIKJ.mjs +0 -5
- package/dist/renderer-BXsHKf4k.mjs +0 -5
- package/dist/renderer-Bks49NVl.mjs +0 -5
- package/dist/renderer-C-t7qFKr.mjs +0 -5
- package/dist/renderer-C24n-6CX.mjs +0 -6
- package/dist/renderer-CCReX-7M.mjs +0 -5
- package/dist/renderer-CIxFQrAm.mjs +0 -5
- package/dist/renderer-CLHBMIqJ.mjs +0 -5
- package/dist/renderer-CMJKi-Ye.mjs +0 -5
- package/dist/renderer-C_H3mHZa.mjs +0 -5
- package/dist/renderer-CfkTdR5B.mjs +0 -5
- package/dist/renderer-CnhkXJ0R.mjs +0 -5
- package/dist/renderer-CqpyVsq_.mjs +0 -5
- package/dist/renderer-CtWgIpTE.mjs +0 -5
- package/dist/renderer-CyuKr5ca.mjs +0 -5
- package/dist/renderer-D9ON_1Hf.mjs +0 -5
- package/dist/renderer-DAnTgh4o.mjs +0 -5
- package/dist/renderer-DWgpivA3.mjs +0 -5
- package/dist/renderer-Dh_qNNwR.mjs +0 -5
- package/dist/renderer-DkCpXPMP.mjs +0 -5
- package/dist/renderer-Dre-6cDR.mjs +0 -5
- package/dist/renderer-Ds5z4_HX.mjs +0 -5
- package/dist/renderer-HGSCOMyP.mjs +0 -5
- package/dist/renderer-KMY8W-cJ.mjs +0 -5
- package/dist/renderer-R21YvXz3.mjs +0 -5
- package/dist/renderer-RtzCz37W.mjs +0 -5
- package/dist/renderer-iMrqAjix.mjs +0 -5
- package/dist/renderer-sMed1u1O.mjs +0 -5
- package/dist/renderer-tsAuo46l.mjs +0 -5
- package/dist/renderer-vll8LX0I.mjs.map +0 -1
- package/dist/src-BzFGotRc.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../index-
|
|
2
|
-
import "../index-
|
|
3
|
-
import { Q as initHeadlessWebGPU, X as describeGpu, y as GpuAdapterDescription } from "../index-
|
|
4
|
-
import { C as formatQaReport, D as stitchChunks, E as resetRenderCaches, S as VideoQaStats, T as renderSemaphore, _ as RenderProgress, a as renderFrameGrid, b as VideoQaOptions, c as ChunkPlan, d as FrameRange, f as HeadlessMediaRenderer, g as QaSegment, h as QaIssue, i as computeGridLayout, l as ChunkPlanOptions, m as PlannedChunk, n as FrameGridRenderable, o as resolveSamplePoints, p as HeadlessWebGPURenderer, r as FrameSamplePoint, s as AudioQaStats, t as FrameGridOptions, u as FrameCostSample, v as StitchOptions, w as planChunks, x as VideoQaReport, y as StitchResult } from "../index-
|
|
1
|
+
import "../index-C-V6CAhP.mjs";
|
|
2
|
+
import "../index-BVd6nXd5.mjs";
|
|
3
|
+
import { Q as initHeadlessWebGPU, X as describeGpu, y as GpuAdapterDescription } from "../index-CRaydvLi.mjs";
|
|
4
|
+
import { C as formatQaReport, D as stitchChunks, E as resetRenderCaches, S as VideoQaStats, T as renderSemaphore, _ as RenderProgress, a as renderFrameGrid, b as VideoQaOptions, c as ChunkPlan, d as FrameRange, f as HeadlessMediaRenderer, g as QaSegment, h as QaIssue, i as computeGridLayout, l as ChunkPlanOptions, m as PlannedChunk, n as FrameGridRenderable, o as resolveSamplePoints, p as HeadlessWebGPURenderer, r as FrameSamplePoint, s as AudioQaStats, t as FrameGridOptions, u as FrameCostSample, v as StitchOptions, w as planChunks, x as VideoQaReport, y as StitchResult } from "../index-C7-p9zwU.mjs";
|
|
5
5
|
export { AudioQaStats, ChunkPlan, ChunkPlanOptions, FrameCostSample, FrameGridOptions, FrameGridRenderable, FrameRange, FrameSamplePoint, GpuAdapterDescription, HeadlessMediaRenderer, HeadlessWebGPURenderer, PlannedChunk, QaIssue, QaSegment, RenderProgress, StitchOptions, StitchResult, VideoQaOptions, VideoQaReport, VideoQaStats, computeGridLayout, describeGpu, formatQaReport, initHeadlessWebGPU, planChunks, renderFrameGrid, renderSemaphore, resetRenderCaches, resolveSamplePoints, stitchChunks };
|
package/dist/renderer/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "../chunk-DOL2i2sR.mjs";
|
|
2
|
-
import { R as initHeadlessWebGPU, x as describeGpu } from "../dist
|
|
3
|
-
import { a as resetRenderCaches, c as HeadlessWebGPURenderer, i as planChunks, l as formatQaReport, n as renderFrameGrid, o as stitchChunks, r as resolveSamplePoints, s as HeadlessMediaRenderer, t as computeGridLayout, u as renderSemaphore } from "../renderer-
|
|
2
|
+
import { R as initHeadlessWebGPU, x as describeGpu } from "../dist--Uu5bQ_6.mjs";
|
|
3
|
+
import { a as resetRenderCaches, c as HeadlessWebGPURenderer, i as planChunks, l as formatQaReport, n as renderFrameGrid, o as stitchChunks, r as resolveSamplePoints, s as HeadlessMediaRenderer, t as computeGridLayout, u as renderSemaphore } from "../renderer-jUKdkmG5.mjs";
|
|
4
4
|
|
|
5
5
|
export { HeadlessMediaRenderer, HeadlessWebGPURenderer, computeGridLayout, describeGpu, formatQaReport, initHeadlessWebGPU, planChunks, renderFrameGrid, renderSemaphore, resetRenderCaches, resolveSamplePoints, stitchChunks };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-DOL2i2sR.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BuvKGwk3.mjs";
|
|
3
|
-
import "./dist
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist--Uu5bQ_6.mjs";
|
|
4
|
+
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-R4T2Tndu.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-contour/dist/renderers-CJmaeupk.mjs
|
|
7
7
|
const OP = "Contour";
|
|
@@ -219,4 +219,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ContourWebGPURenderer }
|
|
|
219
219
|
|
|
220
220
|
//#endregion
|
|
221
221
|
export { ContourWebGPURenderer, renderers_default as default };
|
|
222
|
-
//# sourceMappingURL=renderer-
|
|
222
|
+
//# sourceMappingURL=renderer-03mYJLgX.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BCTUqJG7.mjs","names":[],"sources":["../../../nodes/node-contour/dist/renderers-CJmaeupk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Contour\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet lineWidth = u.v[1].y;\n\tlet lineColor = u.v[2];\n\tlet fill = u32(u.v[1].z + 0.5);\n\tlet fillColor = u.v[3];\n\tlet smoothing = u.v[1].w;\n\n\tlet R = res();\n\tlet s = smoothing / R;\n\tvar lsum = 0.0;\n\tfor (var j = -1; j <= 1; j++) {\n\t\tfor (var i = -1; i <= 1; i++) {\n\t\t\tlsum += luma(sampleS(in.uv + vec2<f32>(f32(i), f32(j)) * s).rgb);\n\t\t}\n\t}\n\tlet h = lsum / 9.0 * levels;\n\tlet w = max(fwidth(h), 1e-4);\n\tlet d = abs(fract(h - 0.5) - 0.5) / w;\n\tlet line = 1.0 - smoothstep(lineWidth * 0.5, lineWidth * 0.5 + 1.0, d);\n\tlet c = sampleS(in.uv);\n\tvar base = vec4<f32>(c.rgb, c.a);\n\tif (fill == 1u) { base = vec4<f32>(fillColor.rgb, 1.0); }\n\tif (fill == 2u) { base = vec4<f32>(lineColor.rgb, 0.0); }\n\tlet rgb = mix(base.rgb, lineColor.rgb, line);\n\treturn premul(vec4<f32>(rgb, max(base.a, line * select(1.0, c.a, fill == 0u))));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 14);\n\tdata[5] = num(raw.lineWidth, 1.2);\n\tdata.set(hexToRgba(String(raw.lineColor ?? \"#2b1d0e\")), 8);\n\tdata[6] = Math.max(0, [\n\t\t\"source\",\n\t\t\"flat\",\n\t\t\"none\"\n\t].indexOf(String(raw.fill ?? \"source\")));\n\tdata.set(hexToRgba(String(raw.fillColor ?? \"#f3ead8\")), 12);\n\tdata[7] = num(raw.smoothing, 2);\n}\nconst ContourWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ContourWebGPURenderer });\n\n//#endregion\nexport { ContourWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CJmaeupk.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-03mYJLgX.mjs","names":[],"sources":["../../../nodes/node-contour/dist/renderers-CJmaeupk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Contour\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet lineWidth = u.v[1].y;\n\tlet lineColor = u.v[2];\n\tlet fill = u32(u.v[1].z + 0.5);\n\tlet fillColor = u.v[3];\n\tlet smoothing = u.v[1].w;\n\n\tlet R = res();\n\tlet s = smoothing / R;\n\tvar lsum = 0.0;\n\tfor (var j = -1; j <= 1; j++) {\n\t\tfor (var i = -1; i <= 1; i++) {\n\t\t\tlsum += luma(sampleS(in.uv + vec2<f32>(f32(i), f32(j)) * s).rgb);\n\t\t}\n\t}\n\tlet h = lsum / 9.0 * levels;\n\tlet w = max(fwidth(h), 1e-4);\n\tlet d = abs(fract(h - 0.5) - 0.5) / w;\n\tlet line = 1.0 - smoothstep(lineWidth * 0.5, lineWidth * 0.5 + 1.0, d);\n\tlet c = sampleS(in.uv);\n\tvar base = vec4<f32>(c.rgb, c.a);\n\tif (fill == 1u) { base = vec4<f32>(fillColor.rgb, 1.0); }\n\tif (fill == 2u) { base = vec4<f32>(lineColor.rgb, 0.0); }\n\tlet rgb = mix(base.rgb, lineColor.rgb, line);\n\treturn premul(vec4<f32>(rgb, max(base.a, line * select(1.0, c.a, fill == 0u))));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 14);\n\tdata[5] = num(raw.lineWidth, 1.2);\n\tdata.set(hexToRgba(String(raw.lineColor ?? \"#2b1d0e\")), 8);\n\tdata[6] = Math.max(0, [\n\t\t\"source\",\n\t\t\"flat\",\n\t\t\"none\"\n\t].indexOf(String(raw.fill ?? \"source\")));\n\tdata.set(hexToRgba(String(raw.fillColor ?? \"#f3ead8\")), 12);\n\tdata[7] = num(raw.smoothing, 2);\n}\nconst ContourWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ContourWebGPURenderer });\n\n//#endregion\nexport { ContourWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CJmaeupk.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BuvKGwk3.mjs";
|
|
2
2
|
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BSKAbyea.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
3
|
+
import { et as probeVideoSize } from "./dist--Uu5bQ_6.mjs";
|
|
4
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-R4T2Tndu.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
|
|
7
7
|
//#region ../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs
|
|
@@ -180,4 +180,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
|
|
|
180
180
|
|
|
181
181
|
//#endregion
|
|
182
182
|
export { renderers_default as t };
|
|
183
|
-
//# sourceMappingURL=renderer-
|
|
183
|
+
//# sourceMappingURL=renderer-0rveCDm-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CyUiXLRa.mjs","names":[],"sources":["../../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { probeVideoSize } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst rotateConfig = configBuilder().field(\"angle\", z.number().default(90), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Angle Signal\",\n\tdescription: \"Rotation in degrees about the frame center, clockwise. Any value; 90 / 180 / 270 fix footage shot sideways or upside down.\"\n}).field(\"fit\", z.enum([\n\t\"cover\",\n\t\"contain\",\n\t\"fill\"\n]).default(\"cover\"), { description: \"How the rotated source sits in the output: cover fills it (cropping the overhang), contain shows all of it (transparent margins), fill keeps the unrotated source stretched to the output and only turns it.\" }).field(\"scale\", z.number().min(.01).max(20).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Scale Signal\",\n\tdescription: \"Extra zoom applied after the fit (1 = exactly fitted).\"\n}).build();\nconst RotateNodeConfigSchema = rotateConfig.schema;\nconst RotateResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ROTATE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n/**\n* Size (px) of the rotated source inside a `targetWidth × targetHeight` output.\n* `cover` is the smallest size whose rotated rectangle still covers the whole\n* output; `contain` the largest whose rotated bounding box fits inside it.\n*/\nfunction rotatedSourceSize(sourceWidth, sourceHeight, targetWidth, targetHeight, angleDeg, fit) {\n\tif (fit === \"fill\") return {\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t};\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst c = Math.abs(Math.cos(rad));\n\tconst s = Math.abs(Math.sin(rad));\n\tconst k = fit === \"cover\" ? Math.max((c * targetWidth + s * targetHeight) / sourceWidth, (s * targetWidth + c * targetHeight) / sourceHeight) : Math.min(targetWidth / (c * sourceWidth + s * sourceHeight), targetHeight / (s * sourceWidth + c * sourceHeight));\n\treturn {\n\t\twidth: sourceWidth * k,\n\t\theight: sourceHeight * k\n\t};\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_ROTATE_SHADER = `\nstruct RotateUniforms {\n\toutSize: vec2<f32>,\n\tsize : vec2<f32>,\n\tcs : vec2<f32>,\n\t_pad : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RotateUniforms;\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 p = (in.uv - vec2<f32>(0.5)) * u.outSize;\n\t// Clockwise on screen (y down): undo it with the transpose.\n\tlet q = vec2<f32>(u.cs.x * p.x + u.cs.y * p.y, -u.cs.y * p.x + u.cs.x * p.y);\n\tlet uv = q / u.size + vec2<f32>(0.5);\n\t// Distance (output px) inside the source rectangle's nearest edge.\n\tlet edge = (vec2<f32>(0.5) - abs(uv - vec2<f32>(0.5))) * u.size;\n\tlet coverage = clamp(min(edge.x, edge.y) + 0.5, 0.0, 1.0);\n\tlet color = textureSampleLevel(tex, samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\t// Premultiplied: coverage scales every channel.\n\treturn color * coverage;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getRotateResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_ROTATE_SHADER }),\n\t\t\tlayouts: [uniformLayout, textureLayout],\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction resolveNumber(raw, fallback, frame, fps) {\n\tconst value = typeof raw === \"function\" ? raw(frame, fps) : raw !== null && typeof raw === \"object\" ? \"get\" in raw && typeof raw.get === \"function\" ? raw.get({\n\t\tframe,\n\t\tfps\n\t}) : \"value\" in raw ? raw.value : raw : raw;\n\tconst n = Number(value ?? fallback);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* The child's own size: the nearest stated metadata down the chain, else the\n* source file's display size. A layer built from a bare path states none, and\n* guessing the layer box would turn a 16:9 clip into a squeezed 9:16 one.\n*/\nasync function intrinsicSize(media) {\n\tfor (let node = media; node;) {\n\t\tconst { width, height } = node.metadata ?? {};\n\t\tif (width && height) return {\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tconst op = node.operation;\n\t\tif (op.op === \"source\") {\n\t\t\tconst url = typeof op.url === \"string\" ? op.url : op.source;\n\t\t\treturn typeof url === \"string\" ? probeVideoSize(url) : null;\n\t\t}\n\t\tnode = node.children?.[0];\n\t}\n\treturn null;\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 !== \"Rotate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intrinsic = await intrinsicSize(childMedia);\n\tconst sourceWidth = intrinsic?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = intrinsic?.height ?? props.containerHeight ?? height;\n\tconst { texture: childTex } = 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\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst angle = resolveNumber(op.angle, 90, compositionFrame, fps);\n\tconst scale = Math.max(.01, resolveNumber(op.scale, 1, compositionFrame, fps));\n\tconst size = rotatedSourceSize(sourceWidth, sourceHeight, width, height, angle, op.fit ?? \"cover\");\n\tconst rad = angle * Math.PI / 180;\n\tuniformData[0] = width;\n\tuniformData[1] = height;\n\tuniformData[2] = size.width * scale;\n\tuniformData[3] = size.height * scale;\n\tuniformData[4] = Math.cos(rad);\n\tuniformData[5] = Math.sin(rad);\n\tconst { pipeline, uniformLayout, textureLayout } = getRotateResources(ctx.device, ctx.renderer.format);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: ctx.renderer.getTemporaryBuffer(uniformData) }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: ctx.renderer.samplerCache.getSampler(ctx.device)\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { rotateConfig as a, RotateResultSchema as i, ROTATE_OUTPUT_TYPE_MAP as n, rotatedSourceSize as o, RotateNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-D7DemTXH.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-0rveCDm-.mjs","names":[],"sources":["../../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { probeVideoSize } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst rotateConfig = configBuilder().field(\"angle\", z.number().default(90), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Angle Signal\",\n\tdescription: \"Rotation in degrees about the frame center, clockwise. Any value; 90 / 180 / 270 fix footage shot sideways or upside down.\"\n}).field(\"fit\", z.enum([\n\t\"cover\",\n\t\"contain\",\n\t\"fill\"\n]).default(\"cover\"), { description: \"How the rotated source sits in the output: cover fills it (cropping the overhang), contain shows all of it (transparent margins), fill keeps the unrotated source stretched to the output and only turns it.\" }).field(\"scale\", z.number().min(.01).max(20).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Scale Signal\",\n\tdescription: \"Extra zoom applied after the fit (1 = exactly fitted).\"\n}).build();\nconst RotateNodeConfigSchema = rotateConfig.schema;\nconst RotateResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ROTATE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n/**\n* Size (px) of the rotated source inside a `targetWidth × targetHeight` output.\n* `cover` is the smallest size whose rotated rectangle still covers the whole\n* output; `contain` the largest whose rotated bounding box fits inside it.\n*/\nfunction rotatedSourceSize(sourceWidth, sourceHeight, targetWidth, targetHeight, angleDeg, fit) {\n\tif (fit === \"fill\") return {\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t};\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst c = Math.abs(Math.cos(rad));\n\tconst s = Math.abs(Math.sin(rad));\n\tconst k = fit === \"cover\" ? Math.max((c * targetWidth + s * targetHeight) / sourceWidth, (s * targetWidth + c * targetHeight) / sourceHeight) : Math.min(targetWidth / (c * sourceWidth + s * sourceHeight), targetHeight / (s * sourceWidth + c * sourceHeight));\n\treturn {\n\t\twidth: sourceWidth * k,\n\t\theight: sourceHeight * k\n\t};\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_ROTATE_SHADER = `\nstruct RotateUniforms {\n\toutSize: vec2<f32>,\n\tsize : vec2<f32>,\n\tcs : vec2<f32>,\n\t_pad : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RotateUniforms;\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 p = (in.uv - vec2<f32>(0.5)) * u.outSize;\n\t// Clockwise on screen (y down): undo it with the transpose.\n\tlet q = vec2<f32>(u.cs.x * p.x + u.cs.y * p.y, -u.cs.y * p.x + u.cs.x * p.y);\n\tlet uv = q / u.size + vec2<f32>(0.5);\n\t// Distance (output px) inside the source rectangle's nearest edge.\n\tlet edge = (vec2<f32>(0.5) - abs(uv - vec2<f32>(0.5))) * u.size;\n\tlet coverage = clamp(min(edge.x, edge.y) + 0.5, 0.0, 1.0);\n\tlet color = textureSampleLevel(tex, samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\t// Premultiplied: coverage scales every channel.\n\treturn color * coverage;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getRotateResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_ROTATE_SHADER }),\n\t\t\tlayouts: [uniformLayout, textureLayout],\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction resolveNumber(raw, fallback, frame, fps) {\n\tconst value = typeof raw === \"function\" ? raw(frame, fps) : raw !== null && typeof raw === \"object\" ? \"get\" in raw && typeof raw.get === \"function\" ? raw.get({\n\t\tframe,\n\t\tfps\n\t}) : \"value\" in raw ? raw.value : raw : raw;\n\tconst n = Number(value ?? fallback);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* The child's own size: the nearest stated metadata down the chain, else the\n* source file's display size. A layer built from a bare path states none, and\n* guessing the layer box would turn a 16:9 clip into a squeezed 9:16 one.\n*/\nasync function intrinsicSize(media) {\n\tfor (let node = media; node;) {\n\t\tconst { width, height } = node.metadata ?? {};\n\t\tif (width && height) return {\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tconst op = node.operation;\n\t\tif (op.op === \"source\") {\n\t\t\tconst url = typeof op.url === \"string\" ? op.url : op.source;\n\t\t\treturn typeof url === \"string\" ? probeVideoSize(url) : null;\n\t\t}\n\t\tnode = node.children?.[0];\n\t}\n\treturn null;\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 !== \"Rotate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intrinsic = await intrinsicSize(childMedia);\n\tconst sourceWidth = intrinsic?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = intrinsic?.height ?? props.containerHeight ?? height;\n\tconst { texture: childTex } = 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\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst angle = resolveNumber(op.angle, 90, compositionFrame, fps);\n\tconst scale = Math.max(.01, resolveNumber(op.scale, 1, compositionFrame, fps));\n\tconst size = rotatedSourceSize(sourceWidth, sourceHeight, width, height, angle, op.fit ?? \"cover\");\n\tconst rad = angle * Math.PI / 180;\n\tuniformData[0] = width;\n\tuniformData[1] = height;\n\tuniformData[2] = size.width * scale;\n\tuniformData[3] = size.height * scale;\n\tuniformData[4] = Math.cos(rad);\n\tuniformData[5] = Math.sin(rad);\n\tconst { pipeline, uniformLayout, textureLayout } = getRotateResources(ctx.device, ctx.renderer.format);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: ctx.renderer.getTemporaryBuffer(uniformData) }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: ctx.renderer.samplerCache.getSampler(ctx.device)\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { rotateConfig as a, RotateResultSchema as i, ROTATE_OUTPUT_TYPE_MAP as n, rotatedSourceSize as o, RotateNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-D7DemTXH.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as signalTiming, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import { Hn as signalRegistry, q as parseColor } from "./dist--Uu5bQ_6.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as signalTiming, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-R4T2Tndu.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs
|
|
5
5
|
const deviceResourceCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -206,4 +206,4 @@ var renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };
|
|
|
206
206
|
|
|
207
207
|
//#endregion
|
|
208
208
|
export { renderers_default as n, GradientMapWebGPURenderer as t };
|
|
209
|
-
//# sourceMappingURL=renderer-
|
|
209
|
+
//# sourceMappingURL=renderer-2PjR3w-q.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BUj7jE6t.mjs","names":[],"sources":["../../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs"],"sourcesContent":["import { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_GRADIENT_MAP_SHADER = `\nstruct GradientStop {\n\tpos : vec4<f32>,\n\tcol : vec4<f32>,\n};\n\nstruct GradientMapUniforms {\n\tnumStops : f32,\n\tisSmooth : f32,\n\tdither : f32,\n\topacity : f32,\n\n\thasOpacitySig : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\n\tstops : array<GradientStop, 16>,\n};\n\n@group(0) @binding(0) var<uniform> u : GradientMapUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn ditherNoise(pos: vec2<f32>) -> f32 {\n\tlet p = fract(pos * vec2<f32>(0.1031, 0.1030));\n\tlet d = dot(p, p.yx + 33.33);\n\treturn fract((p.x + p.y) * d) - 0.5;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\t// ITU-R BT.709 Luminance\n\tvar lum = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n\tif (u.dither > 0.5) {\n\t\tlet d = ditherNoise(in.pos.xy) * (1.0 / 255.0);\n\t\tlum = clamp(lum + d, 0.0, 1.0);\n\t} else {\n\t\tlum = clamp(lum, 0.0, 1.0);\n\t}\n\n\tlet count = i32(clamp(u.numStops, 2.0, 16.0));\n\tvar gradColor = u.stops[0].col.rgb;\n\n\tif (lum <= u.stops[0].pos.x) {\n\t\tgradColor = u.stops[0].col.rgb;\n\t} else if (lum >= u.stops[count - 1].pos.x) {\n\t\tgradColor = u.stops[count - 1].col.rgb;\n\t} else {\n\t\tfor (var i = 0; i < 15; i = i + 1) {\n\t\t\tif (i >= count - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet p0 = u.stops[i].pos.x;\n\t\t\tlet p1 = u.stops[i + 1].pos.x;\n\n\t\t\tif (lum >= p0 && lum <= p1) {\n\t\t\t\tlet range = max(p1 - p0, 1e-5);\n\t\t\t\tlet t = clamp((lum - p0) / range, 0.0, 1.0);\n\t\t\t\tif (u.isSmooth > 0.5) {\n\t\t\t\t\tgradColor = mix(u.stops[i].col.rgb, u.stops[i + 1].col.rgb, t);\n\t\t\t\t} else {\n\t\t\t\t\tgradColor = u.stops[i].col.rgb;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar opacity = u.opacity;\n\tif (u.hasOpacitySig > 0.5) {\n\t\topacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\topacity = clamp(opacity, 0.0, 1.0);\n\n\tlet finalRgb = mix(rgb, gradColor, opacity);\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nfunction getGradientMapResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"GradientMapUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapTextureLayout\");\n\tconst signalLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapSignalLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"GradientMapPipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"GradientMapShaderModule\",\n\t\t\t\tcode: WGSL_GRADIENT_MAP_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(136);\nconst GradientMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"GradientMap\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sortedStops = [...Array.isArray(op.stops) ? op.stops : [{\n\t\tposition: 0,\n\t\tcolor: \"#000000\"\n\t}, {\n\t\tposition: 1,\n\t\tcolor: \"#ffffff\"\n\t}]].sort((a, b) => a.position - b.position);\n\tconst numStops = Math.min(Math.max(sortedStops.length, 2), 16);\n\tconst opacityHandleId = op.opacityHandleId;\n\tconst opacitySignalInput = opacityHandleId ? op.inputs?.[opacityHandleId] : null;\n\tconst hasOpacitySig = !!(opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Signal\");\n\tconst opacitySigData = hasOpacitySig ? opacitySignalInput?.outputItem?.data : null;\n\tlet opacityVal = Number(op.opacity ?? 1);\n\tif (!hasOpacitySig && opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Number\") opacityVal = Number(opacitySignalInput.outputItem.data ?? 1);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet opacityView;\n\tif (hasOpacitySig && opacitySigData) opacityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, opacitySigData.nodeId ?? \"gradient_map_opacity\", elapsedSeconds, durationSeconds, opacitySigData, width, height, props.renderId, frame, fps);\n\telse opacityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = numStops;\n\tuniformBufferData[1] = op.smooth === false ? 0 : 1;\n\tuniformBufferData[2] = op.dither === false ? 0 : 1;\n\tuniformBufferData[3] = opacityVal;\n\tuniformBufferData[4] = hasOpacitySig ? 1 : 0;\n\tuniformBufferData[5] = 0;\n\tuniformBufferData[6] = 0;\n\tuniformBufferData[7] = 0;\n\tfor (let i = 0; i < 16; i++) {\n\t\tconst stop = sortedStops[Math.min(i, numStops - 1)];\n\t\tconst baseIdx = 8 + i * 8;\n\t\tconst parsed = parseColor(stop.color);\n\t\tuniformBufferData[baseIdx + 0] = stop.position;\n\t\tuniformBufferData[baseIdx + 1] = 0;\n\t\tuniformBufferData[baseIdx + 2] = 0;\n\t\tuniformBufferData[baseIdx + 3] = 0;\n\t\tuniformBufferData[baseIdx + 4] = parsed.r;\n\t\tuniformBufferData[baseIdx + 5] = parsed.g;\n\t\tuniformBufferData[baseIdx + 6] = parsed.b;\n\t\tuniformBufferData[baseIdx + 7] = parsed.a;\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalLayout } = getGradientMapResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\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: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: signalLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: opacityView\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, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };\n\n//#endregion\nexport { GradientMapWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DDdRKrlK.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-2PjR3w-q.mjs","names":[],"sources":["../../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs"],"sourcesContent":["import { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_GRADIENT_MAP_SHADER = `\nstruct GradientStop {\n\tpos : vec4<f32>,\n\tcol : vec4<f32>,\n};\n\nstruct GradientMapUniforms {\n\tnumStops : f32,\n\tisSmooth : f32,\n\tdither : f32,\n\topacity : f32,\n\n\thasOpacitySig : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\n\tstops : array<GradientStop, 16>,\n};\n\n@group(0) @binding(0) var<uniform> u : GradientMapUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn ditherNoise(pos: vec2<f32>) -> f32 {\n\tlet p = fract(pos * vec2<f32>(0.1031, 0.1030));\n\tlet d = dot(p, p.yx + 33.33);\n\treturn fract((p.x + p.y) * d) - 0.5;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\t// ITU-R BT.709 Luminance\n\tvar lum = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n\tif (u.dither > 0.5) {\n\t\tlet d = ditherNoise(in.pos.xy) * (1.0 / 255.0);\n\t\tlum = clamp(lum + d, 0.0, 1.0);\n\t} else {\n\t\tlum = clamp(lum, 0.0, 1.0);\n\t}\n\n\tlet count = i32(clamp(u.numStops, 2.0, 16.0));\n\tvar gradColor = u.stops[0].col.rgb;\n\n\tif (lum <= u.stops[0].pos.x) {\n\t\tgradColor = u.stops[0].col.rgb;\n\t} else if (lum >= u.stops[count - 1].pos.x) {\n\t\tgradColor = u.stops[count - 1].col.rgb;\n\t} else {\n\t\tfor (var i = 0; i < 15; i = i + 1) {\n\t\t\tif (i >= count - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet p0 = u.stops[i].pos.x;\n\t\t\tlet p1 = u.stops[i + 1].pos.x;\n\n\t\t\tif (lum >= p0 && lum <= p1) {\n\t\t\t\tlet range = max(p1 - p0, 1e-5);\n\t\t\t\tlet t = clamp((lum - p0) / range, 0.0, 1.0);\n\t\t\t\tif (u.isSmooth > 0.5) {\n\t\t\t\t\tgradColor = mix(u.stops[i].col.rgb, u.stops[i + 1].col.rgb, t);\n\t\t\t\t} else {\n\t\t\t\t\tgradColor = u.stops[i].col.rgb;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar opacity = u.opacity;\n\tif (u.hasOpacitySig > 0.5) {\n\t\topacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\topacity = clamp(opacity, 0.0, 1.0);\n\n\tlet finalRgb = mix(rgb, gradColor, opacity);\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nfunction getGradientMapResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"GradientMapUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapTextureLayout\");\n\tconst signalLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapSignalLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"GradientMapPipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"GradientMapShaderModule\",\n\t\t\t\tcode: WGSL_GRADIENT_MAP_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(136);\nconst GradientMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"GradientMap\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sortedStops = [...Array.isArray(op.stops) ? op.stops : [{\n\t\tposition: 0,\n\t\tcolor: \"#000000\"\n\t}, {\n\t\tposition: 1,\n\t\tcolor: \"#ffffff\"\n\t}]].sort((a, b) => a.position - b.position);\n\tconst numStops = Math.min(Math.max(sortedStops.length, 2), 16);\n\tconst opacityHandleId = op.opacityHandleId;\n\tconst opacitySignalInput = opacityHandleId ? op.inputs?.[opacityHandleId] : null;\n\tconst hasOpacitySig = !!(opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Signal\");\n\tconst opacitySigData = hasOpacitySig ? opacitySignalInput?.outputItem?.data : null;\n\tlet opacityVal = Number(op.opacity ?? 1);\n\tif (!hasOpacitySig && opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Number\") opacityVal = Number(opacitySignalInput.outputItem.data ?? 1);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet opacityView;\n\tif (hasOpacitySig && opacitySigData) opacityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, opacitySigData.nodeId ?? \"gradient_map_opacity\", elapsedSeconds, durationSeconds, opacitySigData, width, height, props.renderId, frame, fps);\n\telse opacityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = numStops;\n\tuniformBufferData[1] = op.smooth === false ? 0 : 1;\n\tuniformBufferData[2] = op.dither === false ? 0 : 1;\n\tuniformBufferData[3] = opacityVal;\n\tuniformBufferData[4] = hasOpacitySig ? 1 : 0;\n\tuniformBufferData[5] = 0;\n\tuniformBufferData[6] = 0;\n\tuniformBufferData[7] = 0;\n\tfor (let i = 0; i < 16; i++) {\n\t\tconst stop = sortedStops[Math.min(i, numStops - 1)];\n\t\tconst baseIdx = 8 + i * 8;\n\t\tconst parsed = parseColor(stop.color);\n\t\tuniformBufferData[baseIdx + 0] = stop.position;\n\t\tuniformBufferData[baseIdx + 1] = 0;\n\t\tuniformBufferData[baseIdx + 2] = 0;\n\t\tuniformBufferData[baseIdx + 3] = 0;\n\t\tuniformBufferData[baseIdx + 4] = parsed.r;\n\t\tuniformBufferData[baseIdx + 5] = parsed.g;\n\t\tuniformBufferData[baseIdx + 6] = parsed.b;\n\t\tuniformBufferData[baseIdx + 7] = parsed.a;\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalLayout } = getGradientMapResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\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: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: signalLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: opacityView\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, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };\n\n//#endregion\nexport { GradientMapWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DDdRKrlK.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-DOL2i2sR.mjs";
|
|
2
2
|
import { Rt as getFingerprint } from "./dist-C8XSqfTx.mjs";
|
|
3
3
|
import { n as defineRenderer } from "./renderer-BuvKGwk3.mjs";
|
|
4
|
-
import { W as lutStore } from "./dist
|
|
4
|
+
import { W as lutStore } from "./dist--Uu5bQ_6.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-47y12Z37.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BqUAyzCZ.mjs","names":[],"sources":["../../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs"],"sourcesContent":["import { getFingerprint } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { lutStore } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst extractionCache = /* @__PURE__ */ new Map();\nconst pendingExtractions = /* @__PURE__ */ new Map();\nconst latestRequestedFingerprint = /* @__PURE__ */ new Map();\nconst activeTextures = /* @__PURE__ */ new Map();\nconst pipelineCache = /* @__PURE__ */ new WeakMap();\n/**\n* Lazily compiles and caches the two WGSL compute shaders per device.\n*\n* Both shaders write a flat array of f32 triples (R,G,B) for every cell of a\n* `lutSize³` cube. The host uploads whatever small set of parameters is needed\n* (RBF weights OR LAB statistics), then reads the result back as a typed array\n* that can be forwarded to `lutStore.createOrUpdate`.\n*\n* Workgroup size 8×8×4 = 256 threads maps cleanly onto lutSize=33 with\n* ceil(33/8)=5 groups on X/Y and ceil(33/4)=9 on Z → 5×5×9 = 225 dispatches.\n*/\nfunction getOrCreatePipelines(device) {\n\tconst cached = pipelineCache.get(device);\n\tif (cached) return cached;\n\tconst pipelines = {\n\t\trbf: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Params {\n\tlutSize : u32,\n\tnumSamples : u32,\n\tepsilonSq : f32,\n}\n\n@group(0) @binding(0) var<uniform> params : Params;\n@group(0) @binding(1) var<storage, read> srcPoints : array<vec4f>; // [numSamples]\n@group(0) @binding(2) var<storage, read> weights : array<vec4f>; // [numSamples]\n@group(0) @binding(3) var<storage, read> poly : array<vec4f>; // [4]\n@group(0) @binding(4) var<storage, read_write> lut : array<f32>; // [lutSize³ * 3]\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = params.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\tlet p = vec3f(inR, inG, inB);\n\n\t// Polynomial part: poly[0] + poly[1]*r + poly[2]*g + poly[3]*b\n\tvar out = poly[0].xyz + poly[1].xyz * inR + poly[2].xyz * inG + poly[3].xyz * inB;\n\n\t// RBF sum\n\tlet eps = params.epsilonSq;\n\tlet M = params.numSamples;\n\tvar minDistSq = 1e10;\n\tvar rbfSum = vec3f(0.0);\n\tfor (var i = 0u; i < M; i++) {\n\t\tlet d = p - srcPoints[i].xyz;\n\t\tlet dSq = dot(d, d);\n\t\tminDistSq = min(minDistSq, dSq);\n\t\tlet phi = sqrt(dSq + eps);\n\t\trbfSum += weights[i].xyz * phi;\n\t}\n\n\t// Smoothly fade out RBF weight contribution for regions far from samples\n\t// starts fading at distance 0.25 (dist^2 = 0.0625), fully faded at 0.5 (dist^2 = 0.25)\n\tlet rbfFade = clamp(1.0 - (minDistSq - 0.0625) / (0.25 - 0.0625), 0.0, 1.0);\n\tout += rbfSum * rbfFade;\n\n\t// Smoothly blend the entire mapping towards identity for regions extremely far from samples\n\t// starts blending at distance 0.35 (dist^2 = 0.1225), fully identity at 0.65 (dist^2 = 0.4225)\n\tlet identityBlend = clamp((minDistSq - 0.1225) / (0.4225 - 0.1225), 0.0, 1.0);\n\tout = mix(out, p, identityBlend);\n\n\t// Clamp + write\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = clamp(out.r, 0.0, 1.0);\n\tlut[cell + 1u] = clamp(out.g, 0.0, 1.0);\n\tlut[cell + 2u] = clamp(out.b, 0.0, 1.0);\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t}),\n\t\tstatistical: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Stats {\n\tsrcMean : vec4f, // (meanL, meanA, meanB, pad) of source\n\ttgtMean : vec4f, // (meanL, meanA, meanB, pad) of target\n\tscale : vec4f, // tgtStd / srcStd per channel\n\tlutSize : u32,\n}\n\n@group(0) @binding(0) var<uniform> stats : Stats;\n@group(0) @binding(1) var<storage, read_write> lut : array<f32>;\n\n// Constants matching the Reinhard/rgbToLab implementation\nconst INV_SQRT3 : f32 = 0.57735026919; // 1 / sqrt(3)\nconst INV_SQRT6 : f32 = 0.40824829046; // 1 / sqrt(6)\nconst INV_SQRT2 : f32 = 0.70710678118; // 1 / sqrt(2)\n\nfn safeLog10(v : f32) -> f32 {\n\treturn log(max(v, 1e-5)) * 0.43429448190; // log10(x) = ln(x) / ln(10)\n}\n\nfn rgbToLab(rgb : vec3f) -> vec3f {\n\tlet R = max(rgb.r, 1e-5);\n\tlet G = max(rgb.g, 1e-5);\n\tlet B = max(rgb.b, 1e-5);\n\n\tlet Lms_L = safeLog10(0.3811 * R + 0.5783 * G + 0.0402 * B);\n\tlet Lms_M = safeLog10(0.1967 * R + 0.7244 * G + 0.0782 * B);\n\tlet Lms_S = safeLog10(0.0241 * R + 0.1288 * G + 0.8444 * B);\n\n\treturn vec3f(\n\t\t(Lms_L + Lms_M + Lms_S) * INV_SQRT3,\n\t\t(Lms_L + Lms_M - 2.0 * Lms_S) * INV_SQRT6,\n\t\t(Lms_L - Lms_M) * INV_SQRT2,\n\t);\n}\n\nfn labToRgb(lab : vec3f) -> vec3f {\n\tlet l = lab.x; let a = lab.y; let b = lab.z;\n\n\tlet L_log = l * INV_SQRT3 + a * INV_SQRT6 + b * INV_SQRT2;\n\tlet M_log = l * INV_SQRT3 + a * INV_SQRT6 - b * INV_SQRT2;\n\tlet S_log = l * INV_SQRT3 - 2.0 * a * INV_SQRT6;\n\n\tlet L = pow(10.0, L_log);\n\tlet M = pow(10.0, M_log);\n\tlet S = pow(10.0, S_log);\n\n\treturn clamp(vec3f(\n\t\t 4.4679 * L - 3.5873 * M + 0.1193 * S,\n\t\t-1.2186 * L + 2.3809 * M - 0.1624 * S,\n\t\t 0.0497 * L - 0.2439 * M + 1.2045 * S,\n\t), vec3f(0.0), vec3f(1.0));\n}\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = stats.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\n\tlet lab = rgbToLab(vec3f(inR, inG, inB));\n\tlet mapped = stats.scale.xyz * (lab - stats.srcMean.xyz) + stats.tgtMean.xyz;\n\tlet rgb = labToRgb(mapped);\n\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = rgb.r;\n\tlut[cell + 1u] = rgb.g;\n\tlut[cell + 2u] = rgb.b;\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t})\n\t};\n\tpipelineCache.set(device, pipelines);\n\treturn pipelines;\n}\nfunction solveLU(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t;\n\t\t\t}\n\t\t\tfor (let col = 0; col < 3; col++) {\n\t\t\t\tconst i1 = i * 3 + col, i2 = pivotRow * 3 + col;\n\t\t\t\tconst t = B[i1];\n\t\t\t\tB[i1] = B[i2];\n\t\t\t\tB[i2] = t;\n\t\t\t}\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tfor (let col = 0; col < 3; col++) B[r * 3 + col] -= factor * B[i * 3 + col];\n\t\t}\n\t}\n\tconst X = new Float64Array(n * 3);\n\tfor (let col = 0; col < 3; col++) for (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i * 3 + col];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j * 3 + col];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i * 3 + col] = sum / denom;\n\t}\n\treturn X;\n}\nfunction hasAbsurdCoefficients(X_sol) {\n\tfor (let i = 0; i < X_sol.length; i++) {\n\t\tconst val = X_sol[i];\n\t\tif (Number.isNaN(val) || !Number.isFinite(val) || Math.abs(val) > 1e5) return true;\n\t}\n\treturn false;\n}\nfunction solveLU1D(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t$1 = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t$1;\n\t\t\t}\n\t\t\tconst t = B[i];\n\t\t\tB[i] = B[pivotRow];\n\t\t\tB[pivotRow] = t;\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tB[r] -= factor * B[i];\n\t\t}\n\t}\n\tconst X = new Float64Array(n);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i] = sum / denom;\n\t}\n\treturn X;\n}\nfunction solve1DChannel(srcVals, tgtVals, epsilonSq) {\n\tconst M = srcVals.length;\n\tconst H = M + 2;\n\tconst K_mat = new Float64Array(H * H);\n\tconst B_rhs = new Float64Array(H);\n\tfor (let i = 0; i < M; i++) {\n\t\tconst xi = srcVals[i];\n\t\tB_rhs[i] = tgtVals[i];\n\t\tfor (let j = 0; j < M; j++) {\n\t\t\tconst dx = xi - srcVals[j];\n\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + epsilonSq);\n\t\t}\n\t\tK_mat[i * H + M + 0] = 1;\n\t\tK_mat[i * H + M + 1] = xi;\n\t\tK_mat[(M + 0) * H + i] = 1;\n\t\tK_mat[(M + 1) * H + i] = xi;\n\t}\n\tlet diagMean = 0;\n\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\tdiagMean /= M;\n\tconst lambda = Math.max(1e-4, diagMean * .01);\n\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\tfor (let k = 0; k < 2; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\treturn solveLU1D(K_mat, B_rhs, H);\n}\nfunction evaluate1DChannel(srcVals, X_sol, epsilonSq, lutSize) {\n\tconst M = srcVals.length;\n\tconst out = new Float32Array(lutSize);\n\tfor (let cell = 0; cell < lutSize; cell++) {\n\t\tconst p = cell / (lutSize - 1);\n\t\tlet minDistSq = 1e10;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tminDistSq = Math.min(minDistSq, dx * dx);\n\t\t}\n\t\tlet rbfSum = 0;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tconst phi = Math.sqrt(dx * dx + epsilonSq);\n\t\t\trbfSum += X_sol[i] * phi;\n\t\t}\n\t\tconst rbfFade = Math.max(0, Math.min(1, 1 - (minDistSq - .0625) / .1875));\n\t\tlet val = X_sol[M + 0] + X_sol[M + 1] * p + rbfSum * rbfFade;\n\t\tconst identityBlend = Math.max(0, Math.min(1, (minDistSq - .1225) / .3));\n\t\tval = val * (1 - identityBlend) + p * identityBlend;\n\t\tout[cell] = Math.max(0, Math.min(1, val));\n\t}\n\treturn out;\n}\nfunction isSeparableOperationTree(vv, sourceMedia) {\n\tconst sourceFingerprint = getFingerprint(sourceMedia);\n\tlet current = vv;\n\twhile (current) {\n\t\tconst op = current.operation;\n\t\tif (!op) break;\n\t\tconst mediaToFingerprint = {\n\t\t\t...current,\n\t\t\tmetadata: {},\n\t\t\toperation: current.operation ? { ...current.operation } : void 0\n\t\t};\n\t\tif (mediaToFingerprint.operation) delete mediaToFingerprint.operation.lutUrl;\n\t\tif (getFingerprint(mediaToFingerprint) === sourceFingerprint) return true;\n\t\tif (op.op === \"source\") return false;\n\t\tif (op.op === \"Curves\") {\n\t\t\tif (op.curveType !== \"rgb\") return false;\n\t\t} else if (op.op === \"Levels\") {} else return false;\n\t\tif (current.children && current.children.length > 0) current = current.children[0];\n\t\telse break;\n\t}\n\treturn false;\n}\nfunction rgbToLab(r, g, b) {\n\tconst R = Math.max(1e-5, r), G = Math.max(1e-5, g), B = Math.max(1e-5, b);\n\tconst L = Math.log10(Math.max(1e-5, .3811 * R + .5783 * G + .0402 * B));\n\tconst M = Math.log10(Math.max(1e-5, .1967 * R + .7244 * G + .0782 * B));\n\tconst S = Math.log10(Math.max(1e-5, .0241 * R + .1288 * G + .8444 * B));\n\treturn [\n\t\t(L + M + S) / Math.sqrt(3),\n\t\t(L + M - 2 * S) / Math.sqrt(6),\n\t\t(L - M) / Math.sqrt(2)\n\t];\n}\nfunction getPixelRGB(pixels, idx, isBGRA) {\n\tconst o = idx * 4;\n\tconst rIdx = isBGRA ? o + 2 : o;\n\tconst bIdx = isBGRA ? o : o + 2;\n\treturn [\n\t\tpixels[rIdx] / 255,\n\t\tpixels[o + 1] / 255,\n\t\tpixels[bIdx] / 255\n\t];\n}\nfunction hashString(str) {\n\tlet hash = 5381;\n\tfor (let i = 0; i < str.length; i++) hash = hash * 33 ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\nvar SeededRandom = class {\n\tstate;\n\tconstructor(seed) {\n\t\tthis.state = seed || 1;\n\t}\n\tnext() {\n\t\tthis.state = (this.state * 1664525 + 1013904223) % 4294967296;\n\t\treturn this.state / 4294967296;\n\t}\n};\nfunction seededShuffle(array, seed) {\n\tconst rng = new SeededRandom(seed);\n\tconst shuffled = [...array];\n\tfor (let i = shuffled.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rng.next() * (i + 1));\n\t\tconst temp = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\treturn shuffled;\n}\nfunction buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, gridResolution = 20) {\n\tconst occupied = /* @__PURE__ */ new Set();\n\tconst pool = [];\n\tconst numPixels = srcPixels.length / 4;\n\tfor (let i = 0; i < numPixels; i++) {\n\t\tconst src = getPixelRGB(srcPixels, i, isBGRA);\n\t\tconst r = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[0] * gridResolution)));\n\t\tconst g = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[1] * gridResolution)));\n\t\tconst b = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[2] * gridResolution)));\n\t\tconst cellKey = r * gridResolution * gridResolution + g * gridResolution + b;\n\t\tif (!occupied.has(cellKey)) {\n\t\t\toccupied.add(cellKey);\n\t\t\tpool.push({\n\t\t\t\tsrc,\n\t\t\t\ttgt: getPixelRGB(tgtPixels, i, isBGRA)\n\t\t\t});\n\t\t}\n\t}\n\treturn pool;\n}\n/**\n* Evaluates the fitted RBF on the GPU.\n*\n* CPU work that remains:\n* • Build K matrix O(M²) – tiny (≈ 162×162)\n* • solveLU O(M³) – tiny\n*\n* GPU work (replaces the triple-nested JS loop):\n* • 33³ = 35 937 threads × M inner iterations → ~5.7 M parallel MADs\n*\n* Returns a plain Float32Array of length lutSize³×3 for lutStore.\n*/\nasync function evaluateRbfOnGpu(device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq) {\n\tconst M = sampledPoints.length;\n\tconst totalCells = lutSize * lutSize * lutSize;\n\tconst wgs = 8;\n\tconst srcPointsData = new Float32Array(M * 4);\n\tconst weightsData = new Float32Array(M * 4);\n\tfor (let i = 0; i < M; i++) {\n\t\tsrcPointsData[i * 4 + 0] = sampledPoints[i].src[0];\n\t\tsrcPointsData[i * 4 + 1] = sampledPoints[i].src[1];\n\t\tsrcPointsData[i * 4 + 2] = sampledPoints[i].src[2];\n\t\tsrcPointsData[i * 4 + 3] = 0;\n\t\tweightsData[i * 4 + 0] = X_sol[i * 3 + 0];\n\t\tweightsData[i * 4 + 1] = X_sol[i * 3 + 1];\n\t\tweightsData[i * 4 + 2] = X_sol[i * 3 + 2];\n\t\tweightsData[i * 4 + 3] = 0;\n\t}\n\tconst polyData = new Float32Array(16);\n\tfor (let k = 0; k < 4; k++) {\n\t\tpolyData[k * 4 + 0] = X_sol[(M + k) * 3 + 0];\n\t\tpolyData[k * 4 + 1] = X_sol[(M + k) * 3 + 1];\n\t\tpolyData[k * 4 + 2] = X_sol[(M + k) * 3 + 2];\n\t\tpolyData[k * 4 + 3] = 0;\n\t}\n\tconst paramsBuffer = device.createBuffer({\n\t\tsize: 16,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tconst paramsData = /* @__PURE__ */ new ArrayBuffer(16);\n\tnew Uint32Array(paramsData, 0, 2).set([lutSize, M]);\n\tnew Float32Array(paramsData, 8, 1).set([epsilonSq]);\n\tdevice.queue.writeBuffer(paramsBuffer, 0, paramsData);\n\tconst srcPointsBuf = upload(device, srcPointsData);\n\tconst weightsBuf = upload(device, weightsData);\n\tconst polyBuf = upload(device, polyData);\n\tconst lutByteSize = totalCells * 3 * 4;\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.rbf.getBindGroupLayout(0),\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: paramsBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: srcPointsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: weightsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: polyBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: lutBuf }\n\t\t\t}\n\t\t]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"rbf-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.rbf);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / wgs);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tparamsBuffer.destroy();\n\tsrcPointsBuf.destroy();\n\tweightsBuf.destroy();\n\tpolyBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/**\n* Generates the statistical LAB-transfer LUT entirely on the GPU.\n* The only CPU work is computing 6 scalars (mean/std per LAB channel).\n*/\nasync function evaluateStatisticalOnGpu(device, pipelines, srcMean, tgtMean, scale, lutSize) {\n\tconst lutByteSize = lutSize * lutSize * lutSize * 3 * 4;\n\tconst statsData = /* @__PURE__ */ new ArrayBuffer(64);\n\tconst f = new Float32Array(statsData);\n\tconst u = new Uint32Array(statsData);\n\tf[0] = srcMean[0];\n\tf[1] = srcMean[1];\n\tf[2] = srcMean[2];\n\tf[4] = tgtMean[0];\n\tf[5] = tgtMean[1];\n\tf[6] = tgtMean[2];\n\tf[8] = scale[0];\n\tf[9] = scale[1];\n\tf[10] = scale[2];\n\tu[12] = lutSize;\n\tconst statsBuf = device.createBuffer({\n\t\tsize: 64,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(statsBuf, 0, statsData);\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.statistical.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: statsBuf }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: { buffer: lutBuf }\n\t\t}]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"stat-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.statistical);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / 8);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tstatsBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/** Uploads a Float32Array into a storage-readable GPUBuffer. */\nfunction upload(device, data) {\n\tconst buf = device.createBuffer({\n\t\tsize: Math.max(data.byteLength, 16),\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(buf, 0, data);\n\treturn buf;\n}\n/**\n* Converts a flat Float32Array [R0,G0,B0, R1,G1,B1 …] returned from the GPU\n* into the tuple array expected by `lutStore.createOrUpdate`.\n*/\nfunction flatToPoints(flat) {\n\tconst n = flat.length / 3;\n\tconst out = new Array(n);\n\tfor (let i = 0; i < n; i++) out[i] = [\n\t\tflat[i * 3],\n\t\tflat[i * 3 + 1],\n\t\tflat[i * 3 + 2]\n\t];\n\treturn out;\n}\nconst ExtractLutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ExtractLUT\" || !op) return;\n\tconst nodeId = op.nodeId ?? props.renderId;\n\tconst mediaToFingerprint = {\n\t\t...props.virtualMedia,\n\t\tmetadata: {},\n\t\toperation: props.virtualMedia?.operation ? { ...props.virtualMedia.operation } : void 0\n\t};\n\tif (mediaToFingerprint.operation) {\n\t\tdelete mediaToFingerprint.operation.lutUrl;\n\t\tdelete mediaToFingerprint.operation.timeline;\n\t\tdelete mediaToFingerprint.operation.startFrame;\n\t}\n\tconst lutUrl = op.lutUrl ?? `runtime://lut/extract-lut-${nodeId}-${getFingerprint(mediaToFingerprint)}`;\n\tconst fingerprint = lutUrl.startsWith(`runtime://lut/extract-lut-${nodeId}-`) ? lutUrl.slice(`runtime://lut/extract-lut-${nodeId}-`.length) : getFingerprint(mediaToFingerprint);\n\tconst cacheKey = `${nodeId}-${fingerprint}`;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tconst targetMedia = props.virtualMedia?.children?.[1];\n\tif (!sourceMedia || !targetMedia) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tconst strategy = op.strategy ?? \"deterministic\";\n\tconst samplePoints = op.samplePoints ?? 150;\n\tconst gridSize = 64;\n\tconst numPixels = gridSize * gridSize;\n\tif (extractionCache.get(nodeId) === fingerprint && lutStore.get(lutUrl, ctx.device)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (pendingExtractions.has(cacheKey)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tlatestRequestedFingerprint.set(nodeId, fingerprint);\n\tpass.end();\n\tlutStore.getOrLoad(lutUrl, ctx.device);\n\tconst prev = activeTextures.get(nodeId);\n\tif (prev) {\n\t\tconst toDestroy = prev;\n\t\tctx.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\ttry {\n\t\t\t\ttoDestroy.srcTex.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttoDestroy.tgtTex.destroy();\n\t\t\t} catch {}\n\t\t});\n\t\tactiveTextures.delete(nodeId);\n\t}\n\tconst srcTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-src-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tctx.renderer.beginFrame(encoder, srcTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c0`,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, srcTex.createView(), srcTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst tgtTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-tgt-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tactiveTextures.set(nodeId, {\n\t\tsrcTex,\n\t\ttgtTex\n\t});\n\tctx.renderer.beginFrame(encoder, tgtTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(targetMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c1`,\n\t\tvirtualMedia: targetMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, tgtTex.createView(), tgtTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst bytesPerPixel = 4;\n\tconst align = 256;\n\tconst unpaddedBPR = gridSize * bytesPerPixel;\n\tconst bytesPerRow = Math.ceil(unpaddedBPR / align) * align;\n\tconst stagingSize = bytesPerRow * gridSize;\n\tconst srcStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-src-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst tgtStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-tgt-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tencoder.copyTextureToBuffer({ texture: srcTex }, {\n\t\tbuffer: srcStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tencoder.copyTextureToBuffer({ texture: tgtTex }, {\n\t\tbuffer: tgtStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tlet startMapping = () => {};\n\tconst mainSubmitPromise = new Promise((resolve) => {\n\t\tstartMapping = resolve;\n\t});\n\tconst originalSubmit = ctx.device.queue.submit;\n\tctx.device.queue.submit = function(commandBuffers) {\n\t\tctx.device.queue.submit = originalSubmit;\n\t\toriginalSubmit.call(this, commandBuffers);\n\t\tstartMapping();\n\t};\n\tconst extractionPromise = (async () => {\n\t\ttry {\n\t\t\tawait mainSubmitPromise;\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\ttry {\n\t\t\t\t\tsrcStagingBuffer.destroy();\n\t\t\t\t\ttgtStagingBuffer.destroy();\n\t\t\t\t} catch {}\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ctx.device.queue.onSubmittedWorkDone();\n\t\t\tawait Promise.all([srcStagingBuffer.mapAsync(GPUMapMode.READ), tgtStagingBuffer.mapAsync(GPUMapMode.READ)]);\n\t\t\tconst srcPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst tgtPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst copyRows = (src, dst) => {\n\t\t\t\tif (bytesPerRow === unpaddedBPR) dst.set(src);\n\t\t\t\telse for (let y = 0; y < gridSize; y++) dst.set(src.subarray(y * bytesPerRow, y * bytesPerRow + unpaddedBPR), y * unpaddedBPR);\n\t\t\t};\n\t\t\tcopyRows(new Uint8Array(srcStagingBuffer.getMappedRange()), srcPixels);\n\t\t\tcopyRows(new Uint8Array(tgtStagingBuffer.getMappedRange()), tgtPixels);\n\t\t\tsrcStagingBuffer.unmap();\n\t\t\tsrcStagingBuffer.destroy();\n\t\t\ttgtStagingBuffer.unmap();\n\t\t\ttgtStagingBuffer.destroy();\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superceded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst isBGRA = ctx.renderer.format === \"bgra8unorm\" || ctx.renderer.format === \"bgra8unorm-srgb\";\n\t\t\tconst lutSize = 33;\n\t\t\tconst pipelines = getOrCreatePipelines(ctx.device);\n\t\t\tlet flat = null;\n\t\t\tlet succeeded = false;\n\t\t\tif (strategy === \"deterministic\") {\n\t\t\t\tconst shuffled = seededShuffle(buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, 20), hashString(getFingerprint({\n\t\t\t\t\t...props.virtualMedia,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\toperation: void 0\n\t\t\t\t})));\n\t\t\t\tconst sampledPoints = shuffled.slice(0, Math.min(shuffled.length, samplePoints));\n\t\t\t\tconst M = sampledPoints.length;\n\t\t\t\tif (M >= 8) {\n\t\t\t\t\tif (isSeparableOperationTree(targetMedia, sourceMedia)) {\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst srcR = sampledPoints.map((p) => p.src[0]);\n\t\t\t\t\t\tconst tgtR = sampledPoints.map((p) => p.tgt[0]);\n\t\t\t\t\t\tconst srcG = sampledPoints.map((p) => p.src[1]);\n\t\t\t\t\t\tconst tgtG = sampledPoints.map((p) => p.tgt[1]);\n\t\t\t\t\t\tconst srcB = sampledPoints.map((p) => p.src[2]);\n\t\t\t\t\t\tconst tgtB = sampledPoints.map((p) => p.tgt[2]);\n\t\t\t\t\t\tconst X_sol_R = solve1DChannel(srcR, tgtR, epsilonSq);\n\t\t\t\t\t\tconst X_sol_G = solve1DChannel(srcG, tgtG, epsilonSq);\n\t\t\t\t\t\tconst X_sol_B = solve1DChannel(srcB, tgtB, epsilonSq);\n\t\t\t\t\t\tif (X_sol_R && !hasAbsurdCoefficients(X_sol_R) && X_sol_G && !hasAbsurdCoefficients(X_sol_G) && X_sol_B && !hasAbsurdCoefficients(X_sol_B)) {\n\t\t\t\t\t\t\tconst lutR = evaluate1DChannel(srcR, X_sol_R, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutG = evaluate1DChannel(srcG, X_sol_G, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutB = evaluate1DChannel(srcB, X_sol_B, epsilonSq, lutSize);\n\t\t\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\t\t\tflat[idx + 0] = lutR[r];\n\t\t\t\t\t\t\t\tflat[idx + 1] = lutG[g];\n\t\t\t\t\t\t\t\tflat[idx + 2] = lutB[b];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsucceeded = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!succeeded) {\n\t\t\t\t\t\tconst H = M + 4;\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tconst dy = sampledPoints[i].src[1] - sampledPoints[j].src[1];\n\t\t\t\t\t\t\t\tconst dz = sampledPoints[i].src[2] - sampledPoints[j].src[2];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx + dy * dy + dz * dz);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst K_mat = new Float64Array(H * H);\n\t\t\t\t\t\tconst B_rhs = new Float64Array(H * 3);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tconst pi = sampledPoints[i].src;\n\t\t\t\t\t\t\tconst gi = sampledPoints[i].tgt;\n\t\t\t\t\t\t\tB_rhs[i * 3 + 0] = gi[0];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 1] = gi[1];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 2] = gi[2];\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tconst pj = sampledPoints[j].src;\n\t\t\t\t\t\t\t\tconst dx = pi[0] - pj[0], dy = pi[1] - pj[1], dz = pi[2] - pj[2];\n\t\t\t\t\t\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + dy * dy + dz * dz + epsilonSq);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tK_mat[i * H + M + 0] = 1;\n\t\t\t\t\t\t\tK_mat[i * H + M + 1] = pi[0];\n\t\t\t\t\t\t\tK_mat[i * H + M + 2] = pi[1];\n\t\t\t\t\t\t\tK_mat[i * H + M + 3] = pi[2];\n\t\t\t\t\t\t\tK_mat[(M + 0) * H + i] = 1;\n\t\t\t\t\t\t\tK_mat[(M + 1) * H + i] = pi[0];\n\t\t\t\t\t\t\tK_mat[(M + 2) * H + i] = pi[1];\n\t\t\t\t\t\t\tK_mat[(M + 3) * H + i] = pi[2];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet diagMean = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\t\t\t\t\t\tdiagMean /= M;\n\t\t\t\t\t\tconst lambda = Math.max(1e-4, diagMean * .01);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\t\t\t\t\t\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\t\t\t\t\t\tfor (let k = 0; k < 4; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\t\t\t\t\t\tconst X_sol = solveLU(K_mat, B_rhs, H);\n\t\t\t\t\t\tif (X_sol && !hasAbsurdCoefficients(X_sol)) try {\n\t\t\t\t\t\t\tflat = await evaluateRbfOnGpu(ctx.device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq);\n\t\t\t\t\t\t\tlet hasInvalid = false;\n\t\t\t\t\t\t\tfor (let i = 0; i < flat.length; i++) {\n\t\t\t\t\t\t\t\tconst val = flat[i];\n\t\t\t\t\t\t\t\tif (Number.isNaN(val) || !Number.isFinite(val)) {\n\t\t\t\t\t\t\t\t\thasInvalid = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!hasInvalid) succeeded = true;\n\t\t\t\t\t\t} catch (gpuErr) {\n\t\t\t\t\t\t\tconsole.error(\"[ExtractLUT] RBF GPU evaluation failed:\", gpuErr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!succeeded) {\n\t\t\t\tlet srcMeanL = 0, srcMeanA = 0, srcMeanB = 0;\n\t\t\t\tlet tgtMeanL = 0, tgtMeanA = 0, tgtMeanB = 0;\n\t\t\t\tconst srcLABs = [];\n\t\t\t\tconst tgtLABs = [];\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tconst sl = rgbToLab(...getPixelRGB(srcPixels, i, isBGRA));\n\t\t\t\t\tsrcLABs.push(sl);\n\t\t\t\t\tsrcMeanL += sl[0];\n\t\t\t\t\tsrcMeanA += sl[1];\n\t\t\t\t\tsrcMeanB += sl[2];\n\t\t\t\t\tconst tl = rgbToLab(...getPixelRGB(tgtPixels, i, isBGRA));\n\t\t\t\t\ttgtLABs.push(tl);\n\t\t\t\t\ttgtMeanL += tl[0];\n\t\t\t\t\ttgtMeanA += tl[1];\n\t\t\t\t\ttgtMeanB += tl[2];\n\t\t\t\t}\n\t\t\t\tsrcMeanL /= numPixels;\n\t\t\t\tsrcMeanA /= numPixels;\n\t\t\t\tsrcMeanB /= numPixels;\n\t\t\t\ttgtMeanL /= numPixels;\n\t\t\t\ttgtMeanA /= numPixels;\n\t\t\t\ttgtMeanB /= numPixels;\n\t\t\t\tlet srcStdL = 0, srcStdA = 0, srcStdB = 0;\n\t\t\t\tlet tgtStdL = 0, tgtStdA = 0, tgtStdB = 0;\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tsrcStdL += (srcLABs[i][0] - srcMeanL) ** 2;\n\t\t\t\t\tsrcStdA += (srcLABs[i][1] - srcMeanA) ** 2;\n\t\t\t\t\tsrcStdB += (srcLABs[i][2] - srcMeanB) ** 2;\n\t\t\t\t\ttgtStdL += (tgtLABs[i][0] - tgtMeanL) ** 2;\n\t\t\t\t\ttgtStdA += (tgtLABs[i][1] - tgtMeanA) ** 2;\n\t\t\t\t\ttgtStdB += (tgtLABs[i][2] - tgtMeanB) ** 2;\n\t\t\t\t}\n\t\t\t\tsrcStdL = Math.max(Math.sqrt(srcStdL / numPixels), 1e-6);\n\t\t\t\tsrcStdA = Math.max(Math.sqrt(srcStdA / numPixels), 1e-6);\n\t\t\t\tsrcStdB = Math.max(Math.sqrt(srcStdB / numPixels), 1e-6);\n\t\t\t\ttgtStdL = Math.sqrt(tgtStdL / numPixels);\n\t\t\t\ttgtStdA = Math.sqrt(tgtStdA / numPixels);\n\t\t\t\ttgtStdB = Math.sqrt(tgtStdB / numPixels);\n\t\t\t\tif (srcStdL < 1e-4 || srcMeanL < 1e-4) {\n\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\tflat[idx + 0] = r / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 1] = g / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 2] = b / (lutSize - 1);\n\t\t\t\t\t}\n\t\t\t\t} else flat = await evaluateStatisticalOnGpu(ctx.device, pipelines, [\n\t\t\t\t\tsrcMeanL,\n\t\t\t\t\tsrcMeanA,\n\t\t\t\t\tsrcMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtMeanL,\n\t\t\t\t\ttgtMeanA,\n\t\t\t\t\ttgtMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtStdL / srcStdL,\n\t\t\t\t\ttgtStdA / srcStdA,\n\t\t\t\t\ttgtStdB / srcStdB\n\t\t\t\t], lutSize);\n\t\t\t}\n\t\t\tconst smoothedPoints = flatToPoints(flat);\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, smoothedPoints, lutSize, \"3D\");\n\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[ExtractLUT] Async extraction error:\", err);\n\t\t\ttry {\n\t\t\t\tconst lutSize = 33;\n\t\t\t\tconst identityPoints = [];\n\t\t\t\tfor (let z = 0; z < lutSize; z++) for (let y = 0; y < lutSize; y++) for (let x = 0; x < lutSize; x++) identityPoints.push([\n\t\t\t\t\tx / (lutSize - 1),\n\t\t\t\t\ty / (lutSize - 1),\n\t\t\t\t\tz / (lutSize - 1)\n\t\t\t\t]);\n\t\t\t\tif (latestRequestedFingerprint.get(nodeId) === fingerprint) {\n\t\t\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, identityPoints, lutSize, \"3D\");\n\t\t\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t\t\t}\n\t\t\t} catch (fallbackErr) {\n\t\t\t\tconsole.error(\"[ExtractLUT] Failed to write fallback identity LUT:\", fallbackErr);\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, err);\n\t\t\t}\n\t\t} finally {\n\t\t\tpendingExtractions.delete(cacheKey);\n\t\t}\n\t})();\n\tpendingExtractions.set(cacheKey, extractionPromise);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CDotFzd9.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-47y12Z37.mjs","names":[],"sources":["../../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs"],"sourcesContent":["import { getFingerprint } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { lutStore } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst extractionCache = /* @__PURE__ */ new Map();\nconst pendingExtractions = /* @__PURE__ */ new Map();\nconst latestRequestedFingerprint = /* @__PURE__ */ new Map();\nconst activeTextures = /* @__PURE__ */ new Map();\nconst pipelineCache = /* @__PURE__ */ new WeakMap();\n/**\n* Lazily compiles and caches the two WGSL compute shaders per device.\n*\n* Both shaders write a flat array of f32 triples (R,G,B) for every cell of a\n* `lutSize³` cube. The host uploads whatever small set of parameters is needed\n* (RBF weights OR LAB statistics), then reads the result back as a typed array\n* that can be forwarded to `lutStore.createOrUpdate`.\n*\n* Workgroup size 8×8×4 = 256 threads maps cleanly onto lutSize=33 with\n* ceil(33/8)=5 groups on X/Y and ceil(33/4)=9 on Z → 5×5×9 = 225 dispatches.\n*/\nfunction getOrCreatePipelines(device) {\n\tconst cached = pipelineCache.get(device);\n\tif (cached) return cached;\n\tconst pipelines = {\n\t\trbf: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Params {\n\tlutSize : u32,\n\tnumSamples : u32,\n\tepsilonSq : f32,\n}\n\n@group(0) @binding(0) var<uniform> params : Params;\n@group(0) @binding(1) var<storage, read> srcPoints : array<vec4f>; // [numSamples]\n@group(0) @binding(2) var<storage, read> weights : array<vec4f>; // [numSamples]\n@group(0) @binding(3) var<storage, read> poly : array<vec4f>; // [4]\n@group(0) @binding(4) var<storage, read_write> lut : array<f32>; // [lutSize³ * 3]\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = params.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\tlet p = vec3f(inR, inG, inB);\n\n\t// Polynomial part: poly[0] + poly[1]*r + poly[2]*g + poly[3]*b\n\tvar out = poly[0].xyz + poly[1].xyz * inR + poly[2].xyz * inG + poly[3].xyz * inB;\n\n\t// RBF sum\n\tlet eps = params.epsilonSq;\n\tlet M = params.numSamples;\n\tvar minDistSq = 1e10;\n\tvar rbfSum = vec3f(0.0);\n\tfor (var i = 0u; i < M; i++) {\n\t\tlet d = p - srcPoints[i].xyz;\n\t\tlet dSq = dot(d, d);\n\t\tminDistSq = min(minDistSq, dSq);\n\t\tlet phi = sqrt(dSq + eps);\n\t\trbfSum += weights[i].xyz * phi;\n\t}\n\n\t// Smoothly fade out RBF weight contribution for regions far from samples\n\t// starts fading at distance 0.25 (dist^2 = 0.0625), fully faded at 0.5 (dist^2 = 0.25)\n\tlet rbfFade = clamp(1.0 - (minDistSq - 0.0625) / (0.25 - 0.0625), 0.0, 1.0);\n\tout += rbfSum * rbfFade;\n\n\t// Smoothly blend the entire mapping towards identity for regions extremely far from samples\n\t// starts blending at distance 0.35 (dist^2 = 0.1225), fully identity at 0.65 (dist^2 = 0.4225)\n\tlet identityBlend = clamp((minDistSq - 0.1225) / (0.4225 - 0.1225), 0.0, 1.0);\n\tout = mix(out, p, identityBlend);\n\n\t// Clamp + write\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = clamp(out.r, 0.0, 1.0);\n\tlut[cell + 1u] = clamp(out.g, 0.0, 1.0);\n\tlut[cell + 2u] = clamp(out.b, 0.0, 1.0);\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t}),\n\t\tstatistical: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Stats {\n\tsrcMean : vec4f, // (meanL, meanA, meanB, pad) of source\n\ttgtMean : vec4f, // (meanL, meanA, meanB, pad) of target\n\tscale : vec4f, // tgtStd / srcStd per channel\n\tlutSize : u32,\n}\n\n@group(0) @binding(0) var<uniform> stats : Stats;\n@group(0) @binding(1) var<storage, read_write> lut : array<f32>;\n\n// Constants matching the Reinhard/rgbToLab implementation\nconst INV_SQRT3 : f32 = 0.57735026919; // 1 / sqrt(3)\nconst INV_SQRT6 : f32 = 0.40824829046; // 1 / sqrt(6)\nconst INV_SQRT2 : f32 = 0.70710678118; // 1 / sqrt(2)\n\nfn safeLog10(v : f32) -> f32 {\n\treturn log(max(v, 1e-5)) * 0.43429448190; // log10(x) = ln(x) / ln(10)\n}\n\nfn rgbToLab(rgb : vec3f) -> vec3f {\n\tlet R = max(rgb.r, 1e-5);\n\tlet G = max(rgb.g, 1e-5);\n\tlet B = max(rgb.b, 1e-5);\n\n\tlet Lms_L = safeLog10(0.3811 * R + 0.5783 * G + 0.0402 * B);\n\tlet Lms_M = safeLog10(0.1967 * R + 0.7244 * G + 0.0782 * B);\n\tlet Lms_S = safeLog10(0.0241 * R + 0.1288 * G + 0.8444 * B);\n\n\treturn vec3f(\n\t\t(Lms_L + Lms_M + Lms_S) * INV_SQRT3,\n\t\t(Lms_L + Lms_M - 2.0 * Lms_S) * INV_SQRT6,\n\t\t(Lms_L - Lms_M) * INV_SQRT2,\n\t);\n}\n\nfn labToRgb(lab : vec3f) -> vec3f {\n\tlet l = lab.x; let a = lab.y; let b = lab.z;\n\n\tlet L_log = l * INV_SQRT3 + a * INV_SQRT6 + b * INV_SQRT2;\n\tlet M_log = l * INV_SQRT3 + a * INV_SQRT6 - b * INV_SQRT2;\n\tlet S_log = l * INV_SQRT3 - 2.0 * a * INV_SQRT6;\n\n\tlet L = pow(10.0, L_log);\n\tlet M = pow(10.0, M_log);\n\tlet S = pow(10.0, S_log);\n\n\treturn clamp(vec3f(\n\t\t 4.4679 * L - 3.5873 * M + 0.1193 * S,\n\t\t-1.2186 * L + 2.3809 * M - 0.1624 * S,\n\t\t 0.0497 * L - 0.2439 * M + 1.2045 * S,\n\t), vec3f(0.0), vec3f(1.0));\n}\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = stats.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\n\tlet lab = rgbToLab(vec3f(inR, inG, inB));\n\tlet mapped = stats.scale.xyz * (lab - stats.srcMean.xyz) + stats.tgtMean.xyz;\n\tlet rgb = labToRgb(mapped);\n\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = rgb.r;\n\tlut[cell + 1u] = rgb.g;\n\tlut[cell + 2u] = rgb.b;\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t})\n\t};\n\tpipelineCache.set(device, pipelines);\n\treturn pipelines;\n}\nfunction solveLU(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t;\n\t\t\t}\n\t\t\tfor (let col = 0; col < 3; col++) {\n\t\t\t\tconst i1 = i * 3 + col, i2 = pivotRow * 3 + col;\n\t\t\t\tconst t = B[i1];\n\t\t\t\tB[i1] = B[i2];\n\t\t\t\tB[i2] = t;\n\t\t\t}\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tfor (let col = 0; col < 3; col++) B[r * 3 + col] -= factor * B[i * 3 + col];\n\t\t}\n\t}\n\tconst X = new Float64Array(n * 3);\n\tfor (let col = 0; col < 3; col++) for (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i * 3 + col];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j * 3 + col];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i * 3 + col] = sum / denom;\n\t}\n\treturn X;\n}\nfunction hasAbsurdCoefficients(X_sol) {\n\tfor (let i = 0; i < X_sol.length; i++) {\n\t\tconst val = X_sol[i];\n\t\tif (Number.isNaN(val) || !Number.isFinite(val) || Math.abs(val) > 1e5) return true;\n\t}\n\treturn false;\n}\nfunction solveLU1D(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t$1 = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t$1;\n\t\t\t}\n\t\t\tconst t = B[i];\n\t\t\tB[i] = B[pivotRow];\n\t\t\tB[pivotRow] = t;\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tB[r] -= factor * B[i];\n\t\t}\n\t}\n\tconst X = new Float64Array(n);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i] = sum / denom;\n\t}\n\treturn X;\n}\nfunction solve1DChannel(srcVals, tgtVals, epsilonSq) {\n\tconst M = srcVals.length;\n\tconst H = M + 2;\n\tconst K_mat = new Float64Array(H * H);\n\tconst B_rhs = new Float64Array(H);\n\tfor (let i = 0; i < M; i++) {\n\t\tconst xi = srcVals[i];\n\t\tB_rhs[i] = tgtVals[i];\n\t\tfor (let j = 0; j < M; j++) {\n\t\t\tconst dx = xi - srcVals[j];\n\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + epsilonSq);\n\t\t}\n\t\tK_mat[i * H + M + 0] = 1;\n\t\tK_mat[i * H + M + 1] = xi;\n\t\tK_mat[(M + 0) * H + i] = 1;\n\t\tK_mat[(M + 1) * H + i] = xi;\n\t}\n\tlet diagMean = 0;\n\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\tdiagMean /= M;\n\tconst lambda = Math.max(1e-4, diagMean * .01);\n\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\tfor (let k = 0; k < 2; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\treturn solveLU1D(K_mat, B_rhs, H);\n}\nfunction evaluate1DChannel(srcVals, X_sol, epsilonSq, lutSize) {\n\tconst M = srcVals.length;\n\tconst out = new Float32Array(lutSize);\n\tfor (let cell = 0; cell < lutSize; cell++) {\n\t\tconst p = cell / (lutSize - 1);\n\t\tlet minDistSq = 1e10;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tminDistSq = Math.min(minDistSq, dx * dx);\n\t\t}\n\t\tlet rbfSum = 0;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tconst phi = Math.sqrt(dx * dx + epsilonSq);\n\t\t\trbfSum += X_sol[i] * phi;\n\t\t}\n\t\tconst rbfFade = Math.max(0, Math.min(1, 1 - (minDistSq - .0625) / .1875));\n\t\tlet val = X_sol[M + 0] + X_sol[M + 1] * p + rbfSum * rbfFade;\n\t\tconst identityBlend = Math.max(0, Math.min(1, (minDistSq - .1225) / .3));\n\t\tval = val * (1 - identityBlend) + p * identityBlend;\n\t\tout[cell] = Math.max(0, Math.min(1, val));\n\t}\n\treturn out;\n}\nfunction isSeparableOperationTree(vv, sourceMedia) {\n\tconst sourceFingerprint = getFingerprint(sourceMedia);\n\tlet current = vv;\n\twhile (current) {\n\t\tconst op = current.operation;\n\t\tif (!op) break;\n\t\tconst mediaToFingerprint = {\n\t\t\t...current,\n\t\t\tmetadata: {},\n\t\t\toperation: current.operation ? { ...current.operation } : void 0\n\t\t};\n\t\tif (mediaToFingerprint.operation) delete mediaToFingerprint.operation.lutUrl;\n\t\tif (getFingerprint(mediaToFingerprint) === sourceFingerprint) return true;\n\t\tif (op.op === \"source\") return false;\n\t\tif (op.op === \"Curves\") {\n\t\t\tif (op.curveType !== \"rgb\") return false;\n\t\t} else if (op.op === \"Levels\") {} else return false;\n\t\tif (current.children && current.children.length > 0) current = current.children[0];\n\t\telse break;\n\t}\n\treturn false;\n}\nfunction rgbToLab(r, g, b) {\n\tconst R = Math.max(1e-5, r), G = Math.max(1e-5, g), B = Math.max(1e-5, b);\n\tconst L = Math.log10(Math.max(1e-5, .3811 * R + .5783 * G + .0402 * B));\n\tconst M = Math.log10(Math.max(1e-5, .1967 * R + .7244 * G + .0782 * B));\n\tconst S = Math.log10(Math.max(1e-5, .0241 * R + .1288 * G + .8444 * B));\n\treturn [\n\t\t(L + M + S) / Math.sqrt(3),\n\t\t(L + M - 2 * S) / Math.sqrt(6),\n\t\t(L - M) / Math.sqrt(2)\n\t];\n}\nfunction getPixelRGB(pixels, idx, isBGRA) {\n\tconst o = idx * 4;\n\tconst rIdx = isBGRA ? o + 2 : o;\n\tconst bIdx = isBGRA ? o : o + 2;\n\treturn [\n\t\tpixels[rIdx] / 255,\n\t\tpixels[o + 1] / 255,\n\t\tpixels[bIdx] / 255\n\t];\n}\nfunction hashString(str) {\n\tlet hash = 5381;\n\tfor (let i = 0; i < str.length; i++) hash = hash * 33 ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\nvar SeededRandom = class {\n\tstate;\n\tconstructor(seed) {\n\t\tthis.state = seed || 1;\n\t}\n\tnext() {\n\t\tthis.state = (this.state * 1664525 + 1013904223) % 4294967296;\n\t\treturn this.state / 4294967296;\n\t}\n};\nfunction seededShuffle(array, seed) {\n\tconst rng = new SeededRandom(seed);\n\tconst shuffled = [...array];\n\tfor (let i = shuffled.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rng.next() * (i + 1));\n\t\tconst temp = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\treturn shuffled;\n}\nfunction buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, gridResolution = 20) {\n\tconst occupied = /* @__PURE__ */ new Set();\n\tconst pool = [];\n\tconst numPixels = srcPixels.length / 4;\n\tfor (let i = 0; i < numPixels; i++) {\n\t\tconst src = getPixelRGB(srcPixels, i, isBGRA);\n\t\tconst r = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[0] * gridResolution)));\n\t\tconst g = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[1] * gridResolution)));\n\t\tconst b = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[2] * gridResolution)));\n\t\tconst cellKey = r * gridResolution * gridResolution + g * gridResolution + b;\n\t\tif (!occupied.has(cellKey)) {\n\t\t\toccupied.add(cellKey);\n\t\t\tpool.push({\n\t\t\t\tsrc,\n\t\t\t\ttgt: getPixelRGB(tgtPixels, i, isBGRA)\n\t\t\t});\n\t\t}\n\t}\n\treturn pool;\n}\n/**\n* Evaluates the fitted RBF on the GPU.\n*\n* CPU work that remains:\n* • Build K matrix O(M²) – tiny (≈ 162×162)\n* • solveLU O(M³) – tiny\n*\n* GPU work (replaces the triple-nested JS loop):\n* • 33³ = 35 937 threads × M inner iterations → ~5.7 M parallel MADs\n*\n* Returns a plain Float32Array of length lutSize³×3 for lutStore.\n*/\nasync function evaluateRbfOnGpu(device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq) {\n\tconst M = sampledPoints.length;\n\tconst totalCells = lutSize * lutSize * lutSize;\n\tconst wgs = 8;\n\tconst srcPointsData = new Float32Array(M * 4);\n\tconst weightsData = new Float32Array(M * 4);\n\tfor (let i = 0; i < M; i++) {\n\t\tsrcPointsData[i * 4 + 0] = sampledPoints[i].src[0];\n\t\tsrcPointsData[i * 4 + 1] = sampledPoints[i].src[1];\n\t\tsrcPointsData[i * 4 + 2] = sampledPoints[i].src[2];\n\t\tsrcPointsData[i * 4 + 3] = 0;\n\t\tweightsData[i * 4 + 0] = X_sol[i * 3 + 0];\n\t\tweightsData[i * 4 + 1] = X_sol[i * 3 + 1];\n\t\tweightsData[i * 4 + 2] = X_sol[i * 3 + 2];\n\t\tweightsData[i * 4 + 3] = 0;\n\t}\n\tconst polyData = new Float32Array(16);\n\tfor (let k = 0; k < 4; k++) {\n\t\tpolyData[k * 4 + 0] = X_sol[(M + k) * 3 + 0];\n\t\tpolyData[k * 4 + 1] = X_sol[(M + k) * 3 + 1];\n\t\tpolyData[k * 4 + 2] = X_sol[(M + k) * 3 + 2];\n\t\tpolyData[k * 4 + 3] = 0;\n\t}\n\tconst paramsBuffer = device.createBuffer({\n\t\tsize: 16,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tconst paramsData = /* @__PURE__ */ new ArrayBuffer(16);\n\tnew Uint32Array(paramsData, 0, 2).set([lutSize, M]);\n\tnew Float32Array(paramsData, 8, 1).set([epsilonSq]);\n\tdevice.queue.writeBuffer(paramsBuffer, 0, paramsData);\n\tconst srcPointsBuf = upload(device, srcPointsData);\n\tconst weightsBuf = upload(device, weightsData);\n\tconst polyBuf = upload(device, polyData);\n\tconst lutByteSize = totalCells * 3 * 4;\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.rbf.getBindGroupLayout(0),\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: paramsBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: srcPointsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: weightsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: polyBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: lutBuf }\n\t\t\t}\n\t\t]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"rbf-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.rbf);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / wgs);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tparamsBuffer.destroy();\n\tsrcPointsBuf.destroy();\n\tweightsBuf.destroy();\n\tpolyBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/**\n* Generates the statistical LAB-transfer LUT entirely on the GPU.\n* The only CPU work is computing 6 scalars (mean/std per LAB channel).\n*/\nasync function evaluateStatisticalOnGpu(device, pipelines, srcMean, tgtMean, scale, lutSize) {\n\tconst lutByteSize = lutSize * lutSize * lutSize * 3 * 4;\n\tconst statsData = /* @__PURE__ */ new ArrayBuffer(64);\n\tconst f = new Float32Array(statsData);\n\tconst u = new Uint32Array(statsData);\n\tf[0] = srcMean[0];\n\tf[1] = srcMean[1];\n\tf[2] = srcMean[2];\n\tf[4] = tgtMean[0];\n\tf[5] = tgtMean[1];\n\tf[6] = tgtMean[2];\n\tf[8] = scale[0];\n\tf[9] = scale[1];\n\tf[10] = scale[2];\n\tu[12] = lutSize;\n\tconst statsBuf = device.createBuffer({\n\t\tsize: 64,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(statsBuf, 0, statsData);\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.statistical.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: statsBuf }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: { buffer: lutBuf }\n\t\t}]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"stat-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.statistical);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / 8);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tstatsBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/** Uploads a Float32Array into a storage-readable GPUBuffer. */\nfunction upload(device, data) {\n\tconst buf = device.createBuffer({\n\t\tsize: Math.max(data.byteLength, 16),\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(buf, 0, data);\n\treturn buf;\n}\n/**\n* Converts a flat Float32Array [R0,G0,B0, R1,G1,B1 …] returned from the GPU\n* into the tuple array expected by `lutStore.createOrUpdate`.\n*/\nfunction flatToPoints(flat) {\n\tconst n = flat.length / 3;\n\tconst out = new Array(n);\n\tfor (let i = 0; i < n; i++) out[i] = [\n\t\tflat[i * 3],\n\t\tflat[i * 3 + 1],\n\t\tflat[i * 3 + 2]\n\t];\n\treturn out;\n}\nconst ExtractLutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ExtractLUT\" || !op) return;\n\tconst nodeId = op.nodeId ?? props.renderId;\n\tconst mediaToFingerprint = {\n\t\t...props.virtualMedia,\n\t\tmetadata: {},\n\t\toperation: props.virtualMedia?.operation ? { ...props.virtualMedia.operation } : void 0\n\t};\n\tif (mediaToFingerprint.operation) {\n\t\tdelete mediaToFingerprint.operation.lutUrl;\n\t\tdelete mediaToFingerprint.operation.timeline;\n\t\tdelete mediaToFingerprint.operation.startFrame;\n\t}\n\tconst lutUrl = op.lutUrl ?? `runtime://lut/extract-lut-${nodeId}-${getFingerprint(mediaToFingerprint)}`;\n\tconst fingerprint = lutUrl.startsWith(`runtime://lut/extract-lut-${nodeId}-`) ? lutUrl.slice(`runtime://lut/extract-lut-${nodeId}-`.length) : getFingerprint(mediaToFingerprint);\n\tconst cacheKey = `${nodeId}-${fingerprint}`;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tconst targetMedia = props.virtualMedia?.children?.[1];\n\tif (!sourceMedia || !targetMedia) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tconst strategy = op.strategy ?? \"deterministic\";\n\tconst samplePoints = op.samplePoints ?? 150;\n\tconst gridSize = 64;\n\tconst numPixels = gridSize * gridSize;\n\tif (extractionCache.get(nodeId) === fingerprint && lutStore.get(lutUrl, ctx.device)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (pendingExtractions.has(cacheKey)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tlatestRequestedFingerprint.set(nodeId, fingerprint);\n\tpass.end();\n\tlutStore.getOrLoad(lutUrl, ctx.device);\n\tconst prev = activeTextures.get(nodeId);\n\tif (prev) {\n\t\tconst toDestroy = prev;\n\t\tctx.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\ttry {\n\t\t\t\ttoDestroy.srcTex.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttoDestroy.tgtTex.destroy();\n\t\t\t} catch {}\n\t\t});\n\t\tactiveTextures.delete(nodeId);\n\t}\n\tconst srcTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-src-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tctx.renderer.beginFrame(encoder, srcTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c0`,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, srcTex.createView(), srcTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst tgtTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-tgt-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tactiveTextures.set(nodeId, {\n\t\tsrcTex,\n\t\ttgtTex\n\t});\n\tctx.renderer.beginFrame(encoder, tgtTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(targetMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c1`,\n\t\tvirtualMedia: targetMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, tgtTex.createView(), tgtTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst bytesPerPixel = 4;\n\tconst align = 256;\n\tconst unpaddedBPR = gridSize * bytesPerPixel;\n\tconst bytesPerRow = Math.ceil(unpaddedBPR / align) * align;\n\tconst stagingSize = bytesPerRow * gridSize;\n\tconst srcStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-src-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst tgtStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-tgt-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tencoder.copyTextureToBuffer({ texture: srcTex }, {\n\t\tbuffer: srcStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tencoder.copyTextureToBuffer({ texture: tgtTex }, {\n\t\tbuffer: tgtStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tlet startMapping = () => {};\n\tconst mainSubmitPromise = new Promise((resolve) => {\n\t\tstartMapping = resolve;\n\t});\n\tconst originalSubmit = ctx.device.queue.submit;\n\tctx.device.queue.submit = function(commandBuffers) {\n\t\tctx.device.queue.submit = originalSubmit;\n\t\toriginalSubmit.call(this, commandBuffers);\n\t\tstartMapping();\n\t};\n\tconst extractionPromise = (async () => {\n\t\ttry {\n\t\t\tawait mainSubmitPromise;\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\ttry {\n\t\t\t\t\tsrcStagingBuffer.destroy();\n\t\t\t\t\ttgtStagingBuffer.destroy();\n\t\t\t\t} catch {}\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ctx.device.queue.onSubmittedWorkDone();\n\t\t\tawait Promise.all([srcStagingBuffer.mapAsync(GPUMapMode.READ), tgtStagingBuffer.mapAsync(GPUMapMode.READ)]);\n\t\t\tconst srcPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst tgtPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst copyRows = (src, dst) => {\n\t\t\t\tif (bytesPerRow === unpaddedBPR) dst.set(src);\n\t\t\t\telse for (let y = 0; y < gridSize; y++) dst.set(src.subarray(y * bytesPerRow, y * bytesPerRow + unpaddedBPR), y * unpaddedBPR);\n\t\t\t};\n\t\t\tcopyRows(new Uint8Array(srcStagingBuffer.getMappedRange()), srcPixels);\n\t\t\tcopyRows(new Uint8Array(tgtStagingBuffer.getMappedRange()), tgtPixels);\n\t\t\tsrcStagingBuffer.unmap();\n\t\t\tsrcStagingBuffer.destroy();\n\t\t\ttgtStagingBuffer.unmap();\n\t\t\ttgtStagingBuffer.destroy();\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superceded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst isBGRA = ctx.renderer.format === \"bgra8unorm\" || ctx.renderer.format === \"bgra8unorm-srgb\";\n\t\t\tconst lutSize = 33;\n\t\t\tconst pipelines = getOrCreatePipelines(ctx.device);\n\t\t\tlet flat = null;\n\t\t\tlet succeeded = false;\n\t\t\tif (strategy === \"deterministic\") {\n\t\t\t\tconst shuffled = seededShuffle(buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, 20), hashString(getFingerprint({\n\t\t\t\t\t...props.virtualMedia,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\toperation: void 0\n\t\t\t\t})));\n\t\t\t\tconst sampledPoints = shuffled.slice(0, Math.min(shuffled.length, samplePoints));\n\t\t\t\tconst M = sampledPoints.length;\n\t\t\t\tif (M >= 8) {\n\t\t\t\t\tif (isSeparableOperationTree(targetMedia, sourceMedia)) {\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst srcR = sampledPoints.map((p) => p.src[0]);\n\t\t\t\t\t\tconst tgtR = sampledPoints.map((p) => p.tgt[0]);\n\t\t\t\t\t\tconst srcG = sampledPoints.map((p) => p.src[1]);\n\t\t\t\t\t\tconst tgtG = sampledPoints.map((p) => p.tgt[1]);\n\t\t\t\t\t\tconst srcB = sampledPoints.map((p) => p.src[2]);\n\t\t\t\t\t\tconst tgtB = sampledPoints.map((p) => p.tgt[2]);\n\t\t\t\t\t\tconst X_sol_R = solve1DChannel(srcR, tgtR, epsilonSq);\n\t\t\t\t\t\tconst X_sol_G = solve1DChannel(srcG, tgtG, epsilonSq);\n\t\t\t\t\t\tconst X_sol_B = solve1DChannel(srcB, tgtB, epsilonSq);\n\t\t\t\t\t\tif (X_sol_R && !hasAbsurdCoefficients(X_sol_R) && X_sol_G && !hasAbsurdCoefficients(X_sol_G) && X_sol_B && !hasAbsurdCoefficients(X_sol_B)) {\n\t\t\t\t\t\t\tconst lutR = evaluate1DChannel(srcR, X_sol_R, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutG = evaluate1DChannel(srcG, X_sol_G, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutB = evaluate1DChannel(srcB, X_sol_B, epsilonSq, lutSize);\n\t\t\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\t\t\tflat[idx + 0] = lutR[r];\n\t\t\t\t\t\t\t\tflat[idx + 1] = lutG[g];\n\t\t\t\t\t\t\t\tflat[idx + 2] = lutB[b];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsucceeded = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!succeeded) {\n\t\t\t\t\t\tconst H = M + 4;\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tconst dy = sampledPoints[i].src[1] - sampledPoints[j].src[1];\n\t\t\t\t\t\t\t\tconst dz = sampledPoints[i].src[2] - sampledPoints[j].src[2];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx + dy * dy + dz * dz);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst K_mat = new Float64Array(H * H);\n\t\t\t\t\t\tconst B_rhs = new Float64Array(H * 3);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tconst pi = sampledPoints[i].src;\n\t\t\t\t\t\t\tconst gi = sampledPoints[i].tgt;\n\t\t\t\t\t\t\tB_rhs[i * 3 + 0] = gi[0];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 1] = gi[1];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 2] = gi[2];\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tconst pj = sampledPoints[j].src;\n\t\t\t\t\t\t\t\tconst dx = pi[0] - pj[0], dy = pi[1] - pj[1], dz = pi[2] - pj[2];\n\t\t\t\t\t\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + dy * dy + dz * dz + epsilonSq);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tK_mat[i * H + M + 0] = 1;\n\t\t\t\t\t\t\tK_mat[i * H + M + 1] = pi[0];\n\t\t\t\t\t\t\tK_mat[i * H + M + 2] = pi[1];\n\t\t\t\t\t\t\tK_mat[i * H + M + 3] = pi[2];\n\t\t\t\t\t\t\tK_mat[(M + 0) * H + i] = 1;\n\t\t\t\t\t\t\tK_mat[(M + 1) * H + i] = pi[0];\n\t\t\t\t\t\t\tK_mat[(M + 2) * H + i] = pi[1];\n\t\t\t\t\t\t\tK_mat[(M + 3) * H + i] = pi[2];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet diagMean = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\t\t\t\t\t\tdiagMean /= M;\n\t\t\t\t\t\tconst lambda = Math.max(1e-4, diagMean * .01);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\t\t\t\t\t\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\t\t\t\t\t\tfor (let k = 0; k < 4; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\t\t\t\t\t\tconst X_sol = solveLU(K_mat, B_rhs, H);\n\t\t\t\t\t\tif (X_sol && !hasAbsurdCoefficients(X_sol)) try {\n\t\t\t\t\t\t\tflat = await evaluateRbfOnGpu(ctx.device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq);\n\t\t\t\t\t\t\tlet hasInvalid = false;\n\t\t\t\t\t\t\tfor (let i = 0; i < flat.length; i++) {\n\t\t\t\t\t\t\t\tconst val = flat[i];\n\t\t\t\t\t\t\t\tif (Number.isNaN(val) || !Number.isFinite(val)) {\n\t\t\t\t\t\t\t\t\thasInvalid = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!hasInvalid) succeeded = true;\n\t\t\t\t\t\t} catch (gpuErr) {\n\t\t\t\t\t\t\tconsole.error(\"[ExtractLUT] RBF GPU evaluation failed:\", gpuErr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!succeeded) {\n\t\t\t\tlet srcMeanL = 0, srcMeanA = 0, srcMeanB = 0;\n\t\t\t\tlet tgtMeanL = 0, tgtMeanA = 0, tgtMeanB = 0;\n\t\t\t\tconst srcLABs = [];\n\t\t\t\tconst tgtLABs = [];\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tconst sl = rgbToLab(...getPixelRGB(srcPixels, i, isBGRA));\n\t\t\t\t\tsrcLABs.push(sl);\n\t\t\t\t\tsrcMeanL += sl[0];\n\t\t\t\t\tsrcMeanA += sl[1];\n\t\t\t\t\tsrcMeanB += sl[2];\n\t\t\t\t\tconst tl = rgbToLab(...getPixelRGB(tgtPixels, i, isBGRA));\n\t\t\t\t\ttgtLABs.push(tl);\n\t\t\t\t\ttgtMeanL += tl[0];\n\t\t\t\t\ttgtMeanA += tl[1];\n\t\t\t\t\ttgtMeanB += tl[2];\n\t\t\t\t}\n\t\t\t\tsrcMeanL /= numPixels;\n\t\t\t\tsrcMeanA /= numPixels;\n\t\t\t\tsrcMeanB /= numPixels;\n\t\t\t\ttgtMeanL /= numPixels;\n\t\t\t\ttgtMeanA /= numPixels;\n\t\t\t\ttgtMeanB /= numPixels;\n\t\t\t\tlet srcStdL = 0, srcStdA = 0, srcStdB = 0;\n\t\t\t\tlet tgtStdL = 0, tgtStdA = 0, tgtStdB = 0;\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tsrcStdL += (srcLABs[i][0] - srcMeanL) ** 2;\n\t\t\t\t\tsrcStdA += (srcLABs[i][1] - srcMeanA) ** 2;\n\t\t\t\t\tsrcStdB += (srcLABs[i][2] - srcMeanB) ** 2;\n\t\t\t\t\ttgtStdL += (tgtLABs[i][0] - tgtMeanL) ** 2;\n\t\t\t\t\ttgtStdA += (tgtLABs[i][1] - tgtMeanA) ** 2;\n\t\t\t\t\ttgtStdB += (tgtLABs[i][2] - tgtMeanB) ** 2;\n\t\t\t\t}\n\t\t\t\tsrcStdL = Math.max(Math.sqrt(srcStdL / numPixels), 1e-6);\n\t\t\t\tsrcStdA = Math.max(Math.sqrt(srcStdA / numPixels), 1e-6);\n\t\t\t\tsrcStdB = Math.max(Math.sqrt(srcStdB / numPixels), 1e-6);\n\t\t\t\ttgtStdL = Math.sqrt(tgtStdL / numPixels);\n\t\t\t\ttgtStdA = Math.sqrt(tgtStdA / numPixels);\n\t\t\t\ttgtStdB = Math.sqrt(tgtStdB / numPixels);\n\t\t\t\tif (srcStdL < 1e-4 || srcMeanL < 1e-4) {\n\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\tflat[idx + 0] = r / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 1] = g / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 2] = b / (lutSize - 1);\n\t\t\t\t\t}\n\t\t\t\t} else flat = await evaluateStatisticalOnGpu(ctx.device, pipelines, [\n\t\t\t\t\tsrcMeanL,\n\t\t\t\t\tsrcMeanA,\n\t\t\t\t\tsrcMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtMeanL,\n\t\t\t\t\ttgtMeanA,\n\t\t\t\t\ttgtMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtStdL / srcStdL,\n\t\t\t\t\ttgtStdA / srcStdA,\n\t\t\t\t\ttgtStdB / srcStdB\n\t\t\t\t], lutSize);\n\t\t\t}\n\t\t\tconst smoothedPoints = flatToPoints(flat);\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, smoothedPoints, lutSize, \"3D\");\n\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[ExtractLUT] Async extraction error:\", err);\n\t\t\ttry {\n\t\t\t\tconst lutSize = 33;\n\t\t\t\tconst identityPoints = [];\n\t\t\t\tfor (let z = 0; z < lutSize; z++) for (let y = 0; y < lutSize; y++) for (let x = 0; x < lutSize; x++) identityPoints.push([\n\t\t\t\t\tx / (lutSize - 1),\n\t\t\t\t\ty / (lutSize - 1),\n\t\t\t\t\tz / (lutSize - 1)\n\t\t\t\t]);\n\t\t\t\tif (latestRequestedFingerprint.get(nodeId) === fingerprint) {\n\t\t\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, identityPoints, lutSize, \"3D\");\n\t\t\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t\t\t}\n\t\t\t} catch (fallbackErr) {\n\t\t\t\tconsole.error(\"[ExtractLUT] Failed to write fallback identity LUT:\", fallbackErr);\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, err);\n\t\t\t}\n\t\t} finally {\n\t\t\tpendingExtractions.delete(cacheKey);\n\t\t}\n\t})();\n\tpendingExtractions.set(cacheKey, extractionPromise);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CDotFzd9.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BuvKGwk3.mjs";
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-R4T2Tndu.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-curves/dist/renderers-DzdBU1io.mjs
|
|
5
5
|
/**
|
|
@@ -639,4 +639,4 @@ var renderers_default = rendererNode;
|
|
|
639
639
|
|
|
640
640
|
//#endregion
|
|
641
641
|
export { renderers_default as n, rendererNode as t };
|
|
642
|
-
//# sourceMappingURL=renderer-
|
|
642
|
+
//# sourceMappingURL=renderer-B0yVUOPP.mjs.map
|