framefields 2.1.3 → 2.2.0-beta.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 +48 -618
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-CfBpzxn9.d.mts → audio-1QquqDJs.d.mts} +3 -3
- package/dist/{audio-CfBpzxn9.d.mts.map → audio-1QquqDJs.d.mts.map} +1 -1
- package/dist/{audio-DqaHxtG3.mjs → audio-BYqbtdH8.mjs} +3 -3
- package/dist/{audio-DqaHxtG3.mjs.map → audio-BYqbtdH8.mjs.map} +1 -1
- package/dist/{dist-BgFYDCoL.mjs → dist-BLbXEC6V.mjs} +2 -2
- package/dist/{dist-BgFYDCoL.mjs.map → dist-BLbXEC6V.mjs.map} +1 -1
- package/dist/{dist-Cog5jyVI.mjs → dist-DQlYw4eG.mjs} +44 -4
- package/dist/dist-DQlYw4eG.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-CXrmO68D.mjs → effects-DgpPr38s.mjs} +2 -2
- package/dist/{effects-CXrmO68D.mjs.map → effects-DgpPr38s.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-BUVSUWXJ.mjs → fonts-DakFEiDw.mjs} +2 -2
- package/dist/{fonts-BUVSUWXJ.mjs.map → fonts-DakFEiDw.mjs.map} +1 -1
- package/dist/{gpu-Bj08zUc5.mjs → gpu-AbcLcr1f.mjs} +2 -2
- package/dist/{gpu-Bj08zUc5.mjs.map → gpu-AbcLcr1f.mjs.map} +1 -1
- package/dist/{index-Cpkzy5XR.d.mts → index--1jnkoBj.d.mts} +20 -2
- package/dist/index--1jnkoBj.d.mts.map +1 -0
- package/dist/{index-BzQc812z.d.mts → index-BqzHDFkU.d.mts} +3 -3
- package/dist/{index-BzQc812z.d.mts.map → index-BqzHDFkU.d.mts.map} +1 -1
- package/dist/{index-DpWia6iH.d.mts → index-CaZfxDXx.d.mts} +27 -3
- package/dist/index-CaZfxDXx.d.mts.map +1 -0
- package/dist/{index-Fciq8bcC.d.mts → index-D6_KcajH.d.mts} +2 -2
- package/dist/{index-Fciq8bcC.d.mts.map → index-D6_KcajH.d.mts.map} +1 -1
- package/dist/{index-D__HdInU.d.mts → index-DLbtJPrc.d.mts} +23 -12
- package/dist/index-DLbtJPrc.d.mts.map +1 -0
- package/dist/{index--0vVZDPM.d.mts → index-DgJIBC_N.d.mts} +3 -3
- package/dist/{index--0vVZDPM.d.mts.map → index-DgJIBC_N.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +50 -50
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-BOqCRCgp.mjs → preview-BQ3BhcVX.mjs} +2 -2
- package/dist/{preview-BOqCRCgp.mjs.map → preview-BQ3BhcVX.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-JJ5EF3EY.mjs → chunk-2W4BMOAZ.mjs} +1 -1
- package/dist/preview-engine/chunk-7OMK352W.mjs +1 -0
- package/dist/preview-engine/chunk-FJH5A2PV.mjs +1 -0
- package/dist/preview-engine/{chunk-USM33CF5.mjs → chunk-HFUA47QH.mjs} +1 -1
- package/dist/preview-engine/chunk-K7M5EIFC.mjs +98 -0
- package/dist/preview-engine/{chunk-5DOD2NVY.mjs → chunk-MOW55DX2.mjs} +1 -1
- package/dist/preview-engine/chunk-VUFDQJ2B.mjs +1 -0
- package/dist/preview-engine/{chunk-ZIIFTWDH.mjs → chunk-XETMNJVV.mjs} +1 -1
- package/dist/preview-engine/{chunk-AE2336RK.mjs → chunk-Z457JJCO.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +21 -21
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-57WDL6XN.mjs → renderers-HVTQ2B3H.mjs} +1 -1
- package/dist/preview-engine/{renderers-BH5MXUTT.mjs → renderers-OZYUGZG7.mjs} +1 -1
- package/dist/preview-engine/{renderers-2SVWAB42.mjs → renderers-UHYNEWQD.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-D8JoVobr.mjs → program-Cc_2_YXn.mjs} +2 -2
- package/dist/{program-D8JoVobr.mjs.map → program-Cc_2_YXn.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +3 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-B9ProG0Z.mjs → renderer-2DjggBBS.mjs} +2 -2
- package/dist/{renderer-B9ProG0Z.mjs.map → renderer-2DjggBBS.mjs.map} +1 -1
- package/dist/{renderer-CBBhVrwO.mjs → renderer-4GYrnTfw.mjs} +2 -2
- package/dist/{renderer-CBBhVrwO.mjs.map → renderer-4GYrnTfw.mjs.map} +1 -1
- package/dist/renderer-9ETXaINw.mjs +5 -0
- package/dist/renderer-B3MVDN_e.mjs +5 -0
- package/dist/{renderer-CZ7-42SE.mjs → renderer-B4cnT3ce.mjs} +3 -3
- package/dist/{renderer-CZ7-42SE.mjs.map → renderer-B4cnT3ce.mjs.map} +1 -1
- package/dist/{renderer-0dD1VQsz.mjs → renderer-B5PFBOjv.mjs} +3 -3
- package/dist/{renderer-0dD1VQsz.mjs.map → renderer-B5PFBOjv.mjs.map} +1 -1
- package/dist/renderer-B6iUuWcx.mjs +6 -0
- package/dist/renderer-B8IdU-7S.mjs +5 -0
- package/dist/renderer-BEGJCxuL.mjs +5 -0
- package/dist/{renderer-BlTPu9QT.mjs → renderer-BEzUirF0.mjs} +2 -2
- package/dist/{renderer-BlTPu9QT.mjs.map → renderer-BEzUirF0.mjs.map} +1 -1
- package/dist/{renderer-ByGPFIu2.mjs → renderer-BKd2nRnO.mjs} +2 -2
- package/dist/{renderer-ByGPFIu2.mjs.map → renderer-BKd2nRnO.mjs.map} +1 -1
- package/dist/renderer-BLAkNFx7.mjs +5 -0
- package/dist/{renderer--2bwnzBi.mjs → renderer-BN0CzoG_.mjs} +2 -2
- package/dist/{renderer--2bwnzBi.mjs.map → renderer-BN0CzoG_.mjs.map} +1 -1
- package/dist/{renderer-aw8EsrS9.mjs → renderer-BNcsS03m.mjs} +2 -2
- package/dist/{renderer-aw8EsrS9.mjs.map → renderer-BNcsS03m.mjs.map} +1 -1
- package/dist/{renderer-Bs_f_App.d.mts → renderer-BO-7bYa5.d.mts} +2 -2
- package/dist/{renderer-Bs_f_App.d.mts.map → renderer-BO-7bYa5.d.mts.map} +1 -1
- package/dist/{renderer--JBbEfTc.mjs → renderer-BPMywsr4.mjs} +3 -3
- package/dist/{renderer--JBbEfTc.mjs.map → renderer-BPMywsr4.mjs.map} +1 -1
- package/dist/renderer-BVNhv2ft.mjs +5 -0
- package/dist/renderer-BaXTEIe0.mjs +5 -0
- package/dist/{renderer-BeuG4dyz.mjs → renderer-Bfrwo_It.mjs} +2 -2
- package/dist/{renderer-BeuG4dyz.mjs.map → renderer-Bfrwo_It.mjs.map} +1 -1
- package/dist/{renderer-DT1bySqu.mjs → renderer-BhxQzrHF.mjs} +2 -2
- package/dist/{renderer-DT1bySqu.mjs.map → renderer-BhxQzrHF.mjs.map} +1 -1
- package/dist/renderer-BjeA7s36.mjs +5 -0
- package/dist/renderer-BtGNxEay.mjs +5 -0
- package/dist/renderer-BvZg2RJG.mjs +5 -0
- package/dist/{renderer-BaYEXoS3.mjs → renderer-C2eBC0FB.mjs} +3 -3
- package/dist/{renderer-BaYEXoS3.mjs.map → renderer-C2eBC0FB.mjs.map} +1 -1
- package/dist/{renderer-B7jZuO6k.mjs → renderer-C4UqxwcT.mjs} +2 -2
- package/dist/{renderer-B7jZuO6k.mjs.map → renderer-C4UqxwcT.mjs.map} +1 -1
- package/dist/{renderer-Bm0W9qgc.mjs → renderer-C6u-XrH-.mjs} +3 -3
- package/dist/{renderer-Bm0W9qgc.mjs.map → renderer-C6u-XrH-.mjs.map} +1 -1
- package/dist/{renderer-BNyDJZzl.mjs → renderer-CB87_0vL.mjs} +3 -3
- package/dist/{renderer-BNyDJZzl.mjs.map → renderer-CB87_0vL.mjs.map} +1 -1
- package/dist/{renderer-FSCTtHrt.mjs → renderer-CD38wGmN.mjs} +2 -2
- package/dist/{renderer-FSCTtHrt.mjs.map → renderer-CD38wGmN.mjs.map} +1 -1
- package/dist/{renderer-ClIXn9ZU.mjs → renderer-CGZqCmf2.mjs} +2 -2
- package/dist/{renderer-ClIXn9ZU.mjs.map → renderer-CGZqCmf2.mjs.map} +1 -1
- package/dist/{renderer-CVD0oPsf.mjs → renderer-CHkqgIOL.mjs} +2 -2
- package/dist/{renderer-CVD0oPsf.mjs.map → renderer-CHkqgIOL.mjs.map} +1 -1
- package/dist/{renderer-Dj_K1f1T.mjs → renderer-CK0u3Psf.mjs} +3 -3
- package/dist/{renderer-Dj_K1f1T.mjs.map → renderer-CK0u3Psf.mjs.map} +1 -1
- package/dist/renderer-CLW6tUUn.mjs +5 -0
- package/dist/{renderer-BJ_GtjUk.mjs → renderer-CO4theVJ.mjs} +2 -2
- package/dist/{renderer-KcV0gCO5.mjs → renderer-CPW9o3Lc.mjs} +3 -3
- package/dist/{renderer-KcV0gCO5.mjs.map → renderer-CPW9o3Lc.mjs.map} +1 -1
- package/dist/renderer-CS-ojgJk.mjs +5 -0
- package/dist/{renderer-BwBc5xNu.mjs → renderer-CSfLMXN8.mjs} +3 -3
- package/dist/{renderer-BwBc5xNu.mjs.map → renderer-CSfLMXN8.mjs.map} +1 -1
- package/dist/{renderer-0fRv8mc5.mjs → renderer-CSoyJ8GH.mjs} +2 -2
- package/dist/{renderer-0fRv8mc5.mjs.map → renderer-CSoyJ8GH.mjs.map} +1 -1
- package/dist/renderer-CUQtKECw.mjs +5 -0
- package/dist/renderer-CV-l8wMq.mjs +5 -0
- package/dist/renderer-CV7_ALA5.mjs +5 -0
- package/dist/renderer-CVR6T6Lp.mjs +5 -0
- package/dist/{renderer-B-QXAPY0.mjs → renderer-CZ9gHx-4.mjs} +2 -2
- package/dist/{renderer-B-QXAPY0.mjs.map → renderer-CZ9gHx-4.mjs.map} +1 -1
- package/dist/renderer-CZKFEf_6.mjs +3 -0
- package/dist/{renderer-C-BjN5HM.mjs → renderer-CciB_sav.mjs} +3 -3
- package/dist/{renderer-C-BjN5HM.mjs.map → renderer-CciB_sav.mjs.map} +1 -1
- package/dist/{renderer-hIbXvzPu.mjs → renderer-ClWgdN2v.mjs} +2 -2
- package/dist/renderer-CtUF95UW.mjs +5 -0
- package/dist/{renderer-BJD6Ouon.mjs → renderer-Cv1wmjhA.mjs} +2 -2
- package/dist/{renderer-BJD6Ouon.mjs.map → renderer-Cv1wmjhA.mjs.map} +1 -1
- package/dist/{renderer-CJnIeI0m.mjs → renderer-Cxh7j423.mjs} +3 -3
- package/dist/{renderer-CJnIeI0m.mjs.map → renderer-Cxh7j423.mjs.map} +1 -1
- package/dist/{renderer-cjiONTY_.mjs → renderer-D0enmulV.mjs} +2 -2
- package/dist/{renderer-cjiONTY_.mjs.map → renderer-D0enmulV.mjs.map} +1 -1
- package/dist/renderer-D8ymQoTB.mjs +5 -0
- package/dist/renderer-D9x3UE1Y.mjs +5 -0
- package/dist/renderer-DAEXqa2Q.mjs +5 -0
- package/dist/renderer-DDhU9Goq.mjs +5 -0
- package/dist/{renderer-CgFs_3gW.mjs → renderer-DEQ09sg7.mjs} +2 -2
- package/dist/{renderer-CgFs_3gW.mjs.map → renderer-DEQ09sg7.mjs.map} +1 -1
- package/dist/{renderer-CATBdL9s.mjs → renderer-DRpIQFAK.mjs} +2 -2
- package/dist/{renderer-CATBdL9s.mjs.map → renderer-DRpIQFAK.mjs.map} +1 -1
- package/dist/{renderer-Dd9NUd_I.mjs → renderer-DT3QVVht.mjs} +2 -2
- package/dist/{renderer-Dd9NUd_I.mjs.map → renderer-DT3QVVht.mjs.map} +1 -1
- package/dist/{renderer-BqCx28Zb.mjs → renderer-DU3216cx.mjs} +3 -3
- package/dist/{renderer-BqCx28Zb.mjs.map → renderer-DU3216cx.mjs.map} +1 -1
- package/dist/{renderer-BXZo84vM.mjs → renderer-DU6i7shO.mjs} +2 -2
- package/dist/{renderer-BXZo84vM.mjs.map → renderer-DU6i7shO.mjs.map} +1 -1
- package/dist/renderer-DcCKath2.mjs +5 -0
- package/dist/{renderer-CmEvkdNL.mjs → renderer-DfSRmz7q.mjs} +3 -3
- package/dist/{renderer-CmEvkdNL.mjs.map → renderer-DfSRmz7q.mjs.map} +1 -1
- package/dist/renderer-DiBphLzn.mjs +5 -0
- package/dist/renderer-Diq9Z7gZ.mjs +5 -0
- package/dist/renderer-DjZiO7iA.mjs +5 -0
- package/dist/{renderer-Ba7Rc8DE.mjs → renderer-DkGODUgE.mjs} +3 -3
- package/dist/{renderer-Ba7Rc8DE.mjs.map → renderer-DkGODUgE.mjs.map} +1 -1
- package/dist/{renderer-DKmV8F6L.mjs → renderer-DlqDnh-8.mjs} +2 -2
- package/dist/{renderer-DKmV8F6L.mjs.map → renderer-DlqDnh-8.mjs.map} +1 -1
- package/dist/{renderer-CMOAtGdC.mjs → renderer-Dnm_SVy6.mjs} +3 -3
- package/dist/{renderer-CMOAtGdC.mjs.map → renderer-Dnm_SVy6.mjs.map} +1 -1
- package/dist/{renderer-Cun5J3z9.mjs → renderer-DppnY7RT.mjs} +3 -3
- package/dist/{renderer-Cun5J3z9.mjs.map → renderer-DppnY7RT.mjs.map} +1 -1
- package/dist/{renderer-CmpV4YNd.mjs → renderer-DqhZTIiC.mjs} +2 -2
- package/dist/{renderer-CmpV4YNd.mjs.map → renderer-DqhZTIiC.mjs.map} +1 -1
- package/dist/renderer-Dtj6o-74.mjs +5 -0
- package/dist/renderer-Duaam6bJ.mjs +5 -0
- package/dist/{renderer-CxE5__5p.mjs → renderer-DwCg5pXn.mjs} +2 -2
- package/dist/{renderer-CxE5__5p.mjs.map → renderer-DwCg5pXn.mjs.map} +1 -1
- package/dist/{renderer-B8Wjov5-.mjs → renderer-Dyh8c41v.mjs} +2 -2
- package/dist/{renderer-B6x_Mmpf.mjs → renderer-DzDZlez7.mjs} +247 -63
- package/dist/renderer-DzDZlez7.mjs.map +1 -0
- package/dist/renderer-FHqZe3K1.mjs +5 -0
- package/dist/renderer-FTKfOejk.mjs +5 -0
- package/dist/{renderer-BPDita2c.mjs → renderer-FgcNOe1R.mjs} +5 -5
- package/dist/{renderer-BPDita2c.mjs.map → renderer-FgcNOe1R.mjs.map} +1 -1
- package/dist/{renderer-58bVJfZx.mjs → renderer-L7UTxwZT.mjs} +2 -2
- package/dist/{renderer-58bVJfZx.mjs.map → renderer-L7UTxwZT.mjs.map} +1 -1
- package/dist/renderer-LmbkN82X.mjs +5 -0
- package/dist/{renderer-C-AzyBir.mjs → renderer-PbJk25JW.mjs} +3 -3
- package/dist/{renderer-C-AzyBir.mjs.map → renderer-PbJk25JW.mjs.map} +1 -1
- package/dist/renderer-SDspl6p-.mjs +5 -0
- package/dist/renderer-SWVUDypd.mjs +5 -0
- package/dist/renderer-WhpTBwDM.mjs +5 -0
- package/dist/renderer-WrpQEVdv.mjs +5 -0
- package/dist/{renderer-mp1NN5zk.mjs → renderer-dc39dBVA.mjs} +283 -79
- package/dist/renderer-dc39dBVA.mjs.map +1 -0
- package/dist/{renderer-Br1OuXr_.mjs → renderer-dj3f8cMg.mjs} +3 -3
- package/dist/{renderer-Br1OuXr_.mjs.map → renderer-dj3f8cMg.mjs.map} +1 -1
- package/dist/{renderer-BcFdZx4j.mjs → renderer-dwTzrQ2G.mjs} +3 -3
- package/dist/{renderer-BcFdZx4j.mjs.map → renderer-dwTzrQ2G.mjs.map} +1 -1
- package/dist/{renderer-Cd5BLFnS.mjs → renderer-egZPy7vq.mjs} +2 -2
- package/dist/{renderer-Cd5BLFnS.mjs.map → renderer-egZPy7vq.mjs.map} +1 -1
- package/dist/{renderer-ChO8NNw9.mjs → renderer-gwV6hyYm.mjs} +2 -2
- package/dist/{renderer-ChO8NNw9.mjs.map → renderer-gwV6hyYm.mjs.map} +1 -1
- package/dist/{renderer-pNxZ_lV2.mjs → renderer-lXmtdrdI.mjs} +2 -2
- package/dist/{renderer-pNxZ_lV2.mjs.map → renderer-lXmtdrdI.mjs.map} +1 -1
- package/dist/{renderer-D_2Y_tdA.mjs → renderer-n2kYIGtb.mjs} +2 -2
- package/dist/{renderer-D_2Y_tdA.mjs.map → renderer-n2kYIGtb.mjs.map} +1 -1
- package/dist/renderer-r4ney0FZ.mjs +5 -0
- package/dist/{renderer-Bos8nRhT.mjs → renderer-sHDPBywo.mjs} +2 -2
- package/dist/{renderer-Bos8nRhT.mjs.map → renderer-sHDPBywo.mjs.map} +1 -1
- package/dist/{renderer-D9mf-msP.mjs → renderer-scbJx-Dx.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-ZKjdDfYg.mjs → renderers-CP8CFWDs-B8HIr3kj.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-ZKjdDfYg.mjs.map → renderers-CP8CFWDs-B8HIr3kj.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/package.json +58 -55
- package/dist/dist-Cog5jyVI.mjs.map +0 -1
- package/dist/index-Cpkzy5XR.d.mts.map +0 -1
- package/dist/index-D__HdInU.d.mts.map +0 -1
- package/dist/index-DpWia6iH.d.mts.map +0 -1
- package/dist/preview-engine/chunk-3GNP7TJH.mjs +0 -98
- package/dist/preview-engine/chunk-CYY366IE.mjs +0 -1
- package/dist/preview-engine/chunk-NI577OMQ.mjs +0 -1
- package/dist/preview-engine/chunk-VRGREB3V.mjs +0 -1
- package/dist/renderer-3MuT2oZO.mjs +0 -5
- package/dist/renderer-AX_fHrXM.mjs +0 -5
- package/dist/renderer-B2-LQreV.mjs +0 -5
- package/dist/renderer-B2QhkksW.mjs +0 -5
- package/dist/renderer-B5CoE2Cv.mjs +0 -5
- package/dist/renderer-B6Au6f82.mjs +0 -5
- package/dist/renderer-B6qAMLXh.mjs +0 -5
- package/dist/renderer-B6x_Mmpf.mjs.map +0 -1
- package/dist/renderer-BEfvyxL_.mjs +0 -5
- package/dist/renderer-BH4j4urG.mjs +0 -5
- package/dist/renderer-BH4zfzus.mjs +0 -5
- package/dist/renderer-BRjW_pgJ.mjs +0 -6
- package/dist/renderer-BVo6W_BO.mjs +0 -5
- package/dist/renderer-BbxBM7Vh.mjs +0 -5
- package/dist/renderer-C07CnYVd.mjs +0 -5
- package/dist/renderer-C2Z3vJCu.mjs +0 -5
- package/dist/renderer-C31qkFvm.mjs +0 -5
- package/dist/renderer-C3FV8cYm.mjs +0 -5
- package/dist/renderer-CQXszrAF.mjs +0 -5
- package/dist/renderer-CWK41ajp.mjs +0 -5
- package/dist/renderer-C_U225ub.mjs +0 -5
- package/dist/renderer-C_nPzKwZ.mjs +0 -5
- package/dist/renderer-Cd6I_dsC.mjs +0 -5
- package/dist/renderer-Ceb06HuN.mjs +0 -5
- package/dist/renderer-D3P5SLcx.mjs +0 -5
- package/dist/renderer-D9R8QXS7.mjs +0 -5
- package/dist/renderer-D9SJ4Fg9.mjs +0 -5
- package/dist/renderer-DGAypVNj.mjs +0 -5
- package/dist/renderer-DLAAfwg0.mjs +0 -5
- package/dist/renderer-DTkBPkBu.mjs +0 -5
- package/dist/renderer-DbaTMTuo.mjs +0 -5
- package/dist/renderer-DsxhQdCp.mjs +0 -5
- package/dist/renderer-GSFP7v2z.mjs +0 -3
- package/dist/renderer-Hf1pCqoN.mjs +0 -5
- package/dist/renderer-V0UuIniZ.mjs +0 -5
- package/dist/renderer-VCnMXWqE.mjs +0 -5
- package/dist/renderer-lifu3xIt.mjs +0 -5
- package/dist/renderer-mPDgLBi4.mjs +0 -5
- package/dist/renderer-mp1NN5zk.mjs.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Ot as getMediaType, in as takeRenderDiagnostics, on as updateClockSignals } from "./dist-fjKpBYkc.mjs";
|
|
2
2
|
import { i as registerWebGPURenderer, t as audioRegistry } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { i as mixAudioTracks, m as preloadCompositionFonts, r as drawCompositionTree, t as compositionStateStore } from "./dist-
|
|
3
|
+
import { B as lutStore, F as inputStore, H as mediaDecoderCache, N as getRenderer2D, O as ensureDevice, P as initHeadlessWebGPU, Z as shaderStore, _ as clearAllVideoCache, et as textureCache, g as WebGPUAudioProcessor, p as SlugFontCache, s as NodeSurfaceProvider } from "./dist-DQlYw4eG.mjs";
|
|
4
|
+
import { i as mixAudioTracks, m as preloadCompositionFonts, r as drawCompositionTree, t as compositionStateStore } from "./dist-BLbXEC6V.mjs";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
5
6
|
import { AudioSample, AudioSampleSource, FilePathTarget, Mp3OutputFormat, Mp4OutputFormat, Output, QUALITY_HIGH, QUALITY_LOW, QUALITY_VERY_HIGH, QUALITY_VERY_LOW, VideoSample, VideoSampleSource, WebMOutputFormat } from "mediabunny";
|
|
6
7
|
import fs from "node:fs";
|
|
7
8
|
import path from "node:path";
|
|
@@ -17,7 +18,7 @@ import { registerMediabunnyServer } from "@mediabunny/server";
|
|
|
17
18
|
import { exec, spawn } from "node:child_process";
|
|
18
19
|
import sharp from "sharp";
|
|
19
20
|
|
|
20
|
-
//#region ../renderer/dist/bootstrap-mediabunny
|
|
21
|
+
//#region ../renderer/dist/bootstrap-mediabunny--TDh3Bij.mjs
|
|
21
22
|
const rendererLogger = pino({
|
|
22
23
|
level: typeof process !== "undefined" && process.env?.LOG_LEVEL || "info",
|
|
23
24
|
timestamp: pino.stdTimeFunctions.isoTime,
|
|
@@ -241,232 +242,232 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
241
242
|
{
|
|
242
243
|
packageName: "@framefields/node-lut",
|
|
243
244
|
ops: ["ApplyLUT"],
|
|
244
|
-
load: () => import("./renderer-
|
|
245
|
+
load: () => import("./renderer-WrpQEVdv.mjs")
|
|
245
246
|
},
|
|
246
247
|
{
|
|
247
248
|
packageName: "@framefields/node-audio-compressor",
|
|
248
249
|
ops: ["AudioCompressor"],
|
|
249
|
-
load: () => import("./renderer-
|
|
250
|
+
load: () => import("./renderer-SWVUDypd.mjs")
|
|
250
251
|
},
|
|
251
252
|
{
|
|
252
253
|
packageName: "@framefields/node-audio-delay",
|
|
253
254
|
ops: ["AudioDelay"],
|
|
254
|
-
load: () => import("./renderer-
|
|
255
|
+
load: () => import("./renderer-BtGNxEay.mjs")
|
|
255
256
|
},
|
|
256
257
|
{
|
|
257
258
|
packageName: "@framefields/node-audio-fade",
|
|
258
259
|
ops: ["AudioFade"],
|
|
259
|
-
load: () => import("./renderer-
|
|
260
|
+
load: () => import("./renderer-BLAkNFx7.mjs")
|
|
260
261
|
},
|
|
261
262
|
{
|
|
262
263
|
packageName: "@framefields/node-audio-noise-gate",
|
|
263
264
|
ops: ["AudioNoiseGate"],
|
|
264
|
-
load: () => import("./renderer-
|
|
265
|
+
load: () => import("./renderer-FTKfOejk.mjs")
|
|
265
266
|
},
|
|
266
267
|
{
|
|
267
268
|
packageName: "@framefields/node-audio-parametric-eq",
|
|
268
269
|
ops: ["AudioParametricEq"],
|
|
269
|
-
load: () => import("./renderer-
|
|
270
|
+
load: () => import("./renderer-CV-l8wMq.mjs")
|
|
270
271
|
},
|
|
271
272
|
{
|
|
272
273
|
packageName: "@framefields/node-audio-reverb",
|
|
273
274
|
ops: ["AudioReverb"],
|
|
274
|
-
load: () => import("./renderer-
|
|
275
|
+
load: () => import("./renderer-BjeA7s36.mjs")
|
|
275
276
|
},
|
|
276
277
|
{
|
|
277
278
|
packageName: "@framefields/node-audio-signal-extractor",
|
|
278
279
|
ops: ["AudioSignalExtractor"],
|
|
279
|
-
load: () => import("./renderer-
|
|
280
|
+
load: () => import("./renderer-B6iUuWcx.mjs")
|
|
280
281
|
},
|
|
281
282
|
{
|
|
282
283
|
packageName: "@framefields/node-blur",
|
|
283
284
|
ops: ["Blur"],
|
|
284
|
-
load: () => import("./renderer-
|
|
285
|
+
load: () => import("./renderer-D9x3UE1Y.mjs")
|
|
285
286
|
},
|
|
286
287
|
{
|
|
287
288
|
packageName: "@framefields/node-camera-parallax-3d",
|
|
288
289
|
ops: ["CameraParallax3D"],
|
|
289
|
-
load: () => import("./renderer-
|
|
290
|
+
load: () => import("./renderer-C2eBC0FB.mjs")
|
|
290
291
|
},
|
|
291
292
|
{
|
|
292
293
|
packageName: "@framefields/node-canvas-generator",
|
|
293
294
|
ops: ["CanvasGenerator"],
|
|
294
|
-
load: () => import("./renderer-
|
|
295
|
+
load: () => import("./renderer-Dnm_SVy6.mjs")
|
|
295
296
|
},
|
|
296
297
|
{
|
|
297
298
|
packageName: "@framefields/node-channel-merger",
|
|
298
299
|
ops: ["ChannelMerger"],
|
|
299
|
-
load: () => import("./renderer-
|
|
300
|
+
load: () => import("./renderer-CPW9o3Lc.mjs")
|
|
300
301
|
},
|
|
301
302
|
{
|
|
302
303
|
packageName: "@framefields/node-channel-splitter",
|
|
303
304
|
ops: ["ChannelSplitter"],
|
|
304
|
-
load: () => import("./renderer-
|
|
305
|
+
load: () => import("./renderer-DkGODUgE.mjs")
|
|
305
306
|
},
|
|
306
307
|
{
|
|
307
308
|
packageName: "@framefields/node-color-balance",
|
|
308
309
|
ops: ["ColorBalance"],
|
|
309
|
-
load: () => import("./renderer-
|
|
310
|
+
load: () => import("./renderer-CO4theVJ.mjs")
|
|
310
311
|
},
|
|
311
312
|
{
|
|
312
313
|
packageName: "@framefields/node-colorkey",
|
|
313
314
|
ops: ["ColorKey"],
|
|
314
|
-
load: () => import("./renderer-
|
|
315
|
+
load: () => import("./renderer-LmbkN82X.mjs")
|
|
315
316
|
},
|
|
316
317
|
{
|
|
317
318
|
packageName: "@framefields/node-compositor",
|
|
318
319
|
ops: ["Compositor"],
|
|
319
|
-
load: () => import("./renderer-
|
|
320
|
+
load: () => import("./renderer-FgcNOe1R.mjs")
|
|
320
321
|
},
|
|
321
322
|
{
|
|
322
323
|
packageName: "@framefields/node-corner-pin",
|
|
323
324
|
ops: ["CornerPin"],
|
|
324
|
-
load: () => import("./renderer-
|
|
325
|
+
load: () => import("./renderer-DjZiO7iA.mjs")
|
|
325
326
|
},
|
|
326
327
|
{
|
|
327
328
|
packageName: "@framefields/node-crop",
|
|
328
329
|
ops: ["Crop"],
|
|
329
|
-
load: () => import("./renderer-
|
|
330
|
+
load: () => import("./renderer-DcCKath2.mjs")
|
|
330
331
|
},
|
|
331
332
|
{
|
|
332
333
|
packageName: "@framefields/node-curves",
|
|
333
334
|
ops: ["Curves"],
|
|
334
|
-
load: () => import("./renderer-
|
|
335
|
+
load: () => import("./renderer-BVNhv2ft.mjs")
|
|
335
336
|
},
|
|
336
337
|
{
|
|
337
338
|
packageName: "@framefields/node-deflicker",
|
|
338
339
|
ops: ["TemporalDeflicker", "Deflicker"],
|
|
339
|
-
load: () => import("./renderer-
|
|
340
|
+
load: () => import("./renderer-CVR6T6Lp.mjs")
|
|
340
341
|
},
|
|
341
342
|
{
|
|
342
343
|
packageName: "@framefields/node-displacement-map",
|
|
343
344
|
ops: ["DisplacementMap"],
|
|
344
|
-
load: () => import("./renderer-
|
|
345
|
+
load: () => import("./renderer-CLW6tUUn.mjs")
|
|
345
346
|
},
|
|
346
347
|
{
|
|
347
348
|
packageName: "@framefields/node-extract-frame",
|
|
348
349
|
ops: ["ExtractFrame"],
|
|
349
|
-
load: () => import("./renderer-
|
|
350
|
+
load: () => import("./renderer-B4cnT3ce.mjs")
|
|
350
351
|
},
|
|
351
352
|
{
|
|
352
353
|
packageName: "@framefields/node-extract-lut",
|
|
353
354
|
ops: ["ExtractLUT"],
|
|
354
|
-
load: () => import("./renderer-
|
|
355
|
+
load: () => import("./renderer-DU6i7shO.mjs")
|
|
355
356
|
},
|
|
356
357
|
{
|
|
357
358
|
packageName: "@framefields/node-film-grain",
|
|
358
359
|
ops: ["FilmGrain"],
|
|
359
|
-
load: () => import("./renderer-
|
|
360
|
+
load: () => import("./renderer-Diq9Z7gZ.mjs")
|
|
360
361
|
},
|
|
361
362
|
{
|
|
362
363
|
packageName: "@framefields/node-flip",
|
|
363
364
|
ops: ["Flip"],
|
|
364
|
-
load: () => import("./renderer-
|
|
365
|
+
load: () => import("./renderer-BaXTEIe0.mjs")
|
|
365
366
|
},
|
|
366
367
|
{
|
|
367
368
|
packageName: "@framefields/node-gradient-map",
|
|
368
369
|
ops: ["GradientMap"],
|
|
369
|
-
load: () => import("./renderer-
|
|
370
|
+
load: () => import("./renderer-ClWgdN2v.mjs")
|
|
370
371
|
},
|
|
371
372
|
{
|
|
372
373
|
packageName: "@framefields/node-halftone-screen",
|
|
373
374
|
ops: ["HalftoneScreen"],
|
|
374
|
-
load: () => import("./renderer-
|
|
375
|
+
load: () => import("./renderer-DAEXqa2Q.mjs")
|
|
375
376
|
},
|
|
376
377
|
{
|
|
377
378
|
packageName: "@framefields/node-high-pass",
|
|
378
379
|
ops: ["HighPass"],
|
|
379
|
-
load: () => import("./renderer-
|
|
380
|
+
load: () => import("./renderer-BEGJCxuL.mjs")
|
|
380
381
|
},
|
|
381
382
|
{
|
|
382
383
|
packageName: "@framefields/node-kenburns",
|
|
383
384
|
ops: ["KenBurns"],
|
|
384
|
-
load: () => import("./renderer-
|
|
385
|
+
load: () => import("./renderer-BvZg2RJG.mjs")
|
|
385
386
|
},
|
|
386
387
|
{
|
|
387
388
|
packageName: "@framefields/node-layer-style",
|
|
388
389
|
ops: ["LayerStyle"],
|
|
389
|
-
load: () => import("./renderer-
|
|
390
|
+
load: () => import("./renderer-CUQtKECw.mjs")
|
|
390
391
|
},
|
|
391
392
|
{
|
|
392
393
|
packageName: "@framefields/node-levels",
|
|
393
394
|
ops: ["Levels"],
|
|
394
|
-
load: () => import("./renderer-
|
|
395
|
+
load: () => import("./renderer-WhpTBwDM.mjs")
|
|
395
396
|
},
|
|
396
397
|
{
|
|
397
398
|
packageName: "@framefields/node-liquify",
|
|
398
399
|
ops: ["Liquify"],
|
|
399
|
-
load: () => import("./renderer-
|
|
400
|
+
load: () => import("./renderer-DiBphLzn.mjs")
|
|
400
401
|
},
|
|
401
402
|
{
|
|
402
403
|
packageName: "@framefields/node-mask-math",
|
|
403
404
|
ops: ["MaskMath"],
|
|
404
|
-
load: () => import("./renderer-
|
|
405
|
+
load: () => import("./renderer-CtUF95UW.mjs")
|
|
405
406
|
},
|
|
406
407
|
{
|
|
407
408
|
packageName: "@framefields/node-mesh-warp",
|
|
408
409
|
ops: ["MeshWarp"],
|
|
409
|
-
load: () => import("./renderer-
|
|
410
|
+
load: () => import("./renderer-CV7_ALA5.mjs")
|
|
410
411
|
},
|
|
411
412
|
{
|
|
412
413
|
packageName: "@framefields/node-modulate",
|
|
413
414
|
ops: ["Modulate"],
|
|
414
|
-
load: () => import("./renderer-
|
|
415
|
+
load: () => import("./renderer-Dtj6o-74.mjs")
|
|
415
416
|
},
|
|
416
417
|
{
|
|
417
418
|
packageName: "@framefields/node-noise-generator",
|
|
418
419
|
ops: ["NoiseGenerator"],
|
|
419
|
-
load: () => import("./renderer-
|
|
420
|
+
load: () => import("./renderer-CSfLMXN8.mjs")
|
|
420
421
|
},
|
|
421
422
|
{
|
|
422
423
|
packageName: "@framefields/node-paint",
|
|
423
424
|
ops: ["Paint"],
|
|
424
|
-
load: () => import("./renderer-
|
|
425
|
+
load: () => import("./renderer-SDspl6p-.mjs")
|
|
425
426
|
},
|
|
426
427
|
{
|
|
427
428
|
packageName: "@framefields/node-patch-heal",
|
|
428
429
|
ops: ["PatchHeal"],
|
|
429
|
-
load: () => import("./renderer-
|
|
430
|
+
load: () => import("./renderer-Dyh8c41v.mjs")
|
|
430
431
|
},
|
|
431
432
|
{
|
|
432
433
|
packageName: "@framefields/node-refine-edge",
|
|
433
434
|
ops: ["RefineEdge"],
|
|
434
|
-
load: () => import("./renderer-
|
|
435
|
+
load: () => import("./renderer-B3MVDN_e.mjs")
|
|
435
436
|
},
|
|
436
437
|
{
|
|
437
438
|
packageName: "@framefields/node-refraction-caustics",
|
|
438
439
|
ops: ["RefractionCaustics3D"],
|
|
439
|
-
load: () => import("./renderer-
|
|
440
|
+
load: () => import("./renderer-scbJx-Dx.mjs")
|
|
440
441
|
},
|
|
441
442
|
{
|
|
442
443
|
packageName: "@framefields/node-relight-3d",
|
|
443
444
|
ops: ["Relight3D"],
|
|
444
|
-
load: () => import("./renderer-
|
|
445
|
+
load: () => import("./renderer-r4ney0FZ.mjs")
|
|
445
446
|
},
|
|
446
447
|
{
|
|
447
448
|
packageName: "@framefields/node-resizer-scaler",
|
|
448
449
|
ops: ["ResizerScaler"],
|
|
449
|
-
load: () => import("./renderer-
|
|
450
|
+
load: () => import("./renderer-DppnY7RT.mjs")
|
|
450
451
|
},
|
|
451
452
|
{
|
|
452
453
|
packageName: "@framefields/node-rotate",
|
|
453
454
|
ops: ["Rotate"],
|
|
454
|
-
load: () => import("./renderer-
|
|
455
|
+
load: () => import("./renderer-FHqZe3K1.mjs")
|
|
455
456
|
},
|
|
456
457
|
{
|
|
457
458
|
packageName: "@framefields/node-selective-color",
|
|
458
459
|
ops: ["SelectiveColor"],
|
|
459
|
-
load: () => import("./renderer-
|
|
460
|
+
load: () => import("./renderer-D8ymQoTB.mjs")
|
|
460
461
|
},
|
|
461
462
|
{
|
|
462
463
|
packageName: "@framefields/node-shadows-highlights",
|
|
463
464
|
ops: ["ShadowsHighlights"],
|
|
464
|
-
load: () => import("./renderer-
|
|
465
|
+
load: () => import("./renderer-CS-ojgJk.mjs")
|
|
465
466
|
},
|
|
466
467
|
{
|
|
467
468
|
packageName: "@framefields/node-shape-generator",
|
|
468
469
|
ops: ["ShapeGenerator"],
|
|
469
|
-
load: () => import("./renderer-
|
|
470
|
+
load: () => import("./renderer-n2kYIGtb.mjs")
|
|
470
471
|
},
|
|
471
472
|
{
|
|
472
473
|
packageName: "@framefields/node-signal-gate",
|
|
@@ -476,27 +477,27 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
476
477
|
{
|
|
477
478
|
packageName: "@framefields/node-stereo-panning",
|
|
478
479
|
ops: ["StereoPanning"],
|
|
479
|
-
load: () => import("./renderer-
|
|
480
|
+
load: () => import("./renderer-Duaam6bJ.mjs")
|
|
480
481
|
},
|
|
481
482
|
{
|
|
482
483
|
packageName: "@framefields/node-tile-offset",
|
|
483
484
|
ops: ["TileOffset"],
|
|
484
|
-
load: () => import("./renderer-
|
|
485
|
+
load: () => import("./renderer-B8IdU-7S.mjs")
|
|
485
486
|
},
|
|
486
487
|
{
|
|
487
488
|
packageName: "@framefields/node-unsharp-mask",
|
|
488
489
|
ops: ["UnsharpMask"],
|
|
489
|
-
load: () => import("./renderer-
|
|
490
|
+
load: () => import("./renderer-DDhU9Goq.mjs")
|
|
490
491
|
},
|
|
491
492
|
{
|
|
492
493
|
packageName: "@framefields/node-vignette",
|
|
493
494
|
ops: ["Vignette"],
|
|
494
|
-
load: () => import("./renderer-
|
|
495
|
+
load: () => import("./renderer-9ETXaINw.mjs")
|
|
495
496
|
},
|
|
496
497
|
{
|
|
497
498
|
packageName: "@framefields/node-vision",
|
|
498
499
|
ops: ["Vision"],
|
|
499
|
-
load: () => import("./renderer-
|
|
500
|
+
load: () => import("./renderer-CZKFEf_6.mjs")
|
|
500
501
|
}
|
|
501
502
|
];
|
|
502
503
|
/**
|
|
@@ -668,6 +669,163 @@ async function discoverAndRegisterNodeRenderers() {
|
|
|
668
669
|
}
|
|
669
670
|
}
|
|
670
671
|
}
|
|
672
|
+
let nodeAv;
|
|
673
|
+
/**
|
|
674
|
+
* node-av as @mediabunny/server loads it, with software encoders as the
|
|
675
|
+
* default. The patch and the HardwareContext instances returned to the server
|
|
676
|
+
* must come from that exact module instance, so the file is resolved from the
|
|
677
|
+
* server package and imported natively (a `require()` can be routed through
|
|
678
|
+
* a loader such as tsx and produce a second copy).
|
|
679
|
+
*/
|
|
680
|
+
function loadNodeAv() {
|
|
681
|
+
nodeAv ??= (async () => {
|
|
682
|
+
const av = await import(pathToFileURL(createRequire(createRequire(import.meta.url).resolve("@mediabunny/server")).resolve("node-av")).href);
|
|
683
|
+
preferSoftwareEncoders(av);
|
|
684
|
+
return av;
|
|
685
|
+
})();
|
|
686
|
+
return nodeAv;
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Software encoders to use per codec, best first. @mediabunny/server takes
|
|
690
|
+
* `Codec.findEncoder(id)` as its software encoder, which returns whichever
|
|
691
|
+
* encoder FFmpeg registered first. In node-av's linux-arm64 build that is a
|
|
692
|
+
* hardware encoder (h264_rkmpp, hevc_rkmpp), which fails without Rockchip
|
|
693
|
+
* hardware.
|
|
694
|
+
*/
|
|
695
|
+
const SOFTWARE_ENCODERS = {
|
|
696
|
+
AV_CODEC_ID_H264: ["libx264", "libopenh264"],
|
|
697
|
+
AV_CODEC_ID_HEVC: ["libx265"],
|
|
698
|
+
AV_CODEC_ID_VP8: ["libvpx"],
|
|
699
|
+
AV_CODEC_ID_VP9: ["libvpx-vp9"],
|
|
700
|
+
AV_CODEC_ID_AV1: [
|
|
701
|
+
"libsvtav1",
|
|
702
|
+
"libaom-av1",
|
|
703
|
+
"libdav1d"
|
|
704
|
+
]
|
|
705
|
+
};
|
|
706
|
+
let patched = false;
|
|
707
|
+
/** Makes `Codec.findEncoder` return a software encoder when one exists. */
|
|
708
|
+
function preferSoftwareEncoders(av) {
|
|
709
|
+
if (patched) return;
|
|
710
|
+
patched = true;
|
|
711
|
+
const byId = /* @__PURE__ */ new Map();
|
|
712
|
+
for (const [constant, names] of Object.entries(SOFTWARE_ENCODERS)) {
|
|
713
|
+
const id = av[constant];
|
|
714
|
+
if (typeof id === "number") byId.set(id, names);
|
|
715
|
+
}
|
|
716
|
+
const findEncoder = av.Codec.findEncoder.bind(av.Codec);
|
|
717
|
+
av.Codec.findEncoder = ((id) => {
|
|
718
|
+
for (const name of byId.get(id) ?? []) {
|
|
719
|
+
const codec = av.Codec.findEncoderByName(name);
|
|
720
|
+
if (codec) return codec;
|
|
721
|
+
}
|
|
722
|
+
return findEncoder(id);
|
|
723
|
+
});
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* Opens the encoder with the settings @mediabunny/server uses and encodes one
|
|
727
|
+
* frame. A hardware encoder can be compiled in and still be unusable: no such
|
|
728
|
+
* hardware (rkmpp on a non-Rockchip board), or a GPU without an encoder block
|
|
729
|
+
* (NVIDIA A100/H100 have no NVENC).
|
|
730
|
+
*/
|
|
731
|
+
async function encoderWorks(av, codec) {
|
|
732
|
+
const ctx = new av.CodecContext();
|
|
733
|
+
const frame = new av.Frame();
|
|
734
|
+
const packet = new av.Packet();
|
|
735
|
+
try {
|
|
736
|
+
ctx.allocContext3(codec);
|
|
737
|
+
const formats = codec.pixelFormats;
|
|
738
|
+
const pixelFormat = !formats || formats.includes(av.AV_PIX_FMT_YUV420P) ? av.AV_PIX_FMT_YUV420P : formats[0];
|
|
739
|
+
ctx.width = 256;
|
|
740
|
+
ctx.height = 256;
|
|
741
|
+
ctx.pixelFormat = pixelFormat;
|
|
742
|
+
ctx.timeBase = new av.Rational(1, 1e6);
|
|
743
|
+
ctx.framerate = new av.Rational(30, 1);
|
|
744
|
+
ctx.gopSize = 60;
|
|
745
|
+
ctx.bitRate = 1000000n;
|
|
746
|
+
if (await ctx.open2() < 0) return false;
|
|
747
|
+
frame.alloc();
|
|
748
|
+
frame.format = pixelFormat;
|
|
749
|
+
frame.width = 256;
|
|
750
|
+
frame.height = 256;
|
|
751
|
+
if (frame.getBuffer() < 0) return false;
|
|
752
|
+
frame.pts = 0n;
|
|
753
|
+
packet.alloc();
|
|
754
|
+
if (await ctx.sendFrame(frame) < 0) return false;
|
|
755
|
+
if (await ctx.sendFrame(null) < 0) return false;
|
|
756
|
+
for (;;) {
|
|
757
|
+
const ret = await ctx.receivePacket(packet);
|
|
758
|
+
if (ret >= 0) return true;
|
|
759
|
+
if (ret !== av.AVERROR_EAGAIN) return false;
|
|
760
|
+
}
|
|
761
|
+
} catch {
|
|
762
|
+
return false;
|
|
763
|
+
} finally {
|
|
764
|
+
packet.free();
|
|
765
|
+
frame.free();
|
|
766
|
+
ctx.freeContext();
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
/** True when the env turns hardware video encoding/decoding off. */
|
|
770
|
+
function hardwareDisabled() {
|
|
771
|
+
const value = process.env.FRAMEFIELDS_HW_CODECS?.toLowerCase();
|
|
772
|
+
return value === "0" || value === "off" || value === "false";
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Returns the `hardwareContext` option for registerMediabunnyServer: the
|
|
776
|
+
* platform's hardware context for codecs whose hardware encoder actually
|
|
777
|
+
* works (NVENC, VideoToolbox, ...), and null otherwise, so that codec is
|
|
778
|
+
* encoded in software. Each codec is tested once per process.
|
|
779
|
+
*
|
|
780
|
+
* The server calls this before it picks any encoder (unless the encoder is
|
|
781
|
+
* created with "prefer-software"), so the software default is patched in by
|
|
782
|
+
* then.
|
|
783
|
+
*/
|
|
784
|
+
function hardwareContextResolver(forceSoftware) {
|
|
785
|
+
let hw;
|
|
786
|
+
const verdicts = /* @__PURE__ */ new Map();
|
|
787
|
+
const resolve$1 = async (codecId) => {
|
|
788
|
+
const av = await loadNodeAv();
|
|
789
|
+
if (forceSoftware || hardwareDisabled()) return null;
|
|
790
|
+
if (hw === void 0) hw = av.HardwareContext.auto();
|
|
791
|
+
if (!hw) return null;
|
|
792
|
+
const encoder = hw.getEncoderCodec(codecId);
|
|
793
|
+
if (!encoder) return hw;
|
|
794
|
+
if (await encoderWorks(av, encoder)) {
|
|
795
|
+
rendererLogger.info({
|
|
796
|
+
encoder: encoder.name,
|
|
797
|
+
device: hw.deviceTypeName
|
|
798
|
+
}, "[video-encoders] Using hardware video encoder");
|
|
799
|
+
return hw;
|
|
800
|
+
}
|
|
801
|
+
rendererLogger.warn({
|
|
802
|
+
encoder: encoder.name,
|
|
803
|
+
device: hw.deviceTypeName
|
|
804
|
+
}, "[video-encoders] Hardware video encoder unusable; encoding in software");
|
|
805
|
+
return null;
|
|
806
|
+
};
|
|
807
|
+
return (codecId) => {
|
|
808
|
+
let verdict = verdicts.get(codecId);
|
|
809
|
+
if (!verdict) {
|
|
810
|
+
verdict = resolve$1(codecId).catch(async (err) => {
|
|
811
|
+
await loadNodeAv();
|
|
812
|
+
rendererLogger.warn({ err: err instanceof Error ? err.message : String(err) }, "[video-encoders] Hardware probe failed; encoding in software");
|
|
813
|
+
return null;
|
|
814
|
+
});
|
|
815
|
+
verdicts.set(codecId, verdict);
|
|
816
|
+
}
|
|
817
|
+
return verdict;
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
/**
|
|
821
|
+
* Options for registerMediabunnyServer: hardware video codecs when they work,
|
|
822
|
+
* software (libx264, libx265, libvpx, SVT-AV1) otherwise. `forceSoftware`
|
|
823
|
+
* keeps every codec in software (used on AMD). Create encoders with
|
|
824
|
+
* "prefer-hardware" so this decides; "prefer-software" skips it.
|
|
825
|
+
*/
|
|
826
|
+
function videoCodecServerOptions(forceSoftware) {
|
|
827
|
+
return { hardwareContext: hardwareContextResolver(forceSoftware) };
|
|
828
|
+
}
|
|
671
829
|
const isAMD = () => {
|
|
672
830
|
if (process.platform !== "linux") return false;
|
|
673
831
|
try {
|
|
@@ -686,16 +844,12 @@ const isAMD = () => {
|
|
|
686
844
|
return false;
|
|
687
845
|
};
|
|
688
846
|
const bootstrapMediabunny = () => {
|
|
689
|
-
|
|
690
|
-
if (isAMD()) return { hardwareContext: null };
|
|
691
|
-
return {};
|
|
692
|
-
};
|
|
693
|
-
registerMediabunnyServer(getHardwareContextOption());
|
|
847
|
+
registerMediabunnyServer(videoCodecServerOptions(isAMD()));
|
|
694
848
|
for (const key of Object.keys(webcodecs)) if (typeof globalThis[key] === "undefined") globalThis[key] = webcodecs[key];
|
|
695
849
|
};
|
|
696
850
|
|
|
697
851
|
//#endregion
|
|
698
|
-
//#region ../renderer/dist/headless-webgpu-renderer-
|
|
852
|
+
//#region ../renderer/dist/headless-webgpu-renderer-D6E4D0cL.mjs
|
|
699
853
|
const DEFAULTS = {
|
|
700
854
|
blackPixelThreshold: .1,
|
|
701
855
|
blackFrameRatio: .98,
|
|
@@ -1792,7 +1946,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1792
1946
|
codec: videoCodec,
|
|
1793
1947
|
bitrate: quality,
|
|
1794
1948
|
latencyMode: "realtime",
|
|
1795
|
-
hardwareAcceleration:
|
|
1949
|
+
hardwareAcceleration: "prefer-hardware"
|
|
1796
1950
|
});
|
|
1797
1951
|
output.addVideoTrack(videoSource);
|
|
1798
1952
|
}
|
|
@@ -1854,6 +2008,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1854
2008
|
};
|
|
1855
2009
|
await prePass(0);
|
|
1856
2010
|
for (let i = 0; i < totalFrames; i++) {
|
|
2011
|
+
options?.signal?.throwIfAborted();
|
|
1857
2012
|
if (i % 10 === 0) rendererLogger.info({
|
|
1858
2013
|
renderId,
|
|
1859
2014
|
frame: i,
|
|
@@ -1887,6 +2042,11 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1887
2042
|
isVideoMode: virtualMedia.operation?.dataType === "Video"
|
|
1888
2043
|
});
|
|
1889
2044
|
await pipeline.enqueueFrame(i, targetTexture, encoder);
|
|
2045
|
+
options?.onProgress?.({
|
|
2046
|
+
phase: "render",
|
|
2047
|
+
frame: i + 1,
|
|
2048
|
+
totalFrames
|
|
2049
|
+
});
|
|
1890
2050
|
} else throw new Error("Invalid render context state");
|
|
1891
2051
|
}
|
|
1892
2052
|
if (pipeline) {
|
|
@@ -1900,6 +2060,12 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1900
2060
|
}, `[HeadlessWebGPURenderer] All frames rendered and encoded (avg cycle: ${pipelineStats.averageCycleTimeMs.toFixed(2)}ms, throughput: ${pipelineStats.throughputFps.toFixed(1)} fps)`);
|
|
1901
2061
|
}
|
|
1902
2062
|
}
|
|
2063
|
+
options?.signal?.throwIfAborted();
|
|
2064
|
+
options?.onProgress?.({
|
|
2065
|
+
phase: "audio",
|
|
2066
|
+
frame: totalFrames,
|
|
2067
|
+
totalFrames
|
|
2068
|
+
});
|
|
1903
2069
|
const { channels, sampleRate } = await mixAudioTracks(virtualMedia, fps, 48e3, device, renderId);
|
|
1904
2070
|
const numChannels = channels.length;
|
|
1905
2071
|
if (numChannels === 0) throw new Error("mixAudioTracks returned no channels");
|
|
@@ -1923,6 +2089,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1923
2089
|
sample.close();
|
|
1924
2090
|
}
|
|
1925
2091
|
}
|
|
2092
|
+
options?.signal?.throwIfAborted();
|
|
1926
2093
|
await output.finalize();
|
|
1927
2094
|
outputFinalized = true;
|
|
1928
2095
|
const qa = qaOptions ? buildQaReport({
|
|
@@ -1997,6 +2164,23 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
1997
2164
|
};
|
|
1998
2165
|
const HeadlessMediaRenderer = HeadlessWebGPURenderer;
|
|
1999
2166
|
|
|
2167
|
+
//#endregion
|
|
2168
|
+
//#region ../renderer/dist/index.mjs
|
|
2169
|
+
/**
|
|
2170
|
+
* Drops every cache keyed by a file path or URL: media inputs and decoders,
|
|
2171
|
+
* textures, LUTs and fonts. A long-lived worker calls this between jobs,
|
|
2172
|
+
* because the next checkout may hold different bytes at the same path. The
|
|
2173
|
+
* GPU device and compiled pipelines stay warm.
|
|
2174
|
+
*/
|
|
2175
|
+
function resetRenderCaches() {
|
|
2176
|
+
clearAllVideoCache();
|
|
2177
|
+
mediaDecoderCache.destroy();
|
|
2178
|
+
textureCache.destroy();
|
|
2179
|
+
inputStore.clear();
|
|
2180
|
+
lutStore.destroy();
|
|
2181
|
+
SlugFontCache.destroy();
|
|
2182
|
+
}
|
|
2183
|
+
|
|
2000
2184
|
//#endregion
|
|
2001
2185
|
//#region src/renderer/framegrid.ts
|
|
2002
2186
|
/**
|
|
@@ -2169,5 +2353,5 @@ async function renderFrameGrid(target, options = {}) {
|
|
|
2169
2353
|
}
|
|
2170
2354
|
|
|
2171
2355
|
//#endregion
|
|
2172
|
-
export {
|
|
2173
|
-
//# sourceMappingURL=renderer-
|
|
2356
|
+
export { HeadlessMediaRenderer as a, renderSemaphore as c, resetRenderCaches as i, renderFrameGrid as n, HeadlessWebGPURenderer as o, resolveSamplePoints as r, formatQaReport as s, computeGridLayout as t };
|
|
2357
|
+
//# sourceMappingURL=renderer-DzDZlez7.mjs.map
|