framefields 2.12.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/dist/audio/index.d.mts +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-afTBdB3U.d.mts → audio-C4B9p_yq.d.mts} +3 -4
- package/dist/audio-C4B9p_yq.d.mts.map +1 -0
- package/dist/{audio-DHLoNcxD.mjs → audio-DIvi6hTD.mjs} +4 -4
- package/dist/{audio-DHLoNcxD.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
- package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
- package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +51 -51
- package/dist/cli/check-worker.mjs.map +1 -1
- package/dist/cli/local-worker.d.mts +28 -0
- package/dist/cli/local-worker.d.mts.map +1 -0
- package/dist/cli/local-worker.mjs +83 -0
- package/dist/cli/local-worker.mjs.map +1 -0
- package/dist/cli.mjs +229 -54
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +2 -0
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +1 -1
- package/dist/{cloud-COid1Ipa.mjs → cloud-Cj1TIme8.mjs} +306 -7
- package/dist/cloud-Cj1TIme8.mjs.map +1 -0
- package/dist/components/index.d.mts +15 -14
- package/dist/components/index.mjs +47 -47
- package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
- package/dist/{dist-CySGkG54.mjs.map → dist-BSKAbyea.mjs.map} +1 -1
- package/dist/{dist-BwtxciN4.mjs → dist-B_rSWeOz.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
- package/dist/{dist-BSqeChht.mjs → dist-CCrYOkcc.mjs} +145 -84
- package/dist/dist-CCrYOkcc.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
- package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
- package/dist/{dist-B-OPY7Cs.mjs → dist-DtPPPsZV.mjs} +356 -145
- package/dist/dist-DtPPPsZV.mjs.map +1 -0
- package/dist/{dist-2_lT3Dwc.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-2_lT3Dwc.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
- package/dist/effects/index.d.mts +6 -6
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C8CL9cOq.mjs → effects-B-L3rLs6.mjs} +3 -3
- package/dist/{effects-C8CL9cOq.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-BQrDjnpV.mjs → fonts-k5ll8NTE.mjs} +2 -2
- package/dist/{fonts-BQrDjnpV.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
- package/dist/{gpu-DHa-3Dou.mjs → gpu-D2HT3KcE.mjs} +2 -2
- package/dist/{gpu-DHa-3Dou.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
- package/dist/{index-CTv9ZieD.d.mts → index-B08eSpaI.d.mts} +3 -30
- package/dist/index-B08eSpaI.d.mts.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.d.mts.map +1 -0
- package/dist/{index-Drk6HC2k.d.mts → index-BGlaws7-.d.mts} +3 -3
- package/dist/{index-Drk6HC2k.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
- package/dist/{index-CAuNuvIg.d.mts → index-ByhlTwxh.d.mts} +5 -5
- package/dist/{index-CAuNuvIg.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
- package/dist/{index-Fliv2Z-w.d.mts → index-C2yaponf.d.mts} +132 -7
- package/dist/index-C2yaponf.d.mts.map +1 -0
- package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
- package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
- package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
- package/dist/index-CnZhBlob.d.mts.map +1 -0
- package/dist/{index-BNClElng.d.mts → index-CtKUQ2VG.d.mts} +281 -283
- package/dist/index-CtKUQ2VG.d.mts.map +1 -0
- package/dist/{index-WwuuX8ZJ.d.mts → index-DBh3WphX.d.mts} +2 -2
- package/dist/{index-WwuuX8ZJ.d.mts.map → index-DBh3WphX.d.mts.map} +1 -1
- package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
- package/dist/index-DQ1U3HC3.d.mts.map +1 -0
- package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
- package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
- package/dist/{index-DQa7mhzq.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-DQa7mhzq.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -15
- package/dist/index.mjs +58 -58
- package/dist/preview/index.d.mts +5 -4
- package/dist/preview/index.mjs +12 -12
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-FJTURGJV.mjs → chunk-3C2XT64C.mjs} +1 -1
- package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
- package/dist/preview-engine/{chunk-4JNIEQS2.mjs → chunk-5ZS46EFB.mjs} +1 -1
- package/dist/preview-engine/{chunk-KBCZKIIQ.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/chunk-FZ4RD7HV.mjs +1 -0
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-RGKS6YIA.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/chunk-N3XTDAL6.mjs +2227 -0
- package/dist/preview-engine/{chunk-O75BFM4S.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
- package/dist/preview-engine/{chunk-VUO4K52B.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/{chunk-HTAHYSCW.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-6O7UDVNL.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TKXOSEIJ.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-JAUMCOOJ.mjs → chunk-UBY2UYEL.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/{chunk-M4QVCQ3O.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYKN2VET.mjs → chunk-XCPRRMMW.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 +5 -5
- package/dist/preview-engine/{renderers-L6GFGHS6.mjs → renderers-AFTUFMQQ.mjs} +1 -1
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -1
- package/dist/preview-engine/{renderers-PREFONJG.mjs → renderers-EPSF5CSQ.mjs} +1 -1
- package/dist/preview-engine/{renderers-R22CDFO4.mjs → renderers-OJWWIVNW.mjs} +1 -1
- package/dist/preview-engine/{renderers-TS32FDV7.mjs → renderers-RHMRWX46.mjs} +1 -1
- package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
- package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
- package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
- package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
- package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +228 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-GPF7RIBU.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{preview-BUtt481A.mjs → preview-lHH8Tv4j.mjs} +323 -35
- package/dist/preview-lHH8Tv4j.mjs.map +1 -0
- package/dist/{program-Cvv_nb9T.mjs → program-BfiB9ttP.mjs} +17 -4
- package/dist/program-BfiB9ttP.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/renderer-0rLmztAv.mjs +5 -0
- package/dist/{renderer-D3QPNBEj.mjs → renderer-4nsuReW2.mjs} +5 -5
- package/dist/{renderer-D3QPNBEj.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
- package/dist/{renderer-DO1SZ5xY.mjs → renderer-7xQmXXMH.mjs} +5 -5
- package/dist/{renderer-DO1SZ5xY.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
- package/dist/renderer-B0pjOXFY.mjs +5 -0
- package/dist/{renderer-BSsKlcHk.mjs → renderer-B10HDC13.mjs} +5 -5
- package/dist/{renderer-BSsKlcHk.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
- package/dist/{renderer-DaY04IyU.mjs → renderer-B2IUPjhw.mjs} +5 -5
- package/dist/{renderer-DaY04IyU.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
- package/dist/{renderer-O4y02xkD.mjs → renderer-B3_GddgJ.mjs} +4 -4
- package/dist/{renderer-O4y02xkD.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
- package/dist/{renderer-DQJHjU0L.mjs → renderer-B3un4Pdi.mjs} +5 -5
- package/dist/{renderer-DQJHjU0L.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
- package/dist/{renderer-PnnkUWm-.mjs → renderer-B6bK9rXm.mjs} +4 -4
- package/dist/{renderer-PnnkUWm-.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
- package/dist/renderer-B7J13reL.mjs +5 -0
- package/dist/{renderer-HXw4cJZx.mjs → renderer-BEhZiOT4.mjs} +3 -3
- package/dist/{renderer-HXw4cJZx.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
- package/dist/{renderer-xNOKSN3V.mjs → renderer-BEuXJY-C.mjs} +5 -5
- package/dist/{renderer-xNOKSN3V.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
- package/dist/{renderer-IAffbHXx.mjs → renderer-BGchUBW_.mjs} +4 -4
- package/dist/{renderer-IAffbHXx.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
- package/dist/{renderer-CZClDMgF.mjs → renderer-BIKkxw_Z.mjs} +5 -5
- package/dist/{renderer-CZClDMgF.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
- package/dist/{renderer-BvRM3OZ6.mjs → renderer-BM19iK8v.mjs} +3 -3
- package/dist/{renderer-BvRM3OZ6.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
- package/dist/{renderer-CtpEzVBn.mjs → renderer-BOlHW3Mi.mjs} +3 -3
- package/dist/{renderer-CtpEzVBn.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
- package/dist/renderer-BPGIKGgl.mjs +5 -0
- package/dist/{renderer-4uZGSmUD.mjs → renderer-BTwuM9u-.mjs} +5 -5
- package/dist/{renderer-4uZGSmUD.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
- package/dist/{renderer-DO_zXwMJ.mjs → renderer-BZMh2io2.mjs} +5 -5
- package/dist/{renderer-DO_zXwMJ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
- package/dist/{renderer-rKw5_EjG.mjs → renderer-BZX932Lj.mjs} +4 -4
- package/dist/{renderer-rKw5_EjG.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
- package/dist/{renderer-5fGj_tqN.mjs → renderer-BhcTYhaP.mjs} +6 -6
- package/dist/{renderer-5fGj_tqN.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
- package/dist/{renderer-DL3o_lG1.mjs → renderer-BmyFfvVA.mjs} +5 -5
- package/dist/{renderer-DL3o_lG1.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
- package/dist/{renderer-DX60Kr20.mjs → renderer-BrEeUw7T.mjs} +3 -3
- package/dist/{renderer-DX60Kr20.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
- package/dist/{renderer-Bf7Z7WT5.mjs → renderer-BsrKj6Td.mjs} +4 -4
- package/dist/{renderer-Bf7Z7WT5.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs → renderer-BuvKGwk3.mjs} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/renderer-Bv-Artj1.mjs +5 -0
- package/dist/{renderer-_KIBvES8.mjs → renderer-BvBqTAtk.mjs} +5 -5
- package/dist/{renderer-_KIBvES8.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
- package/dist/renderer-BvLjbhcL.mjs +5 -0
- package/dist/{renderer-BC_Nse6h.mjs → renderer-Bw-_GZVw.mjs} +4 -4
- package/dist/{renderer-BC_Nse6h.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
- package/dist/{renderer-CLTRTtQ8.mjs → renderer-Bw0O--gW.mjs} +5 -5
- package/dist/{renderer-CLTRTtQ8.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
- package/dist/renderer-By6awWaf.mjs +5 -0
- package/dist/{renderer-DsPLMzy1.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-DsPLMzy1.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/renderer-C0rvsz7m.mjs +5 -0
- package/dist/{renderer-DP9ScNM6.mjs → renderer-C4hd6Cqi.mjs} +3 -3
- package/dist/{renderer-DP9ScNM6.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
- package/dist/{renderer-B09I95bo.mjs → renderer-C64_B8It.mjs} +3 -3
- package/dist/{renderer-DrL3J9ci.mjs → renderer-C98XwEIr.mjs} +4 -4
- package/dist/{renderer-DrL3J9ci.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
- package/dist/{renderer-6g1ri445.mjs → renderer-CC22Djgi.mjs} +5 -5
- package/dist/{renderer-6g1ri445.mjs.map → renderer-CC22Djgi.mjs.map} +1 -1
- package/dist/renderer-CDgud_HB.mjs +5 -0
- package/dist/renderer-CDiRF3bG.mjs +6 -0
- package/dist/{renderer-FvvywNvv.mjs → renderer-CHCRcCKw.mjs} +3 -3
- package/dist/{renderer-FvvywNvv.mjs.map → renderer-CHCRcCKw.mjs.map} +1 -1
- package/dist/renderer-CIIEQd4B.mjs +5 -0
- package/dist/renderer-CJblwOA9.mjs +5 -0
- package/dist/renderer-CNMOXtXE.mjs +5 -0
- package/dist/{renderer-D3YbHjRG.mjs → renderer-CO4NGvAh.mjs} +95 -80
- package/dist/renderer-CO4NGvAh.mjs.map +1 -0
- package/dist/{renderer-ByFPmHBC.mjs → renderer-CO9vE3sd.mjs} +4 -4
- package/dist/{renderer-ByFPmHBC.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
- package/dist/renderer-COeSeNGg.mjs +5 -0
- package/dist/{renderer-CN-mCIoI.mjs → renderer-CQ4h8n7p.mjs} +5 -5
- package/dist/{renderer-CN-mCIoI.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
- package/dist/{renderer-DEoerd-j.mjs → renderer-CRhEGqW4.mjs} +4 -4
- package/dist/{renderer-DEoerd-j.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
- package/dist/{renderer-CiHVnhUk.mjs → renderer-CSu_vYPn.mjs} +5 -5
- package/dist/{renderer-CiHVnhUk.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
- package/dist/{renderer-BJEexai1.mjs → renderer-CU6WT5jW.mjs} +5 -5
- package/dist/{renderer-BJEexai1.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
- package/dist/renderer-CUfElmtZ.mjs +5 -0
- package/dist/{renderer-BwJ0nXXu.mjs → renderer-CXrnzihz.mjs} +5 -5
- package/dist/{renderer-BwJ0nXXu.mjs.map → renderer-CXrnzihz.mjs.map} +1 -1
- package/dist/renderer-CYh2lFoJ.mjs +5 -0
- package/dist/renderer-CYtVZYMH.mjs +5 -0
- package/dist/{renderer-BwV-o_1b.mjs → renderer-CdXBRdFf.mjs} +4 -4
- package/dist/{renderer-BwV-o_1b.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
- package/dist/{renderer-DrK6pyfz.mjs → renderer-Cfx_FCSf.mjs} +5 -5
- package/dist/{renderer-DrK6pyfz.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
- package/dist/renderer-CjxZlkjb.mjs +5 -0
- package/dist/{renderer-CInMMs5x.mjs → renderer-CkTehyRX.mjs} +6 -6
- package/dist/{renderer-CInMMs5x.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
- package/dist/{renderer-DGXqspB9.mjs → renderer-CldjJmRR.mjs} +3 -3
- package/dist/{renderer-HhJPFidU.mjs → renderer-CoC64eam.mjs} +5 -5
- package/dist/{renderer-HhJPFidU.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
- package/dist/renderer-Cpd6TvTC.mjs +5 -0
- package/dist/{renderer-DLaUT6JZ.mjs → renderer-Cv9CKKWG.mjs} +4 -4
- package/dist/{renderer-DLaUT6JZ.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-DCMoBppL.mjs → renderer-D-GWBoVT.mjs} +3 -3
- package/dist/{renderer-DCMoBppL.mjs.map → renderer-D-GWBoVT.mjs.map} +1 -1
- package/dist/{renderer-C3CGYjrC.mjs → renderer-D-mX1EVA.mjs} +5 -5
- package/dist/{renderer-C3CGYjrC.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
- package/dist/{renderer-C2kFIZ4r.mjs → renderer-D0h1hTOo.mjs} +4 -4
- package/dist/{renderer-C2kFIZ4r.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
- package/dist/{renderer-C_gR2H3R.mjs → renderer-D0xM67cK.mjs} +3 -3
- package/dist/{renderer-C_gR2H3R.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
- package/dist/renderer-D3ziOPhX.mjs +5 -0
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-BTd6tFcS.mjs → renderer-DCrKEVjb.mjs} +5 -5
- package/dist/{renderer-BTd6tFcS.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
- package/dist/{renderer-Dak_wVh9.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dak_wVh9.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/renderer-DL-phtL5.mjs +5 -0
- package/dist/{renderer-uA0UCxjA.mjs → renderer-DNynPM6X.mjs} +4 -4
- package/dist/{renderer-uA0UCxjA.mjs.map → renderer-DNynPM6X.mjs.map} +1 -1
- package/dist/renderer-DSnmYnHg.mjs +5 -0
- package/dist/renderer-DUGfsT-E.mjs +5 -0
- package/dist/renderer-DW5af9x1.mjs +5 -0
- package/dist/{renderer-CMCmljb0.mjs → renderer-DWYmJSrl.mjs} +3 -3
- package/dist/{renderer-CMCmljb0.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
- package/dist/renderer-DYMrol1t.mjs +5 -0
- package/dist/{renderer-CGpi8CDT.mjs → renderer-DYeNNc_G.mjs} +4 -4
- package/dist/{renderer-CGpi8CDT.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
- package/dist/{renderer-DKFaVaRJ.mjs → renderer-DYlx7VHo.mjs} +4 -4
- package/dist/{renderer-DKFaVaRJ.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
- package/dist/{renderer-DZIxduEt.mjs → renderer-D_m6Qbsi.mjs} +3 -3
- package/dist/{renderer-DZIxduEt.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
- package/dist/renderer-DekeUHaz.mjs +5 -0
- package/dist/{renderer-snjhPaP-.mjs → renderer-DhGZ41hQ.mjs} +4 -4
- package/dist/{renderer-snjhPaP-.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
- package/dist/{renderer-BXGuCnCJ.mjs → renderer-DiZkZ0Pr.mjs} +4 -4
- package/dist/{renderer-BXGuCnCJ.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
- package/dist/{renderer-BBjkX0Vt.mjs → renderer-Dm57W73p.mjs} +3 -3
- package/dist/renderer-Dt5uyJdZ.mjs +5 -0
- package/dist/{renderer-DwH5e3hx.mjs → renderer-DtFZbE1j.mjs} +3 -3
- package/dist/{renderer-Bxiiar50.mjs → renderer-DvHi_wXE.mjs} +4 -4
- package/dist/{renderer-Bxiiar50.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
- package/dist/{renderer-DaLy1dFA.mjs → renderer-Dv_iRIyx.mjs} +21 -21
- package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
- package/dist/renderer-DwLQAnaK.mjs +5 -0
- package/dist/{renderer-qVJdxbXB.mjs → renderer-DzON3wDZ.mjs} +4 -4
- package/dist/{renderer-qVJdxbXB.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
- package/dist/{renderer-Dj54y3h3.mjs → renderer-GIlQ9lZq.mjs} +3 -3
- package/dist/{renderer-Dj54y3h3.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
- package/dist/{renderer-b0H3oDae.mjs → renderer-HKv5cBdp.mjs} +3 -3
- package/dist/{renderer-b0H3oDae.mjs.map → renderer-HKv5cBdp.mjs.map} +1 -1
- package/dist/renderer-IXQP2CWM.mjs +5 -0
- package/dist/renderer-K-Pkw63O.mjs +5 -0
- package/dist/renderer-MPw2KH9P.mjs +5 -0
- package/dist/{renderer-t1sXDiqm.mjs → renderer-QbSrnPZU.mjs} +3 -3
- package/dist/{renderer-t1sXDiqm.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
- package/dist/renderer-RPu8RMav.mjs +5 -0
- package/dist/{renderer-Dp9FQKVP.mjs → renderer-TfeohPxt.mjs} +5 -5
- package/dist/{renderer-Dp9FQKVP.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
- package/dist/{renderer-BzTj_CeK.mjs → renderer-Y1kjtOto.mjs} +4 -4
- package/dist/{renderer-BzTj_CeK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
- package/dist/{renderer-LrAldCWN.mjs → renderer-YONlI6W-.mjs} +5 -5
- package/dist/{renderer-LrAldCWN.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
- package/dist/{renderer-tRi3KNoG.mjs → renderer-_J9JcCMR.mjs} +5 -5
- package/dist/{renderer-tRi3KNoG.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
- package/dist/renderer-dCqxd5N2.mjs +5 -0
- package/dist/{renderer-CcmxR6Fy.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
- package/dist/{renderer-CcmxR6Fy.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
- package/dist/renderer-lhjmE-Fp.mjs +5 -0
- package/dist/{renderer-TiaHrU5z.mjs → renderer-mDBoz0zT.mjs} +5 -5
- package/dist/{renderer-TiaHrU5z.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
- package/dist/{renderer-smP1F57W.mjs → renderer-pn52dzZz.mjs} +4 -4
- package/dist/{renderer-smP1F57W.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
- package/dist/renderer-u9cmBuvM.mjs +5 -0
- package/dist/{renderer-CNpq7rL-.mjs → renderer-uER8kn7f.mjs} +3 -3
- package/dist/{renderer-CNpq7rL-.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
- package/dist/{renderer-sMFJtt_H.mjs → renderer-uzU6dsdR.mjs} +3 -3
- package/dist/{renderer-sMFJtt_H.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
- package/dist/renderer-vH12jcpz.mjs +5 -0
- package/dist/{renderer-oBgCEqaM.mjs → renderer-yNWYqvvq.mjs} +4 -4
- package/dist/{renderer-oBgCEqaM.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
- package/dist/{renderer-Dy1xQOTu.mjs → renderer-zLi2qFGT.mjs} +4 -4
- package/dist/{renderer-Dy1xQOTu.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +7 -7
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
- package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +3 -3
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs.map → src-BU6vm9sP-DdTHmCr4.mjs.map} +1 -1
- package/dist/{src-D7M8VTzv.mjs → src-DrP7fGJX.mjs} +41 -16
- package/dist/{src-D7M8VTzv.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
- package/dist/storage/index.d.mts +206 -0
- package/dist/storage/index.d.mts.map +1 -0
- package/dist/storage/index.mjs +3 -0
- package/package.json +67 -59
- package/dist/audio-afTBdB3U.d.mts.map +0 -1
- package/dist/cloud-COid1Ipa.mjs.map +0 -1
- package/dist/dist-B-OPY7Cs.mjs.map +0 -1
- package/dist/dist-BSqeChht.mjs.map +0 -1
- package/dist/index-BNClElng.d.mts.map +0 -1
- package/dist/index-CTv9ZieD.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Fliv2Z-w.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BUtt481A.mjs.map +0 -1
- package/dist/preview-engine/chunk-5SLBE2FX.mjs +0 -1
- package/dist/preview-engine/chunk-74J4DJQA.mjs +0 -1
- package/dist/preview-engine/chunk-KIPXBOYG.mjs +0 -1974
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-UKZVUYB6.mjs +0 -483
- package/dist/preview-engine/renderers-PSBTV2DO.mjs +0 -228
- package/dist/preview-engine/renderers-TEKHQHCL.mjs +0 -1
- package/dist/preview-engine/renderers-U3RLYFCN.mjs +0 -1
- package/dist/preview-engine/renderers-V5HM6PZ2.mjs +0 -1
- package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +0 -1
- package/dist/program-Cvv_nb9T.mjs.map +0 -1
- package/dist/renderer--RJepuOy.mjs +0 -5
- package/dist/renderer-B1U6YRRV.d.mts +0 -117
- package/dist/renderer-B1U6YRRV.d.mts.map +0 -1
- package/dist/renderer-B4NFnaty.mjs +0 -5
- package/dist/renderer-B6g4ts0e.mjs +0 -5
- package/dist/renderer-BGoAr-tl.mjs +0 -5
- package/dist/renderer-BSOdBgdE.mjs +0 -5
- package/dist/renderer-BU6O0fpM.mjs +0 -5
- package/dist/renderer-BZ97iidG.mjs +0 -5
- package/dist/renderer-B_Klh1VT.mjs +0 -5
- package/dist/renderer-BaWQM1y-.mjs +0 -5
- package/dist/renderer-Bc0jvAj0.mjs +0 -5
- package/dist/renderer-Bd-NuU3M.mjs +0 -3
- package/dist/renderer-Bm077kZ6.mjs +0 -5
- package/dist/renderer-BtzE_e_Y.mjs +0 -5
- package/dist/renderer-C225eCAo.mjs +0 -5
- package/dist/renderer-CC4fhNup.mjs +0 -3
- package/dist/renderer-CLXdR4vz.mjs +0 -5
- package/dist/renderer-CszM8B3C.mjs +0 -5
- package/dist/renderer-Ctp8ZYfk.mjs +0 -5
- package/dist/renderer-CxQdSp8I.mjs +0 -5
- package/dist/renderer-D3YbHjRG.mjs.map +0 -1
- package/dist/renderer-D4GMRtDd.mjs +0 -6
- package/dist/renderer-DEsGIvTZ.mjs +0 -5
- package/dist/renderer-DIaUQ0EP.mjs +0 -5
- package/dist/renderer-DLjqcNzQ.mjs +0 -5
- package/dist/renderer-DMuQZa51.mjs +0 -5
- package/dist/renderer-DOgi2aF2.mjs +0 -5
- package/dist/renderer-DSh7cvi4.mjs +0 -5
- package/dist/renderer-DV1LVBBP.mjs +0 -5
- package/dist/renderer-DaLy1dFA.mjs.map +0 -1
- package/dist/renderer-Dhrj2bJz.mjs +0 -5
- package/dist/renderer-DoFUu1R4.mjs +0 -5
- package/dist/renderer-DsydX3cx.mjs +0 -5
- package/dist/renderer-DxVSoeYi.mjs +0 -5
- package/dist/renderer-Nc9bHb0n.mjs +0 -5
- package/dist/renderer-TFaSD2Db.mjs +0 -5
- package/dist/renderer-Z61ctppe.mjs +0 -5
- package/dist/renderer-awXf3sNS.mjs +0 -5
- package/dist/renderer-cHT28oYI.mjs +0 -5
- package/dist/renderer-g7Y3bFot.mjs +0 -5
- package/dist/renderer-qVv0OzVc.mjs +0 -5
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Bxiiar50.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HalftoneScreen\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && input.outputItem?.type === \"Signal\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DvHi_wXE.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HalftoneScreen\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && input.outputItem?.type === \"Signal\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":";;;;;AAMA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4C3B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmNvB,MAAM,mBAAmB,WAAW,YAAY;CAC/C,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC3D,qBAAqB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;CAC5E,qBAAqB,eAAe,QAAQ,EAAE;CAC9C,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,qBAAqB,QAAQ,QAAQ;CAC7C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,YAAY;CAC7B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,iBAAiB,OAAO,mBAAmB;GAChD,OAAO,YAAY,OAAO;GAC1B,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,oBAAoB;GAC3B,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR;GACD;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,kBAAkB;EAClB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAC7B;;AAEF,MAAM,+BAA+B,OAAO,SAAS;CACpD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,oBAAoB,CAAC,GAAI;CACxC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,SAAS,GAAG,SAAS,OAAO,KAAK,GAAG,OAAO,CAAC,KAAK;CACvD,MAAM,mBAAmB,WAAW,cAAc,QAAQ,WAAW;EACpE,MAAM,WAAW,GAAG,GAAG,UAAU;EACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;EACjD,MAAM,YAAY,CAAC,EAAE,OAAO,mBAAmB,MAAM,YAAY,SAAS;EAC1E,MAAM,KAAK,aAAa,OAAO,YAAY,OAAO,MAAM,WAAW,OAAO;EAC1E,IAAI,MAAM;EACV,IAAI,eAAe;AACnB,MAAI,CAAC,UAAW,KAAI,OAAO,mBAAmB,MAAM,YAAY,SAAS,SAAU,OAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,OAAO,MAAM,WAAW,QAAQ,aAAa,CAAC,CAAC;OACrK;GACJ,MAAM,SAAS,iBAAiB,GAAG,YAAY,kBAAkB,IAAI,CAAC;AACtE,SAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,OAAO,UAAU,aAAa,CAAC,CAAC;;WAEhE,IAAI;AACZ,SAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;AAChE,kBAAe;;AAEhB,SAAO;GACN;GACA;GACA;GACA;;CAEF,MAAM,UAAU,gBAAgB,aAAa,IAAI,GAAG,IAAI;CACxD,MAAM,WAAW,gBAAgB,SAAS,IAAI,GAAG,IAAI;CACrD,MAAM,cAAc,gBAAgB,YAAY,GAAG,IAAI,EAAE;CACzD,MAAM,UAAU,gBAAgB,aAAa,IAAI,GAAG,IAAI;CACxD,MAAM,SAAS,gBAAgB,gBAAgB,IAAI,GAAG,IAAI;CAC1D,MAAM,SAAS,gBAAgB,eAAe,GAAG,GAAG,IAAI;CACxD,MAAM,SAAS,gBAAgB,cAAc,IAAI,GAAG,IAAI;CACxD,MAAM,aAAa,gBAAgB,WAAW,GAAG,GAAG,EAAE;CACtD,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,WAAW;CACtE,MAAM,EAAE,kBAAkB,UAAU,eAAe,SAAS,qBAAqB,SAAS,qBAAqB,cAAc,qBAAqB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAClL,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;CAC3E,MAAM,gBAAgB;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,MAAM,iBAAiB,KAAK,WAAW,kBAAkB,eAAe,KAAK,GAAG,OAAO,GAAG,SAAS;CACnG,MAAM,WAAW,cAAc,SAAS,WAAW;CACnD,MAAM,YAAY,cAAc,UAAU,YAAY;CACtD,MAAM,eAAe,cAAc,aAAa,eAAe;CAC/D,MAAM,WAAW,cAAc,SAAS,WAAW;CACnD,MAAM,UAAU,cAAc,QAAQ,UAAU;CAChD,MAAM,UAAU,cAAc,QAAQ,UAAU;CAChD,MAAM,UAAU,cAAc,QAAQ,UAAU;CAChD,MAAM,cAAc,cAAc,YAAY,cAAc;CAC5D,MAAM,UAAU,GAAG,SAAS,SAAS,IAAI;CACzC,IAAI,cAAc;AAClB,KAAI,GAAG,aAAa,UAAW,eAAc;UACpC,GAAG,aAAa,OAAQ,eAAc;UACtC,GAAG,aAAa,SAAU,eAAc;CACjD,MAAM,SAAS,WAAW,GAAG,YAAY,UAAU;CACnD,MAAM,WAAW,WAAW,GAAG,cAAc,UAAU;CACvD,MAAM,sBAAsB,IAAI,aAAa,GAAG;AAChD,qBAAoB,KAAK;AACzB,qBAAoB,KAAK;AACzB,qBAAoB,KAAK,QAAQ;AACjC,qBAAoB,KAAK,SAAS;AAClC,qBAAoB,KAAK,YAAY;AACrC,qBAAoB,KAAK,GAAG,SAAS,IAAI;AACzC,qBAAoB,KAAK,GAAG,WAAW,QAAQ,IAAI;AACnD,qBAAoB,KAAK,WAAW;AACpC,qBAAoB,KAAK,OAAO;AAChC,qBAAoB,KAAK,OAAO;AAChC,qBAAoB,MAAM,OAAO;AACjC,qBAAoB,MAAM,OAAO;AACjC,qBAAoB,MAAM,SAAS;AACnC,qBAAoB,MAAM,SAAS;AACnC,qBAAoB,MAAM,SAAS;AACnC,qBAAoB,MAAM,SAAS;AACnC,qBAAoB,MAAM,QAAQ;AAClC,qBAAoB,MAAM,OAAO;AACjC,qBAAoB,MAAM,OAAO;AACjC,qBAAoB,MAAM,OAAO;AACjC,qBAAoB,MAAM,QAAQ,eAAe,IAAI;AACrD,qBAAoB,MAAM,SAAS,eAAe,IAAI;AACtD,qBAAoB,MAAM,YAAY,eAAe,IAAI;AACzD,qBAAoB,MAAM,QAAQ,eAAe,IAAI;AACrD,qBAAoB,MAAM,OAAO,eAAe,IAAI;AACpD,qBAAoB,MAAM,OAAO,eAAe,IAAI;AACpD,qBAAoB,MAAM,OAAO,eAAe,IAAI;AACpD,qBAAoB,MAAM,WAAW,eAAe,IAAI;CACxD,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,oBAAoB;CAC1E,MAAM,SAAS,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC9D;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;AACF,oBAAmB,SAAS,OAAO,YAAY,EAAE,UAAU;EAC1D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,eAAe;IACnC,CAAC;GACF,CAAC;EACF,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,SAAS,QAAQ,QAAQ;EAC9E,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;EACF,CAAC;AACF,qBAAoB,MAAM,OAAO;;AAKlC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,8BAA8B,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import { It as getActiveMediaMetadata, _n as reportRenderDiagnostic, p as DEFAULT_DURATION_MS, rn as mediaSourceTime, vn as resolveBoolean, xn as resolveNumber } from "./dist-
|
|
3
|
-
import { i as effectReach, n as defineRenderer, r as effectMaxPixelScale, s as resolveFrameNumber, t as audioRegistry, u as solveHomography } from "./renderer-
|
|
4
|
-
import { B as jointMatrices, F as getPrimitiveGeometry, G as measureMaxCaptionHeight,
|
|
5
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
6
|
-
import {
|
|
7
|
-
import { o as TemporalDeflickerPipeline } from "./dist-
|
|
8
|
-
import { B as evaluateKeyframes, I as computeLayout, N as collectNodeOps, U as initLayout, V as evaluateTrackAtFrame } from "./program-
|
|
1
|
+
import "./chunk-DOL2i2sR.mjs";
|
|
2
|
+
import { It as getActiveMediaMetadata, _n as reportRenderDiagnostic, p as DEFAULT_DURATION_MS, rn as mediaSourceTime, vn as resolveBoolean, xn as resolveNumber } from "./dist-C8XSqfTx.mjs";
|
|
3
|
+
import { i as effectReach, n as defineRenderer, r as effectMaxPixelScale, s as resolveFrameNumber, t as audioRegistry, u as solveHomography } from "./renderer-BuvKGwk3.mjs";
|
|
4
|
+
import { $ as poseNodes, B as jointMatrices, F as getPrimitiveGeometry, G as measureMaxCaptionHeight, J as parseDashArray, M as fitSpansToText, N as generateExtrudedTextGeometry, _t as Light3D, ct as srtLoader, d as ScreenSpaceRelightPipeline, dt as transformScale, it as sampleMorphWeights, l as Renderer3D, mt as Camera3D, n as AudioLatentTrackCache, p as SlugFontCache, pt as resolveMediaSourceUrl, q as parseColor, rt as resolveTextSpans, st as spansText, xt as Vector3Math, yt as Matrix4Math } from "./dist-DtPPPsZV.mjs";
|
|
5
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-D2HT3KcE.mjs";
|
|
6
|
+
import { i as keyedGain, m as measureText, n as decodeAudioSource, s as resolveLayerDuration } from "./dist-CCrYOkcc.mjs";
|
|
7
|
+
import { o as TemporalDeflickerPipeline } from "./dist-DgZpN6IK.mjs";
|
|
8
|
+
import { B as evaluateKeyframes, I as computeLayout, N as collectNodeOps, U as initLayout, V as evaluateTrackAtFrame } from "./program-BfiB9ttP.mjs";
|
|
9
9
|
import gsapModule from "gsap";
|
|
10
10
|
|
|
11
|
-
//#region ../../nodes/node-compositor/dist/renderers-
|
|
11
|
+
//#region ../../nodes/node-compositor/dist/renderers-C0dsKt0u.mjs
|
|
12
12
|
/**
|
|
13
13
|
* Solves a cubic bezier curve defined by control points (x1, y1) and (x2, y2)
|
|
14
14
|
* for a given progress parameter t in [0, 1].
|
|
@@ -217,6 +217,8 @@ function mappedEase(ease, durationFrames, fps = 24) {
|
|
|
217
217
|
else if (name === "elastic") suffix = "(1, 0.3)";
|
|
218
218
|
return `${easeName}.${dir}${suffix}`;
|
|
219
219
|
}
|
|
220
|
+
/** Props that switch rather than tween: each key is a set from its frame on. */
|
|
221
|
+
const DISCRETE_PROPS = new Set(["hidden", "muted"]);
|
|
220
222
|
function compileTrackToTimeline(tl, stub, track, startFrame, fps, durationFrames, signals, live, step) {
|
|
221
223
|
const prop = track.prop;
|
|
222
224
|
const source = track.source ?? { type: "keyframe" };
|
|
@@ -283,7 +285,7 @@ function compileTrackToTimeline(tl, stub, track, startFrame, fps, durationFrames
|
|
|
283
285
|
dropped,
|
|
284
286
|
maxAuthoredFrame
|
|
285
287
|
};
|
|
286
|
-
if (prop
|
|
288
|
+
if (DISCRETE_PROPS.has(prop)) for (const kf of validKeyframes) {
|
|
287
289
|
const absoluteSec = (startFrame + kf.frame) / fps;
|
|
288
290
|
tl.set(stub, {
|
|
289
291
|
[prop]: kf.value,
|
|
@@ -584,10 +586,10 @@ function compileTimeline(renderId, virtualMedia, options) {
|
|
|
584
586
|
signals
|
|
585
587
|
});
|
|
586
588
|
else if (track.keyframes && track.keyframes.length > 0) {
|
|
587
|
-
const
|
|
589
|
+
const first = track.keyframes.reduce((a, b) => b.frame < a.frame ? b : a);
|
|
588
590
|
const seeded = stub;
|
|
589
|
-
if (
|
|
590
|
-
else if (seeded[track.prop] === void 0) seeded[track.prop] = lop[track.prop] ??
|
|
591
|
+
if (!DISCRETE_PROPS.has(track.prop) || first.frame === 0) seeded[track.prop] = first.value;
|
|
592
|
+
else if (seeded[track.prop] === void 0) seeded[track.prop] = lop[track.prop] ?? first.value;
|
|
591
593
|
}
|
|
592
594
|
targetsById[layerId] = stub;
|
|
593
595
|
});
|
|
@@ -4158,7 +4160,7 @@ const CompositorWebGPURenderer = async (args) => {
|
|
|
4158
4160
|
const strokeWidth = target?.strokeWidth ?? lop.strokeWidth ?? 0;
|
|
4159
4161
|
const strokeColor = target?.strokeColor ?? lop.strokeColor ?? lop.stroke ?? "#ffffff";
|
|
4160
4162
|
const strokeLineCap = lop.strokeLineCap ?? "round";
|
|
4161
|
-
const strokeDashArray = lop.strokeDashArray;
|
|
4163
|
+
const strokeDashArray = parseDashArray(lop.strokeDashArray);
|
|
4162
4164
|
const strokeDashOffset = target?.strokeDashOffset ?? lop.strokeDashOffset ?? 0;
|
|
4163
4165
|
const trimStart = target?.trimStart ?? lop.trimStart ?? 0;
|
|
4164
4166
|
const trimEnd = target?.trimEnd ?? lop.trimEnd ?? 1;
|
|
@@ -4699,17 +4701,15 @@ const compositorLayerAudioProcessor = async (channels, sampleRate, virtualMedia,
|
|
|
4699
4701
|
const muted = resolveBoolean(op.muted, false);
|
|
4700
4702
|
const animation = op.animation;
|
|
4701
4703
|
const fps = ctx?.fps ?? 24;
|
|
4702
|
-
const
|
|
4703
|
-
|
|
4704
|
-
const hasMutedKeys = tracks.some((t) => t.prop === "muted" && t.keyframes && t.keyframes.length > 0);
|
|
4705
|
-
if (!hasVolumeKeys && !hasMutedKeys) return;
|
|
4704
|
+
const keyed = keyedGain(op);
|
|
4705
|
+
if (!keyed.volume && !keyed.muted) return;
|
|
4706
4706
|
const { tl, stub } = compileLayerTimeline(op.id || op.inputHandleId || "layer", animation, volume, muted, fps);
|
|
4707
4707
|
const startTimeSec = (ctx?.elapsedMs ?? 0) / 1e3;
|
|
4708
4708
|
const subChunkSize = 128;
|
|
4709
4709
|
tl.seek(startTimeSec);
|
|
4710
4710
|
let lastVol = stub.volume;
|
|
4711
4711
|
let lastMuted = stub.muted;
|
|
4712
|
-
const
|
|
4712
|
+
const applied = (keyed.volume ? 1 : volume) * (!keyed.muted && muted ? 0 : 1);
|
|
4713
4713
|
for (let i = 0; i < numSamples; i += subChunkSize) {
|
|
4714
4714
|
const nextI = Math.min(numSamples, i + subChunkSize);
|
|
4715
4715
|
const tNext = startTimeSec + nextI / sampleRate;
|
|
@@ -4720,7 +4720,7 @@ const compositorLayerAudioProcessor = async (channels, sampleRate, virtualMedia,
|
|
|
4720
4720
|
const p = (j - i) / (nextI - i);
|
|
4721
4721
|
const currentVol = Math.min(1, Math.max(0, lastVol + (nextVol - lastVol) * p));
|
|
4722
4722
|
const finalGain = (j - i < (nextI - i) / 2 ? lastMuted : nextMuted) ? 0 : currentVol;
|
|
4723
|
-
const relativeGain =
|
|
4723
|
+
const relativeGain = applied === 0 ? 0 : finalGain / applied;
|
|
4724
4724
|
if (relativeGain !== 1) for (let c = 0; c < numChannels; c++) channels[c][j] *= relativeGain;
|
|
4725
4725
|
}
|
|
4726
4726
|
lastVol = nextVol;
|
|
@@ -4732,4 +4732,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CompositorWebGPURendere
|
|
|
4732
4732
|
|
|
4733
4733
|
//#endregion
|
|
4734
4734
|
export { Transform3DMath, renderers_default as default, has3DTransform };
|
|
4735
|
-
//# sourceMappingURL=renderer-
|
|
4735
|
+
//# sourceMappingURL=renderer-Dv_iRIyx.mjs.map
|