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.
Files changed (258) hide show
  1. package/README.md +48 -618
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CfBpzxn9.d.mts → audio-1QquqDJs.d.mts} +3 -3
  5. package/dist/{audio-CfBpzxn9.d.mts.map → audio-1QquqDJs.d.mts.map} +1 -1
  6. package/dist/{audio-DqaHxtG3.mjs → audio-BYqbtdH8.mjs} +3 -3
  7. package/dist/{audio-DqaHxtG3.mjs.map → audio-BYqbtdH8.mjs.map} +1 -1
  8. package/dist/{dist-BgFYDCoL.mjs → dist-BLbXEC6V.mjs} +2 -2
  9. package/dist/{dist-BgFYDCoL.mjs.map → dist-BLbXEC6V.mjs.map} +1 -1
  10. package/dist/{dist-Cog5jyVI.mjs → dist-DQlYw4eG.mjs} +44 -4
  11. package/dist/dist-DQlYw4eG.mjs.map +1 -0
  12. package/dist/effects/index.d.mts +4 -4
  13. package/dist/effects/index.mjs +35 -35
  14. package/dist/{effects-CXrmO68D.mjs → effects-DgpPr38s.mjs} +2 -2
  15. package/dist/{effects-CXrmO68D.mjs.map → effects-DgpPr38s.mjs.map} +1 -1
  16. package/dist/fonts/index.mjs +2 -2
  17. package/dist/{fonts-BUVSUWXJ.mjs → fonts-DakFEiDw.mjs} +2 -2
  18. package/dist/{fonts-BUVSUWXJ.mjs.map → fonts-DakFEiDw.mjs.map} +1 -1
  19. package/dist/{gpu-Bj08zUc5.mjs → gpu-AbcLcr1f.mjs} +2 -2
  20. package/dist/{gpu-Bj08zUc5.mjs.map → gpu-AbcLcr1f.mjs.map} +1 -1
  21. package/dist/{index-Cpkzy5XR.d.mts → index--1jnkoBj.d.mts} +20 -2
  22. package/dist/index--1jnkoBj.d.mts.map +1 -0
  23. package/dist/{index-BzQc812z.d.mts → index-BqzHDFkU.d.mts} +3 -3
  24. package/dist/{index-BzQc812z.d.mts.map → index-BqzHDFkU.d.mts.map} +1 -1
  25. package/dist/{index-DpWia6iH.d.mts → index-CaZfxDXx.d.mts} +27 -3
  26. package/dist/index-CaZfxDXx.d.mts.map +1 -0
  27. package/dist/{index-Fciq8bcC.d.mts → index-D6_KcajH.d.mts} +2 -2
  28. package/dist/{index-Fciq8bcC.d.mts.map → index-D6_KcajH.d.mts.map} +1 -1
  29. package/dist/{index-D__HdInU.d.mts → index-DLbtJPrc.d.mts} +23 -12
  30. package/dist/index-DLbtJPrc.d.mts.map +1 -0
  31. package/dist/{index--0vVZDPM.d.mts → index-DgJIBC_N.d.mts} +3 -3
  32. package/dist/{index--0vVZDPM.d.mts.map → index-DgJIBC_N.d.mts.map} +1 -1
  33. package/dist/index.d.mts +16 -9
  34. package/dist/index.d.mts.map +1 -1
  35. package/dist/index.mjs +50 -50
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/preview/index.d.mts +2 -2
  38. package/dist/preview/index.mjs +10 -10
  39. package/dist/{preview-BOqCRCgp.mjs → preview-BQ3BhcVX.mjs} +2 -2
  40. package/dist/{preview-BOqCRCgp.mjs.map → preview-BQ3BhcVX.mjs.map} +1 -1
  41. package/dist/preview-engine/audio.mjs +1 -1
  42. package/dist/preview-engine/{chunk-JJ5EF3EY.mjs → chunk-2W4BMOAZ.mjs} +1 -1
  43. package/dist/preview-engine/chunk-7OMK352W.mjs +1 -0
  44. package/dist/preview-engine/chunk-FJH5A2PV.mjs +1 -0
  45. package/dist/preview-engine/{chunk-USM33CF5.mjs → chunk-HFUA47QH.mjs} +1 -1
  46. package/dist/preview-engine/chunk-K7M5EIFC.mjs +98 -0
  47. package/dist/preview-engine/{chunk-5DOD2NVY.mjs → chunk-MOW55DX2.mjs} +1 -1
  48. package/dist/preview-engine/chunk-VUFDQJ2B.mjs +1 -0
  49. package/dist/preview-engine/{chunk-ZIIFTWDH.mjs → chunk-XETMNJVV.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-AE2336RK.mjs → chunk-Z457JJCO.mjs} +1 -1
  51. package/dist/preview-engine/effects.mjs +1 -1
  52. package/dist/preview-engine/framefields.mjs +21 -21
  53. package/dist/preview-engine/player.mjs +1 -1
  54. package/dist/preview-engine/{renderers-57WDL6XN.mjs → renderers-HVTQ2B3H.mjs} +1 -1
  55. package/dist/preview-engine/{renderers-BH5MXUTT.mjs → renderers-OZYUGZG7.mjs} +1 -1
  56. package/dist/preview-engine/{renderers-2SVWAB42.mjs → renderers-UHYNEWQD.mjs} +1 -1
  57. package/dist/preview-engine/signals.mjs +1 -1
  58. package/dist/{program-D8JoVobr.mjs → program-Cc_2_YXn.mjs} +2 -2
  59. package/dist/{program-D8JoVobr.mjs.map → program-Cc_2_YXn.mjs.map} +1 -1
  60. package/dist/renderer/index.d.mts +3 -3
  61. package/dist/renderer/index.mjs +3 -3
  62. package/dist/{renderer-B9ProG0Z.mjs → renderer-2DjggBBS.mjs} +2 -2
  63. package/dist/{renderer-B9ProG0Z.mjs.map → renderer-2DjggBBS.mjs.map} +1 -1
  64. package/dist/{renderer-CBBhVrwO.mjs → renderer-4GYrnTfw.mjs} +2 -2
  65. package/dist/{renderer-CBBhVrwO.mjs.map → renderer-4GYrnTfw.mjs.map} +1 -1
  66. package/dist/renderer-9ETXaINw.mjs +5 -0
  67. package/dist/renderer-B3MVDN_e.mjs +5 -0
  68. package/dist/{renderer-CZ7-42SE.mjs → renderer-B4cnT3ce.mjs} +3 -3
  69. package/dist/{renderer-CZ7-42SE.mjs.map → renderer-B4cnT3ce.mjs.map} +1 -1
  70. package/dist/{renderer-0dD1VQsz.mjs → renderer-B5PFBOjv.mjs} +3 -3
  71. package/dist/{renderer-0dD1VQsz.mjs.map → renderer-B5PFBOjv.mjs.map} +1 -1
  72. package/dist/renderer-B6iUuWcx.mjs +6 -0
  73. package/dist/renderer-B8IdU-7S.mjs +5 -0
  74. package/dist/renderer-BEGJCxuL.mjs +5 -0
  75. package/dist/{renderer-BlTPu9QT.mjs → renderer-BEzUirF0.mjs} +2 -2
  76. package/dist/{renderer-BlTPu9QT.mjs.map → renderer-BEzUirF0.mjs.map} +1 -1
  77. package/dist/{renderer-ByGPFIu2.mjs → renderer-BKd2nRnO.mjs} +2 -2
  78. package/dist/{renderer-ByGPFIu2.mjs.map → renderer-BKd2nRnO.mjs.map} +1 -1
  79. package/dist/renderer-BLAkNFx7.mjs +5 -0
  80. package/dist/{renderer--2bwnzBi.mjs → renderer-BN0CzoG_.mjs} +2 -2
  81. package/dist/{renderer--2bwnzBi.mjs.map → renderer-BN0CzoG_.mjs.map} +1 -1
  82. package/dist/{renderer-aw8EsrS9.mjs → renderer-BNcsS03m.mjs} +2 -2
  83. package/dist/{renderer-aw8EsrS9.mjs.map → renderer-BNcsS03m.mjs.map} +1 -1
  84. package/dist/{renderer-Bs_f_App.d.mts → renderer-BO-7bYa5.d.mts} +2 -2
  85. package/dist/{renderer-Bs_f_App.d.mts.map → renderer-BO-7bYa5.d.mts.map} +1 -1
  86. package/dist/{renderer--JBbEfTc.mjs → renderer-BPMywsr4.mjs} +3 -3
  87. package/dist/{renderer--JBbEfTc.mjs.map → renderer-BPMywsr4.mjs.map} +1 -1
  88. package/dist/renderer-BVNhv2ft.mjs +5 -0
  89. package/dist/renderer-BaXTEIe0.mjs +5 -0
  90. package/dist/{renderer-BeuG4dyz.mjs → renderer-Bfrwo_It.mjs} +2 -2
  91. package/dist/{renderer-BeuG4dyz.mjs.map → renderer-Bfrwo_It.mjs.map} +1 -1
  92. package/dist/{renderer-DT1bySqu.mjs → renderer-BhxQzrHF.mjs} +2 -2
  93. package/dist/{renderer-DT1bySqu.mjs.map → renderer-BhxQzrHF.mjs.map} +1 -1
  94. package/dist/renderer-BjeA7s36.mjs +5 -0
  95. package/dist/renderer-BtGNxEay.mjs +5 -0
  96. package/dist/renderer-BvZg2RJG.mjs +5 -0
  97. package/dist/{renderer-BaYEXoS3.mjs → renderer-C2eBC0FB.mjs} +3 -3
  98. package/dist/{renderer-BaYEXoS3.mjs.map → renderer-C2eBC0FB.mjs.map} +1 -1
  99. package/dist/{renderer-B7jZuO6k.mjs → renderer-C4UqxwcT.mjs} +2 -2
  100. package/dist/{renderer-B7jZuO6k.mjs.map → renderer-C4UqxwcT.mjs.map} +1 -1
  101. package/dist/{renderer-Bm0W9qgc.mjs → renderer-C6u-XrH-.mjs} +3 -3
  102. package/dist/{renderer-Bm0W9qgc.mjs.map → renderer-C6u-XrH-.mjs.map} +1 -1
  103. package/dist/{renderer-BNyDJZzl.mjs → renderer-CB87_0vL.mjs} +3 -3
  104. package/dist/{renderer-BNyDJZzl.mjs.map → renderer-CB87_0vL.mjs.map} +1 -1
  105. package/dist/{renderer-FSCTtHrt.mjs → renderer-CD38wGmN.mjs} +2 -2
  106. package/dist/{renderer-FSCTtHrt.mjs.map → renderer-CD38wGmN.mjs.map} +1 -1
  107. package/dist/{renderer-ClIXn9ZU.mjs → renderer-CGZqCmf2.mjs} +2 -2
  108. package/dist/{renderer-ClIXn9ZU.mjs.map → renderer-CGZqCmf2.mjs.map} +1 -1
  109. package/dist/{renderer-CVD0oPsf.mjs → renderer-CHkqgIOL.mjs} +2 -2
  110. package/dist/{renderer-CVD0oPsf.mjs.map → renderer-CHkqgIOL.mjs.map} +1 -1
  111. package/dist/{renderer-Dj_K1f1T.mjs → renderer-CK0u3Psf.mjs} +3 -3
  112. package/dist/{renderer-Dj_K1f1T.mjs.map → renderer-CK0u3Psf.mjs.map} +1 -1
  113. package/dist/renderer-CLW6tUUn.mjs +5 -0
  114. package/dist/{renderer-BJ_GtjUk.mjs → renderer-CO4theVJ.mjs} +2 -2
  115. package/dist/{renderer-KcV0gCO5.mjs → renderer-CPW9o3Lc.mjs} +3 -3
  116. package/dist/{renderer-KcV0gCO5.mjs.map → renderer-CPW9o3Lc.mjs.map} +1 -1
  117. package/dist/renderer-CS-ojgJk.mjs +5 -0
  118. package/dist/{renderer-BwBc5xNu.mjs → renderer-CSfLMXN8.mjs} +3 -3
  119. package/dist/{renderer-BwBc5xNu.mjs.map → renderer-CSfLMXN8.mjs.map} +1 -1
  120. package/dist/{renderer-0fRv8mc5.mjs → renderer-CSoyJ8GH.mjs} +2 -2
  121. package/dist/{renderer-0fRv8mc5.mjs.map → renderer-CSoyJ8GH.mjs.map} +1 -1
  122. package/dist/renderer-CUQtKECw.mjs +5 -0
  123. package/dist/renderer-CV-l8wMq.mjs +5 -0
  124. package/dist/renderer-CV7_ALA5.mjs +5 -0
  125. package/dist/renderer-CVR6T6Lp.mjs +5 -0
  126. package/dist/{renderer-B-QXAPY0.mjs → renderer-CZ9gHx-4.mjs} +2 -2
  127. package/dist/{renderer-B-QXAPY0.mjs.map → renderer-CZ9gHx-4.mjs.map} +1 -1
  128. package/dist/renderer-CZKFEf_6.mjs +3 -0
  129. package/dist/{renderer-C-BjN5HM.mjs → renderer-CciB_sav.mjs} +3 -3
  130. package/dist/{renderer-C-BjN5HM.mjs.map → renderer-CciB_sav.mjs.map} +1 -1
  131. package/dist/{renderer-hIbXvzPu.mjs → renderer-ClWgdN2v.mjs} +2 -2
  132. package/dist/renderer-CtUF95UW.mjs +5 -0
  133. package/dist/{renderer-BJD6Ouon.mjs → renderer-Cv1wmjhA.mjs} +2 -2
  134. package/dist/{renderer-BJD6Ouon.mjs.map → renderer-Cv1wmjhA.mjs.map} +1 -1
  135. package/dist/{renderer-CJnIeI0m.mjs → renderer-Cxh7j423.mjs} +3 -3
  136. package/dist/{renderer-CJnIeI0m.mjs.map → renderer-Cxh7j423.mjs.map} +1 -1
  137. package/dist/{renderer-cjiONTY_.mjs → renderer-D0enmulV.mjs} +2 -2
  138. package/dist/{renderer-cjiONTY_.mjs.map → renderer-D0enmulV.mjs.map} +1 -1
  139. package/dist/renderer-D8ymQoTB.mjs +5 -0
  140. package/dist/renderer-D9x3UE1Y.mjs +5 -0
  141. package/dist/renderer-DAEXqa2Q.mjs +5 -0
  142. package/dist/renderer-DDhU9Goq.mjs +5 -0
  143. package/dist/{renderer-CgFs_3gW.mjs → renderer-DEQ09sg7.mjs} +2 -2
  144. package/dist/{renderer-CgFs_3gW.mjs.map → renderer-DEQ09sg7.mjs.map} +1 -1
  145. package/dist/{renderer-CATBdL9s.mjs → renderer-DRpIQFAK.mjs} +2 -2
  146. package/dist/{renderer-CATBdL9s.mjs.map → renderer-DRpIQFAK.mjs.map} +1 -1
  147. package/dist/{renderer-Dd9NUd_I.mjs → renderer-DT3QVVht.mjs} +2 -2
  148. package/dist/{renderer-Dd9NUd_I.mjs.map → renderer-DT3QVVht.mjs.map} +1 -1
  149. package/dist/{renderer-BqCx28Zb.mjs → renderer-DU3216cx.mjs} +3 -3
  150. package/dist/{renderer-BqCx28Zb.mjs.map → renderer-DU3216cx.mjs.map} +1 -1
  151. package/dist/{renderer-BXZo84vM.mjs → renderer-DU6i7shO.mjs} +2 -2
  152. package/dist/{renderer-BXZo84vM.mjs.map → renderer-DU6i7shO.mjs.map} +1 -1
  153. package/dist/renderer-DcCKath2.mjs +5 -0
  154. package/dist/{renderer-CmEvkdNL.mjs → renderer-DfSRmz7q.mjs} +3 -3
  155. package/dist/{renderer-CmEvkdNL.mjs.map → renderer-DfSRmz7q.mjs.map} +1 -1
  156. package/dist/renderer-DiBphLzn.mjs +5 -0
  157. package/dist/renderer-Diq9Z7gZ.mjs +5 -0
  158. package/dist/renderer-DjZiO7iA.mjs +5 -0
  159. package/dist/{renderer-Ba7Rc8DE.mjs → renderer-DkGODUgE.mjs} +3 -3
  160. package/dist/{renderer-Ba7Rc8DE.mjs.map → renderer-DkGODUgE.mjs.map} +1 -1
  161. package/dist/{renderer-DKmV8F6L.mjs → renderer-DlqDnh-8.mjs} +2 -2
  162. package/dist/{renderer-DKmV8F6L.mjs.map → renderer-DlqDnh-8.mjs.map} +1 -1
  163. package/dist/{renderer-CMOAtGdC.mjs → renderer-Dnm_SVy6.mjs} +3 -3
  164. package/dist/{renderer-CMOAtGdC.mjs.map → renderer-Dnm_SVy6.mjs.map} +1 -1
  165. package/dist/{renderer-Cun5J3z9.mjs → renderer-DppnY7RT.mjs} +3 -3
  166. package/dist/{renderer-Cun5J3z9.mjs.map → renderer-DppnY7RT.mjs.map} +1 -1
  167. package/dist/{renderer-CmpV4YNd.mjs → renderer-DqhZTIiC.mjs} +2 -2
  168. package/dist/{renderer-CmpV4YNd.mjs.map → renderer-DqhZTIiC.mjs.map} +1 -1
  169. package/dist/renderer-Dtj6o-74.mjs +5 -0
  170. package/dist/renderer-Duaam6bJ.mjs +5 -0
  171. package/dist/{renderer-CxE5__5p.mjs → renderer-DwCg5pXn.mjs} +2 -2
  172. package/dist/{renderer-CxE5__5p.mjs.map → renderer-DwCg5pXn.mjs.map} +1 -1
  173. package/dist/{renderer-B8Wjov5-.mjs → renderer-Dyh8c41v.mjs} +2 -2
  174. package/dist/{renderer-B6x_Mmpf.mjs → renderer-DzDZlez7.mjs} +247 -63
  175. package/dist/renderer-DzDZlez7.mjs.map +1 -0
  176. package/dist/renderer-FHqZe3K1.mjs +5 -0
  177. package/dist/renderer-FTKfOejk.mjs +5 -0
  178. package/dist/{renderer-BPDita2c.mjs → renderer-FgcNOe1R.mjs} +5 -5
  179. package/dist/{renderer-BPDita2c.mjs.map → renderer-FgcNOe1R.mjs.map} +1 -1
  180. package/dist/{renderer-58bVJfZx.mjs → renderer-L7UTxwZT.mjs} +2 -2
  181. package/dist/{renderer-58bVJfZx.mjs.map → renderer-L7UTxwZT.mjs.map} +1 -1
  182. package/dist/renderer-LmbkN82X.mjs +5 -0
  183. package/dist/{renderer-C-AzyBir.mjs → renderer-PbJk25JW.mjs} +3 -3
  184. package/dist/{renderer-C-AzyBir.mjs.map → renderer-PbJk25JW.mjs.map} +1 -1
  185. package/dist/renderer-SDspl6p-.mjs +5 -0
  186. package/dist/renderer-SWVUDypd.mjs +5 -0
  187. package/dist/renderer-WhpTBwDM.mjs +5 -0
  188. package/dist/renderer-WrpQEVdv.mjs +5 -0
  189. package/dist/{renderer-mp1NN5zk.mjs → renderer-dc39dBVA.mjs} +283 -79
  190. package/dist/renderer-dc39dBVA.mjs.map +1 -0
  191. package/dist/{renderer-Br1OuXr_.mjs → renderer-dj3f8cMg.mjs} +3 -3
  192. package/dist/{renderer-Br1OuXr_.mjs.map → renderer-dj3f8cMg.mjs.map} +1 -1
  193. package/dist/{renderer-BcFdZx4j.mjs → renderer-dwTzrQ2G.mjs} +3 -3
  194. package/dist/{renderer-BcFdZx4j.mjs.map → renderer-dwTzrQ2G.mjs.map} +1 -1
  195. package/dist/{renderer-Cd5BLFnS.mjs → renderer-egZPy7vq.mjs} +2 -2
  196. package/dist/{renderer-Cd5BLFnS.mjs.map → renderer-egZPy7vq.mjs.map} +1 -1
  197. package/dist/{renderer-ChO8NNw9.mjs → renderer-gwV6hyYm.mjs} +2 -2
  198. package/dist/{renderer-ChO8NNw9.mjs.map → renderer-gwV6hyYm.mjs.map} +1 -1
  199. package/dist/{renderer-pNxZ_lV2.mjs → renderer-lXmtdrdI.mjs} +2 -2
  200. package/dist/{renderer-pNxZ_lV2.mjs.map → renderer-lXmtdrdI.mjs.map} +1 -1
  201. package/dist/{renderer-D_2Y_tdA.mjs → renderer-n2kYIGtb.mjs} +2 -2
  202. package/dist/{renderer-D_2Y_tdA.mjs.map → renderer-n2kYIGtb.mjs.map} +1 -1
  203. package/dist/renderer-r4ney0FZ.mjs +5 -0
  204. package/dist/{renderer-Bos8nRhT.mjs → renderer-sHDPBywo.mjs} +2 -2
  205. package/dist/{renderer-Bos8nRhT.mjs.map → renderer-sHDPBywo.mjs.map} +1 -1
  206. package/dist/{renderer-D9mf-msP.mjs → renderer-scbJx-Dx.mjs} +2 -2
  207. package/dist/{renderers-CP8CFWDs-ZKjdDfYg.mjs → renderers-CP8CFWDs-B8HIr3kj.mjs} +2 -2
  208. package/dist/{renderers-CP8CFWDs-ZKjdDfYg.mjs.map → renderers-CP8CFWDs-B8HIr3kj.mjs.map} +1 -1
  209. package/dist/signals/index.d.mts +5 -5
  210. package/dist/signals/index.mjs +4 -4
  211. package/package.json +58 -55
  212. package/dist/dist-Cog5jyVI.mjs.map +0 -1
  213. package/dist/index-Cpkzy5XR.d.mts.map +0 -1
  214. package/dist/index-D__HdInU.d.mts.map +0 -1
  215. package/dist/index-DpWia6iH.d.mts.map +0 -1
  216. package/dist/preview-engine/chunk-3GNP7TJH.mjs +0 -98
  217. package/dist/preview-engine/chunk-CYY366IE.mjs +0 -1
  218. package/dist/preview-engine/chunk-NI577OMQ.mjs +0 -1
  219. package/dist/preview-engine/chunk-VRGREB3V.mjs +0 -1
  220. package/dist/renderer-3MuT2oZO.mjs +0 -5
  221. package/dist/renderer-AX_fHrXM.mjs +0 -5
  222. package/dist/renderer-B2-LQreV.mjs +0 -5
  223. package/dist/renderer-B2QhkksW.mjs +0 -5
  224. package/dist/renderer-B5CoE2Cv.mjs +0 -5
  225. package/dist/renderer-B6Au6f82.mjs +0 -5
  226. package/dist/renderer-B6qAMLXh.mjs +0 -5
  227. package/dist/renderer-B6x_Mmpf.mjs.map +0 -1
  228. package/dist/renderer-BEfvyxL_.mjs +0 -5
  229. package/dist/renderer-BH4j4urG.mjs +0 -5
  230. package/dist/renderer-BH4zfzus.mjs +0 -5
  231. package/dist/renderer-BRjW_pgJ.mjs +0 -6
  232. package/dist/renderer-BVo6W_BO.mjs +0 -5
  233. package/dist/renderer-BbxBM7Vh.mjs +0 -5
  234. package/dist/renderer-C07CnYVd.mjs +0 -5
  235. package/dist/renderer-C2Z3vJCu.mjs +0 -5
  236. package/dist/renderer-C31qkFvm.mjs +0 -5
  237. package/dist/renderer-C3FV8cYm.mjs +0 -5
  238. package/dist/renderer-CQXszrAF.mjs +0 -5
  239. package/dist/renderer-CWK41ajp.mjs +0 -5
  240. package/dist/renderer-C_U225ub.mjs +0 -5
  241. package/dist/renderer-C_nPzKwZ.mjs +0 -5
  242. package/dist/renderer-Cd6I_dsC.mjs +0 -5
  243. package/dist/renderer-Ceb06HuN.mjs +0 -5
  244. package/dist/renderer-D3P5SLcx.mjs +0 -5
  245. package/dist/renderer-D9R8QXS7.mjs +0 -5
  246. package/dist/renderer-D9SJ4Fg9.mjs +0 -5
  247. package/dist/renderer-DGAypVNj.mjs +0 -5
  248. package/dist/renderer-DLAAfwg0.mjs +0 -5
  249. package/dist/renderer-DTkBPkBu.mjs +0 -5
  250. package/dist/renderer-DbaTMTuo.mjs +0 -5
  251. package/dist/renderer-DsxhQdCp.mjs +0 -5
  252. package/dist/renderer-GSFP7v2z.mjs +0 -3
  253. package/dist/renderer-Hf1pCqoN.mjs +0 -5
  254. package/dist/renderer-V0UuIniZ.mjs +0 -5
  255. package/dist/renderer-VCnMXWqE.mjs +0 -5
  256. package/dist/renderer-lifu3xIt.mjs +0 -5
  257. package/dist/renderer-mPDgLBi4.mjs +0 -5
  258. 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 { $ as textureCache, D as ensureDevice, M as getRenderer2D, N as initHeadlessWebGPU, P as inputStore, V as mediaDecoderCache, X as shaderStore, _ as clearAllVideoCache, g as WebGPUAudioProcessor, p as SlugFontCache, s as NodeSurfaceProvider, z as lutStore } from "./dist-Cog5jyVI.mjs";
