framefields 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +202 -0
- package/README.md +740 -0
- package/dist/audio/index.d.mts +5 -0
- package/dist/audio/index.mjs +14 -0
- package/dist/audio-Dvwwz8xU.d.mts +37 -0
- package/dist/audio-Dvwwz8xU.d.mts.map +1 -0
- package/dist/audio-TAvPwzLR.mjs +214 -0
- package/dist/audio-TAvPwzLR.mjs.map +1 -0
- package/dist/audio-x28ZgQBP.mjs +85 -0
- package/dist/audio-x28ZgQBP.mjs.map +1 -0
- package/dist/chunk-GMkBE123.mjs +47 -0
- package/dist/client-C74hb7fy.mjs +66 -0
- package/dist/client-C74hb7fy.mjs.map +1 -0
- package/dist/dist-1iUYuPct.mjs +1859 -0
- package/dist/dist-1iUYuPct.mjs.map +1 -0
- package/dist/dist-Bx6J0VcM.mjs +1859 -0
- package/dist/dist-Bx6J0VcM.mjs.map +1 -0
- package/dist/dist-C_hjvkdN.mjs +2220 -0
- package/dist/dist-C_hjvkdN.mjs.map +1 -0
- package/dist/dist-DKm2IyEJ.mjs +94 -0
- package/dist/dist-DKm2IyEJ.mjs.map +1 -0
- package/dist/dist-cjs-B5EVqDFp.mjs +85 -0
- package/dist/dist-cjs-B5EVqDFp.mjs.map +1 -0
- package/dist/dist-cjs-BGJkdexX.mjs +437 -0
- package/dist/dist-cjs-BGJkdexX.mjs.map +1 -0
- package/dist/dist-cjs-BKmGCgtm.mjs +9069 -0
- package/dist/dist-cjs-BKmGCgtm.mjs.map +1 -0
- package/dist/dist-cjs-BUc0_kg-.mjs +1091 -0
- package/dist/dist-cjs-BUc0_kg-.mjs.map +1 -0
- package/dist/dist-cjs-BUwe2XhR.mjs +153 -0
- package/dist/dist-cjs-BUwe2XhR.mjs.map +1 -0
- package/dist/dist-cjs-BWgoUCXJ.mjs +137 -0
- package/dist/dist-cjs-BWgoUCXJ.mjs.map +1 -0
- package/dist/dist-cjs-CmZEMtO6.mjs +6 -0
- package/dist/dist-cjs-D7kEM-Mj.mjs +181 -0
- package/dist/dist-cjs-D7kEM-Mj.mjs.map +1 -0
- package/dist/dist-cjs-DFUmy89O.mjs +48 -0
- package/dist/dist-cjs-DFUmy89O.mjs.map +1 -0
- package/dist/dist-cjs-Df7144zM.mjs +209 -0
- package/dist/dist-cjs-Df7144zM.mjs.map +1 -0
- package/dist/dist-cjs-DgxjcvBN.mjs +98 -0
- package/dist/dist-cjs-DgxjcvBN.mjs.map +1 -0
- package/dist/dist-cjs-DsMdld8l.mjs +5015 -0
- package/dist/dist-cjs-DsMdld8l.mjs.map +1 -0
- package/dist/dist-cjs-Dzs5P3K0.mjs +51 -0
- package/dist/dist-cjs-Dzs5P3K0.mjs.map +1 -0
- package/dist/dist-cjs-ECMuIF57.mjs +323 -0
- package/dist/dist-cjs-ECMuIF57.mjs.map +1 -0
- package/dist/dist-cjs-lYvO8aDo.mjs +64 -0
- package/dist/dist-cjs-lYvO8aDo.mjs.map +1 -0
- package/dist/dist-cjs-qEJrwjGk.mjs +66 -0
- package/dist/dist-cjs-qEJrwjGk.mjs.map +1 -0
- package/dist/dist-cjs-x5cwlqA5.mjs +43 -0
- package/dist/dist-cjs-x5cwlqA5.mjs.map +1 -0
- package/dist/dist-gjHmorxL.mjs +27479 -0
- package/dist/dist-gjHmorxL.mjs.map +1 -0
- package/dist/effects/index.d.mts +5 -0
- package/dist/effects/index.mjs +35 -0
- package/dist/effects-CHWORCYd.mjs +811 -0
- package/dist/effects-CHWORCYd.mjs.map +1 -0
- package/dist/event-streams-D-APZ7Ke.mjs +204 -0
- package/dist/event-streams-D-APZ7Ke.mjs.map +1 -0
- package/dist/fonts/index.d.mts +2 -0
- package/dist/fonts/index.mjs +3 -0
- package/dist/fonts-DrGTBJJk.mjs +188 -0
- package/dist/fonts-DrGTBJJk.mjs.map +1 -0
- package/dist/index-B0BNPEoH.d.mts +2117 -0
- package/dist/index-B0BNPEoH.d.mts.map +1 -0
- package/dist/index-BMVVmc4G.d.mts +72 -0
- package/dist/index-BMVVmc4G.d.mts.map +1 -0
- package/dist/index-D1ZsMpke.d.mts +264 -0
- package/dist/index-D1ZsMpke.d.mts.map +1 -0
- package/dist/index-D2jDC7O5.d.mts +3643 -0
- package/dist/index-D2jDC7O5.d.mts.map +1 -0
- package/dist/index-D2wJqSl5.d.mts +114 -0
- package/dist/index-D2wJqSl5.d.mts.map +1 -0
- package/dist/index-DKFGNyMB.d.mts +309 -0
- package/dist/index-DKFGNyMB.d.mts.map +1 -0
- package/dist/index-DiSKzDGR.d.mts +65 -0
- package/dist/index-DiSKzDGR.d.mts.map +1 -0
- package/dist/index.d.mts +4425 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2623 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package-C58KmGKw.mjs +6 -0
- package/dist/package-C58KmGKw.mjs.map +1 -0
- package/dist/preview/index.d.mts +90 -0
- package/dist/preview/index.d.mts.map +1 -0
- package/dist/preview/index.mjs +15 -0
- package/dist/preview-engine/audio.mjs +1 -0
- package/dist/preview-engine/child_process-AIL2NBWS.mjs +1 -0
- package/dist/preview-engine/chunk-24P6DAB3.mjs +1 -0
- package/dist/preview-engine/chunk-37EFVZWT.mjs +1 -0
- package/dist/preview-engine/chunk-3O5OKR6D.mjs +223 -0
- package/dist/preview-engine/chunk-47VT677S.mjs +8 -0
- package/dist/preview-engine/chunk-4BEJJKEU.mjs +315 -0
- package/dist/preview-engine/chunk-4GEWSUX5.mjs +1 -0
- package/dist/preview-engine/chunk-55CCFPUX.mjs +237 -0
- package/dist/preview-engine/chunk-5JD65JSJ.mjs +110 -0
- package/dist/preview-engine/chunk-5UP7FSGT.mjs +294 -0
- package/dist/preview-engine/chunk-5XDHHOF2.mjs +367 -0
- package/dist/preview-engine/chunk-6YJP57MZ.mjs +729 -0
- package/dist/preview-engine/chunk-6ZOXGAYA.mjs +112 -0
- package/dist/preview-engine/chunk-AOLAHYVV.mjs +529 -0
- package/dist/preview-engine/chunk-B6PLCMBM.mjs +1 -0
- package/dist/preview-engine/chunk-BJKH76OM.mjs +264 -0
- package/dist/preview-engine/chunk-BUIQ5TUH.mjs +104 -0
- package/dist/preview-engine/chunk-BVF64D6H.mjs +1 -0
- package/dist/preview-engine/chunk-CA5N7JRZ.mjs +138 -0
- package/dist/preview-engine/chunk-CNSHAFEA.mjs +1 -0
- package/dist/preview-engine/chunk-CURR5X7D.mjs +1 -0
- package/dist/preview-engine/chunk-CVGM2U4J.mjs +47 -0
- package/dist/preview-engine/chunk-CYY366IE.mjs +1 -0
- package/dist/preview-engine/chunk-D5PHI6ET.mjs +109 -0
- package/dist/preview-engine/chunk-D7MZHP2Y.mjs +275 -0
- package/dist/preview-engine/chunk-DPPH3NK2.mjs +182 -0
- package/dist/preview-engine/chunk-DPST2XLC.mjs +418 -0
- package/dist/preview-engine/chunk-DRLEOHN5.mjs +1 -0
- package/dist/preview-engine/chunk-EDIZNO3P.mjs +1 -0
- package/dist/preview-engine/chunk-EHIIT4ZR.mjs +52 -0
- package/dist/preview-engine/chunk-FKZ4XXPE.mjs +1 -0
- package/dist/preview-engine/chunk-G3HW4VER.mjs +60 -0
- package/dist/preview-engine/chunk-G76HSKOS.mjs +184 -0
- package/dist/preview-engine/chunk-GYG2IIBR.mjs +1 -0
- package/dist/preview-engine/chunk-H2F5NVQ6.mjs +63 -0
- package/dist/preview-engine/chunk-H5BPCY7N.mjs +188 -0
- package/dist/preview-engine/chunk-HAXK42HG.mjs +997 -0
- package/dist/preview-engine/chunk-HXMDPMLB.mjs +1 -0
- package/dist/preview-engine/chunk-HYBAPT6I.mjs +1 -0
- package/dist/preview-engine/chunk-I4FH6HYU.mjs +73 -0
- package/dist/preview-engine/chunk-IYVN2QEL.mjs +1 -0
- package/dist/preview-engine/chunk-JPXQPP6J.mjs +1 -0
- package/dist/preview-engine/chunk-JWNHTRED.mjs +164 -0
- package/dist/preview-engine/chunk-KZOLCZIV.mjs +103 -0
- package/dist/preview-engine/chunk-L62MRHGZ.mjs +89 -0
- package/dist/preview-engine/chunk-LEEZXHQO.mjs +117 -0
- package/dist/preview-engine/chunk-LKYN3BM2.mjs +1 -0
- package/dist/preview-engine/chunk-LP3EP33S.mjs +610 -0
- package/dist/preview-engine/chunk-M2GRYRLM.mjs +111 -0
- package/dist/preview-engine/chunk-MC7TZZLD.mjs +134 -0
- package/dist/preview-engine/chunk-MT2DZQHO.mjs +1 -0
- package/dist/preview-engine/chunk-MTJHQATU.mjs +1 -0
- package/dist/preview-engine/chunk-N4LHIPHZ.mjs +340 -0
- package/dist/preview-engine/chunk-N4PWLBZ7.mjs +5 -0
- package/dist/preview-engine/chunk-NQZKBFC6.mjs +40 -0
- package/dist/preview-engine/chunk-NWRSVVTF.mjs +186 -0
- package/dist/preview-engine/chunk-P3HBP725.mjs +1 -0
- package/dist/preview-engine/chunk-PIAJWALT.mjs +1 -0
- package/dist/preview-engine/chunk-PJ3DVG45.mjs +1 -0
- package/dist/preview-engine/chunk-QP2NI4XD.mjs +82 -0
- package/dist/preview-engine/chunk-SA3JUR6D.mjs +52 -0
- package/dist/preview-engine/chunk-SRT2OCQW.mjs +1 -0
- package/dist/preview-engine/chunk-SWD76532.mjs +98 -0
- package/dist/preview-engine/chunk-SXX7HX34.mjs +191 -0
- package/dist/preview-engine/chunk-SZ7YRPKO.mjs +3 -0
- package/dist/preview-engine/chunk-TMRLZV5X.mjs +1 -0
- package/dist/preview-engine/chunk-U446SQP3.mjs +292 -0
- package/dist/preview-engine/chunk-UDNCEHUI.mjs +141 -0
- package/dist/preview-engine/chunk-V3H7WWOT.mjs +271 -0
- package/dist/preview-engine/chunk-V7ZVVUQU.mjs +108 -0
- package/dist/preview-engine/chunk-VJGK7MLJ.mjs +3 -0
- package/dist/preview-engine/chunk-VSSB73UU.mjs +58 -0
- package/dist/preview-engine/chunk-VXUJWPIK.mjs +1 -0
- package/dist/preview-engine/chunk-XD4GKD6H.mjs +5 -0
- package/dist/preview-engine/chunk-XKO4RYKN.mjs +3 -0
- package/dist/preview-engine/chunk-XOEEGC4Z.mjs +1 -0
- package/dist/preview-engine/chunk-YAQFFQPG.mjs +1 -0
- package/dist/preview-engine/chunk-YKMBRUAE.mjs +1 -0
- package/dist/preview-engine/chunk-YSTLMWCG.mjs +1 -0
- package/dist/preview-engine/chunk-Z4ERCLNF.mjs +1 -0
- package/dist/preview-engine/chunk-ZEYUXJIV.mjs +1 -0
- package/dist/preview-engine/chunk-ZX6APG6E.mjs +117 -0
- package/dist/preview-engine/effects.mjs +1 -0
- package/dist/preview-engine/esbuild-GWV7CM7D.mjs +1 -0
- package/dist/preview-engine/fonts.mjs +1 -0
- package/dist/preview-engine/framefields.mjs +1959 -0
- package/dist/preview-engine/onnxruntime-node-56GSZEH3.mjs +1 -0
- package/dist/preview-engine/player.mjs +155 -0
- package/dist/preview-engine/renderers-2AUSIYZN.mjs +1 -0
- package/dist/preview-engine/renderers-2QN6KZJP.mjs +1 -0
- package/dist/preview-engine/renderers-32SKW7ML.mjs +1 -0
- package/dist/preview-engine/renderers-5QYK6766.mjs +1 -0
- package/dist/preview-engine/renderers-6BJA6MSU.mjs +251 -0
- package/dist/preview-engine/renderers-6QAF3LQ2.mjs +1 -0
- package/dist/preview-engine/renderers-7AO5746S.mjs +296 -0
- package/dist/preview-engine/renderers-AFYKNM6N.mjs +1 -0
- package/dist/preview-engine/renderers-AGMH5CRH.mjs +1 -0
- package/dist/preview-engine/renderers-AHSGP6LY.mjs +126 -0
- package/dist/preview-engine/renderers-ASTBICLA.mjs +1 -0
- package/dist/preview-engine/renderers-BHVPLYNN.mjs +1 -0
- package/dist/preview-engine/renderers-D7PVQFVU.mjs +1 -0
- package/dist/preview-engine/renderers-DB4ABTNA.mjs +1 -0
- package/dist/preview-engine/renderers-F2NFJI5L.mjs +1 -0
- package/dist/preview-engine/renderers-FI7YHNLY.mjs +1 -0
- package/dist/preview-engine/renderers-GBHULMPH.mjs +1 -0
- package/dist/preview-engine/renderers-GUKQUMGG.mjs +55 -0
- package/dist/preview-engine/renderers-HGT7QDY3.mjs +1 -0
- package/dist/preview-engine/renderers-HOYLA7ZK.mjs +1 -0
- package/dist/preview-engine/renderers-KKI2D3MZ.mjs +1 -0
- package/dist/preview-engine/renderers-KRAJNV4E.mjs +1 -0
- package/dist/preview-engine/renderers-KUGZKSVE.mjs +1 -0
- package/dist/preview-engine/renderers-L2EQQIOC.mjs +1 -0
- package/dist/preview-engine/renderers-LK3NRMGR.mjs +1 -0
- package/dist/preview-engine/renderers-LX654SZ3.mjs +1 -0
- package/dist/preview-engine/renderers-MCFQFYEL.mjs +1 -0
- package/dist/preview-engine/renderers-O6HOYIPS.mjs +1 -0
- package/dist/preview-engine/renderers-OEVXCGE2.mjs +1 -0
- package/dist/preview-engine/renderers-QVD6C4CS.mjs +1 -0
- package/dist/preview-engine/renderers-R3XEYD5V.mjs +248 -0
- package/dist/preview-engine/renderers-RBFWJWVM.mjs +1 -0
- package/dist/preview-engine/renderers-RX3VLVLO.mjs +1 -0
- package/dist/preview-engine/renderers-SM6JP64K.mjs +1 -0
- package/dist/preview-engine/renderers-TKMAATVS.mjs +1 -0
- package/dist/preview-engine/renderers-UGZUPONY.mjs +1 -0
- package/dist/preview-engine/renderers-UTFXZE3G.mjs +1 -0
- package/dist/preview-engine/renderers-UWPH7HBH.mjs +1 -0
- package/dist/preview-engine/renderers-UZGECFVO.mjs +1 -0
- package/dist/preview-engine/renderers-VGU3LNLT.mjs +1 -0
- package/dist/preview-engine/renderers-W3VVM5HB.mjs +1 -0
- package/dist/preview-engine/renderers-WJUTT5BB.mjs +1 -0
- package/dist/preview-engine/renderers-XA2M4YXK.mjs +1 -0
- package/dist/preview-engine/renderers-XIHRFEFQ.mjs +1 -0
- package/dist/preview-engine/renderers-XJTA5MFG.mjs +1 -0
- package/dist/preview-engine/renderers-XLTY5APF.mjs +1 -0
- package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +1 -0
- package/dist/preview-engine/renderers-YKUQUCTO.mjs +124 -0
- package/dist/preview-engine/renderers-YVN3EIOP.mjs +1 -0
- package/dist/preview-engine/renderers-YWRP23SZ.mjs +125 -0
- package/dist/preview-engine/renderers-ZPWOUWZJ.mjs +120 -0
- package/dist/preview-engine/resvg-js-VMU4A77S.mjs +1 -0
- package/dist/preview-engine/server-utils-2FAIV45N.mjs +1 -0
- package/dist/preview-engine/sharp-V6ZTBNDW.mjs +1 -0
- package/dist/preview-engine/shims/fs-promises.mjs +1 -0
- package/dist/preview-engine/shims/fs.mjs +1 -0
- package/dist/preview-engine/shims/module.mjs +1 -0
- package/dist/preview-engine/shims/os.mjs +1 -0
- package/dist/preview-engine/shims/path.mjs +1 -0
- package/dist/preview-engine/shims/url.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -0
- package/dist/preview-engine/webgpu-NSSANM4F.mjs +1 -0
- package/dist/preview-uQM210iy.mjs +2149 -0
- package/dist/preview-uQM210iy.mjs.map +1 -0
- package/dist/program-Dl510wmI.mjs +5183 -0
- package/dist/program-Dl510wmI.mjs.map +1 -0
- package/dist/renderer/index.d.mts +3 -0
- package/dist/renderer/index.mjs +6 -0
- package/dist/renderer-3BNskNuJ.mjs +3 -0
- package/dist/renderer-7DOcIxFG.mjs +288 -0
- package/dist/renderer-7DOcIxFG.mjs.map +1 -0
- package/dist/renderer-9dHlMQGX.mjs +3 -0
- package/dist/renderer-B1CvhW4p.mjs +677 -0
- package/dist/renderer-B1CvhW4p.mjs.map +1 -0
- package/dist/renderer-B2XzjK0z.mjs +3 -0
- package/dist/renderer-B80s47yo.mjs +166 -0
- package/dist/renderer-B80s47yo.mjs.map +1 -0
- package/dist/renderer-B9-QSJcG.mjs +479 -0
- package/dist/renderer-B9-QSJcG.mjs.map +1 -0
- package/dist/renderer-BAQmR0Zo.mjs +3 -0
- package/dist/renderer-BDLnExoP.mjs +127 -0
- package/dist/renderer-BDLnExoP.mjs.map +1 -0
- package/dist/renderer-BGXU6vcW.mjs +270 -0
- package/dist/renderer-BGXU6vcW.mjs.map +1 -0
- package/dist/renderer-BGvORwkQ.mjs +3 -0
- package/dist/renderer-BLikd6BK.mjs +3 -0
- package/dist/renderer-BMovYRoR.mjs +3 -0
- package/dist/renderer-BQHbp-Sp.mjs +243 -0
- package/dist/renderer-BQHbp-Sp.mjs.map +1 -0
- package/dist/renderer-BREIjsUU.mjs +252 -0
- package/dist/renderer-BREIjsUU.mjs.map +1 -0
- package/dist/renderer-BSbTJBWc.mjs +3 -0
- package/dist/renderer-BTu2EVhF.mjs +3 -0
- package/dist/renderer-BU1rwNRT.mjs +3 -0
- package/dist/renderer-BXMmISWG.mjs +499 -0
- package/dist/renderer-BXMmISWG.mjs.map +1 -0
- package/dist/renderer-BZJm3m4f.mjs +3 -0
- package/dist/renderer-B_NuVaIP.mjs +744 -0
- package/dist/renderer-B_NuVaIP.mjs.map +1 -0
- package/dist/renderer-BfJSUjPN.mjs +3 -0
- package/dist/renderer-BqyAgNt3.mjs +3 -0
- package/dist/renderer-BryTM2g7.mjs +3 -0
- package/dist/renderer-BsgIcBKH.mjs +391 -0
- package/dist/renderer-BsgIcBKH.mjs.map +1 -0
- package/dist/renderer-ByDhfrPE.mjs +422 -0
- package/dist/renderer-ByDhfrPE.mjs.map +1 -0
- package/dist/renderer-C-H680_l.mjs +3 -0
- package/dist/renderer-C17wL9QX.mjs +181 -0
- package/dist/renderer-C17wL9QX.mjs.map +1 -0
- package/dist/renderer-C2n-EHxg.mjs +1 -0
- package/dist/renderer-CB5aWAaf.mjs +343 -0
- package/dist/renderer-CB5aWAaf.mjs.map +1 -0
- package/dist/renderer-CB7lH5K8.mjs +3 -0
- package/dist/renderer-CDLrNgfo.mjs +3 -0
- package/dist/renderer-CDOUAN7X.mjs +454 -0
- package/dist/renderer-CDOUAN7X.mjs.map +1 -0
- package/dist/renderer-CH8sdfYX.mjs +387 -0
- package/dist/renderer-CH8sdfYX.mjs.map +1 -0
- package/dist/renderer-CIvaRnP_.mjs +261 -0
- package/dist/renderer-CIvaRnP_.mjs.map +1 -0
- package/dist/renderer-CMzEjdzi.mjs +369 -0
- package/dist/renderer-CMzEjdzi.mjs.map +1 -0
- package/dist/renderer-COkcU3db.mjs +3302 -0
- package/dist/renderer-COkcU3db.mjs.map +1 -0
- package/dist/renderer-CQCoggIa.mjs +3 -0
- package/dist/renderer-CQdVj2JS.mjs +3 -0
- package/dist/renderer-CQiTodg9.mjs +337 -0
- package/dist/renderer-CQiTodg9.mjs.map +1 -0
- package/dist/renderer-CV2m6k1V.mjs +3 -0
- package/dist/renderer-CYY-poLe.mjs +3 -0
- package/dist/renderer-CZgB5st8.mjs +3 -0
- package/dist/renderer-C_Ki91kc.mjs +3 -0
- package/dist/renderer-CclIvsLO.mjs +3 -0
- package/dist/renderer-Cj-whdVr.mjs +655 -0
- package/dist/renderer-Cj-whdVr.mjs.map +1 -0
- package/dist/renderer-CkykdR_D.mjs +3 -0
- package/dist/renderer-Cl1oUXMi.mjs +1143 -0
- package/dist/renderer-Cl1oUXMi.mjs.map +1 -0
- package/dist/renderer-CmApuKjS.mjs +3 -0
- package/dist/renderer-CpkiHRhh.mjs +269 -0
- package/dist/renderer-CpkiHRhh.mjs.map +1 -0
- package/dist/renderer-CszOjcRW.mjs +3 -0
- package/dist/renderer-CtVkU_GA.mjs +44 -0
- package/dist/renderer-CtVkU_GA.mjs.map +1 -0
- package/dist/renderer-Cu074POw.mjs +3 -0
- package/dist/renderer-CwQhzcUn.mjs +644 -0
- package/dist/renderer-CwQhzcUn.mjs.map +1 -0
- package/dist/renderer-CzPWB0Ss.mjs +273 -0
- package/dist/renderer-CzPWB0Ss.mjs.map +1 -0
- package/dist/renderer-D4qLmox-.mjs +3 -0
- package/dist/renderer-D6bWQtr-.mjs +3 -0
- package/dist/renderer-D6cJ6MSq.mjs +3 -0
- package/dist/renderer-D7EX8IjU.mjs +240 -0
- package/dist/renderer-D7EX8IjU.mjs.map +1 -0
- package/dist/renderer-DDp7_TUi.d.mts +10 -0
- package/dist/renderer-DDp7_TUi.d.mts.map +1 -0
- package/dist/renderer-DFKsLrUs.mjs +256 -0
- package/dist/renderer-DFKsLrUs.mjs.map +1 -0
- package/dist/renderer-DPSsf8-t.mjs +3 -0
- package/dist/renderer-DQLGnEFc.mjs +3 -0
- package/dist/renderer-DY2SVYUW.mjs +3 -0
- package/dist/renderer-DZGtBUCx.mjs +792 -0
- package/dist/renderer-DZGtBUCx.mjs.map +1 -0
- package/dist/renderer-DabG62XS.mjs +406 -0
- package/dist/renderer-DabG62XS.mjs.map +1 -0
- package/dist/renderer-DbaQLI4z.mjs +771 -0
- package/dist/renderer-DbaQLI4z.mjs.map +1 -0
- package/dist/renderer-DjI45OYC.mjs +71 -0
- package/dist/renderer-DjI45OYC.mjs.map +1 -0
- package/dist/renderer-Dm08-hAU.mjs +323 -0
- package/dist/renderer-Dm08-hAU.mjs.map +1 -0
- package/dist/renderer-DoAY5JbB.mjs +4 -0
- package/dist/renderer-Dp_FfvF-.mjs +401 -0
- package/dist/renderer-Dp_FfvF-.mjs.map +1 -0
- package/dist/renderer-Dt6fzgX5.mjs +756 -0
- package/dist/renderer-Dt6fzgX5.mjs.map +1 -0
- package/dist/renderer-DuplLRbp.mjs +3 -0
- package/dist/renderer-DvfUbZ31.mjs +3 -0
- package/dist/renderer-DxjVQV6f.mjs +311 -0
- package/dist/renderer-DxjVQV6f.mjs.map +1 -0
- package/dist/renderer-Fco4EmAu.mjs +23868 -0
- package/dist/renderer-Fco4EmAu.mjs.map +1 -0
- package/dist/renderer-HFfcJlmR.mjs +981 -0
- package/dist/renderer-HFfcJlmR.mjs.map +1 -0
- package/dist/renderer-I-Sw3JBB.mjs +145 -0
- package/dist/renderer-I-Sw3JBB.mjs.map +1 -0
- package/dist/renderer-OWQmmg4Z.mjs +697 -0
- package/dist/renderer-OWQmmg4Z.mjs.map +1 -0
- package/dist/renderer-Q_uUQipO.mjs +3 -0
- package/dist/renderer-Ryo2CEFD.mjs +586 -0
- package/dist/renderer-Ryo2CEFD.mjs.map +1 -0
- package/dist/renderer-Tp6OXWNZ.mjs +257 -0
- package/dist/renderer-Tp6OXWNZ.mjs.map +1 -0
- package/dist/renderer-UQFCgeNx.mjs +3 -0
- package/dist/renderer-WkVrkCVA.mjs +83 -0
- package/dist/renderer-WkVrkCVA.mjs.map +1 -0
- package/dist/renderer-XcmYTd6P.mjs +3818 -0
- package/dist/renderer-XcmYTd6P.mjs.map +1 -0
- package/dist/renderer-_uvdg48N.mjs +333 -0
- package/dist/renderer-_uvdg48N.mjs.map +1 -0
- package/dist/renderer-bZU_ndxf.mjs +8 -0
- package/dist/renderer-bZU_ndxf.mjs.map +1 -0
- package/dist/renderer-eMsnzJg9.mjs +3 -0
- package/dist/renderer-ho_jXJ0H.mjs +254 -0
- package/dist/renderer-ho_jXJ0H.mjs.map +1 -0
- package/dist/renderer-k2JL79kM.mjs +306 -0
- package/dist/renderer-k2JL79kM.mjs.map +1 -0
- package/dist/renderer-pHiz78e0.mjs +3 -0
- package/dist/renderer-pxXf9dvk.mjs +394 -0
- package/dist/renderer-pxXf9dvk.mjs.map +1 -0
- package/dist/renderer-vCFTm0oe.mjs +226 -0
- package/dist/renderer-vCFTm0oe.mjs.map +1 -0
- package/dist/renderer-vvpdx1vk.mjs +379 -0
- package/dist/renderer-vvpdx1vk.mjs.map +1 -0
- package/dist/renderer-x2s9LmVL.mjs +1121 -0
- package/dist/renderer-x2s9LmVL.mjs.map +1 -0
- package/dist/renderers-BWg16W-V-BXG_cjhM.mjs +49 -0
- package/dist/renderers-BWg16W-V-BXG_cjhM.mjs.map +1 -0
- package/dist/signals/index.d.mts +7 -0
- package/dist/signals/index.mjs +10 -0
- package/dist/signals-BwbdO3AN.mjs +224 -0
- package/dist/signals-BwbdO3AN.mjs.map +1 -0
- package/dist/signin-CZj4Oc5s.mjs +865 -0
- package/dist/signin-CZj4Oc5s.mjs.map +1 -0
- package/dist/sso-oidc-C0_31ThY.mjs +1051 -0
- package/dist/sso-oidc-C0_31ThY.mjs.map +1 -0
- package/dist/sts-DD4ggEXC.mjs +6 -0
- package/dist/sts-nXw8RDJI.mjs +1395 -0
- package/dist/sts-nXw8RDJI.mjs.map +1 -0
- package/package.json +173 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import{a as h}from"./chunk-YSTLMWCG.mjs";import{e as v}from"./chunk-BVF64D6H.mjs";v();v();var j=new WeakMap,B=`
|
|
2
|
+
struct SelectiveColorUniforms {
|
|
3
|
+
reds : vec4<f32>,
|
|
4
|
+
yellows : vec4<f32>,
|
|
5
|
+
greens : vec4<f32>,
|
|
6
|
+
cyans : vec4<f32>,
|
|
7
|
+
blues : vec4<f32>,
|
|
8
|
+
magentas : vec4<f32>,
|
|
9
|
+
whites : vec4<f32>,
|
|
10
|
+
neutrals : vec4<f32>,
|
|
11
|
+
blacks : vec4<f32>,
|
|
12
|
+
method : f32,
|
|
13
|
+
pad0 : f32,
|
|
14
|
+
pad1 : f32,
|
|
15
|
+
pad2 : f32,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
@group(0) @binding(0) var<uniform> u : SelectiveColorUniforms;
|
|
19
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
20
|
+
@group(1) @binding(1) var samp : sampler;
|
|
21
|
+
|
|
22
|
+
struct VSOut {
|
|
23
|
+
@builtin(position) pos : vec4<f32>,
|
|
24
|
+
@location(0) uv : vec2<f32>,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
28
|
+
var pos = array<vec2<f32>, 4>(
|
|
29
|
+
vec2<f32>(-1.0, 1.0),
|
|
30
|
+
vec2<f32>(1.0, 1.0),
|
|
31
|
+
vec2<f32>(-1.0, -1.0),
|
|
32
|
+
vec2<f32>(1.0, -1.0)
|
|
33
|
+
);
|
|
34
|
+
var uv = array<vec2<f32>, 4>(
|
|
35
|
+
vec2<f32>(0.0, 0.0),
|
|
36
|
+
vec2<f32>(1.0, 0.0),
|
|
37
|
+
vec2<f32>(0.0, 1.0),
|
|
38
|
+
vec2<f32>(1.0, 1.0)
|
|
39
|
+
);
|
|
40
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fn calcAdjustment(cmy: vec3<f32>, adj: vec4<f32>, weight: f32, isAbsolute: bool) -> vec3<f32> {
|
|
44
|
+
if (weight <= 0.00001) {
|
|
45
|
+
return vec3<f32>(0.0);
|
|
46
|
+
}
|
|
47
|
+
let adjC = adj.x;
|
|
48
|
+
let adjM = adj.y;
|
|
49
|
+
let adjY = adj.z;
|
|
50
|
+
let adjK = adj.w;
|
|
51
|
+
|
|
52
|
+
if (isAbsolute) {
|
|
53
|
+
let cDelta = adjC + adjK * (1.0 + adjC);
|
|
54
|
+
let mDelta = adjM + adjK * (1.0 + adjM);
|
|
55
|
+
let yDelta = adjY + adjK * (1.0 + adjY);
|
|
56
|
+
return vec3<f32>(cDelta, mDelta, yDelta) * weight;
|
|
57
|
+
} else {
|
|
58
|
+
let cDelta = ((1.0 + adjK) * (1.0 + adjC) - 1.0) * cmy.x;
|
|
59
|
+
let mDelta = ((1.0 + adjK) * (1.0 + adjM) - 1.0) * cmy.y;
|
|
60
|
+
let yDelta = ((1.0 + adjK) * (1.0 + adjY) - 1.0) * cmy.z;
|
|
61
|
+
return vec3<f32>(cDelta, mDelta, yDelta) * weight;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
66
|
+
let color = textureSampleLevel(tex, samp, in.uv, 0.0);
|
|
67
|
+
if (color.a <= 0.00001) {
|
|
68
|
+
return color;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
let rgb = clamp(color.rgb / max(color.a, 0.00001), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
72
|
+
let r = rgb.r;
|
|
73
|
+
let g = rgb.g;
|
|
74
|
+
let b = rgb.b;
|
|
75
|
+
|
|
76
|
+
let maxVal = max(r, max(g, b));
|
|
77
|
+
let minVal = min(r, min(g, b));
|
|
78
|
+
|
|
79
|
+
// Chromatic weights
|
|
80
|
+
let wRed = max(0.0, r - max(g, b));
|
|
81
|
+
let wYellow = max(0.0, min(r, g) - b);
|
|
82
|
+
let wGreen = max(0.0, g - max(r, b));
|
|
83
|
+
let wCyan = max(0.0, min(g, b) - r);
|
|
84
|
+
let wBlue = max(0.0, b - max(r, g));
|
|
85
|
+
let wMagenta = max(0.0, min(r, b) - g);
|
|
86
|
+
|
|
87
|
+
// Achromatic weights (Whites, Blacks, and true Midtone Neutrals)
|
|
88
|
+
let wWhite = max(0.0, (minVal - 0.5) * 2.0);
|
|
89
|
+
let wBlack = max(0.0, (0.5 - maxVal) * 2.0);
|
|
90
|
+
let wNeutral = max(0.0, 1.0 - (wRed + wYellow + wGreen + wCyan + wBlue + wMagenta + wWhite + wBlack));
|
|
91
|
+
|
|
92
|
+
let cmy = vec3<f32>(1.0 - r, 1.0 - g, 1.0 - b);
|
|
93
|
+
let isAbs = u.method > 0.5;
|
|
94
|
+
|
|
95
|
+
var totalDelta = vec3<f32>(0.0);
|
|
96
|
+
totalDelta += calcAdjustment(cmy, u.reds, wRed, isAbs);
|
|
97
|
+
totalDelta += calcAdjustment(cmy, u.yellows, wYellow, isAbs);
|
|
98
|
+
totalDelta += calcAdjustment(cmy, u.greens, wGreen, isAbs);
|
|
99
|
+
totalDelta += calcAdjustment(cmy, u.cyans, wCyan, isAbs);
|
|
100
|
+
totalDelta += calcAdjustment(cmy, u.blues, wBlue, isAbs);
|
|
101
|
+
totalDelta += calcAdjustment(cmy, u.magentas, wMagenta, isAbs);
|
|
102
|
+
totalDelta += calcAdjustment(cmy, u.whites, wWhite, isAbs);
|
|
103
|
+
totalDelta += calcAdjustment(cmy, u.neutrals, wNeutral, isAbs);
|
|
104
|
+
totalDelta += calcAdjustment(cmy, u.blacks, wBlack, isAbs);
|
|
105
|
+
|
|
106
|
+
let finalCMY = clamp(cmy + totalDelta, vec3<f32>(0.0), vec3<f32>(1.0));
|
|
107
|
+
let finalRGB = vec3<f32>(1.0 - finalCMY.x, 1.0 - finalCMY.y, 1.0 - finalCMY.z);
|
|
108
|
+
|
|
109
|
+
return vec4<f32>(finalRGB * color.a, color.a);
|
|
110
|
+
}
|
|
111
|
+
`;function T(t,e){let a=j.get(t);if(!a){let d=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),m=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=t.createShaderModule({label:"selective-color.wgsl",code:B});a={pipeline:t.createRenderPipeline({label:"SelectiveColorPipeline",layout:t.createPipelineLayout({bindGroupLayouts:[d,m]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}}),uniformLayout:d,textureLayout:m},j.set(t,a)}return a}function n(t,e,a){t[e+0]=(a?.cyan??0)/100,t[e+1]=(a?.magenta??0)/100,t[e+2]=(a?.yellow??0)/100,t[e+3]=(a?.black??0)/100}var r=new Float32Array(40),A=async t=>{let{ctx:e,encoder:a,pass:d,targetView:m,targetTexture:o,targetWidth:f,targetHeight:g,props:i,drawChild:G}=t,l=i.virtualMedia?.operation;if(l?.op!=="SelectiveColor"||!i.virtualMedia?.children?.[0])return;d.end();let y=i.virtualMedia.children[0],c=f,s=g,p=e.renderer.getTemporaryTexture(c,s,[...i.excludeTextures||[],o]),b=p.createView();e.renderer.beginFrame(a,b,{r:0,g:0,b:0,a:0},c,s,"clear").end(),e.renderer.pushScissor({x:0,y:0,width:c,height:s}),e.renderer.pushIdentity(),await G(y,{...i,virtualMedia:y},b,p,c,s),e.renderer.popTransform(),e.renderer.popScissor(),n(r,0,l.reds),n(r,4,l.yellows),n(r,8,l.greens),n(r,12,l.cyans),n(r,16,l.blues),n(r,20,l.magentas),n(r,24,l.whites),n(r,28,l.neutrals),n(r,32,l.blacks),r[36]=l.method==="Absolute"?1:0,r[37]=0,r[38]=0,r[39]=0;let{pipeline:C,uniformLayout:D,textureLayout:S}=T(e.device,e.renderer.format),P=e.renderer.samplerCache.getSampler(e.device),R=e.renderer.getTemporaryBuffer(r),w=e.renderer.getTemporaryTexture(c,s,[p,o,...i.excludeTextures||[]]),u=a.beginRenderPass({colorAttachments:[{view:w.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});u.setPipeline(C),u.setBindGroup(0,e.device.createBindGroup({layout:D,entries:[{binding:0,resource:{buffer:R}}]})),u.setBindGroup(1,e.renderer.bindGroupCache.getBindGroup(e.device,S,p,P)),u.draw(4),u.end();let x=e.renderer.beginFrame(a,m,{r:0,g:0,b:0,a:0},f,g,"load");e.renderer.drawTexture(x,w,{x:0,y:0,width:f,height:g},{opacity:i.opacity??1}),t.pass=x};var Y=h({WebGPURenderer:A});export{Y as a};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import{d as V}from"./chunk-6YJP57MZ.mjs";import{e as x}from"./chunk-BVF64D6H.mjs";x();x();var D=new WeakMap,ue=`
|
|
2
|
+
struct ColorBalanceUniforms {
|
|
3
|
+
shadows : vec4<f32>,
|
|
4
|
+
midtones : vec4<f32>,
|
|
5
|
+
highlights : vec4<f32>,
|
|
6
|
+
preserveLuminosity : f32,
|
|
7
|
+
hasShadowsCyanRedSig : f32,
|
|
8
|
+
hasShadowsMagentaGreenSig : f32,
|
|
9
|
+
hasShadowsYellowBlueSig : f32,
|
|
10
|
+
|
|
11
|
+
hasMidtonesCyanRedSig : f32,
|
|
12
|
+
hasMidtonesMagentaGreenSig : f32,
|
|
13
|
+
hasMidtonesYellowBlueSig : f32,
|
|
14
|
+
hasHighlightsCyanRedSig : f32,
|
|
15
|
+
|
|
16
|
+
hasHighlightsMagentaGreenSig : f32,
|
|
17
|
+
hasHighlightsYellowBlueSig : f32,
|
|
18
|
+
_pad0 : f32,
|
|
19
|
+
_pad1 : f32,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;
|
|
23
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
24
|
+
@group(1) @binding(1) var samp : sampler;
|
|
25
|
+
|
|
26
|
+
@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;
|
|
27
|
+
@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;
|
|
28
|
+
@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;
|
|
29
|
+
@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;
|
|
30
|
+
@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;
|
|
31
|
+
@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;
|
|
32
|
+
@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;
|
|
33
|
+
@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;
|
|
34
|
+
@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;
|
|
35
|
+
@group(2) @binding(9) var signalSamp : sampler;
|
|
36
|
+
|
|
37
|
+
struct VSOut {
|
|
38
|
+
@builtin(position) pos : vec4<f32>,
|
|
39
|
+
@location(0) uv : vec2<f32>,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
43
|
+
var pos = array<vec2<f32>, 4>(
|
|
44
|
+
vec2<f32>(-1.0, 1.0),
|
|
45
|
+
vec2<f32>(1.0, 1.0),
|
|
46
|
+
vec2<f32>(-1.0, -1.0),
|
|
47
|
+
vec2<f32>(1.0, -1.0)
|
|
48
|
+
);
|
|
49
|
+
var uv = array<vec2<f32>, 4>(
|
|
50
|
+
vec2<f32>(0.0, 0.0),
|
|
51
|
+
vec2<f32>(1.0, 0.0),
|
|
52
|
+
vec2<f32>(0.0, 1.0),
|
|
53
|
+
vec2<f32>(1.0, 1.0)
|
|
54
|
+
);
|
|
55
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
fn get_luminance(c: vec3<f32>) -> f32 {
|
|
59
|
+
return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
63
|
+
let d = l - get_luminance(c);
|
|
64
|
+
var res = c + vec3<f32>(d);
|
|
65
|
+
let min_c = min(res.r, min(res.g, res.b));
|
|
66
|
+
let max_c = max(res.r, max(res.g, res.b));
|
|
67
|
+
if (min_c < 0.0) {
|
|
68
|
+
res = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);
|
|
69
|
+
}
|
|
70
|
+
if (max_c > 1.0) {
|
|
71
|
+
res = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);
|
|
72
|
+
}
|
|
73
|
+
return clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
77
|
+
let color = textureSampleLevel(tex, samp, in.uv, 0.0);
|
|
78
|
+
if (color.a <= 0.00001) {
|
|
79
|
+
return color;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let alpha = color.a;
|
|
83
|
+
let rgb = color.rgb / max(alpha, 0.0001);
|
|
84
|
+
|
|
85
|
+
var sShift = u.shadows.rgb;
|
|
86
|
+
if (u.hasShadowsCyanRedSig > 0.5) {
|
|
87
|
+
sShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
88
|
+
}
|
|
89
|
+
if (u.hasShadowsMagentaGreenSig > 0.5) {
|
|
90
|
+
sShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
91
|
+
}
|
|
92
|
+
if (u.hasShadowsYellowBlueSig > 0.5) {
|
|
93
|
+
sShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var mShift = u.midtones.rgb;
|
|
97
|
+
if (u.hasMidtonesCyanRedSig > 0.5) {
|
|
98
|
+
mShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
99
|
+
}
|
|
100
|
+
if (u.hasMidtonesMagentaGreenSig > 0.5) {
|
|
101
|
+
mShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
102
|
+
}
|
|
103
|
+
if (u.hasMidtonesYellowBlueSig > 0.5) {
|
|
104
|
+
mShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
var hShift = u.highlights.rgb;
|
|
108
|
+
if (u.hasHighlightsCyanRedSig > 0.5) {
|
|
109
|
+
hShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
110
|
+
}
|
|
111
|
+
if (u.hasHighlightsMagentaGreenSig > 0.5) {
|
|
112
|
+
hShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
113
|
+
}
|
|
114
|
+
if (u.hasHighlightsYellowBlueSig > 0.5) {
|
|
115
|
+
hShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let origLum = get_luminance(rgb);
|
|
119
|
+
|
|
120
|
+
// Tonal range weighting curves
|
|
121
|
+
let wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);
|
|
122
|
+
let wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);
|
|
123
|
+
let wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);
|
|
124
|
+
|
|
125
|
+
let delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;
|
|
126
|
+
var adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));
|
|
127
|
+
|
|
128
|
+
if (u.preserveLuminosity > 0.5) {
|
|
129
|
+
adjustedRgb = set_luminance(adjustedRgb, origLum);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return vec4<f32>(adjustedRgb * alpha, alpha);
|
|
133
|
+
}
|
|
134
|
+
`;function ce(r,i){let s=D.get(r);if(s)return s;let S=r.createBindGroupLayout({label:"ColorBalanceUniformLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),v=r.createBindGroupLayout({label:"ColorBalanceTextureLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),f=r.createBindGroupLayout({label:"ColorBalanceSignalTextureLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:5,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:6,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:7,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:8,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:9,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),c=r.createShaderModule({label:"ColorBalanceShaderModule",code:ue});return s={pipeline:r.createRenderPipeline({label:"ColorBalancePipeline",layout:r.createPipelineLayout({bindGroupLayouts:[S,v,f]}),vertex:{module:c,entryPoint:"vs"},fragment:{module:c,entryPoint:"fs",targets:[{format:i}]},primitive:{topology:"triangle-strip"}}),uniformLayout:S,textureLayout:v,signalTextureLayout:f},D.set(r,s),s}var e=new Float32Array(24),O=async r=>{let{ctx:i,encoder:s,pass:S,targetView:v,targetTexture:f,targetWidth:c,targetHeight:y,props:n,drawChild:W}=r,a=n.virtualMedia?.operation;if(a?.op!=="ColorBalance"||!n.virtualMedia?.children?.[0])return;S.end();let w=n.frame??0,G=n.fps||30,H=n.virtualMedia.children[0],h=c,p=y,k=n.virtualMedia?.metadata?.id||(a.inputs?Object.keys(a.inputs)[0]:null)||n.renderId||"colorbalance_node",o=(t,g,E=-100,I=100)=>{if(t&&a.inputs?.[t]?.connectionValid){let u=a.inputs[t].outputItem;if(u?.type==="Number"){let de=typeof u.data=="number"?u.data:u.data?.value??g;return{val:Math.max(E,Math.min(I,de)),hasStaticSig:!1,sd:null}}if(u?.type==="Signal"&&u.data)return{val:g,hasStaticSig:!0,sd:u.data}}return{val:Math.max(E,Math.min(I,g)),hasStaticSig:!1,sd:null}},l=t=>{t!=null&&(typeof t=="object"&&"value"in t?t=t.value:typeof t=="function"&&(t=t(w,G)));let g=Number(t??0);return isNaN(g)?0:g},B=o(a.shadows_cyanRedHandleId,l(a.shadows?.cyanRed)),R=o(a.shadows_magentaGreenHandleId,l(a.shadows?.magentaGreen)),T=o(a.shadows_yellowBlueHandleId,l(a.shadows?.yellowBlue)),M=o(a.midtones_cyanRedHandleId,l(a.midtones?.cyanRed)),_=o(a.midtones_magentaGreenHandleId,l(a.midtones?.magentaGreen)),C=o(a.midtones_yellowBlueHandleId,l(a.midtones?.yellowBlue)),L=o(a.highlights_cyanRedHandleId,l(a.highlights?.cyanRed)),P=o(a.highlights_magentaGreenHandleId,l(a.highlights?.magentaGreen)),U=o(a.highlights_yellowBlueHandleId,l(a.highlights?.yellowBlue)),b=i.renderer.getTemporaryTexture(h,p,[...n.excludeTextures||[],f]),N=b.createView();i.renderer.beginFrame(s,N,{r:0,g:0,b:0,a:0},h,p,"clear").end(),i.renderer.pushScissor({x:0,y:0,width:h,height:p}),i.renderer.pushIdentity(),await W(H,{...n,virtualMedia:H},N,b,h,p),i.renderer.popTransform(),i.renderer.popScissor();let{pipeline:j,uniformLayout:$,textureLayout:q,signalTextureLayout:z}=ce(i.device,i.renderer.format),A=i.renderer.samplerCache.getSampler(i.device),J=n.elapsedMs!==void 0?n.elapsedMs/1e3:w/G,K=n.virtualMedia?.metadata?.durationMs?n.virtualMedia.metadata.durationMs/1e3:n.durationMs!==void 0?n.durationMs/1e3:0,d=(t,g)=>t.hasStaticSig&&t.sd?V.getOrCreate2DTextureView(i.device,s,t.sd.nodeId??`${k}_${g}`,J,K,t.sd,h,p,n.renderId,w,G):V.getDummy1x1TextureView(i.device),Q=d(B,"shadows_cyanRed_sig"),X=d(R,"shadows_magentaGreen_sig"),Z=d(T,"shadows_yellowBlue_sig"),ee=d(M,"midtones_cyanRed_sig"),ae=d(_,"midtones_magentaGreen_sig"),ie=d(C,"midtones_yellowBlue_sig"),te=d(L,"highlights_cyanRed_sig"),ne=d(P,"highlights_magentaGreen_sig"),re=d(U,"highlights_yellowBlue_sig"),se=a.preserveLuminosity===!1?0:1;e[0]=B.val/100,e[1]=R.val/100,e[2]=T.val/100,e[3]=0,e[4]=M.val/100,e[5]=_.val/100,e[6]=C.val/100,e[7]=0,e[8]=L.val/100,e[9]=P.val/100,e[10]=U.val/100,e[11]=0,e[12]=se,e[13]=B.hasStaticSig?1:0,e[14]=R.hasStaticSig?1:0,e[15]=T.hasStaticSig?1:0,e[16]=M.hasStaticSig?1:0,e[17]=_.hasStaticSig?1:0,e[18]=C.hasStaticSig?1:0,e[19]=L.hasStaticSig?1:0,e[20]=P.hasStaticSig?1:0,e[21]=U.hasStaticSig?1:0,e[22]=0,e[23]=0;let oe=i.renderer.getTemporaryBuffer(e),F=i.renderer.getTemporaryTexture(h,p,[b,f,...n.excludeTextures||[]]),le=i.device.createBindGroup({layout:z,entries:[{binding:0,resource:Q},{binding:1,resource:X},{binding:2,resource:Z},{binding:3,resource:ee},{binding:4,resource:ae},{binding:5,resource:ie},{binding:6,resource:te},{binding:7,resource:ne},{binding:8,resource:re},{binding:9,resource:A}]}),m=s.beginRenderPass({colorAttachments:[{view:F.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});m.setPipeline(j),m.setBindGroup(0,i.device.createBindGroup({layout:$,entries:[{binding:0,resource:{buffer:oe}}]})),m.setBindGroup(1,i.renderer.bindGroupCache.getBindGroup(i.device,q,b,A)),m.setBindGroup(2,le),m.draw(4),m.end();let Y=i.renderer.beginFrame(s,v,{r:0,g:0,b:0,a:0},c,y,"load");i.renderer.drawTexture(Y,F,{x:0,y:0,width:c,height:y},{opacity:n.opacity??1}),r.pass=Y};var ve={WebGPURenderer:O};export{O as a,ve as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as o}from"./chunk-SWD76532.mjs";import{a as S}from"./chunk-EDIZNO3P.mjs";import{d as x}from"./chunk-P3HBP725.mjs";import{d as c,e as i}from"./chunk-BVF64D6H.mjs";i();i();i();i();i();i();function E(r){return typeof c<"u"?c.env?.[r]:void 0}function w(){let r=E("FRAMEFIELDS_STRICT_PROPS");return r==="1"||r==="true"}function z(){return w()||E("NODE_ENV")!=="production"}var v=new Set;function g(r){if(w())throw new Error(r);v.has(r)||(v.add(r),console.warn(`[framefields] ${r}`))}function C(r){if(typeof r!="object"||r===null||Array.isArray(r)||x(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}function Z(r,e){let t=Array.from({length:e.length+1},(n,l)=>l);for(let n=1;n<=r.length;n++){let l=t[0];t[0]=n;for(let a=1;a<=e.length;a++){let s=t[a];t[a]=Math.min(t[a]+1,t[a-1]+1,l+(r[n-1]===e[a-1]?0:1)),l=s}}return t[e.length]}function J(r,e){let t,n=Number.POSITIVE_INFINITY,l=r.toLowerCase();for(let s of e){let u=s.toLowerCase(),d=u.includes(l)||l.includes(u)?1:Z(l,u);d<n&&(n=d,t=s)}return t&&n<=Math.max(2,Math.ceil(r.length/2))?` Did you mean "${t}"?`:` Known props: ${e.join(", ")}.`}function Q(r,e,t){if(typeof e=="number"){let{min:n,max:l}=t,a=n!==void 0&&e<n,s=l!==void 0&&e>l;if(a||s||Number.isNaN(e)){let u=n!==void 0&&l!==void 0?`${n} to ${l}`:n!==void 0?`\u2265 ${n}`:`\u2264 ${l}`;g(Number.isNaN(e)?`${r} is NaN`:`${r} = ${e} is outside ${u}`)}return}t.enum&&(typeof e=="string"||typeof e=="boolean")&&!t.enum.includes(e)&&g(`${r} = ${JSON.stringify(e)} is not one of ${t.enum.map(n=>JSON.stringify(n)).join(", ")}`)}function M(r,e,t){let n=Object.keys(t);for(let[l,a]of Object.entries(e)){if(a===void 0)continue;let s=t[l];if(!s){g(`${r}: unknown prop "${l}".${J(l,n)}`);continue}x(a)||typeof a=="function"||(s.props&&C(a)?M(`${r}.${l}`,a,s.props):Q(`${r}.${l}`,a,s))}}function ee(r){return typeof r=="object"&&r!==null?structuredClone(r):r}function b(r,e,t,n){let l=t;z()&&M(r,l,n);let a={};for(let[s,u]of Object.entries(e))a[s]=ee(u);for(let[s,u]of Object.entries(l)){if(u===void 0)continue;let d=a[s];a[s]=C(d)&&C(u)?{...d,...Object.fromEntries(Object.entries(u).filter(([,q])=>q!==void 0))}:u}return a}i();var p={Blur:{blurType:{enum:["Gaussian","Box","Median","Motion","Bilateral","Edge-preserving","Radial","Zoom"]},strength:{min:0,max:100},angle:{min:0,max:360},sigmaColor:{min:.01,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1},partialBlur:{},radius:{min:.01,max:1},radiusY:{min:0,max:1},shape:{enum:["ellipse","circle","rect"]}},ColorBalance:{shadows:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},midtones:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},highlights:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},preserveLuminosity:{}},ColorKey:{keyColor:{},similarity:{min:0,max:1},smoothness:{min:0,max:1},spillSuppression:{min:0,max:1},colorSpace:{enum:["YUV","RGB"]},spillSuppressionType:{enum:["Desaturate","Neutralize","None"]}},Vignette:{strength:{min:0,max:100},radius:{min:.1,max:2},softness:{min:0,max:1},roundness:{min:0,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1}}};var re={blurType:"Gaussian",strength:5,angle:0,sigmaColor:.1,centerX:.5,centerY:.5,partialBlur:!1,radius:.3,radiusY:0,shape:"circle"},y=class extends o{op="Blur";constructor(e={}){super(b("Blur",re,e,p.Blur))}},te={shadows:{cyanRed:0,magentaGreen:0,yellowBlue:0},midtones:{cyanRed:0,magentaGreen:0,yellowBlue:0},highlights:{cyanRed:0,magentaGreen:0,yellowBlue:0},preserveLuminosity:!0},m=class extends o{op="ColorBalance";constructor(e={}){super(b("ColorBalance",te,e,p.ColorBalance))}},oe={keyColor:"#00ff00",similarity:.4,smoothness:.1,spillSuppression:.2,colorSpace:"YUV",spillSuppressionType:"Desaturate"},h=class extends o{op="ColorKey";constructor(e={}){super(b("ColorKey",oe,e,p.ColorKey))}},ne={strength:50,radius:1,softness:.5,roundness:.5,centerX:.5,centerY:.5},f=class extends o{op="Vignette";constructor(e={}){super(b("Vignette",ne,e,p.Vignette))}};function le(r){return{partialBlur:!0,centerX:r.center.x,centerY:r.center.y,radius:r.bounds.width.multiply(.55),radiusY:r.bounds.height.multiply(.55),shape:"ellipse",strength:r.active.multiply(25)}}var P=class extends y{constructor(e={}){let{track:t,...n}=e;super(t?{...le(t),...ae(n)}:n)}};function ae(r){return Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0))}i();var se={blur:r=>new P(r),colorBalance:r=>new m(r),colorKey:r=>new h(r),vignette:r=>new f(r)};var R=class extends o{op="Levels";constructor(e={}){let t={inBlack:0,inWhite:1,outBlack:0,outWhite:1};super({master:e.master??{...t},red:e.red??{...t},green:e.green??{...t},blue:e.blue??{...t},...e})}},B=class extends o{op="FilmGrain";constructor(e={}){super({strength:e.strength??15,size:e.size??1.5,monochrome:e.monochrome??!0,animated:e.animated??!0,speed:e.speed??50,shadows:e.shadows??.2,midtones:e.midtones??1,highlights:e.highlights??.2,...e})}},A=class extends o{op;constructor(e,t={}){super(t),this.op=e}},T=class extends o{op="AudioSignalExtractor";constructor(e={}){super({extractionMode:e.extractionMode??"rms_envelope",attackMs:e.attackMs??10,releaseMs:e.releaseMs??120,sensitivity:e.sensitivity??1,noiseFloorDb:e.noiseFloorDb??-48,dynamicRangeDb:e.dynamicRangeDb??48,autoRange:e.autoRange??!0,smoothing:e.smoothing??.15,curve:e.curve??"linear",beatThreshold:e.beatThreshold??.08,beatDecayMs:e.beatDecayMs??80,previewMode:e.previewMode??"envelope",nodeId:e.nodeId??"audio_extractor",...e})}async extract(e,t={}){return S.extract(e,{extractionMode:this.extractionMode,attackMs:this.attackMs,releaseMs:this.releaseMs,sensitivity:this.sensitivity,noiseFloorDb:this.noiseFloorDb,dynamicRangeDb:this.dynamicRangeDb,smoothing:this.smoothing,curve:this.curve,beatThreshold:this.beatThreshold,beatDecayMs:this.beatDecayMs,previewMode:this.previewMode,...t})}},k=class extends o{op="Curves";constructor(e={}){super({...e,curveType:e.curveType??"rgb",master:e.master??[{x:0,y:0},{x:1,y:1}],red:e.red??[{x:0,y:0},{x:1,y:1}],green:e.green??[{x:0,y:0},{x:1,y:1}],blue:e.blue??[{x:0,y:0},{x:1,y:1}],hueVsHue:e.hueVsHue??[{x:0,y:.5},{x:1,y:.5}],hueVsSat:e.hueVsSat??[{x:0,y:1},{x:1,y:1}],lumVsSat:e.lumVsSat??[{x:0,y:1},{x:1,y:1}],satVsSat:e.satVsSat??[{x:0,y:1},{x:1,y:1}]})}},D=class extends o{op="SelectiveColor";constructor(e={}){let t={cyan:0,magenta:0,yellow:0,black:0};super({...e,method:e.method??"Relative",reds:{...t,...e.reds},yellows:{...t,...e.yellows},greens:{...t,...e.greens},cyans:{...t,...e.cyans},blues:{...t,...e.blues},magentas:{...t,...e.magentas},whites:{...t,...e.whites},neutrals:{...t,...e.neutrals},blacks:{...t,...e.blacks}})}},j=class extends o{op="GradientMap";constructor(e={}){let t=[{position:0,color:"#000000"},{position:1,color:"#ffffff"}];super({...e,stops:e.stops??t,smooth:e.smooth??!0,dither:e.dither??!0,opacity:e.opacity??1})}},V=class extends o{op="ShadowsHighlights";constructor(e={}){super({...e,shadowAmount:e.shadowAmount??0,shadowTonalWidth:e.shadowTonalWidth??50,shadowRadius:e.shadowRadius??30,highlightAmount:e.highlightAmount??0,highlightTonalWidth:e.highlightTonalWidth??50,highlightRadius:e.highlightRadius??30,colorCorrection:e.colorCorrection??0,midtoneContrast:e.midtoneContrast??0})}},O=class extends o{op="ApplyLUT";constructor(e={}){super({...e,lutUrl:e.lutUrl??"",intensity:e.intensity??1})}},L=class extends o{op="UnsharpMask";constructor(e={}){super({...e,amount:e.amount??100,radius:e.radius??1.5,threshold:e.threshold??3})}},G=class extends o{op="HighPass";constructor(e={}){super({...e,radius:e.radius??3,contrastBoost:e.contrastBoost??1,monochrome:e.monochrome??!0})}},Y=class extends o{op="HalftoneScreen";constructor(e={}){super({...e,mode:e.mode??"Monochrome",dotShape:e.dotShape??"Circle",frequency:e.frequency??30,angle:e.angle??45,contrast:e.contrast??1,dotColor:e.dotColor??"#000000",paperColor:e.paperColor??"#ffffff",smooth:e.smooth??!0,invert:e.invert??!1,cyanAngle:e.cyanAngle??15,magentaAngle:e.magentaAngle??75,yellowAngle:e.yellowAngle??0,blackAngle:e.blackAngle??45,opacity:e.opacity??1})}},H=class extends o{op="TileOffset";constructor(e={}){super({...e,offsetX:e.offsetX??0,offsetY:e.offsetY??0,wrap:e.wrap??!0,edgeMode:e.edgeMode??"wrap"})}},N=class extends o{op="MotionBlur";constructor(e={}){super({...e,shutterAngle:e.shutterAngle??180,samples:e.samples??16,maxVelocity:e.maxVelocity??64,shutterCurve:e.shutterCurve??"gaussian",depthAware:e.depthAware??!0})}},$=class extends o{op="SSAO";constructor(e={}){super({...e,radius:e.radius??45,bias:e.bias??.025,intensity:e.intensity??1.5,kernelSamples:e.kernelSamples??16,blurRadius:e.blurRadius??4})}},F=class extends o{op="PBRGlass";constructor(e={}){super({...e,ior:e.ior??1.49,roughness:e.roughness??.15,transmission:e.transmission??.92,dispersion:e.dispersion??.015,fresnelPower:e.fresnelPower??5,tintColor:e.tintColor??"#ffffff"})}},I=class extends o{op="DepthOfField";constructor(e={}){super({...e,focusDistance:e.focusDistance??500,focalLength:e.focalLength??50,aperture:e.aperture??2.8,maxBlur:e.maxBlur??16,quality:e.quality??"high"})}},K=class extends o{op="Crop";constructor(e={}){super({cropType:e.cropType??"rect",leftPercentage:e.leftPercentage??0,topPercentage:e.topPercentage??0,widthPercentage:e.widthPercentage??100,heightPercentage:e.heightPercentage??100,roundness:e.roundness??0,...e})}},W=class extends o{op="Vision";constructor(e={}){super({enableDetection:e.enableDetection!==!1,enableSegmentation:e.enableSegmentation===!0,enablePose:e.enablePose===!0,enableMatte:e.enableMatte===!0,confidence:e.confidence??.3,variant:e.variant??"s",mode:e.mode??"passthrough",matteSource:e.matteSource??"instance",...e})}},X=class extends o{op="Relight3D";constructor(e={}){super({lightType:e.lightType??"Point",intensity:e.intensity??1,lightPosX:e.lightPosX??.5,lightPosY:e.lightPosY??.5,lightPosZ:e.lightPosZ??.3,lightRadius:e.lightRadius??.8,spotConeAngle:e.spotConeAngle??45,specularRoughness:e.specularRoughness??.35,specularStrength:e.specularStrength??.7,metallic:e.metallic??0,ambientIntensity:e.ambientIntensity??.4,volumetricDensity:e.volumetricDensity??.2,depthScale:e.depthScale??1,depthInvert:e.depthInvert??!1,lightColor:e.lightColor??"#ffffff",ambientColor:e.ambientColor??"#ffffff",normalMap:e.normalMap,...e})}},U=class extends o{op="TemporalDeflicker";constructor(e={}){super({blendWeight:e.blendWeight??.35,disocclusionThreshold:e.disocclusionThreshold??.15,maxMotionPixels:e.maxMotionPixels??64,scale:e.scale??.5,windowSize:e.windowSize??2,...e})}},_=class extends o{op="Modulate";constructor(e={}){super({hue:e.hue??0,brightness:e.brightness??1,contrast:e.contrast??1,exposure:e.exposure??0,saturation:e.saturation??1,sepia:e.sepia??0,...e})}};export{p as a,m as b,h as c,f as d,P as e,se as f,R as g,B as h,A as i,T as j,k,D as l,j as m,V as n,O as o,L as p,G as q,Y as r,H as s,N as t,$ as u,F as v,I as w,K as x,W as y,X as z,U as A,_ as B};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as p}from"./chunk-BVF64D6H.mjs";p();var u=e=>{let t=String(e);return encodeURI(t.startsWith("file://")?decodeURIComponent(new URL(t).pathname):t)},f=e=>typeof e=="string"?e:e?.encoding??null;function c(e){return Object.assign(new Error(`ENOENT: no such file or directory, open '${e}'`),{code:"ENOENT"})}function w(e,t){let n=new XMLHttpRequest;return n.open(e,u(t),!1),n.overrideMimeType("text/plain; charset=x-user-defined"),n.send(),n}function m(e,t){let n=w("GET",e);if(n.status!==200)throw c(e);let r=n.responseText,d=new Uint8Array(r.length);for(let i=0;i<r.length;i++)d[i]=r.charCodeAt(i)&255;return f(t)?new TextDecoder().decode(d):d}function l(e){let t=String(e),n=t.startsWith("file://")?decodeURIComponent(new URL(t).pathname):t,r=new XMLHttpRequest;return r.open("GET",`/@framefields/stat?path=${encodeURIComponent(n)}`,!1),r.send(),r.status===200?JSON.parse(r.responseText):{exists:!1,size:0}}function x(e){try{return l(e).exists}catch{return!1}}function y(e){let{exists:t,size:n}=l(e);if(!t)throw c(e);return{size:n,isFile:()=>!0,isDirectory:()=>!1,mtimeMs:0}}var o=()=>{},a=e=>()=>{throw new Error(`fs.${e} is not available in the browser preview`)},h=o,R=o,S=o,U=o,E=o,L=o,F=o,O=()=>[],g=e=>{if(!x(e))throw c(e)},T=a("createReadStream"),b=a("createWriteStream"),k=a("watch"),M={F_OK:0,R_OK:4,W_OK:2,X_OK:1},s=async()=>{},N={readFile:async(e,t)=>{let n=await fetch(u(e));if(!n.ok)throw c(e);let r=new Uint8Array(await n.arrayBuffer());return f(t)?new TextDecoder().decode(r):r},stat:async e=>y(e),access:async e=>g(e),readdir:async()=>[],writeFile:s,appendFile:s,mkdir:s,rm:s,unlink:s,rename:s,copyFile:s,open:a("promises.open")},q={readFileSync:m,existsSync:x,statSync:y,accessSync:g,readdirSync:O,writeFileSync:h,mkdirSync:R,rmSync:S,unlinkSync:U,renameSync:E,copyFileSync:L,appendFileSync:F,createReadStream:T,createWriteStream:b,watch:k,constants:M,promises:N};export{m as a,x as b,y as c,h as d,R as e,S as f,U as g,E as h,L as i,F as j,O as k,g as l,T as m,b as n,k as o,M as p,N as q,q as r};
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import{e as f}from"./chunk-BVF64D6H.mjs";f();f();var C=`
|
|
2
|
+
struct FlowParams {
|
|
3
|
+
width: u32,
|
|
4
|
+
height: u32,
|
|
5
|
+
windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)
|
|
6
|
+
regularization: f32, // Tikhonov regularization lambda
|
|
7
|
+
maxDisplacement: f32, // Maximum allowable flow vector length
|
|
8
|
+
_pad0: f32,
|
|
9
|
+
_pad1: f32,
|
|
10
|
+
_pad2: f32,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
@group(0) @binding(0) var prevTex: texture_2d<f32>;
|
|
14
|
+
@group(0) @binding(1) var currTex: texture_2d<f32>;
|
|
15
|
+
@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;
|
|
16
|
+
@group(0) @binding(3) var<uniform> params: FlowParams;
|
|
17
|
+
|
|
18
|
+
fn rgbToLuminance(rgb: vec3<f32>) -> f32 {
|
|
19
|
+
return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {
|
|
23
|
+
let inDims = vec2<f32>(textureDimensions(tex));
|
|
24
|
+
let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));
|
|
25
|
+
let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);
|
|
26
|
+
let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));
|
|
27
|
+
let color = textureLoad(tex, clamped, 0);
|
|
28
|
+
return rgbToLuminance(color.rgb);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@compute @workgroup_size(16, 16)
|
|
32
|
+
fn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
33
|
+
if (id.x >= params.width || id.y >= params.height) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let centerCoord = vec2<i32>(i32(id.x), i32(id.y));
|
|
38
|
+
let w = i32(max(params.windowSize, 1u));
|
|
39
|
+
|
|
40
|
+
var sxx: f32 = 0.0;
|
|
41
|
+
var syy: f32 = 0.0;
|
|
42
|
+
var sxy: f32 = 0.0;
|
|
43
|
+
var sxt: f32 = 0.0;
|
|
44
|
+
var syt: f32 = 0.0;
|
|
45
|
+
|
|
46
|
+
for (var dy = -w; dy <= w; dy = dy + 1) {
|
|
47
|
+
for (var dx = -w; dx <= w; dx = dx + 1) {
|
|
48
|
+
let p = centerCoord + vec2<i32>(dx, dy);
|
|
49
|
+
|
|
50
|
+
// Central difference spatial gradients on current frame
|
|
51
|
+
let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));
|
|
52
|
+
let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));
|
|
53
|
+
let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));
|
|
54
|
+
let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));
|
|
55
|
+
|
|
56
|
+
let ix = (rx - lx) * 0.5;
|
|
57
|
+
let iy = (dyL - uy) * 0.5;
|
|
58
|
+
|
|
59
|
+
// Temporal gradient: difference between current and previous frame
|
|
60
|
+
let cCurr = sampleLuma(currTex, p);
|
|
61
|
+
let cPrev = sampleLuma(prevTex, p);
|
|
62
|
+
let it = cCurr - cPrev;
|
|
63
|
+
|
|
64
|
+
// Gaussian spatial falloff weight
|
|
65
|
+
let distSq = f32(dx * dx + dy * dy);
|
|
66
|
+
let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));
|
|
67
|
+
|
|
68
|
+
sxx += ix * ix * weight;
|
|
69
|
+
syy += iy * iy * weight;
|
|
70
|
+
sxy += ix * iy * weight;
|
|
71
|
+
sxt += ix * it * weight;
|
|
72
|
+
syt += iy * it * weight;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Tikhonov regularization prevents singularity in flat/homogeneous regions
|
|
77
|
+
let trace = sxx + syy;
|
|
78
|
+
let reg = max(params.regularization, 1e-4) * max(trace, 1.0);
|
|
79
|
+
let A = sxx + reg;
|
|
80
|
+
let B = sxy;
|
|
81
|
+
let C = syy + reg;
|
|
82
|
+
|
|
83
|
+
let det = A * C - B * B;
|
|
84
|
+
var u: f32 = 0.0;
|
|
85
|
+
var v: f32 = 0.0;
|
|
86
|
+
|
|
87
|
+
if (det > 1e-6) {
|
|
88
|
+
u = (-sxt * C + syt * B) / det;
|
|
89
|
+
v = (-syt * A + sxt * B) / det;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
let mag = length(vec2<f32>(u, v));
|
|
93
|
+
let maxD = max(params.maxDisplacement, 1.0);
|
|
94
|
+
if (mag > maxD) {
|
|
95
|
+
let scale = maxD / mag;
|
|
96
|
+
u *= scale;
|
|
97
|
+
v *= scale;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));
|
|
101
|
+
}
|
|
102
|
+
`,G=`
|
|
103
|
+
struct FlowParams {
|
|
104
|
+
width: u32,
|
|
105
|
+
height: u32,
|
|
106
|
+
windowSize: u32,
|
|
107
|
+
regularization: f32,
|
|
108
|
+
maxDisplacement: f32,
|
|
109
|
+
coarseWidth: u32,
|
|
110
|
+
coarseHeight: u32,
|
|
111
|
+
_pad0: f32,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
@group(0) @binding(0) var prevTex: texture_2d<f32>;
|
|
115
|
+
@group(0) @binding(1) var currTex: texture_2d<f32>;
|
|
116
|
+
@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;
|
|
117
|
+
@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;
|
|
118
|
+
@group(0) @binding(4) var<uniform> params: FlowParams;
|
|
119
|
+
@group(0) @binding(5) var bilinearSamp: sampler;
|
|
120
|
+
|
|
121
|
+
fn rgbToLuminance(rgb: vec3<f32>) -> f32 {
|
|
122
|
+
return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
fn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {
|
|
126
|
+
let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));
|
|
127
|
+
let color = textureLoad(tex, clamped, 0);
|
|
128
|
+
return rgbToLuminance(color.rgb);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {
|
|
132
|
+
let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));
|
|
133
|
+
let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
134
|
+
let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
|
|
135
|
+
return rgbToLuminance(sampleColor.rgb);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@compute @workgroup_size(16, 16)
|
|
139
|
+
fn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
140
|
+
if (id.x >= params.width || id.y >= params.height) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
let centerCoord = vec2<i32>(i32(id.x), i32(id.y));
|
|
145
|
+
let w = i32(max(params.windowSize, 1u));
|
|
146
|
+
let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));
|
|
147
|
+
let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;
|
|
148
|
+
|
|
149
|
+
// Read upsampled prior flow from coarse scale (scaled by 2x)
|
|
150
|
+
let coarseCoord = vec2<i32>(centerCoord / 2);
|
|
151
|
+
let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);
|
|
152
|
+
let priorFlow = coarseSample.xy * 2.0;
|
|
153
|
+
|
|
154
|
+
var sxx: f32 = 0.0;
|
|
155
|
+
var syy: f32 = 0.0;
|
|
156
|
+
var sxy: f32 = 0.0;
|
|
157
|
+
var sxt: f32 = 0.0;
|
|
158
|
+
var syt: f32 = 0.0;
|
|
159
|
+
|
|
160
|
+
for (var dy = -w; dy <= w; dy = dy + 1) {
|
|
161
|
+
for (var dx = -w; dx <= w; dx = dx + 1) {
|
|
162
|
+
let p = centerCoord + vec2<i32>(dx, dy);
|
|
163
|
+
let pUv = (vec2<f32>(p) + 0.5) * invDims;
|
|
164
|
+
|
|
165
|
+
let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));
|
|
166
|
+
let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));
|
|
167
|
+
let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));
|
|
168
|
+
let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));
|
|
169
|
+
|
|
170
|
+
let ix = (rx - lx) * 0.5;
|
|
171
|
+
let iy = (dyL - uy) * 0.5;
|
|
172
|
+
|
|
173
|
+
// Temporal residual against warped previous frame
|
|
174
|
+
let cCurr = sampleLuma(currTex, p);
|
|
175
|
+
let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);
|
|
176
|
+
let it = cCurr - cWarpedPrev;
|
|
177
|
+
|
|
178
|
+
let distSq = f32(dx * dx + dy * dy);
|
|
179
|
+
let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));
|
|
180
|
+
|
|
181
|
+
sxx += ix * ix * weight;
|
|
182
|
+
syy += iy * iy * weight;
|
|
183
|
+
sxy += ix * iy * weight;
|
|
184
|
+
sxt += ix * it * weight;
|
|
185
|
+
syt += iy * it * weight;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
let trace = sxx + syy;
|
|
190
|
+
let reg = max(params.regularization, 1e-4) * max(trace, 1.0);
|
|
191
|
+
let A = sxx + reg;
|
|
192
|
+
let B = sxy;
|
|
193
|
+
let C = syy + reg;
|
|
194
|
+
|
|
195
|
+
let det = A * C - B * B;
|
|
196
|
+
var du: f32 = 0.0;
|
|
197
|
+
var dv: f32 = 0.0;
|
|
198
|
+
|
|
199
|
+
if (det > 1e-6) {
|
|
200
|
+
du = (-sxt * C + syt * B) / det;
|
|
201
|
+
dv = (-syt * A + sxt * B) / det;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Combine coarse prior flow with fine residual flow
|
|
205
|
+
var totalFlow = priorFlow + vec2<f32>(du, dv);
|
|
206
|
+
let mag = length(totalFlow);
|
|
207
|
+
let maxD = max(params.maxDisplacement, 1.0);
|
|
208
|
+
if (mag > maxD) {
|
|
209
|
+
totalFlow *= (maxD / mag);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));
|
|
213
|
+
}
|
|
214
|
+
`;var T=class{constructor(e){this.device=e;let i=e.createShaderModule({label:"optical_flow_direct.wgsl",code:C});this.directPipeline=e.createComputePipeline({label:"OpticalFlowDirectPipeline",layout:"auto",compute:{module:i,entryPoint:"computeFlow"}});let t=e.createShaderModule({label:"optical_flow_refine.wgsl",code:G});this.refinePipeline=e.createComputePipeline({label:"OpticalFlowRefinePipeline",layout:"auto",compute:{module:t,entryPoint:"refineFlow"}}),this.directUniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"optical_flow_direct_uniform"}),this.refineUniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"optical_flow_refine_uniform"}),this.bilinearSampler=e.createSampler({label:"optical_flow_bilinear_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}device;directPipeline;refinePipeline;directUniformBuffer;refineUniformBuffer;bilinearSampler;cachedCoarseTexture;cachedOutputTexture;execute(e,i,t={},o){let r=i.width,l=i.height,x=t?.windowSize??3,g=t?.regularization??t?.lambda??.05,m=t?.scale??.5,n=64,w=t.outputFormat??"rgba16float";(!this.cachedOutputTexture||this.cachedOutputTexture.width!==r||this.cachedOutputTexture.height!==l||this.cachedOutputTexture.format!==w)&&(this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=this.device.createTexture({label:`optical_flow_output_${w}`,size:[r,l],format:w,usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}));let v=o??this.device.createCommandEncoder({label:"optical_flow_command_encoder"});if(m>.1&&m<.95&&r>=64&&l>=64){let a=Math.max(16,Math.floor(r*m)),s=Math.max(16,Math.floor(l*m));(!this.cachedCoarseTexture||this.cachedCoarseTexture.width!==a||this.cachedCoarseTexture.height!==s)&&(this.cachedCoarseTexture?.destroy(),this.cachedCoarseTexture=this.device.createTexture({label:"optical_flow_coarse",size:[a,s],format:"rgba16float",usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}));let u=new ArrayBuffer(32),p=new Uint32Array(u),c=new Float32Array(u);p[0]=a,p[1]=s,p[2]=x,c[3]=g,c[4]=n*m,this.device.queue.writeBuffer(this.directUniformBuffer,0,u);let P=this.device.createBindGroup({layout:this.directPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedCoarseTexture.createView()},{binding:3,resource:{buffer:this.directUniformBuffer}}]}),d=v.beginComputePass({label:"optical_flow_coarse_pass"});d.setPipeline(this.directPipeline),d.setBindGroup(0,P),d.dispatchWorkgroups(Math.ceil(a/16),Math.ceil(s/16)),d.end();let h=new ArrayBuffer(32),b=new Uint32Array(h),B=new Float32Array(h);b[0]=r,b[1]=l,b[2]=x,B[3]=g,B[4]=n,b[5]=a,b[6]=s,this.device.queue.writeBuffer(this.refineUniformBuffer,0,h);let L=this.device.createBindGroup({layout:this.refinePipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedCoarseTexture.createView()},{binding:3,resource:this.cachedOutputTexture.createView()},{binding:4,resource:{buffer:this.refineUniformBuffer}},{binding:5,resource:this.bilinearSampler}]}),y=v.beginComputePass({label:"optical_flow_fine_pass"});y.setPipeline(this.refinePipeline),y.setBindGroup(0,L),y.dispatchWorkgroups(Math.ceil(r/16),Math.ceil(l/16)),y.end()}else{let a=new ArrayBuffer(32),s=new Uint32Array(a),u=new Float32Array(a);s[0]=r,s[1]=l,s[2]=x,u[3]=g,u[4]=n,this.device.queue.writeBuffer(this.directUniformBuffer,0,a);let p=this.device.createBindGroup({layout:this.directPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedOutputTexture.createView()},{binding:3,resource:{buffer:this.directUniformBuffer}}]}),c=v.beginComputePass({label:"optical_flow_direct_pass"});c.setPipeline(this.directPipeline),c.setBindGroup(0,p),c.dispatchWorkgroups(Math.ceil(r/16),Math.ceil(l/16)),c.end()}return o||this.device.queue.submit([v.finish()]),this.cachedOutputTexture}destroy(){this.cachedCoarseTexture?.destroy(),this.cachedOutputTexture?.destroy(),this.directUniformBuffer.destroy(),this.refineUniformBuffer.destroy()}};f();f();var F=`
|
|
215
|
+
struct WarpBlendParams {
|
|
216
|
+
width: u32,
|
|
217
|
+
height: u32,
|
|
218
|
+
blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)
|
|
219
|
+
disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame
|
|
220
|
+
maxMotionPixels: f32, // Speed cutoff for fallback to curr frame
|
|
221
|
+
isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend
|
|
222
|
+
_pad0: f32,
|
|
223
|
+
_pad1: f32,
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
@group(0) @binding(0) var prevTex: texture_2d<f32>;
|
|
227
|
+
@group(0) @binding(1) var currTex: texture_2d<f32>;
|
|
228
|
+
@group(0) @binding(2) var flowTex: texture_2d<f32>;
|
|
229
|
+
@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;
|
|
230
|
+
@group(0) @binding(4) var<uniform> params: WarpBlendParams;
|
|
231
|
+
@group(0) @binding(5) var bilinearSamp: sampler;
|
|
232
|
+
|
|
233
|
+
@compute @workgroup_size(16, 16)
|
|
234
|
+
fn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
235
|
+
if (id.x >= params.width || id.y >= params.height) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
let coord = vec2<i32>(i32(id.x), i32(id.y));
|
|
240
|
+
let currColor = textureLoad(currTex, coord, 0);
|
|
241
|
+
|
|
242
|
+
// If first frame or scene cut reset, pass through current frame directly
|
|
243
|
+
if (params.isFirstFrame > 0.5) {
|
|
244
|
+
textureStore(outTex, id.xy, currColor);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
let dims = vec2<f32>(f32(params.width), f32(params.height));
|
|
249
|
+
let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);
|
|
250
|
+
let uv = (vec2<f32>(id.xy) + 0.5) * invDims;
|
|
251
|
+
|
|
252
|
+
// Read motion vector (u, v) in pixel units
|
|
253
|
+
let flowSample = textureLoad(flowTex, coord, 0);
|
|
254
|
+
let flow = flowSample.xy;
|
|
255
|
+
let speed = length(flow);
|
|
256
|
+
|
|
257
|
+
// Motion-compensated backward warp coordinate pointing to previous frame
|
|
258
|
+
let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
259
|
+
let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
|
|
260
|
+
|
|
261
|
+
// Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)
|
|
262
|
+
let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;
|
|
263
|
+
|
|
264
|
+
// Adaptive blend weight:
|
|
265
|
+
// - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)
|
|
266
|
+
// - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)
|
|
267
|
+
let tLow = params.disocclusionThreshold;
|
|
268
|
+
let tHigh = params.disocclusionThreshold * 1.5;
|
|
269
|
+
let errFactor = smoothstep(tLow, tHigh, colorDiff);
|
|
270
|
+
let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);
|
|
271
|
+
|
|
272
|
+
let fallbackFactor = max(errFactor, speedFactor);
|
|
273
|
+
let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);
|
|
274
|
+
|
|
275
|
+
let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);
|
|
276
|
+
let blendedA = mix(warpedPrev.a, currColor.a, alpha);
|
|
277
|
+
|
|
278
|
+
textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));
|
|
279
|
+
}
|
|
280
|
+
`,S=`
|
|
281
|
+
struct WarpBlendParams {
|
|
282
|
+
width: u32,
|
|
283
|
+
height: u32,
|
|
284
|
+
blendWeight: f32,
|
|
285
|
+
disocclusionThreshold: f32,
|
|
286
|
+
maxMotionPixels: f32,
|
|
287
|
+
isFirstFrame: f32,
|
|
288
|
+
_pad0: f32,
|
|
289
|
+
_pad1: f32,
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
@group(0) @binding(0) var prevTex: texture_2d<f32>;
|
|
293
|
+
@group(0) @binding(1) var currTex: texture_2d<f32>;
|
|
294
|
+
@group(0) @binding(2) var flowTex: texture_2d<f32>;
|
|
295
|
+
@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;
|
|
296
|
+
@group(0) @binding(4) var<uniform> params: WarpBlendParams;
|
|
297
|
+
@group(0) @binding(5) var bilinearSamp: sampler;
|
|
298
|
+
|
|
299
|
+
@compute @workgroup_size(16, 16)
|
|
300
|
+
fn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
301
|
+
if (id.x >= params.width || id.y >= params.height) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
let coord = vec2<i32>(i32(id.x), i32(id.y));
|
|
306
|
+
let currColor = textureLoad(currTex, coord, 0);
|
|
307
|
+
|
|
308
|
+
if (params.isFirstFrame > 0.5) {
|
|
309
|
+
textureStore(outTex, id.xy, currColor);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
let dims = vec2<f32>(f32(params.width), f32(params.height));
|
|
314
|
+
let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);
|
|
315
|
+
let uv = (vec2<f32>(id.xy) + 0.5) * invDims;
|
|
316
|
+
|
|
317
|
+
let flowSample = textureLoad(flowTex, coord, 0);
|
|
318
|
+
let flow = flowSample.xy;
|
|
319
|
+
let speed = length(flow);
|
|
320
|
+
|
|
321
|
+
let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
322
|
+
let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
|
|
323
|
+
|
|
324
|
+
// Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)
|
|
325
|
+
let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;
|
|
326
|
+
|
|
327
|
+
let tLow = params.disocclusionThreshold;
|
|
328
|
+
let tHigh = params.disocclusionThreshold * 1.5;
|
|
329
|
+
let errFactor = smoothstep(tLow, tHigh, colorDiff);
|
|
330
|
+
let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);
|
|
331
|
+
|
|
332
|
+
let fallbackFactor = max(errFactor, speedFactor);
|
|
333
|
+
let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);
|
|
334
|
+
|
|
335
|
+
let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);
|
|
336
|
+
let blendedA = mix(warpedPrev.a, currColor.a, alpha);
|
|
337
|
+
|
|
338
|
+
textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));
|
|
339
|
+
}
|
|
340
|
+
`;var D=class{constructor(e){this.device=e;this.flowPipeline=new T(e);let i=e.createShaderModule({label:"temporal_warp_blend_rgba8.wgsl",code:F});this.rgba8Pipeline=e.createComputePipeline({label:"TemporalWarpBlendRgba8Pipeline",layout:"auto",compute:{module:i,entryPoint:"warpBlend"}});let t=e.createShaderModule({label:"temporal_warp_blend_rgba16f.wgsl",code:S});this.rgba16fPipeline=e.createComputePipeline({label:"TemporalWarpBlendRgba16fPipeline",layout:"auto",compute:{module:t,entryPoint:"warpBlend"}}),this.uniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"temporal_deflicker_uniform"}),this.bilinearSampler=e.createSampler({label:"temporal_deflicker_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}device;flowPipeline;rgba8Pipeline;rgba16fPipeline;uniformBuffer;bilinearSampler;historyTexture;cachedOutputTexture;execute(e,i={},t){let o=e.width,r=e.height,l=i.blendWeight??.35,x=typeof l=="number"?l:Number(l),g=i.disocclusionThreshold??.15,m=i.maxMotionPixels??64,n=e.format,w=n==="rgba16float";if((!this.cachedOutputTexture||this.cachedOutputTexture.width!==o||this.cachedOutputTexture.height!==r||this.cachedOutputTexture.format!==n)&&(this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=this.device.createTexture({label:`deflickered_output_${n}`,size:[o,r],format:n,usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT})),!this.historyTexture||this.historyTexture.width!==o||this.historyTexture.height!==r){this.historyTexture?.destroy(),this.historyTexture=this.device.createTexture({label:"deflicker_history_texture",size:[o,r],format:n,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC});let h=t??this.device.createCommandEncoder({label:"deflicker_first_frame_encoder"});return h.copyTextureToTexture({texture:e},{texture:this.historyTexture},[o,r]),h.copyTextureToTexture({texture:e},{texture:this.cachedOutputTexture},[o,r]),t||this.device.queue.submit([h.finish()]),this.cachedOutputTexture}let U=this.flowPipeline.execute(this.historyTexture,e,i.opticalFlow,t),a=new ArrayBuffer(32),s=new Uint32Array(a),u=new Float32Array(a);s[0]=o,s[1]=r,u[2]=x,u[3]=g,u[4]=m,u[5]=0,this.device.queue.writeBuffer(this.uniformBuffer,0,a);let p=w?this.rgba16fPipeline:this.rgba8Pipeline,c=t??this.device.createCommandEncoder({label:"deflicker_blend_encoder"}),P=this.device.createBindGroup({layout:p.getBindGroupLayout(0),entries:[{binding:0,resource:this.historyTexture.createView()},{binding:1,resource:e.createView()},{binding:2,resource:U.createView()},{binding:3,resource:this.cachedOutputTexture.createView()},{binding:4,resource:{buffer:this.uniformBuffer}},{binding:5,resource:this.bilinearSampler}]}),d=c.beginComputePass({label:"deflicker_blend_pass"});return d.setPipeline(p),d.setBindGroup(0,P),d.dispatchWorkgroups(Math.ceil(o/16),Math.ceil(r/16)),d.end(),c.copyTextureToTexture({texture:this.cachedOutputTexture},{texture:this.historyTexture},[o,r]),t||this.device.queue.submit([c.finish()]),this.cachedOutputTexture}reset(){this.historyTexture?.destroy(),this.historyTexture=void 0}destroy(){this.flowPipeline.destroy(),this.historyTexture?.destroy(),this.cachedOutputTexture?.destroy(),this.uniformBuffer.destroy()}};export{T as a,D as b};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as ae}from"./chunk-37EFVZWT.mjs";import{d as w}from"./chunk-6YJP57MZ.mjs";import{e as te}from"./chunk-BVF64D6H.mjs";te();var oe=()=>{if(typeof window>"u")return Promise.resolve();let g=globalThis.scheduler;return typeof g?.yield=="function"?g.yield():new Promise(n=>setTimeout(n,0))},ie=class g{static devicePipelineCache=new WeakMap;static getDeviceCache(n){let r=g.devicePipelineCache.get(n);return r||(r=new Map,g.devicePipelineCache.set(n,r)),r}static getCache(n,r,l,S="",U=1){let c=`${r??"global"}_${l}_${S}_${U}`;return g.devicePipelineCache.get(n)?.get(c)}static clearCache(n,r){if(!r)return;let l=g.devicePipelineCache.get(r);if(!l)return;let S=`${n}_`;for(let[U,c]of l.entries())U.startsWith(S)&&(c.stateBuffer.destroy(),c.inputBuffer?.destroy(),c.outputBuffer?.destroy(),c.uniformBuffer?.destroy(),l.delete(U))}static async process(n,r,l,S,U,c,C,re,ue,v,N=1,A,k=!1,z,V,q,M,$){let p=l.length;if(p===0)return;let _=l[0].length;if(_===0)return;let W=z!==void 0?z/1e3:c/C,K=V!==void 0?V/1e3:0,R=[],L="",Y="",h=[],j=new Map,D=U.operation;if(D?.inputs){for(let e of Object.values(D.inputs))if(e?.connectionValid&&e.outputItem&&e.outputItem.type==="Signal"){let i=e.outputItem.data;i&&await w.ensureAudioSourcesExtracted(n,i,C,A)}for(let[e,i]of Object.entries(D))if(e.endsWith("HandleId")&&i){let d=i,u=D.inputs[d];if(u?.connectionValid&&u.outputItem&&u.outputItem.type==="Signal"){let o=u.outputItem.data;if(o){let m=e.replace("HandleId","");if(k){R.push({parameterName:m,signalNodeId:o.nodeId??"sig",signalFnName:o.signalFnName??o.name??"sig_fn"});let s=n.createCommandEncoder(),f=w.getOrCreate1DBuffer(n,s,o.nodeId??"sig",W,K,o,_,S,A,c,C);n.queue.submit([s.finish()]),j.set(m,f),$||h.push(f)}else{let s=o.nodeId;if(s){let f=ae.get(s,A);if(f){R.push({parameterName:m,signalNodeId:s,signalFnName:f.name}),Y+=`
|
|
2
|
+
${f.wgsl}`;let E=[];for(let b of f.fnParams){let P=b.defaultValue;E.push(P%1===0?`${P.toFixed(1)}f`:`${P}f`)}let x=`(${W.toFixed(6)}f + f32(index) / u.sampleRate)`,O=`${K.toFixed(6)}f`,B=["t","0.0","0.0","0.0","index","numSamples","frame","vec4<f32>(0.0)",x,O,...E];m==="makeupGain"&&(L+=`
|
|
3
|
+
let sigVal_${s} = ${f.name}(${B.join(", ")});
|
|
4
|
+
dynamicMakeupGain = dynamicMakeupGain + sigVal_${s};
|
|
5
|
+
`)}}}}}}}let H=re(k?{customSignalWGSL:"",makeupGainModulation:""}:{customSignalWGSL:Y,makeupGainModulation:L}),I=e=>new RegExp(`@binding\\s*\\(\\s*${e}\\s*\\)`).test(H);if(k)if($&&$.length>0)for(let e=0;e<$.length;e++){let i=$[e],d=j.get(i);d?h.push(d):I(4+e)&&h.push(w.getDummyBuffer(n))}else h.length===0&&I(4)&&h.push(w.getDummyBuffer(n));let Z=R.map(e=>`${e.parameterName}:${e.signalNodeId}`).join(","),J=`${A??"global"}_${r}_${Z}_${N}`,Q=g.getDeviceCache(n),t=Q.get(J);if(t)M&&n.queue.writeBuffer(t.stateBuffer,0,M);else{let e=n.createShaderModule({label:`audio_shader_${r}.wgsl`,code:H}),i=n.createComputePipeline({label:`AudioComputePipeline_${r}`,layout:"auto",compute:{module:e,entryPoint:"main"}}),d=n.createBuffer({size:N*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:`audio_state_${r}`}),u=new Float32Array(N);q&&u.set(q,0),M&&u.set(M,0),n.queue.writeBuffer(d,0,u),t={pipeline:i,stateBuffer:d,activeSignalsKey:Z},Q.set(J,t)}let T=65536;for(let e=0;e<_;e+=T){let i=Math.min(T,_-e),d=t.inputBuffer&&t.outputBuffer&&t.uniformBuffer&&t.allocatedSamples&&t.allocatedSamples>=i&&t.allocatedChannels&&t.allocatedChannels>=p&&t.allocatedUniformsFloatCount&&t.allocatedUniformsFloatCount>=v,u,o,m;if(d)u=t.inputBuffer,o=t.outputBuffer,m=t.uniformBuffer;else{let a=Math.max(i,T),y=p,G=v,X=n.createBuffer({size:y*a*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:`audio_input_temp_${r}_chunk_${e}`}),ee=n.createBuffer({size:y*a*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC,label:`audio_output_temp_${r}_chunk_${e}`}),ne=n.createBuffer({size:G*4,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:`audio_uniforms_temp_${r}_chunk_${e}`});u=X,o=ee,m=ne,t.inputBuffer?.destroy(),t.outputBuffer?.destroy(),t.uniformBuffer?.destroy(),t.inputBuffer=X,t.outputBuffer=ee,t.uniformBuffer=ne,t.allocatedSamples=a,t.allocatedChannels=y,t.allocatedUniformsFloatCount=G}let s=n.createBuffer({size:p*i*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:`audio_staging_temp_${r}_chunk_${e}`}),f=[{binding:0,resource:{buffer:m}},{binding:1,resource:{buffer:u}},{binding:2,resource:{buffer:o}},{binding:3,resource:{buffer:t.stateBuffer}}];if(k)for(let a=0;a<h.length;a++){let y=4+a;if(I(y)){let G=h[a];G.size>=(e+i)*4?f.push({binding:y,resource:{buffer:G,offset:e*4,size:i*4}}):f.push({binding:y,resource:{buffer:G,offset:0,size:G.size}})}}let E=n.createBindGroup({layout:t.pipeline.getBindGroupLayout(0),entries:f}),x=new Float32Array(p*i);for(let a=0;a<p;a++)x.set(l[a].subarray(e,e+i),a*i);n.queue.writeBuffer(u,0,x);let O=c/C+e/S,B=ue(O),b=-1;for(let a=B.length-2;a>=0;a--)if(B[a]===_&&B[a+1]===p){b=a;break}b===-1&&(b=B.indexOf(_)),b!==-1&&(B[b]=i),n.queue.writeBuffer(m,0,new Float32Array(B));let P=n.createCommandEncoder({label:`audio_encoder_${r}_chunk_${e}`}),F=P.beginComputePass({label:`audio_pass_${r}_chunk_${e}`});F.setPipeline(t.pipeline),F.setBindGroup(0,E),F.dispatchWorkgroups(1),F.end(),P.copyBufferToBuffer(o,0,s,0,p*i*4),n.queue.submit([P.finish()]),await s.mapAsync(GPUMapMode.READ);let se=new Float32Array(s.getMappedRange());for(let a=0;a<p;a++)l[a].set(se.subarray(a*i,(a+1)*i),e);s.unmap(),await oe()}}};export{ie as a};
|