4
- import { i as mixAudioTracks, m as preloadCompositionFonts, r as drawCompositionTree, t as compositionStateStore } from "./dist-BgFYDCoL.mjs";
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-CxYBXeAy.mjs
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-DTkBPkBu.mjs")
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-BH4zfzus.mjs")
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-B5CoE2Cv.mjs")
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-lifu3xIt.mjs")
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-C_U225ub.mjs")
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-D9SJ4Fg9.mjs")
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-B6Au6f82.mjs")
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-BRjW_pgJ.mjs")
280
+ load: () => import("./renderer-B6iUuWcx.mjs")
280
281
  },
281
282
  {
282
283
  packageName: "@framefields/node-blur",
283
284
  ops: ["Blur"],
284
- load: () => import("./renderer-VCnMXWqE.mjs")
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-BaYEXoS3.mjs")
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-CMOAtGdC.mjs")
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-KcV0gCO5.mjs")
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-Ba7Rc8DE.mjs")
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-BJ_GtjUk.mjs")
310
+ load: () => import("./renderer-CO4theVJ.mjs")
310
311
  },
311
312
  {
312
313
  packageName: "@framefields/node-colorkey",
313
314
  ops: ["ColorKey"],
314
- load: () => import("./renderer-Hf1pCqoN.mjs")
315
+ load: () => import("./renderer-LmbkN82X.mjs")
315
316
  },
316
317
  {
317
318
  packageName: "@framefields/node-compositor",
318
319
  ops: ["Compositor"],
319
- load: () => import("./renderer-BPDita2c.mjs")
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-DsxhQdCp.mjs")
325
+ load: () => import("./renderer-DjZiO7iA.mjs")
325
326
  },
326
327
  {
327
328
  packageName: "@framefields/node-crop",
328
329
  ops: ["Crop"],
329
- load: () => import("./renderer-BH4j4urG.mjs")
330
+ load: () => import("./renderer-DcCKath2.mjs")
330
331
  },
331
332
  {
332
333
  packageName: "@framefields/node-curves",
333
334
  ops: ["Curves"],
334
- load: () => import("./renderer-D9R8QXS7.mjs")
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-C07CnYVd.mjs")
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-B2-LQreV.mjs")
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-CZ7-42SE.mjs")
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-BXZo84vM.mjs")
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-B6qAMLXh.mjs")
360
+ load: () => import("./renderer-Diq9Z7gZ.mjs")
360
361
  },
361
362
  {
362
363
  packageName: "@framefields/node-flip",
363
364
  ops: ["Flip"],
364
- load: () => import("./renderer-Ceb06HuN.mjs")
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-hIbXvzPu.mjs")
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-D3P5SLcx.mjs")
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-CWK41ajp.mjs")
380
+ load: () => import("./renderer-BEGJCxuL.mjs")
380
381
  },
381
382
  {
382
383
  packageName: "@framefields/node-kenburns",
383
384
  ops: ["KenBurns"],
384
- load: () => import("./renderer-C31qkFvm.mjs")
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-BVo6W_BO.mjs")
390
+ load: () => import("./renderer-CUQtKECw.mjs")
390
391
  },
391
392
  {
392
393
  packageName: "@framefields/node-levels",
393
394
  ops: ["Levels"],
394
- load: () => import("./renderer-BEfvyxL_.mjs")
395
+ load: () => import("./renderer-WhpTBwDM.mjs")
395
396
  },
396
397
  {
397
398
  packageName: "@framefields/node-liquify",
398
399
  ops: ["Liquify"],
399
- load: () => import("./renderer-3MuT2oZO.mjs")
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-C2Z3vJCu.mjs")
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-DGAypVNj.mjs")
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-B2QhkksW.mjs")
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-BwBc5xNu.mjs")
420
+ load: () => import("./renderer-CSfLMXN8.mjs")
420
421
  },
421
422
  {
422
423
  packageName: "@framefields/node-paint",
423
424
  ops: ["Paint"],
424
- load: () => import("./renderer-DbaTMTuo.mjs")
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-B8Wjov5-.mjs")
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-V0UuIniZ.mjs")
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-D9mf-msP.mjs")
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-CQXszrAF.mjs")
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-Cun5J3z9.mjs")
450
+ load: () => import("./renderer-DppnY7RT.mjs")
450
451
  },
451
452
  {
452
453
  packageName: "@framefields/node-rotate",
453
454
  ops: ["Rotate"],
454
- load: () => import("./renderer-C_nPzKwZ.mjs")
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-mPDgLBi4.mjs")
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-BbxBM7Vh.mjs")
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-D_2Y_tdA.mjs")
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-C3FV8cYm.mjs")
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-Cd6I_dsC.mjs")
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-DLAAfwg0.mjs")
490
+ load: () => import("./renderer-DDhU9Goq.mjs")
490
491
  },
491
492
  {
492
493
  packageName: "@framefields/node-vignette",
493
494
  ops: ["Vignette"],
494
- load: () => import("./renderer-AX_fHrXM.mjs")
495
+ load: () => import("./renderer-9ETXaINw.mjs")
495
496
  },
496
497
  {
497
498
  packageName: "@framefields/node-vision",
498
499
  ops: ["Vision"],
499
- load: () => import("./renderer-GSFP7v2z.mjs")
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
- const getHardwareContextOption = () => {
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-D4Uc6ba-.mjs
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: isAMD() ? "prefer-software" : "prefer-hardware"
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 { HeadlessWebGPURenderer as a, HeadlessMediaRenderer as i, renderFrameGrid as n, formatQaReport as o, resolveSamplePoints as r, renderSemaphore as s, computeGridLayout as t };
2173
- //# sourceMappingURL=renderer-B6x_Mmpf.mjs.map
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