framefields 2.13.1 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist/audio/index.d.mts +5 -5
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-C4B9p_yq.d.mts → audio-CdCuGK5d.d.mts} +3 -3
  4. package/dist/{audio-C4B9p_yq.d.mts.map → audio-CdCuGK5d.d.mts.map} +1 -1
  5. package/dist/{audio-DIvi6hTD.mjs → audio-DFwRbID_.mjs} +3 -3
  6. package/dist/{audio-DIvi6hTD.mjs.map → audio-DFwRbID_.mjs.map} +1 -1
  7. package/dist/cli/check-worker.mjs +43 -43
  8. package/dist/components/index.d.mts +13 -13
  9. package/dist/components/index.mjs +42 -42
  10. package/dist/{dist-DtPPPsZV.mjs → dist--Uu5bQ_6.mjs} +557 -212
  11. package/dist/dist--Uu5bQ_6.mjs.map +1 -0
  12. package/dist/{dist-CCrYOkcc.mjs → dist-B8Nby2CU.mjs} +2 -2
  13. package/dist/{dist-CCrYOkcc.mjs.map → dist-B8Nby2CU.mjs.map} +1 -1
  14. package/dist/effects/index.d.mts +5 -5
  15. package/dist/effects/index.mjs +34 -34
  16. package/dist/{effects-B-L3rLs6.mjs → effects-WMgv8ZaD.mjs} +2 -2
  17. package/dist/{effects-B-L3rLs6.mjs.map → effects-WMgv8ZaD.mjs.map} +1 -1
  18. package/dist/fonts/index.mjs +2 -2
  19. package/dist/{fonts-k5ll8NTE.mjs → fonts-OW3yAfO5.mjs} +2 -2
  20. package/dist/{fonts-k5ll8NTE.mjs.map → fonts-OW3yAfO5.mjs.map} +1 -1
  21. package/dist/{gpu-D2HT3KcE.mjs → gpu-R4T2Tndu.mjs} +2 -2
  22. package/dist/{gpu-D2HT3KcE.mjs.map → gpu-R4T2Tndu.mjs.map} +1 -1
  23. package/dist/{index-CtKUQ2VG.d.mts → index-9xte4JgL.d.mts} +109 -60
  24. package/dist/index-9xte4JgL.d.mts.map +1 -0
  25. package/dist/{index-BGlaws7-.d.mts → index-B0Vq8Bwf.d.mts} +3 -3
  26. package/dist/{index-BGlaws7-.d.mts.map → index-B0Vq8Bwf.d.mts.map} +1 -1
  27. package/dist/{index-BFTtXosj.d.mts → index-BVd6nXd5.d.mts} +2 -2
  28. package/dist/{index-BFTtXosj.d.mts.map → index-BVd6nXd5.d.mts.map} +1 -1
  29. package/dist/{index-CnZhBlob.d.mts → index-Bv7gxGK1.d.mts} +2 -2
  30. package/dist/{index-CnZhBlob.d.mts.map → index-Bv7gxGK1.d.mts.map} +1 -1
  31. package/dist/{index-a6JrbAK0.d.mts → index-C-V6CAhP.d.mts} +32 -2
  32. package/dist/index-C-V6CAhP.d.mts.map +1 -0
  33. package/dist/{index-DQ1U3HC3.d.mts → index-C7-p9zwU.d.mts} +3 -3
  34. package/dist/{index-DQ1U3HC3.d.mts.map → index-C7-p9zwU.d.mts.map} +1 -1
  35. package/dist/{index-rtCXNxGO.d.mts → index-CEKxvGY-.d.mts} +2 -2
  36. package/dist/{index-rtCXNxGO.d.mts.map → index-CEKxvGY-.d.mts.map} +1 -1
  37. package/dist/{index-C2yaponf.d.mts → index-CRaydvLi.d.mts} +28 -9
  38. package/dist/index-CRaydvLi.d.mts.map +1 -0
  39. package/dist/{index-DBh3WphX.d.mts → index-D1FqV1eu.d.mts} +2 -2
  40. package/dist/{index-DBh3WphX.d.mts.map → index-D1FqV1eu.d.mts.map} +1 -1
  41. package/dist/{index-ByhlTwxh.d.mts → index-DoP6EiHj.d.mts} +5 -5
  42. package/dist/{index-ByhlTwxh.d.mts.map → index-DoP6EiHj.d.mts.map} +1 -1
  43. package/dist/{index-B08eSpaI.d.mts → index-GA9_Z8Fn.d.mts} +2 -2
  44. package/dist/{index-B08eSpaI.d.mts.map → index-GA9_Z8Fn.d.mts.map} +1 -1
  45. package/dist/index.d.mts +14 -14
  46. package/dist/index.mjs +50 -50
  47. package/dist/preview/index.d.mts +5 -5
  48. package/dist/preview/index.mjs +10 -10
  49. package/dist/{preview-lHH8Tv4j.mjs → preview-D7BGmE1E.mjs} +3 -3
  50. package/dist/{preview-lHH8Tv4j.mjs.map → preview-D7BGmE1E.mjs.map} +1 -1
  51. package/dist/preview-engine/{chunk-XCPRRMMW.mjs → chunk-5DZTPUMH.mjs} +195 -89
  52. package/dist/preview-engine/chunk-GNDE3OXQ.mjs +5 -0
  53. package/dist/preview-engine/{chunk-N3XTDAL6.mjs → chunk-UPZURPJY.mjs} +31 -31
  54. package/dist/preview-engine/components.mjs +1 -1
  55. package/dist/preview-engine/framefields.mjs +1 -1
  56. package/dist/preview-engine/player.mjs +1 -1
  57. package/dist/preview-engine/renderers-DLJOA3BM.mjs +228 -0
  58. package/dist/{program-BfiB9ttP.mjs → program-tFKCWU2j.mjs} +96 -12
  59. package/dist/program-tFKCWU2j.mjs.map +1 -0
  60. package/dist/renderer/index.d.mts +4 -4
  61. package/dist/renderer/index.mjs +2 -2
  62. package/dist/{renderer-CU6WT5jW.mjs → renderer-03mYJLgX.mjs} +3 -3
  63. package/dist/{renderer-CU6WT5jW.mjs.map → renderer-03mYJLgX.mjs.map} +1 -1
  64. package/dist/{renderer-BmyFfvVA.mjs → renderer-0rveCDm-.mjs} +3 -3
  65. package/dist/{renderer-BmyFfvVA.mjs.map → renderer-0rveCDm-.mjs.map} +1 -1
  66. package/dist/{renderer-QbSrnPZU.mjs → renderer-2PjR3w-q.mjs} +3 -3
  67. package/dist/{renderer-QbSrnPZU.mjs.map → renderer-2PjR3w-q.mjs.map} +1 -1
  68. package/dist/{renderer-BZMh2io2.mjs → renderer-47y12Z37.mjs} +2 -2
  69. package/dist/{renderer-BZMh2io2.mjs.map → renderer-47y12Z37.mjs.map} +1 -1
  70. package/dist/renderer-6_bzbbXt.mjs +5 -0
  71. package/dist/renderer-8M-9G6F_.mjs +5 -0
  72. package/dist/{renderer-CHCRcCKw.mjs → renderer-B0yVUOPP.mjs} +2 -2
  73. package/dist/{renderer-CHCRcCKw.mjs.map → renderer-B0yVUOPP.mjs.map} +1 -1
  74. package/dist/renderer-B5OzKvF8.mjs +5 -0
  75. package/dist/{renderer-CldjJmRR.mjs → renderer-B7G1KohJ.mjs} +2 -2
  76. package/dist/renderer-BBCZ2qbE.mjs +5 -0
  77. package/dist/{renderer-Y1kjtOto.mjs → renderer-BBMtmxks.mjs} +3 -3
  78. package/dist/{renderer-Y1kjtOto.mjs.map → renderer-BBMtmxks.mjs.map} +1 -1
  79. package/dist/renderer-BChbxCux.mjs +5 -0
  80. package/dist/{renderer-CdXBRdFf.mjs → renderer-BDzn1AKF.mjs} +2 -2
  81. package/dist/{renderer-CdXBRdFf.mjs.map → renderer-BDzn1AKF.mjs.map} +1 -1
  82. package/dist/renderer-BGeMPr8C.mjs +5 -0
  83. package/dist/{renderer-CSu_vYPn.mjs → renderer-BGp0An5A.mjs} +3 -3
  84. package/dist/{renderer-CSu_vYPn.mjs.map → renderer-BGp0An5A.mjs.map} +1 -1
  85. package/dist/{renderer-BZX932Lj.mjs → renderer-BH7UCMPQ.mjs} +2 -2
  86. package/dist/{renderer-BZX932Lj.mjs.map → renderer-BH7UCMPQ.mjs.map} +1 -1
  87. package/dist/{renderer-fG8Jy8Rx.d.mts → renderer-BHYJlK6H.d.mts} +2 -2
  88. package/dist/{renderer-fG8Jy8Rx.d.mts.map → renderer-BHYJlK6H.d.mts.map} +1 -1
  89. package/dist/{renderer-D-mX1EVA.mjs → renderer-BJ8ea92W.mjs} +3 -3
  90. package/dist/{renderer-D-mX1EVA.mjs.map → renderer-BJ8ea92W.mjs.map} +1 -1
  91. package/dist/{renderer-B6bK9rXm.mjs → renderer-BOSZAdgF.mjs} +2 -2
  92. package/dist/{renderer-B6bK9rXm.mjs.map → renderer-BOSZAdgF.mjs.map} +1 -1
  93. package/dist/renderer-BPQ8Pkjb.mjs +5 -0
  94. package/dist/renderer-BTRpA3HD.mjs +5 -0
  95. package/dist/{renderer-Dv_iRIyx.mjs → renderer-BVIXKfbC.mjs} +121 -105
  96. package/dist/renderer-BVIXKfbC.mjs.map +1 -0
  97. package/dist/{renderer-D0xM67cK.mjs → renderer-BVU22lBS.mjs} +2 -2
  98. package/dist/{renderer-D0xM67cK.mjs.map → renderer-BVU22lBS.mjs.map} +1 -1
  99. package/dist/renderer-BVsECSn-.mjs +5 -0
  100. package/dist/{renderer-HKv5cBdp.mjs → renderer-BWSRryIA.mjs} +2 -2
  101. package/dist/{renderer-HKv5cBdp.mjs.map → renderer-BWSRryIA.mjs.map} +1 -1
  102. package/dist/{renderer-D0h1hTOo.mjs → renderer-BacY4nh8.mjs} +2 -2
  103. package/dist/{renderer-D0h1hTOo.mjs.map → renderer-BacY4nh8.mjs.map} +1 -1
  104. package/dist/{renderer-D_m6Qbsi.mjs → renderer-Baw6Utxi.mjs} +2 -2
  105. package/dist/{renderer-D_m6Qbsi.mjs.map → renderer-Baw6Utxi.mjs.map} +1 -1
  106. package/dist/{renderer-CQ4h8n7p.mjs → renderer-Bcu3UrI-.mjs} +3 -3
  107. package/dist/{renderer-CQ4h8n7p.mjs.map → renderer-Bcu3UrI-.mjs.map} +1 -1
  108. package/dist/{renderer-yNWYqvvq.mjs → renderer-BeNl_6EG.mjs} +2 -2
  109. package/dist/{renderer-yNWYqvvq.mjs.map → renderer-BeNl_6EG.mjs.map} +1 -1
  110. package/dist/{renderer-pn52dzZz.mjs → renderer-BfZNIiSv.mjs} +2 -2
  111. package/dist/{renderer-pn52dzZz.mjs.map → renderer-BfZNIiSv.mjs.map} +1 -1
  112. package/dist/renderer-Bgos68gc.mjs +6 -0
  113. package/dist/{renderer-C64_B8It.mjs → renderer-BjDddtw9.mjs} +2 -2
  114. package/dist/renderer-BjHOvoqO.mjs +5 -0
  115. package/dist/renderer-BjXMPPlV.mjs +5 -0
  116. package/dist/{renderer-C98XwEIr.mjs → renderer-BpVOk9ux.mjs} +2 -2
  117. package/dist/{renderer-C98XwEIr.mjs.map → renderer-BpVOk9ux.mjs.map} +1 -1
  118. package/dist/{renderer-7xQmXXMH.mjs → renderer-Bpm145BW.mjs} +3 -3
  119. package/dist/{renderer-7xQmXXMH.mjs.map → renderer-Bpm145BW.mjs.map} +1 -1
  120. package/dist/{renderer-_J9JcCMR.mjs → renderer-Brmbl12Y.mjs} +3 -3
  121. package/dist/{renderer-_J9JcCMR.mjs.map → renderer-Brmbl12Y.mjs.map} +1 -1
  122. package/dist/renderer-Byobxqkv.mjs +5 -0
  123. package/dist/{renderer-B3un4Pdi.mjs → renderer-C20efMI0.mjs} +3 -3
  124. package/dist/{renderer-B3un4Pdi.mjs.map → renderer-C20efMI0.mjs.map} +1 -1
  125. package/dist/{renderer-Cfx_FCSf.mjs → renderer-C5AoaymD.mjs} +3 -3
  126. package/dist/{renderer-Cfx_FCSf.mjs.map → renderer-C5AoaymD.mjs.map} +1 -1
  127. package/dist/{renderer-DWYmJSrl.mjs → renderer-CCxk-RJR.mjs} +2 -2
  128. package/dist/{renderer-DWYmJSrl.mjs.map → renderer-CCxk-RJR.mjs.map} +1 -1
  129. package/dist/{renderer-DhGZ41hQ.mjs → renderer-CKo7VR8x.mjs} +3 -3
  130. package/dist/{renderer-DhGZ41hQ.mjs.map → renderer-CKo7VR8x.mjs.map} +1 -1
  131. package/dist/renderer-CKrsg3EG.mjs +5 -0
  132. package/dist/{renderer-BIKkxw_Z.mjs → renderer-COgwYqev.mjs} +3 -3
  133. package/dist/{renderer-BIKkxw_Z.mjs.map → renderer-COgwYqev.mjs.map} +1 -1
  134. package/dist/{renderer-uzU6dsdR.mjs → renderer-CP108ABB.mjs} +2 -2
  135. package/dist/{renderer-uzU6dsdR.mjs.map → renderer-CP108ABB.mjs.map} +1 -1
  136. package/dist/{renderer-Cv9CKKWG.mjs → renderer-CP8wLzTU.mjs} +2 -2
  137. package/dist/{renderer-Cv9CKKWG.mjs.map → renderer-CP8wLzTU.mjs.map} +1 -1
  138. package/dist/{renderer-uER8kn7f.mjs → renderer-CT3zkfbf.mjs} +2 -2
  139. package/dist/{renderer-uER8kn7f.mjs.map → renderer-CT3zkfbf.mjs.map} +1 -1
  140. package/dist/{renderer-DNynPM6X.mjs → renderer-Ca1KjNCO.mjs} +2 -2
  141. package/dist/{renderer-DNynPM6X.mjs.map → renderer-Ca1KjNCO.mjs.map} +1 -1
  142. package/dist/renderer-Cj875NuH.mjs +5 -0
  143. package/dist/{renderer-BsrKj6Td.mjs → renderer-Cm0tsbQH.mjs} +2 -2
  144. package/dist/{renderer-BsrKj6Td.mjs.map → renderer-Cm0tsbQH.mjs.map} +1 -1
  145. package/dist/renderer-CnmzJoMv.mjs +5 -0
  146. package/dist/{renderer-Dm57W73p.mjs → renderer-Cqb7PGrI.mjs} +2 -2
  147. package/dist/{renderer-BTwuM9u-.mjs → renderer-CrxwW6VQ.mjs} +3 -3
  148. package/dist/{renderer-BTwuM9u-.mjs.map → renderer-CrxwW6VQ.mjs.map} +1 -1
  149. package/dist/renderer-CtklDaMg.mjs +5 -0
  150. package/dist/{renderer-TfeohPxt.mjs → renderer-Cw6_NL2i.mjs} +3 -3
  151. package/dist/{renderer-TfeohPxt.mjs.map → renderer-Cw6_NL2i.mjs.map} +1 -1
  152. package/dist/{renderer-B10HDC13.mjs → renderer-D-KHHWQD.mjs} +3 -3
  153. package/dist/{renderer-B10HDC13.mjs.map → renderer-D-KHHWQD.mjs.map} +1 -1
  154. package/dist/{renderer-CO9vE3sd.mjs → renderer-D-RhYvVl.mjs} +2 -2
  155. package/dist/{renderer-CO9vE3sd.mjs.map → renderer-D-RhYvVl.mjs.map} +1 -1
  156. package/dist/renderer-D1tK3in_.mjs +5 -0
  157. package/dist/{renderer-BEhZiOT4.mjs → renderer-D2wNFNRf.mjs} +2 -2
  158. package/dist/{renderer-BEhZiOT4.mjs.map → renderer-D2wNFNRf.mjs.map} +1 -1
  159. package/dist/renderer-D2yc9P61.mjs +5 -0
  160. package/dist/renderer-D4v-JvSr.mjs +5 -0
  161. package/dist/renderer-D7WRWDwB.mjs +5 -0
  162. package/dist/{renderer-DzON3wDZ.mjs → renderer-DA8YEo_d.mjs} +3 -3
  163. package/dist/{renderer-DzON3wDZ.mjs.map → renderer-DA8YEo_d.mjs.map} +1 -1
  164. package/dist/{renderer-DYlx7VHo.mjs → renderer-DEjo6dw_.mjs} +2 -2
  165. package/dist/{renderer-DYlx7VHo.mjs.map → renderer-DEjo6dw_.mjs.map} +1 -1
  166. package/dist/renderer-DGvA0tdB.mjs +5 -0
  167. package/dist/{renderer-B3_GddgJ.mjs → renderer-DIEeHiQA.mjs} +2 -2
  168. package/dist/{renderer-B3_GddgJ.mjs.map → renderer-DIEeHiQA.mjs.map} +1 -1
  169. package/dist/{renderer-C4hd6Cqi.mjs → renderer-DNxWOz8Q.mjs} +2 -2
  170. package/dist/{renderer-C4hd6Cqi.mjs.map → renderer-DNxWOz8Q.mjs.map} +1 -1
  171. package/dist/renderer-DO7v5Sdm.mjs +5 -0
  172. package/dist/renderer-DRVvt7-V.mjs +5 -0
  173. package/dist/{renderer-CkTehyRX.mjs → renderer-DVPgWHZw.mjs} +3 -3
  174. package/dist/{renderer-CkTehyRX.mjs.map → renderer-DVPgWHZw.mjs.map} +1 -1
  175. package/dist/{renderer-4nsuReW2.mjs → renderer-DWq9gYRw.mjs} +3 -3
  176. package/dist/{renderer-4nsuReW2.mjs.map → renderer-DWq9gYRw.mjs.map} +1 -1
  177. package/dist/renderer-DYMCd3jL.mjs +5 -0
  178. package/dist/{renderer-DvHi_wXE.mjs → renderer-D_j1WKMD.mjs} +3 -3
  179. package/dist/{renderer-DvHi_wXE.mjs.map → renderer-D_j1WKMD.mjs.map} +1 -1
  180. package/dist/{renderer-CRhEGqW4.mjs → renderer-DcAKDAnS.mjs} +3 -3
  181. package/dist/{renderer-CRhEGqW4.mjs.map → renderer-DcAKDAnS.mjs.map} +1 -1
  182. package/dist/{renderer-DtFZbE1j.mjs → renderer-Dgj46uEU.mjs} +2 -2
  183. package/dist/{renderer-B2IUPjhw.mjs → renderer-DhyMfG1v.mjs} +3 -3
  184. package/dist/{renderer-B2IUPjhw.mjs.map → renderer-DhyMfG1v.mjs.map} +1 -1
  185. package/dist/{renderer-BvBqTAtk.mjs → renderer-Dj2H5JPR.mjs} +3 -3
  186. package/dist/{renderer-BvBqTAtk.mjs.map → renderer-Dj2H5JPR.mjs.map} +1 -1
  187. package/dist/{renderer-CoC64eam.mjs → renderer-DkOuQi84.mjs} +3 -3
  188. package/dist/{renderer-CoC64eam.mjs.map → renderer-DkOuQi84.mjs.map} +1 -1
  189. package/dist/renderer-DmHKw-MM.mjs +5 -0
  190. package/dist/renderer-DoDsuZ6G.mjs +5 -0
  191. package/dist/{renderer-BhcTYhaP.mjs → renderer-Dr0tXA4k.mjs} +3 -3
  192. package/dist/{renderer-BhcTYhaP.mjs.map → renderer-Dr0tXA4k.mjs.map} +1 -1
  193. package/dist/{renderer-BrEeUw7T.mjs → renderer-DtMVitEF.mjs} +2 -2
  194. package/dist/{renderer-BrEeUw7T.mjs.map → renderer-DtMVitEF.mjs.map} +1 -1
  195. package/dist/{renderer-BGchUBW_.mjs → renderer-Dwwnx7Dk.mjs} +2 -2
  196. package/dist/{renderer-BGchUBW_.mjs.map → renderer-Dwwnx7Dk.mjs.map} +1 -1
  197. package/dist/{renderer-zLi2qFGT.mjs → renderer-DzLrvCB2.mjs} +2 -2
  198. package/dist/{renderer-zLi2qFGT.mjs.map → renderer-DzLrvCB2.mjs.map} +1 -1
  199. package/dist/renderer-EpgclS70.mjs +5 -0
  200. package/dist/{renderer-DCrKEVjb.mjs → renderer-FYOL5Za6.mjs} +3 -3
  201. package/dist/{renderer-DCrKEVjb.mjs.map → renderer-FYOL5Za6.mjs.map} +1 -1
  202. package/dist/renderer-GroKiYyK.mjs +5 -0
  203. package/dist/{renderer-DYeNNc_G.mjs → renderer-I0Hh9cLK.mjs} +3 -3
  204. package/dist/{renderer-DYeNNc_G.mjs.map → renderer-I0Hh9cLK.mjs.map} +1 -1
  205. package/dist/renderer-MQ5K_xIS.mjs +5 -0
  206. package/dist/{renderer-BEuXJY-C.mjs → renderer-NRMlYkX6.mjs} +3 -3
  207. package/dist/{renderer-BEuXJY-C.mjs.map → renderer-NRMlYkX6.mjs.map} +1 -1
  208. package/dist/{renderer-YONlI6W-.mjs → renderer-Nnmi8Gt6.mjs} +3 -3
  209. package/dist/{renderer-YONlI6W-.mjs.map → renderer-Nnmi8Gt6.mjs.map} +1 -1
  210. package/dist/renderer-U43SflML.mjs +5 -0
  211. package/dist/renderer-UqOmBgCv.mjs +5 -0
  212. package/dist/{renderer-DiZkZ0Pr.mjs → renderer-W1bVNVR6.mjs} +3 -3
  213. package/dist/{renderer-DiZkZ0Pr.mjs.map → renderer-W1bVNVR6.mjs.map} +1 -1
  214. package/dist/renderer-XLULgJM0.mjs +5 -0
  215. package/dist/{renderer-BOlHW3Mi.mjs → renderer-ZnrEfkYh.mjs} +2 -2
  216. package/dist/{renderer-BOlHW3Mi.mjs.map → renderer-ZnrEfkYh.mjs.map} +1 -1
  217. package/dist/{renderer-GIlQ9lZq.mjs → renderer-_pC-jB9O.mjs} +2 -2
  218. package/dist/{renderer-GIlQ9lZq.mjs.map → renderer-_pC-jB9O.mjs.map} +1 -1
  219. package/dist/{renderer-BM19iK8v.mjs → renderer-iMiYStcW.mjs} +2 -2
  220. package/dist/{renderer-BM19iK8v.mjs.map → renderer-iMiYStcW.mjs.map} +1 -1
  221. package/dist/{renderer-CO4NGvAh.mjs → renderer-jUKdkmG5.mjs} +69 -69
  222. package/dist/{renderer-CO4NGvAh.mjs.map → renderer-jUKdkmG5.mjs.map} +1 -1
  223. package/dist/{renderer-mDBoz0zT.mjs → renderer-k5d7JSbs.mjs} +3 -3
  224. package/dist/{renderer-mDBoz0zT.mjs.map → renderer-k5d7JSbs.mjs.map} +1 -1
  225. package/dist/renderer-lNjxY1GG.mjs +5 -0
  226. package/dist/{renderer-CC22Djgi.mjs → renderer-nHS3Sius.mjs} +3 -3
  227. package/dist/{renderer-CC22Djgi.mjs.map → renderer-nHS3Sius.mjs.map} +1 -1
  228. package/dist/{renderer-CXrnzihz.mjs → renderer-ngmYIIob.mjs} +3 -3
  229. package/dist/{renderer-CXrnzihz.mjs.map → renderer-ngmYIIob.mjs.map} +1 -1
  230. package/dist/{renderer-Bw0O--gW.mjs → renderer-raxwsiGI.mjs} +3 -3
  231. package/dist/{renderer-Bw0O--gW.mjs.map → renderer-raxwsiGI.mjs.map} +1 -1
  232. package/dist/renderer-ukufL7pl.mjs +5 -0
  233. package/dist/renderer-wb0NCKdF.mjs +5 -0
  234. package/dist/{renderer-Bw-_GZVw.mjs → renderer-zRq0j6Xy.mjs} +3 -3
  235. package/dist/{renderer-Bw-_GZVw.mjs.map → renderer-zRq0j6Xy.mjs.map} +1 -1
  236. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs → renderers-CP8CFWDs-CshljORp.mjs} +2 -2
  237. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs.map → renderers-CP8CFWDs-CshljORp.mjs.map} +1 -1
  238. package/dist/sam/index.d.mts +3 -3
  239. package/dist/signals/index.d.mts +5 -5
  240. package/dist/signals/index.mjs +4 -4
  241. package/dist/{src-DrP7fGJX.mjs → src-Dy4gnc6w.mjs} +13 -8
  242. package/dist/src-Dy4gnc6w.mjs.map +1 -0
  243. package/package.json +60 -60
  244. package/dist/dist-DtPPPsZV.mjs.map +0 -1
  245. package/dist/index-C2yaponf.d.mts.map +0 -1
  246. package/dist/index-CtKUQ2VG.d.mts.map +0 -1
  247. package/dist/index-a6JrbAK0.d.mts.map +0 -1
  248. package/dist/preview-engine/chunk-5ZS46EFB.mjs +0 -5
  249. package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +0 -228
  250. package/dist/program-BfiB9ttP.mjs.map +0 -1
  251. package/dist/renderer-0rLmztAv.mjs +0 -5
  252. package/dist/renderer-B0pjOXFY.mjs +0 -5
  253. package/dist/renderer-B7J13reL.mjs +0 -5
  254. package/dist/renderer-BPGIKGgl.mjs +0 -5
  255. package/dist/renderer-Bv-Artj1.mjs +0 -5
  256. package/dist/renderer-BvLjbhcL.mjs +0 -5
  257. package/dist/renderer-By6awWaf.mjs +0 -5
  258. package/dist/renderer-C0rvsz7m.mjs +0 -5
  259. package/dist/renderer-CDgud_HB.mjs +0 -5
  260. package/dist/renderer-CDiRF3bG.mjs +0 -6
  261. package/dist/renderer-CIIEQd4B.mjs +0 -5
  262. package/dist/renderer-CJblwOA9.mjs +0 -5
  263. package/dist/renderer-CNMOXtXE.mjs +0 -5
  264. package/dist/renderer-COeSeNGg.mjs +0 -5
  265. package/dist/renderer-CUfElmtZ.mjs +0 -5
  266. package/dist/renderer-CYh2lFoJ.mjs +0 -5
  267. package/dist/renderer-CYtVZYMH.mjs +0 -5
  268. package/dist/renderer-CjxZlkjb.mjs +0 -5
  269. package/dist/renderer-Cpd6TvTC.mjs +0 -5
  270. package/dist/renderer-D3ziOPhX.mjs +0 -5
  271. package/dist/renderer-DL-phtL5.mjs +0 -5
  272. package/dist/renderer-DSnmYnHg.mjs +0 -5
  273. package/dist/renderer-DUGfsT-E.mjs +0 -5
  274. package/dist/renderer-DW5af9x1.mjs +0 -5
  275. package/dist/renderer-DYMrol1t.mjs +0 -5
  276. package/dist/renderer-DekeUHaz.mjs +0 -5
  277. package/dist/renderer-Dt5uyJdZ.mjs +0 -5
  278. package/dist/renderer-Dv_iRIyx.mjs.map +0 -1
  279. package/dist/renderer-DwLQAnaK.mjs +0 -5
  280. package/dist/renderer-IXQP2CWM.mjs +0 -5
  281. package/dist/renderer-K-Pkw63O.mjs +0 -5
  282. package/dist/renderer-MPw2KH9P.mjs +0 -5
  283. package/dist/renderer-RPu8RMav.mjs +0 -5
  284. package/dist/renderer-dCqxd5N2.mjs +0 -5
  285. package/dist/renderer-lhjmE-Fp.mjs +0 -5
  286. package/dist/renderer-u9cmBuvM.mjs +0 -5
  287. package/dist/renderer-vH12jcpz.mjs +0 -5
  288. package/dist/src-DrP7fGJX.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-DQ1U3HC3.d.mts","names":["pino","DestinationStream","VideoColorPrimaries","VideoFrame","VideoMatrixCoefficients","VideoTransferCharacteristics","AudioMix","RenderDiagnostic","VirtualMediaData","VideoSampleSource","preloadFonts","GPUDevice","Promise","FrameCostSample","ChunkPlanOptions","PlannedChunk","ChunkPlan","planChunks","StagingSlotStatus","VideoColorSpaceConfig","DmaStagingRingOptions","GPUTextureFormat","StagingSlotInfo","DmaStagingRing","GPUCommandEncoder","GPUTexture","Uint8Array","findNodesDir","discoverAndRegisterNodeRenderers","RenderPhase","RenderProgress","VideoQaOptions","QaSegment","QaIssue","VideoQaStats","AudioQaStats","VideoQaReport","FrameInspector","analyzeAudio","Float32Array","integratedLoudness","buildQaReport","formatQaReport","RenderSemaphore","renderSemaphore","FrameRange","HeadlessWebGPURenderer","Buffer","AbortSignal","HeadlessMediaRenderer","resetRenderCaches","resolveLogFormat","Record","textLogStream","rendererLogger","Logger","NODE_KINDS","NodeKind","NodeRendererExports","NodeManifest","NodeManifestError","Error","parseNodeManifest","loadNodeManifests","StitchOptions","StitchResult","stitchChunks","ZeroCopyWebCodecsPipelineOptions","WebCodecsPipelineStats","ZeroCopyWebCodecsPipeline"],"sources":["../../renderer/dist/index.d.mts","../src/renderer/framegrid.ts"],"sourcesContent":["import pino, { DestinationStream } from \"pino\";\nimport { VideoColorPrimaries, VideoFrame, VideoMatrixCoefficients, VideoTransferCharacteristics } from \"@napi-rs/webcodecs\";\nimport { AudioMix } from \"@framefields/compositions\";\nimport { RenderDiagnostic, VirtualMediaData } from \"@framefields/core\";\nimport { VideoSampleSource } from \"mediabunny\";\n\n//#region src/asset-preloader.d.ts\n/**\n * Preloads only the fonts (and emoji) a VirtualMediaData tree's text uses, so\n * typography renders correctly on Node.js without loading its media. Shared\n * with the browser preview; emoji need a font set with\n * `FontManager.registerEmojiFont()`.\n */\ndeclare function preloadFonts(media: VirtualMediaData, device?: GPUDevice | null): Promise<void>;\n//#endregion\n//#region src/chunk-plan.d.ts\n/**\n * Plans a render split across workers: how many chunks, and where each one\n * starts and ends. Pure arithmetic over measured frame costs, so it runs\n * anywhere (a worker's probe job, a coordinator, a local script).\n *\n * Every chunk pays a fixed cost before its first frame (worker start, fetch,\n * install, composition build). `workers: \"auto\"` adds workers only while each\n * chunk still spends at least `efficiency` of its time rendering, so a short\n * film stays on one worker and a long one spreads out until `maxWorkers`.\n * Chunks are cut at equal render cost, not equal frame counts, so a heavy\n * stretch (3D, vision) gets shorter chunks.\n */\n/** A measured render time for one frame. */\ninterface FrameCostSample {\n frame: number;\n ms: number;\n}\ninterface ChunkPlanOptions {\n /** Frames in the composition. */\n totalFrames: number;\n /** Measured frame times; between samples the cost is interpolated linearly. */\n samples: readonly FrameCostSample[];\n /** A worker count, or `\"auto\"` to pick one from the cost. Default 1. */\n workers?: number | \"auto\";\n /** Upper bound for `\"auto\"` (and for a number). Default 10. */\n maxWorkers?: number;\n /** Fixed cost each chunk pays before rendering, in seconds. Default 90 (a cold start). */\n overheadSec?: number;\n /**\n * `\"auto\"` only: the smallest share of a chunk's time spent rendering,\n * between 0 and 1. Default 0.85: each chunk renders at least\n * `overheadSec × 0.85 / 0.15` (about 5.7× the overhead).\n */\n efficiency?: number;\n /** No chunk is shorter than this many frames. Default 60. */\n minChunkFrames?: number;\n}\ninterface PlannedChunk {\n /** First frame (inclusive). */\n start: number;\n /** Last frame (exclusive). */\n end: number;\n /** Estimated render time of its frames, in seconds. */\n workSec: number;\n}\ninterface ChunkPlan {\n workers: number;\n /** Estimated render time of the whole composition on one worker, without overhead. */\n workSec: number;\n /** Estimated wall time with this plan: overhead plus the longest chunk. */\n etaSec: number;\n chunks: PlannedChunk[];\n}\ndeclare function planChunks(options: ChunkPlanOptions): ChunkPlan;\n//#endregion\n//#region src/dma-staging-ring.d.ts\ntype StagingSlotStatus = \"idle\" | \"rendering\" | \"mapping\" | \"mapped\";\ninterface VideoColorSpaceConfig {\n readonly primaries?: VideoColorPrimaries;\n readonly transfer?: VideoTransferCharacteristics;\n readonly matrix?: VideoMatrixCoefficients;\n readonly fullRange?: boolean;\n}\ninterface DmaStagingRingOptions {\n readonly width: number;\n readonly height: number;\n readonly capacity?: number;\n readonly format?: GPUTextureFormat;\n}\ninterface StagingSlotInfo {\n readonly index: number;\n readonly status: StagingSlotStatus;\n readonly inFlightFrame: number | null;\n}\n/**\n * Pipelined Asynchronous DMA Staging Ring for WebGPU.\n *\n * Implements double-buffered (or N-buffered) GPU staging buffers to overlap\n * GPU render passes with asynchronous DMA host transfers and WebCodecs hardware encoding.\n * Eliminates GPU stalls by allowing Frame i+1 to execute on the GPU while Frame i\n * is asynchronously mapped and consumed by the hardware video encoder.\n */\ndeclare class DmaStagingRing {\n readonly width: number;\n readonly height: number;\n readonly capacity: number;\n readonly bytesPerRow: number;\n readonly unpaddedBytesPerRow: number;\n readonly bufferSize: number;\n readonly format: GPUTextureFormat;\n readonly device: GPUDevice;\n private readonly slots;\n private isDestroyed;\n constructor(device: GPUDevice, options: DmaStagingRingOptions);\n /**\n * Prepares the staging buffer slot for writing by ensuring any prior mapping\n * from a previous cycle has been completed and unmapped.\n */\n prepareSlot(frameIndex: number): Promise<void>;\n /**\n * Records a GPU-to-buffer DMA copy command into the provided command encoder.\n */\n stageTexture(encoder: GPUCommandEncoder, texture: GPUTexture, frameIndex: number): void;\n /**\n * Initiates asynchronous DMA mapping on the slot for the specified frame.\n * Must be called immediately after submitting the command encoder to the device queue.\n */\n scheduleMap(frameIndex: number): Promise<void>;\n /**\n * Awaits asynchronous mapping and extracts pixels into a tightly packed Uint8Array.\n * The slot remains in the \"mapped\" state until releaseFrame() is called.\n */\n readFramePixels(frameIndex: number): Promise<Uint8Array>;\n /**\n * Awaits asynchronous mapping, extracts pixels, and immediately unmaps the staging buffer,\n * returning the slot to \"idle\" state so it can be reused immediately.\n */\n readAndReleaseFrame(frameIndex: number): Promise<Uint8Array>;\n /**\n * Directly reads the mapped staging buffer into a WebCodecs VideoFrame,\n * bypassing redundant intermediate JS allocations when row pitches align,\n * and immediately unmaps the buffer.\n */\n readFrameToVideoFrame(frameIndex: number, timestampUs: number, colorSpace?: VideoColorSpaceConfig, /** Sees the tightly packed RGBA pixels while they are mapped; must not keep them. */\n inspect?: (rgba: Uint8Array) => void): Promise<VideoFrame>;\n /**\n * Unmaps the staging buffer for the specified frame and marks the slot idle.\n */\n releaseFrame(frameIndex: number): void;\n /**\n * Returns current status info for each slot in the ring.\n */\n getSlotInfos(): readonly StagingSlotInfo[];\n /**\n * Destroys all staging buffers and releases resources.\n */\n destroy(): void;\n private checkDestroyed;\n}\n//#endregion\n//#region src/dynamic-node-discovery.d.ts\n/** Locates the workspace `nodes/` directory by climbing up from this file. */\ndeclare function findNodesDir(startDir?: string): string | null;\n/**\n * Registers the built-in node renderers, then any extra nodes found in the\n * directory named by `FRAMEFIELDS_NODES_DIR` (local node development). A node in\n * that directory overrides the built-in renderer for the same op.\n */\ndeclare function discoverAndRegisterNodeRenderers(): Promise<void>;\n//#endregion\n//#region src/render-reporter.d.ts\n/**\n * Stages of `renderVideo`, in order. Audio-only renders skip \"render\";\n * \"convert\" runs only for GIF output.\n */\ntype RenderPhase = \"prepare\" | \"render\" | \"audio\" | \"audio-encode\" | \"mux\" | \"convert\" | \"done\";\n/** Progress reported by `renderVideo({ onProgress })`. */\ninterface RenderProgress {\n /**\n * \"prepare\" loads fonts and warms the pipeline, \"render\" draws and encodes\n * frames, \"audio\" mixes the soundtrack, \"audio-encode\" encodes it, \"mux\"\n * writes the container, \"convert\" makes the GIF, \"done\" is the last event.\n */\n phase: RenderPhase;\n /** Frames finished so far (1-based); `totalFrames` once frames are done. */\n frame: number;\n totalFrames: number;\n /** Time since the render started. */\n elapsedMs: number;\n /** Share of the current phase done (0–1), when it can be measured. */\n phaseProgress?: number;\n /** Frames per second so far (\"render\" only). */\n fps?: number;\n /** Estimated seconds until the frames are done (\"render\" only). */\n etaSec?: number;\n /** What the phase is working on, e.g. \"3/7 sources: music.mp3\". */\n detail?: string;\n}\n//#endregion\n//#region src/video-qa.d.ts\n/**\n * Quality checks run on a video while it renders: frames are measured as\n * they are read back for the encoder and audio as it is mixed, so the report\n * describes exactly what was encoded without decoding the file again.\n */\ninterface VideoQaOptions {\n /** Luma (0-1) at or below which a pixel counts as black. Default 0.1. */\n readonly blackPixelThreshold?: number;\n /** Share of black pixels that makes a frame black. Default 0.98. */\n readonly blackFrameRatio?: number;\n /** Shortest run of black frames reported. Default 0.5 s. */\n readonly minBlackSec?: number;\n /** Shortest run of unchanging frames reported. Default 2 s. */\n readonly minFrozenSec?: number;\n /** Level (dBFS, 100 ms windows) below which audio counts as silent. Default -60. */\n readonly silenceDbfs?: number;\n /** Shortest silent stretch reported. Default 2 s. */\n readonly minSilenceSec?: number;\n /** Integrated loudness to hit, e.g. -14 for most streaming platforms. Unchecked when unset. */\n readonly targetLufs?: number;\n /** Allowed distance from `targetLufs`, in LU. Default 1. */\n readonly lufsTolerance?: number;\n}\ninterface QaSegment {\n readonly startSec: number;\n readonly endSec: number;\n}\ninterface QaIssue {\n readonly severity: \"error\" | \"warning\" | \"info\";\n /** Stable machine-readable kind, e.g. \"black_frames\", \"audio_clipping\" */\n readonly code: string;\n readonly message: string;\n readonly startSec?: number;\n readonly endSec?: number;\n readonly layerId?: string;\n}\ninterface VideoQaStats {\n readonly expectedFrames: number;\n readonly encodedFrames: number;\n readonly fps: number;\n readonly width: number;\n readonly height: number;\n /** Average luma over the whole video, 0-1 */\n readonly meanLuma: number;\n readonly blackSegments: readonly QaSegment[];\n readonly frozenSegments: readonly QaSegment[];\n}\ninterface AudioQaStats {\n readonly sampleRate: number;\n readonly channels: number;\n readonly durationSec: number;\n /** Highest sample, dBFS (sample peak, not true peak) */\n readonly peakDbfs: number;\n /** Mean level over the whole track, dBFS */\n readonly rmsDbfs: number;\n /** ITU-R BS.1770 integrated loudness; null when the track is silent */\n readonly integratedLufs: number | null;\n /** Samples at or beyond full scale */\n readonly clippedSamples: number;\n readonly silentSegments: readonly QaSegment[];\n}\ninterface VideoQaReport {\n /** No errors or warnings (info issues do not fail a render) */\n readonly passed: boolean;\n readonly video?: VideoQaStats;\n readonly audio?: AudioQaStats;\n readonly issues: readonly QaIssue[];\n}\n/** Measures frames handed to it in order, as RGBA bytes. */\ndeclare class FrameInspector {\n private readonly blackLuma;\n private readonly blackRatio;\n private readonly black;\n private readonly sameAsPrevious;\n private lumaSum;\n private previous;\n constructor(options?: VideoQaOptions);\n get frameCount(): number;\n inspect(rgba: Uint8Array, width: number, height: number): void;\n stats(expectedFrames: number, encodedFrames: number, fps: number, width: number, height: number, options?: VideoQaOptions): VideoQaStats;\n}\n/** Measures a mixed audio track (one Float32Array per channel). */\ndeclare function analyzeAudio(channels: readonly Float32Array[], sampleRate: number, options?: VideoQaOptions): AudioQaStats;\n/**\n * ITU-R BS.1770-4 integrated loudness (LUFS): K-weighted mean square in\n * 400 ms blocks with 75% overlap, gated at -70 LUFS and then at 10 LU below\n * the mean of what passed. Channels weigh 1 (stereo and mono layouts).\n */\ndeclare function integratedLoudness(channels: readonly Float32Array[], sampleRate: number): number | null;\n/** Turn measurements and document diagnostics into a report with issues. */\ndeclare function buildQaReport(parts: {\n video?: VideoQaStats;\n audio?: AudioQaStats;\n diagnostics?: readonly RenderDiagnostic[];\n options?: VideoQaOptions;\n}): VideoQaReport;\n/** A short human- and agent-readable summary of a report. */\ndeclare function formatQaReport(report: VideoQaReport): string;\n//#endregion\n//#region src/headless-webgpu-renderer.d.ts\ndeclare class RenderSemaphore {\n private _running;\n private readonly _max;\n private readonly _queue;\n constructor(max: number);\n acquire(timeoutMs?: number): Promise<void>;\n release(): void;\n get stats(): {\n active: number;\n queued: number;\n max: number;\n };\n}\ndeclare const renderSemaphore: RenderSemaphore;\n/** Composition frames `start` (inclusive) to `end` (exclusive). */\ninterface FrameRange {\n start: number;\n end: number;\n}\ndeclare class HeadlessWebGPURenderer {\n private static isInitialized;\n private static initPromise;\n private static initFailureCount;\n private static readonly MAX_INIT_FAILURES;\n private static nextRetryAt;\n static initialize(): Promise<void>;\n renderImage(virtualMedia: VirtualMediaData, frame?: number, fps?: number, options?: {\n renderId?: string;\n /** \"rgba\" skips PNG encoding and returns width*height*4 raw pixels. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Renders a single frame to a PNG buffer at a specified timestamp in milliseconds or frame index.\n */\n renderFrame(source: VirtualMediaData | {\n toVirtualMedia(): VirtualMediaData;\n }, options?: {\n atMs?: number;\n frame?: number;\n fps?: number;\n /** Reuse compiled state across calls; see `renderImage`. */\n renderId?: string;\n /** \"rgba\" returns raw width*height*4 pixels instead of a PNG. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Measures what frames cost to render across the timeline, for planning a\n * split render (`planChunks`). At `samples` evenly spaced points (default\n * 12) it renders three consecutive frames and times the last two, so\n * effects that carry state (trails, particles) are caught up and their\n * replay is not counted. Encoding is not included.\n */\n probeRender(source: VirtualMediaData | {\n toVirtualMedia(): VirtualMediaData;\n }, options?: {\n samples?: number;\n signal?: AbortSignal;\n /** Called after each sample point with how many are done. */\n onSample?: (done: number, total: number) => void;\n }): Promise<{\n totalFrames: number;\n fps: number;\n durationMs: number;\n samples: FrameCostSample[];\n }>;\n /**\n * Mixes the composition's full audio timeline (clips, effects, synthesized\n * tracks) to stereo PCM, exactly as `renderVideo` muxes it.\n */\n /**\n * Mixes the timeline's audio. `window` mixes only that stretch (the same\n * samples as that part of a full mix); `master: false` skips the master\n * stage, for callers that master with the whole film's `peak` later.\n */\n renderAudio(virtualMedia: VirtualMediaData, options?: {\n fps?: number;\n sampleRate?: number;\n window?: {\n startSec: number;\n endSec: number;\n };\n master?: boolean;\n }): Promise<AudioMix>;\n renderLut(virtualMedia: VirtualMediaData, frame?: number, fps?: number): Promise<Buffer>;\n private resolveMediaDuration;\n renderVideo(virtualMedia: VirtualMediaData, options?: {\n codec?: string;\n audioCodec?: string;\n quality?: string;\n concurrency?: number;\n /**\n * Depth of the DMA staging ring (default 2, clamped 2–8). A deeper\n * ring overlaps more encoder latency at the cost of VRAM\n * (~8.3MB/slot at 1080p RGBA). Also settable via\n * `FRAMEFIELDS_RING_CAPACITY`.\n */\n ringCapacity?: number;\n /**\n * Measure the output while it renders (black and frozen frames,\n * dropped frames, loudness, clipping, silence, document warnings)\n * and return the findings as `qa`. `true` uses default thresholds.\n */\n qa?: boolean | VideoQaOptions;\n /**\n * Aborts the render between frames; the promise rejects with\n * `signal.reason` and the partial output is deleted.\n */\n signal?: AbortSignal;\n /**\n * Called as the render moves through its phases: \"prepare\", each\n * frame (\"render\"), \"audio\" (mixing, per clip), \"audio-encode\",\n * \"mux\", \"convert\" (GIF only) and \"done\".\n */\n onProgress?: (progress: RenderProgress) => void;\n /**\n * Renders only composition frames `start` (inclusive) to `end`\n * (exclusive), as one chunk of a render split across workers. The\n * chunk's timestamps start at 0 and its first frame is a keyframe,\n * so `stitchChunks` joins chunks without re-encoding. Effects that\n * carry state between frames rebuild it before `start`.\n */\n frames?: FrameRange;\n /**\n * `false` writes no audio track, as for chunks: the timeline's audio\n * is exported once with `codec: \"aac\"` and added by `stitchChunks`.\n */\n audio?: boolean;\n }): Promise<{\n filePath: string;\n cleanup: () => Promise<void>;\n qa?: VideoQaReport;\n }>;\n}\ndeclare const HeadlessMediaRenderer: typeof HeadlessWebGPURenderer;\ntype HeadlessMediaRenderer = HeadlessWebGPURenderer;\n//#endregion\n//#region src/job-reset.d.ts\n/**\n * Drops every cache keyed by a file path or URL: media inputs and decoders,\n * textures, LUTs, fonts and downloaded font files. A long-lived worker calls this between jobs,\n * because the next checkout may hold different bytes at the same path. The\n * GPU device and compiled pipelines stay warm.\n */\ndeclare function resetRenderCaches(): void;\n//#endregion\n//#region src/logger.d.ts\n/**\n * \"json\" (pino lines, for log collectors) or \"text\" (one short line each, for\n * people and agents reading a terminal). `FRAMEFIELDS_LOG_FORMAT` picks one;\n * otherwise production is JSON and everything else text.\n */\ndeclare function resolveLogFormat(vars?: Record<string, string | undefined> | undefined): \"json\" | \"text\";\n/**\n * Turns pino's JSON lines into `[framefields] Rendered 40% (…)`: the message\n * without its `[Component]` prefix, the level only for warnings and errors,\n * and an error's message (its stack reaches the caller with the throw).\n */\ndeclare function textLogStream(write?: (line: string) => void): DestinationStream;\ndeclare const rendererLogger: pino.Logger<never, boolean>;\n//#endregion\n//#region src/node-manifest.d.ts\n/**\n * The `framefields` block of a node package's `package.json`.\n *\n * This is the single declaration of a node's op: renderer discovery, the\n * effects generator (`scripts/generate-effects.ts`) and the skill catalog all\n * read it from here. There is deliberately no fallback that derives an op from\n * the package name. See `spec/sync-node.md` §5.1.\n */\ndeclare const NODE_KINDS: readonly [\"effect\", \"audio\", \"source\", \"signal\", \"utility\"];\ntype NodeKind = (typeof NODE_KINDS)[number];\ninterface NodeRendererExports {\n development?: string;\n import?: string;\n default?: string;\n}\ninterface NodeManifest {\n /** Directory name under `nodes/`, e.g. `node-apply-lut`. */\n dir: string;\n /** Absolute path of the node package. */\n path: string;\n /** npm package name, e.g. `@framefields/node-lut`. */\n packageName: string;\n /** Canonical op literal used in the operation AST and the renderer registry. */\n type: string;\n kind: NodeKind;\n /** Legacy ops that resolve to the same renderer. */\n aliases: readonly string[];\n /** Named zod schema export of `src/shared/config.ts`. */\n schema?: string;\n /** Authoring class name. Defaults to `type`. */\n className?: string;\n /** Key on `Effect.*`. Defaults to `className` with a lower-cased first letter. */\n factory?: string;\n /** A hand-written subclass exists under `effects/custom/`. */\n custom: boolean;\n /** `false` when the package opts out of discovery. */\n enabled: boolean;\n rendererExports?: NodeRendererExports;\n}\ndeclare class NodeManifestError extends Error {\n readonly problems: readonly string[];\n constructor(problems: readonly string[]);\n}\n/**\n * Validates one parsed `package.json`. Returns the manifest, or the list of\n * problems that make it unusable. Never throws.\n */\ndeclare function parseNodeManifest(pkg: unknown, dir: string, nodePath?: string): {\n manifest?: NodeManifest;\n problems: string[];\n};\n/**\n * Reads every `nodes/node-*` package and returns its manifest, sorted by\n * directory name. Throws a single {@link NodeManifestError} listing every\n * problem: a missing or malformed block, or an op/alias claimed twice.\n */\ndeclare function loadNodeManifests(nodesDir: string): NodeManifest[];\n//#endregion\n//#region src/stitch.d.ts\ninterface StitchOptions {\n /** Chunk files in timeline order, each a `renderVideo({ frames, audio: false })` output. */\n chunks: readonly string[];\n /**\n * An audio-only render of the whole timeline (`renderVideo({ codec: \"aac\" })`,\n * or `\"opus\"` for WebM chunks), copied in as the audio track.\n */\n audio?: string;\n outputPath: string;\n /** Stops between packets; the promise rejects and no file is left behind. */\n signal?: AbortSignal;\n}\ninterface StitchResult {\n filePath: string;\n /** Video frames written, across all chunks. */\n frames: number;\n /** End of the video track, in seconds. */\n durationSec: number;\n}\ndeclare function stitchChunks(options: StitchOptions): Promise<StitchResult>;\n//#endregion\n//#region src/zero-copy-webcodecs-pipeline.d.ts\ninterface ZeroCopyWebCodecsPipelineOptions {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly videoSource: VideoSampleSource;\n readonly ringCapacity?: number;\n readonly colorSpace?: VideoColorSpaceConfig;\n readonly directCanvasSource?: unknown;\n /**\n * Called with each frame's RGBA pixels, in frame order, just before it is\n * encoded (staging-ring path only). The buffer is reused: read, don't keep.\n */\n readonly onFrame?: (rgba: Uint8Array, frameIndex: number) => void;\n}\ninterface WebCodecsPipelineStats {\n readonly totalFramesEnqueued: number;\n readonly totalFramesEncoded: number;\n readonly averageGpuSubmitTimeMs: number;\n readonly averageEncodeTimeMs: number;\n readonly averageCycleTimeMs: number;\n readonly maxCycleTimeMs: number;\n readonly minCycleTimeMs: number;\n readonly throughputFps: number;\n readonly ringCapacity: number;\n readonly isDirectZeroCopy: boolean;\n}\n/**\n * High-performance hardware video encoding pipeline integrating WebGPU textures with WebCodecs.\n *\n * Provides:\n * 1. Direct hardware acceleration when running with WebCodecs / OffscreenCanvas.\n * 2. Pipelined asynchronous double-buffered DMA staging ring for headless Node.js (Dawn native),\n * allowing GPU Frame i+1 rendering to overlap concurrently with Frame i hardware encoding.\n */\ndeclare class ZeroCopyWebCodecsPipeline {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly ringCapacity: number;\n private readonly device;\n private readonly videoSource;\n private readonly stagingRing;\n private readonly colorSpace?;\n private readonly directCanvasSource?;\n private readonly onFrame?;\n private readonly inFlightFrames;\n private readonly cycleStartTimes;\n private totalFramesEnqueued;\n private totalFramesEncoded;\n private totalGpuSubmitTimeMs;\n private totalEncodeTimeMs;\n private totalCycleTimeMs;\n private maxCycleTimeMs;\n private minCycleTimeMs;\n private pipelineStartTime;\n constructor(device: GPUDevice, options: ZeroCopyWebCodecsPipelineOptions);\n /**\n * Returns true if direct zero-copy from an OffscreenCanvas or texture is active.\n */\n canDirectZeroCopy(): boolean;\n /**\n * Enqueues a rendered GPU texture frame into the pipeline.\n *\n * Uses double-buffered DMA staging: if the staging ring has reached capacity,\n * the oldest in-flight frame is asynchronously consumed and added to the video encoder\n * before staging the new frame, guaranteeing constant bounded VRAM usage and zero GPU stalls.\n */\n enqueueFrame(frameIndex: number, targetTexture: GPUTexture, encoder: GPUCommandEncoder): Promise<void>;\n /**\n * Drains all remaining in-flight frames in the pipeline, ensuring every enqueued\n * frame has been encoded and added to the video sample source.\n */\n drain(): Promise<void>;\n /**\n * Returns runtime throughput, latency, and pipeline statistics.\n */\n getStats(): WebCodecsPipelineStats;\n /**\n * Destroys the pipeline and releases all staging buffers.\n */\n destroy(): void;\n private consumeAndEncode;\n}\n//#endregion\nexport { AudioQaStats, ChunkPlan, ChunkPlanOptions, DmaStagingRing, DmaStagingRingOptions, FrameCostSample, FrameInspector, FrameRange, HeadlessMediaRenderer, HeadlessWebGPURenderer, NODE_KINDS, NodeKind, NodeManifest, NodeManifestError, NodeRendererExports, PlannedChunk, QaIssue, QaSegment, type RenderPhase, type RenderProgress, StagingSlotInfo, StagingSlotStatus, StitchOptions, StitchResult, VideoColorSpaceConfig, VideoQaOptions, VideoQaReport, VideoQaStats, WebCodecsPipelineStats, ZeroCopyWebCodecsPipeline, ZeroCopyWebCodecsPipelineOptions, analyzeAudio, buildQaReport, discoverAndRegisterNodeRenderers, findNodesDir, formatQaReport, integratedLoudness, loadNodeManifests, parseNodeManifest, planChunks, preloadFonts, renderSemaphore, rendererLogger, resetRenderCaches, resolveLogFormat, stitchChunks, textLogStream };\n//# sourceMappingURL=index.d.mts.map"],"mappings":"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"}
1
+ {"version":3,"file":"index-C7-p9zwU.d.mts","names":["pino","DestinationStream","VideoColorPrimaries","VideoFrame","VideoMatrixCoefficients","VideoTransferCharacteristics","AudioMix","RenderDiagnostic","VirtualMediaData","VideoSampleSource","preloadFonts","GPUDevice","Promise","FrameCostSample","ChunkPlanOptions","PlannedChunk","ChunkPlan","planChunks","StagingSlotStatus","VideoColorSpaceConfig","DmaStagingRingOptions","GPUTextureFormat","StagingSlotInfo","DmaStagingRing","GPUCommandEncoder","GPUTexture","Uint8Array","findNodesDir","discoverAndRegisterNodeRenderers","RenderPhase","RenderProgress","VideoQaOptions","QaSegment","QaIssue","VideoQaStats","AudioQaStats","VideoQaReport","FrameInspector","analyzeAudio","Float32Array","integratedLoudness","buildQaReport","formatQaReport","RenderSemaphore","renderSemaphore","FrameRange","HeadlessWebGPURenderer","Buffer","AbortSignal","HeadlessMediaRenderer","resetRenderCaches","resolveLogFormat","Record","textLogStream","rendererLogger","Logger","NODE_KINDS","NodeKind","NodeRendererExports","NodeManifest","NodeManifestError","Error","parseNodeManifest","loadNodeManifests","StitchOptions","StitchResult","stitchChunks","ZeroCopyWebCodecsPipelineOptions","WebCodecsPipelineStats","ZeroCopyWebCodecsPipeline"],"sources":["../../renderer/dist/index.d.mts","../src/renderer/framegrid.ts"],"sourcesContent":["import pino, { DestinationStream } from \"pino\";\nimport { VideoColorPrimaries, VideoFrame, VideoMatrixCoefficients, VideoTransferCharacteristics } from \"@napi-rs/webcodecs\";\nimport { AudioMix } from \"@framefields/compositions\";\nimport { RenderDiagnostic, VirtualMediaData } from \"@framefields/core\";\nimport { VideoSampleSource } from \"mediabunny\";\n\n//#region src/asset-preloader.d.ts\n/**\n * Preloads only the fonts (and emoji) a VirtualMediaData tree's text uses, so\n * typography renders correctly on Node.js without loading its media. Shared\n * with the browser preview; emoji need a font set with\n * `FontManager.registerEmojiFont()`.\n */\ndeclare function preloadFonts(media: VirtualMediaData, device?: GPUDevice | null): Promise<void>;\n//#endregion\n//#region src/chunk-plan.d.ts\n/**\n * Plans a render split across workers: how many chunks, and where each one\n * starts and ends. Pure arithmetic over measured frame costs, so it runs\n * anywhere (a worker's probe job, a coordinator, a local script).\n *\n * Every chunk pays a fixed cost before its first frame (worker start, fetch,\n * install, composition build). `workers: \"auto\"` adds workers only while each\n * chunk still spends at least `efficiency` of its time rendering, so a short\n * film stays on one worker and a long one spreads out until `maxWorkers`.\n * Chunks are cut at equal render cost, not equal frame counts, so a heavy\n * stretch (3D, vision) gets shorter chunks.\n */\n/** A measured render time for one frame. */\ninterface FrameCostSample {\n frame: number;\n ms: number;\n}\ninterface ChunkPlanOptions {\n /** Frames in the composition. */\n totalFrames: number;\n /** Measured frame times; between samples the cost is interpolated linearly. */\n samples: readonly FrameCostSample[];\n /** A worker count, or `\"auto\"` to pick one from the cost. Default 1. */\n workers?: number | \"auto\";\n /** Upper bound for `\"auto\"` (and for a number). Default 10. */\n maxWorkers?: number;\n /** Fixed cost each chunk pays before rendering, in seconds. Default 90 (a cold start). */\n overheadSec?: number;\n /**\n * `\"auto\"` only: the smallest share of a chunk's time spent rendering,\n * between 0 and 1. Default 0.85: each chunk renders at least\n * `overheadSec × 0.85 / 0.15` (about 5.7× the overhead).\n */\n efficiency?: number;\n /** No chunk is shorter than this many frames. Default 60. */\n minChunkFrames?: number;\n}\ninterface PlannedChunk {\n /** First frame (inclusive). */\n start: number;\n /** Last frame (exclusive). */\n end: number;\n /** Estimated render time of its frames, in seconds. */\n workSec: number;\n}\ninterface ChunkPlan {\n workers: number;\n /** Estimated render time of the whole composition on one worker, without overhead. */\n workSec: number;\n /** Estimated wall time with this plan: overhead plus the longest chunk. */\n etaSec: number;\n chunks: PlannedChunk[];\n}\ndeclare function planChunks(options: ChunkPlanOptions): ChunkPlan;\n//#endregion\n//#region src/dma-staging-ring.d.ts\ntype StagingSlotStatus = \"idle\" | \"rendering\" | \"mapping\" | \"mapped\";\ninterface VideoColorSpaceConfig {\n readonly primaries?: VideoColorPrimaries;\n readonly transfer?: VideoTransferCharacteristics;\n readonly matrix?: VideoMatrixCoefficients;\n readonly fullRange?: boolean;\n}\ninterface DmaStagingRingOptions {\n readonly width: number;\n readonly height: number;\n readonly capacity?: number;\n readonly format?: GPUTextureFormat;\n}\ninterface StagingSlotInfo {\n readonly index: number;\n readonly status: StagingSlotStatus;\n readonly inFlightFrame: number | null;\n}\n/**\n * Pipelined Asynchronous DMA Staging Ring for WebGPU.\n *\n * Implements double-buffered (or N-buffered) GPU staging buffers to overlap\n * GPU render passes with asynchronous DMA host transfers and WebCodecs hardware encoding.\n * Eliminates GPU stalls by allowing Frame i+1 to execute on the GPU while Frame i\n * is asynchronously mapped and consumed by the hardware video encoder.\n */\ndeclare class DmaStagingRing {\n readonly width: number;\n readonly height: number;\n readonly capacity: number;\n readonly bytesPerRow: number;\n readonly unpaddedBytesPerRow: number;\n readonly bufferSize: number;\n readonly format: GPUTextureFormat;\n readonly device: GPUDevice;\n private readonly slots;\n private isDestroyed;\n constructor(device: GPUDevice, options: DmaStagingRingOptions);\n /**\n * Prepares the staging buffer slot for writing by ensuring any prior mapping\n * from a previous cycle has been completed and unmapped.\n */\n prepareSlot(frameIndex: number): Promise<void>;\n /**\n * Records a GPU-to-buffer DMA copy command into the provided command encoder.\n */\n stageTexture(encoder: GPUCommandEncoder, texture: GPUTexture, frameIndex: number): void;\n /**\n * Initiates asynchronous DMA mapping on the slot for the specified frame.\n * Must be called immediately after submitting the command encoder to the device queue.\n */\n scheduleMap(frameIndex: number): Promise<void>;\n /**\n * Awaits asynchronous mapping and extracts pixels into a tightly packed Uint8Array.\n * The slot remains in the \"mapped\" state until releaseFrame() is called.\n */\n readFramePixels(frameIndex: number): Promise<Uint8Array>;\n /**\n * Awaits asynchronous mapping, extracts pixels, and immediately unmaps the staging buffer,\n * returning the slot to \"idle\" state so it can be reused immediately.\n */\n readAndReleaseFrame(frameIndex: number): Promise<Uint8Array>;\n /**\n * Directly reads the mapped staging buffer into a WebCodecs VideoFrame,\n * bypassing redundant intermediate JS allocations when row pitches align,\n * and immediately unmaps the buffer.\n */\n readFrameToVideoFrame(frameIndex: number, timestampUs: number, colorSpace?: VideoColorSpaceConfig, /** Sees the tightly packed RGBA pixels while they are mapped; must not keep them. */\n inspect?: (rgba: Uint8Array) => void): Promise<VideoFrame>;\n /**\n * Unmaps the staging buffer for the specified frame and marks the slot idle.\n */\n releaseFrame(frameIndex: number): void;\n /**\n * Returns current status info for each slot in the ring.\n */\n getSlotInfos(): readonly StagingSlotInfo[];\n /**\n * Destroys all staging buffers and releases resources.\n */\n destroy(): void;\n private checkDestroyed;\n}\n//#endregion\n//#region src/dynamic-node-discovery.d.ts\n/** Locates the workspace `nodes/` directory by climbing up from this file. */\ndeclare function findNodesDir(startDir?: string): string | null;\n/**\n * Registers the built-in node renderers, then any extra nodes found in the\n * directory named by `FRAMEFIELDS_NODES_DIR` (local node development). A node in\n * that directory overrides the built-in renderer for the same op.\n */\ndeclare function discoverAndRegisterNodeRenderers(): Promise<void>;\n//#endregion\n//#region src/render-reporter.d.ts\n/**\n * Stages of `renderVideo`, in order. Audio-only renders skip \"render\";\n * \"convert\" runs only for GIF output.\n */\ntype RenderPhase = \"prepare\" | \"render\" | \"audio\" | \"audio-encode\" | \"mux\" | \"convert\" | \"done\";\n/** Progress reported by `renderVideo({ onProgress })`. */\ninterface RenderProgress {\n /**\n * \"prepare\" loads fonts and warms the pipeline, \"render\" draws and encodes\n * frames, \"audio\" mixes the soundtrack, \"audio-encode\" encodes it, \"mux\"\n * writes the container, \"convert\" makes the GIF, \"done\" is the last event.\n */\n phase: RenderPhase;\n /** Frames finished so far (1-based); `totalFrames` once frames are done. */\n frame: number;\n totalFrames: number;\n /** Time since the render started. */\n elapsedMs: number;\n /** Share of the current phase done (0–1), when it can be measured. */\n phaseProgress?: number;\n /** Frames per second so far (\"render\" only). */\n fps?: number;\n /** Estimated seconds until the frames are done (\"render\" only). */\n etaSec?: number;\n /** What the phase is working on, e.g. \"3/7 sources: music.mp3\". */\n detail?: string;\n}\n//#endregion\n//#region src/video-qa.d.ts\n/**\n * Quality checks run on a video while it renders: frames are measured as\n * they are read back for the encoder and audio as it is mixed, so the report\n * describes exactly what was encoded without decoding the file again.\n */\ninterface VideoQaOptions {\n /** Luma (0-1) at or below which a pixel counts as black. Default 0.1. */\n readonly blackPixelThreshold?: number;\n /** Share of black pixels that makes a frame black. Default 0.98. */\n readonly blackFrameRatio?: number;\n /** Shortest run of black frames reported. Default 0.5 s. */\n readonly minBlackSec?: number;\n /** Shortest run of unchanging frames reported. Default 2 s. */\n readonly minFrozenSec?: number;\n /** Level (dBFS, 100 ms windows) below which audio counts as silent. Default -60. */\n readonly silenceDbfs?: number;\n /** Shortest silent stretch reported. Default 2 s. */\n readonly minSilenceSec?: number;\n /** Integrated loudness to hit, e.g. -14 for most streaming platforms. Unchecked when unset. */\n readonly targetLufs?: number;\n /** Allowed distance from `targetLufs`, in LU. Default 1. */\n readonly lufsTolerance?: number;\n}\ninterface QaSegment {\n readonly startSec: number;\n readonly endSec: number;\n}\ninterface QaIssue {\n readonly severity: \"error\" | \"warning\" | \"info\";\n /** Stable machine-readable kind, e.g. \"black_frames\", \"audio_clipping\" */\n readonly code: string;\n readonly message: string;\n readonly startSec?: number;\n readonly endSec?: number;\n readonly layerId?: string;\n}\ninterface VideoQaStats {\n readonly expectedFrames: number;\n readonly encodedFrames: number;\n readonly fps: number;\n readonly width: number;\n readonly height: number;\n /** Average luma over the whole video, 0-1 */\n readonly meanLuma: number;\n readonly blackSegments: readonly QaSegment[];\n readonly frozenSegments: readonly QaSegment[];\n}\ninterface AudioQaStats {\n readonly sampleRate: number;\n readonly channels: number;\n readonly durationSec: number;\n /** Highest sample, dBFS (sample peak, not true peak) */\n readonly peakDbfs: number;\n /** Mean level over the whole track, dBFS */\n readonly rmsDbfs: number;\n /** ITU-R BS.1770 integrated loudness; null when the track is silent */\n readonly integratedLufs: number | null;\n /** Samples at or beyond full scale */\n readonly clippedSamples: number;\n readonly silentSegments: readonly QaSegment[];\n}\ninterface VideoQaReport {\n /** No errors or warnings (info issues do not fail a render) */\n readonly passed: boolean;\n readonly video?: VideoQaStats;\n readonly audio?: AudioQaStats;\n readonly issues: readonly QaIssue[];\n}\n/** Measures frames handed to it in order, as RGBA bytes. */\ndeclare class FrameInspector {\n private readonly blackLuma;\n private readonly blackRatio;\n private readonly black;\n private readonly sameAsPrevious;\n private lumaSum;\n private previous;\n constructor(options?: VideoQaOptions);\n get frameCount(): number;\n inspect(rgba: Uint8Array, width: number, height: number): void;\n stats(expectedFrames: number, encodedFrames: number, fps: number, width: number, height: number, options?: VideoQaOptions): VideoQaStats;\n}\n/** Measures a mixed audio track (one Float32Array per channel). */\ndeclare function analyzeAudio(channels: readonly Float32Array[], sampleRate: number, options?: VideoQaOptions): AudioQaStats;\n/**\n * ITU-R BS.1770-4 integrated loudness (LUFS): K-weighted mean square in\n * 400 ms blocks with 75% overlap, gated at -70 LUFS and then at 10 LU below\n * the mean of what passed. Channels weigh 1 (stereo and mono layouts).\n */\ndeclare function integratedLoudness(channels: readonly Float32Array[], sampleRate: number): number | null;\n/** Turn measurements and document diagnostics into a report with issues. */\ndeclare function buildQaReport(parts: {\n video?: VideoQaStats;\n audio?: AudioQaStats;\n diagnostics?: readonly RenderDiagnostic[];\n options?: VideoQaOptions;\n}): VideoQaReport;\n/** A short human- and agent-readable summary of a report. */\ndeclare function formatQaReport(report: VideoQaReport): string;\n//#endregion\n//#region src/headless-webgpu-renderer.d.ts\ndeclare class RenderSemaphore {\n private _running;\n private readonly _max;\n private readonly _queue;\n constructor(max: number);\n acquire(timeoutMs?: number): Promise<void>;\n release(): void;\n get stats(): {\n active: number;\n queued: number;\n max: number;\n };\n}\ndeclare const renderSemaphore: RenderSemaphore;\n/** Composition frames `start` (inclusive) to `end` (exclusive). */\ninterface FrameRange {\n start: number;\n end: number;\n}\ndeclare class HeadlessWebGPURenderer {\n private static isInitialized;\n private static initPromise;\n private static initFailureCount;\n private static readonly MAX_INIT_FAILURES;\n private static nextRetryAt;\n static initialize(): Promise<void>;\n renderImage(virtualMedia: VirtualMediaData, frame?: number, fps?: number, options?: {\n renderId?: string;\n /** \"rgba\" skips PNG encoding and returns width*height*4 raw pixels. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Renders a single frame to a PNG buffer at a specified timestamp in milliseconds or frame index.\n */\n renderFrame(source: VirtualMediaData | {\n toVirtualMedia(): VirtualMediaData;\n }, options?: {\n atMs?: number;\n frame?: number;\n fps?: number;\n /** Reuse compiled state across calls; see `renderImage`. */\n renderId?: string;\n /** \"rgba\" returns raw width*height*4 pixels instead of a PNG. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Measures what frames cost to render across the timeline, for planning a\n * split render (`planChunks`). At `samples` evenly spaced points (default\n * 12) it renders three consecutive frames and times the last two, so\n * effects that carry state (trails, particles) are caught up and their\n * replay is not counted. Encoding is not included.\n */\n probeRender(source: VirtualMediaData | {\n toVirtualMedia(): VirtualMediaData;\n }, options?: {\n samples?: number;\n signal?: AbortSignal;\n /** Called after each sample point with how many are done. */\n onSample?: (done: number, total: number) => void;\n }): Promise<{\n totalFrames: number;\n fps: number;\n durationMs: number;\n samples: FrameCostSample[];\n }>;\n /**\n * Mixes the composition's full audio timeline (clips, effects, synthesized\n * tracks) to stereo PCM, exactly as `renderVideo` muxes it.\n */\n /**\n * Mixes the timeline's audio. `window` mixes only that stretch (the same\n * samples as that part of a full mix); `master: false` skips the master\n * stage, for callers that master with the whole film's `peak` later.\n */\n renderAudio(virtualMedia: VirtualMediaData, options?: {\n fps?: number;\n sampleRate?: number;\n window?: {\n startSec: number;\n endSec: number;\n };\n master?: boolean;\n }): Promise<AudioMix>;\n renderLut(virtualMedia: VirtualMediaData, frame?: number, fps?: number): Promise<Buffer>;\n private resolveMediaDuration;\n renderVideo(virtualMedia: VirtualMediaData, options?: {\n codec?: string;\n audioCodec?: string;\n quality?: string;\n concurrency?: number;\n /**\n * Depth of the DMA staging ring (default 2, clamped 2–8). A deeper\n * ring overlaps more encoder latency at the cost of VRAM\n * (~8.3MB/slot at 1080p RGBA). Also settable via\n * `FRAMEFIELDS_RING_CAPACITY`.\n */\n ringCapacity?: number;\n /**\n * Measure the output while it renders (black and frozen frames,\n * dropped frames, loudness, clipping, silence, document warnings)\n * and return the findings as `qa`. `true` uses default thresholds.\n */\n qa?: boolean | VideoQaOptions;\n /**\n * Aborts the render between frames; the promise rejects with\n * `signal.reason` and the partial output is deleted.\n */\n signal?: AbortSignal;\n /**\n * Called as the render moves through its phases: \"prepare\", each\n * frame (\"render\"), \"audio\" (mixing, per clip), \"audio-encode\",\n * \"mux\", \"convert\" (GIF only) and \"done\".\n */\n onProgress?: (progress: RenderProgress) => void;\n /**\n * Renders only composition frames `start` (inclusive) to `end`\n * (exclusive), as one chunk of a render split across workers. The\n * chunk's timestamps start at 0 and its first frame is a keyframe,\n * so `stitchChunks` joins chunks without re-encoding. Effects that\n * carry state between frames rebuild it before `start`.\n */\n frames?: FrameRange;\n /**\n * `false` writes no audio track, as for chunks: the timeline's audio\n * is exported once with `codec: \"aac\"` and added by `stitchChunks`.\n */\n audio?: boolean;\n }): Promise<{\n filePath: string;\n cleanup: () => Promise<void>;\n qa?: VideoQaReport;\n }>;\n}\ndeclare const HeadlessMediaRenderer: typeof HeadlessWebGPURenderer;\ntype HeadlessMediaRenderer = HeadlessWebGPURenderer;\n//#endregion\n//#region src/job-reset.d.ts\n/**\n * Drops every cache keyed by a file path or URL: media inputs and decoders,\n * textures, LUTs, fonts and downloaded font files. A long-lived worker calls this between jobs,\n * because the next checkout may hold different bytes at the same path. The\n * GPU device and compiled pipelines stay warm.\n */\ndeclare function resetRenderCaches(): void;\n//#endregion\n//#region src/logger.d.ts\n/**\n * \"json\" (pino lines, for log collectors) or \"text\" (one short line each, for\n * people and agents reading a terminal). `FRAMEFIELDS_LOG_FORMAT` picks one;\n * otherwise production is JSON and everything else text.\n */\ndeclare function resolveLogFormat(vars?: Record<string, string | undefined> | undefined): \"json\" | \"text\";\n/**\n * Turns pino's JSON lines into `[framefields] Rendered 40% (…)`: the message\n * without its `[Component]` prefix, the level only for warnings and errors,\n * and an error's message (its stack reaches the caller with the throw).\n */\ndeclare function textLogStream(write?: (line: string) => void): DestinationStream;\ndeclare const rendererLogger: pino.Logger<never, boolean>;\n//#endregion\n//#region src/node-manifest.d.ts\n/**\n * The `framefields` block of a node package's `package.json`.\n *\n * This is the single declaration of a node's op: renderer discovery, the\n * effects generator (`scripts/generate-effects.ts`) and the skill catalog all\n * read it from here. There is deliberately no fallback that derives an op from\n * the package name. See `spec/sync-node.md` §5.1.\n */\ndeclare const NODE_KINDS: readonly [\"effect\", \"audio\", \"source\", \"signal\", \"utility\"];\ntype NodeKind = (typeof NODE_KINDS)[number];\ninterface NodeRendererExports {\n development?: string;\n import?: string;\n default?: string;\n}\ninterface NodeManifest {\n /** Directory name under `nodes/`, e.g. `node-apply-lut`. */\n dir: string;\n /** Absolute path of the node package. */\n path: string;\n /** npm package name, e.g. `@framefields/node-lut`. */\n packageName: string;\n /** Canonical op literal used in the operation AST and the renderer registry. */\n type: string;\n kind: NodeKind;\n /** Legacy ops that resolve to the same renderer. */\n aliases: readonly string[];\n /** Named zod schema export of `src/shared/config.ts`. */\n schema?: string;\n /** Authoring class name. Defaults to `type`. */\n className?: string;\n /** Key on `Effect.*`. Defaults to `className` with a lower-cased first letter. */\n factory?: string;\n /** A hand-written subclass exists under `effects/custom/`. */\n custom: boolean;\n /** `false` when the package opts out of discovery. */\n enabled: boolean;\n rendererExports?: NodeRendererExports;\n}\ndeclare class NodeManifestError extends Error {\n readonly problems: readonly string[];\n constructor(problems: readonly string[]);\n}\n/**\n * Validates one parsed `package.json`. Returns the manifest, or the list of\n * problems that make it unusable. Never throws.\n */\ndeclare function parseNodeManifest(pkg: unknown, dir: string, nodePath?: string): {\n manifest?: NodeManifest;\n problems: string[];\n};\n/**\n * Reads every `nodes/node-*` package and returns its manifest, sorted by\n * directory name. Throws a single {@link NodeManifestError} listing every\n * problem: a missing or malformed block, or an op/alias claimed twice.\n */\ndeclare function loadNodeManifests(nodesDir: string): NodeManifest[];\n//#endregion\n//#region src/stitch.d.ts\ninterface StitchOptions {\n /** Chunk files in timeline order, each a `renderVideo({ frames, audio: false })` output. */\n chunks: readonly string[];\n /**\n * An audio-only render of the whole timeline (`renderVideo({ codec: \"aac\" })`,\n * or `\"opus\"` for WebM chunks), copied in as the audio track.\n */\n audio?: string;\n outputPath: string;\n /** Stops between packets; the promise rejects and no file is left behind. */\n signal?: AbortSignal;\n}\ninterface StitchResult {\n filePath: string;\n /** Video frames written, across all chunks. */\n frames: number;\n /** End of the video track, in seconds. */\n durationSec: number;\n}\ndeclare function stitchChunks(options: StitchOptions): Promise<StitchResult>;\n//#endregion\n//#region src/zero-copy-webcodecs-pipeline.d.ts\ninterface ZeroCopyWebCodecsPipelineOptions {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly videoSource: VideoSampleSource;\n readonly ringCapacity?: number;\n readonly colorSpace?: VideoColorSpaceConfig;\n readonly directCanvasSource?: unknown;\n /**\n * Called with each frame's RGBA pixels, in frame order, just before it is\n * encoded (staging-ring path only). The buffer is reused: read, don't keep.\n */\n readonly onFrame?: (rgba: Uint8Array, frameIndex: number) => void;\n}\ninterface WebCodecsPipelineStats {\n readonly totalFramesEnqueued: number;\n readonly totalFramesEncoded: number;\n readonly averageGpuSubmitTimeMs: number;\n readonly averageEncodeTimeMs: number;\n readonly averageCycleTimeMs: number;\n readonly maxCycleTimeMs: number;\n readonly minCycleTimeMs: number;\n readonly throughputFps: number;\n readonly ringCapacity: number;\n readonly isDirectZeroCopy: boolean;\n}\n/**\n * High-performance hardware video encoding pipeline integrating WebGPU textures with WebCodecs.\n *\n * Provides:\n * 1. Direct hardware acceleration when running with WebCodecs / OffscreenCanvas.\n * 2. Pipelined asynchronous double-buffered DMA staging ring for headless Node.js (Dawn native),\n * allowing GPU Frame i+1 rendering to overlap concurrently with Frame i hardware encoding.\n */\ndeclare class ZeroCopyWebCodecsPipeline {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly ringCapacity: number;\n private readonly device;\n private readonly videoSource;\n private readonly stagingRing;\n private readonly colorSpace?;\n private readonly directCanvasSource?;\n private readonly onFrame?;\n private readonly inFlightFrames;\n private readonly cycleStartTimes;\n private totalFramesEnqueued;\n private totalFramesEncoded;\n private totalGpuSubmitTimeMs;\n private totalEncodeTimeMs;\n private totalCycleTimeMs;\n private maxCycleTimeMs;\n private minCycleTimeMs;\n private pipelineStartTime;\n constructor(device: GPUDevice, options: ZeroCopyWebCodecsPipelineOptions);\n /**\n * Returns true if direct zero-copy from an OffscreenCanvas or texture is active.\n */\n canDirectZeroCopy(): boolean;\n /**\n * Enqueues a rendered GPU texture frame into the pipeline.\n *\n * Uses double-buffered DMA staging: if the staging ring has reached capacity,\n * the oldest in-flight frame is asynchronously consumed and added to the video encoder\n * before staging the new frame, guaranteeing constant bounded VRAM usage and zero GPU stalls.\n */\n enqueueFrame(frameIndex: number, targetTexture: GPUTexture, encoder: GPUCommandEncoder): Promise<void>;\n /**\n * Drains all remaining in-flight frames in the pipeline, ensuring every enqueued\n * frame has been encoded and added to the video sample source.\n */\n drain(): Promise<void>;\n /**\n * Returns runtime throughput, latency, and pipeline statistics.\n */\n getStats(): WebCodecsPipelineStats;\n /**\n * Destroys the pipeline and releases all staging buffers.\n */\n destroy(): void;\n private consumeAndEncode;\n}\n//#endregion\nexport { AudioQaStats, ChunkPlan, ChunkPlanOptions, DmaStagingRing, DmaStagingRingOptions, FrameCostSample, FrameInspector, FrameRange, HeadlessMediaRenderer, HeadlessWebGPURenderer, NODE_KINDS, NodeKind, NodeManifest, NodeManifestError, NodeRendererExports, PlannedChunk, QaIssue, QaSegment, type RenderPhase, type RenderProgress, StagingSlotInfo, StagingSlotStatus, StitchOptions, StitchResult, VideoColorSpaceConfig, VideoQaOptions, VideoQaReport, VideoQaStats, WebCodecsPipelineStats, ZeroCopyWebCodecsPipeline, ZeroCopyWebCodecsPipelineOptions, analyzeAudio, buildQaReport, discoverAndRegisterNodeRenderers, findNodesDir, formatQaReport, integratedLoudness, loadNodeManifests, parseNodeManifest, planChunks, preloadFonts, renderSemaphore, rendererLogger, resetRenderCaches, resolveLogFormat, stitchChunks, textLogStream };\n//# sourceMappingURL=index.d.mts.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as VisionCompute, L as VisionSession, M as VisionModelDescriptor, N as VisionModelStore, P as VisionModelStoreOptions, R as VisionTensorInput, T as SessionProvider, j as VisionImageInput, z as VisionTensorOutputs } from "./index-DBh3WphX.mjs";
1
+ import { A as VisionCompute, L as VisionSession, M as VisionModelDescriptor, N as VisionModelStore, P as VisionModelStoreOptions, R as VisionTensorInput, T as SessionProvider, j as VisionImageInput, z as VisionTensorOutputs } from "./index-D1FqV1eu.mjs";
2
2
 
3
3
  //#region ../vision-sam/dist/index.d.mts
4
4
  //#region src/license.d.ts
@@ -327,4 +327,4 @@ declare function sam3Mask(logits: Float32Array, width: number, height: number, s
327
327
  //#endregion
328
328
  //#endregion
329
329
  export { assertSamLicenseAccepted as A, sam3Precision as B, Sam3Precision as C, Sam3TrackerOptions as D, Sam3Tracker as E, sam3DenseDecoder as F, validateSam3Prompts as G, sam3Run as H, sam3EncoderFiles as I, sam3Floats as L, ensureSamModelsRegistered as M, sam2Revision as N, SamLicenseOptions as O, sam2Tokens as P, sam3Mask as R, Sam3Options as S, Sam3TextSelector as T, sam3SupportGraphs as U, sam3Revision as V, validateSam2Prompts as W, Sam2TrackerOptions as _, SAM_MODELS as a, Sam3ModelKey as b, Sam2Graph as c, Sam2Model as d, Sam2ModelKey as f, Sam2Tracker as g, Sam2Prompt as h, SAM_LICENSE_TERMS_URL as i, decodeSam2Mask as j, SamModelKey as k, Sam2Memory as l, Sam2Point as m, SAM3_ENCODER as n, Sam2FrameResult as o, Sam2Options as p, SAM_LICENSE as r, Sam2FrameTracker as s, SAM2_EXPORTS as t, Sam2MemoryBank as u, Sam3FrameResult as v, Sam3Prompt as w, Sam3ObjectResult as x, Sam3MemoryBank as y, sam3Position as z };
330
- //# sourceMappingURL=index-rtCXNxGO.d.mts.map
330
+ //# sourceMappingURL=index-CEKxvGY-.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-rtCXNxGO.d.mts","names":["SessionProvider","VisionCompute","VisionImageInput","VisionModelDescriptor","VisionModelStore","VisionModelStoreOptions","VisionSession","VisionTensorInput","VisionTensorOutputs","SAM_LICENSE_TERMS_URL","SamLicenseOptions","assertSamLicenseAccepted","Sam2Model","Sam2Graph","Sam2ModelKey","SAM2_EXPORTS","Record","Readonly","Sam3Precision","SAM3_ENCODER","Sam3ModelKey","SamModelKey","SAM_LICENSE","sam3EncoderFiles","SAM_MODELS","ensureSamModelsRegistered","Sam2Memory","Float32Array","Sam2MemoryBank","sam2Tokens","Sam2Point","Sam2Prompt","Sam2Options","Sam2FrameResult","Uint8Array","Sam2FrameTracker","Promise","validateSam2Prompts","sam2Revision","Sam2TrackerOptions","Sam2Tracker","decodeSam2Mask","sam3SupportGraphs","sam3DenseDecoder","Sam3MemoryBank","sam3Position","sam3Floats","sam3Run","Sam3TextSelector","Sam3Prompt","Sam3Options","validateSam3Prompts","Sam3ObjectResult","Sam3FrameResult","sam3Revision","sam3Precision","Sam3TrackerOptions","Sam3Tracker","Omit","sam3Mask"],"sources":["../../vision-sam/dist/index.d.mts"],"sourcesContent":["import { SessionProvider, VisionCompute, VisionImageInput, VisionModelDescriptor, VisionModelStore, VisionModelStoreOptions, VisionSession, VisionTensorInput, VisionTensorOutputs } from \"@framefields/vision\";\n\n//#region src/license.d.ts\ndeclare const SAM_LICENSE_TERMS_URL = \"https://github.com/facebookresearch/sam3/blob/main/LICENSE\";\ninterface SamLicenseOptions {\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3 models. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Ensures that the user has explicitly accepted Meta's SAM License terms before\n * downloading SAM 3 weights or performing inference. SAM 2.1's weights are Apache-2.0 and\n * need no acceptance.\n */\ndeclare function assertSamLicenseAccepted(context?: string, options?: SamLicenseOptions): void;\n//#endregion\n//#region src/models/registry.d.ts\n/**\n * SAM model registry. Every file is pinned to an immutable Hugging Face revision with its\n * exact size and SHA-256; the shared `VisionModelStore` verifies both after download.\n * Nothing here touches the network: the descriptors are registered into the vision\n * registry on first tracker creation so `@framefields/vision` never lists SAM weights.\n */\n/** SAM 2.1 checkpoints with a pinned video export. */\ntype Sam2Model = \"tiny\" | \"small\";\ntype Sam2Graph = \"vision_encoder\" | \"mask_decoder\" | \"memory_encoder\" | \"memory_attention\" | \"pointer_tpos\";\ntype Sam2ModelKey = `sam2.1-${Sam2Model}-${Sam2Graph | \"constants\"}`;\n/**\n * Diffusion Studio's fp16 video exports of Meta SAM 2.1 (Apache-2.0). Tiny is built for\n * speed at 512² (32×32 features); Small runs SAM 2's native 1024² (64×64), resolving small\n * objects, thin structures and identity after cuts better at roughly 4× the encoder and\n * 16× the memory-attention work.\n */\ndeclare const SAM2_EXPORTS: Readonly<Record<Sam2Model, {\n repo: string;\n revision: string;\n size: number;\n name: string;\n}>>;\n/** Weight formats published for the SAM 3 tracker's image encoder. */\ntype Sam3Precision = \"fp16\" | \"q4f16\" | \"q4\";\n/**\n * The encoder precision each backend runs fastest. Measured on an M1 Pro (one 1008² frame):\n * WebGPU fp16 3.65 s, q4f16 4.43 s, q4 6.63 s, int8 140 s (its ops fall back to the CPU);\n * fp16 is also the closest to full precision. On WebGPU, 4-bit weights are dequantized\n * before every matmul, so they only save memory. CUDA runs fp16 on tensor cores. CPUs have\n * no fast fp16 path, so they get fp32-activation q4.\n */\ndeclare const SAM3_ENCODER: Readonly<Record<VisionCompute, Sam3Precision>>;\ntype Sam3ModelKey = `sam3-vision_encoder-${Sam3Precision}` | `sam3-vision_encoder-${Sam3Precision}-data` | \"sam3-mask_decoder\" | \"sam3-memory_encoder\" | \"sam3-memory_attention\" | \"sam3-support\" | \"sam3-support-data\" | \"sam3-text-vision_encoder\" | \"sam3-text-vision_encoder-data\" | \"sam3-text-encoder\" | \"sam3-text-decoder\" | \"sam3-tokenizer\" | \"sam3-tokenizer-config\";\ntype SamModelKey = Sam2ModelKey | Sam3ModelKey;\ndeclare const SAM_LICENSE = \"Meta SAM License\";\n/** File names of the encoder at `precision`; the graph refers to its weights by `data`. */\ndeclare function sam3EncoderFiles(precision: Sam3Precision): {\n graph: string;\n data: string;\n};\ndeclare const SAM_MODELS: readonly VisionModelDescriptor[];\n/** Registers the SAM descriptors into the shared vision registry (idempotent). */\ndeclare function ensureSamModelsRegistered(): void;\n//#endregion\n//#region src/sam2/memory.d.ts\n/** CPU-owned memory bank; neural inference uses the configured vision execution provider. */\ninterface Sam2Memory {\n readonly frame: number;\n readonly tokens: Float32Array;\n readonly positions: Float32Array;\n readonly pointer: Float32Array;\n}\ndeclare class Sam2MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: readonly (readonly number[])[]);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount?: number): {\n memory: Float32Array;\n positions: Float32Array;\n distances: Float32Array;\n };\n}\n/** NCHW features to the sequence-major layout consumed by memory attention. */\ndeclare function sam2Tokens(data: Float32Array): Float32Array;\n//#endregion\n//#region src/sam2/types.d.ts\n/** Normalized source-image coordinates. Labels 2/3 form a box's opposite corners. */\ninterface Sam2Point {\n readonly x: number;\n readonly y: number;\n readonly label: 0 | 1 | 2 | 3;\n}\n/** Frame is on the source analysis clock, before trim or time remapping. */\ninterface Sam2Prompt {\n readonly frame: number;\n readonly points: readonly Sam2Point[];\n}\ninterface Sam2Options {\n readonly prompts: readonly Sam2Prompt[];\n /** Metadata for object and class signals; SAM does not classify objects. */\n readonly category?: string;\n /**\n * Checkpoint: `\"tiny\"` (default; 512², ~0.3 s/frame on an M1 Pro) or `\"small\"` (SAM 2's\n * native 1024²; finer edges, small objects and thin structures, steadier identity after\n * cuts, at several times the cost).\n */\n readonly model?: Sam2Model;\n}\ninterface Sam2FrameResult {\n readonly mask: Uint8Array;\n readonly width: number;\n readonly height: number;\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam2FrameTracker {\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n release(): void;\n}\ndeclare function validateSam2Prompts(prompts: readonly Sam2Prompt[]): void;\n//#endregion\n//#region src/sam2/tracker.d.ts\n/** The pinned export revision of `model`: part of ClipVision's persistent cache identity. */\ndeclare function sam2Revision(model?: Sam2Model): string;\ninterface Sam2TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n /** Source sequence length; used to normalize object-pointer time positions for short videos. */\n readonly frameCount?: number;\n /** Checkpoint: `\"tiny\"` (default, 512², fast) or `\"small\"` (1024², finer detail). */\n readonly model?: Sam2Model;\n}\n/** Complete pinned SAM 2.1 video graph pipeline (Tiny or Small), one explicitly selected object. */\ndeclare class Sam2Tracker {\n private readonly constants;\n private readonly frameCount;\n private readonly sessions;\n private readonly bank;\n /** Model input side; image features are `size / 16` square, one memory token per cell. */\n private readonly size;\n private readonly tokens;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam2TrackerOptions): Promise<Sam2Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n private condition;\n private remember;\n release(): void;\n}\n/** Bilinear resize of square logits before thresholding, matching SAM's source-image mask contract. */\ndeclare function decodeSam2Mask(logits: Float32Array, width: number, height: number, score: number, iou: number): Sam2FrameResult;\n//#endregion\n//#region src/sam3/graphs.d.ts\ndeclare function sam3SupportGraphs(reference: Uint8Array, external: Uint8Array): {\n densePrompt: Uint8Array;\n pointerPosition: Uint8Array;\n temporal: Float32Array;\n noMemory: Float32Array;\n};\n/** Replace the no-mask embedding by the actual dense prompt head's output. */\ndeclare function sam3DenseDecoder(modelBytes: Uint8Array): Uint8Array;\n//#endregion\n//#region src/sam3/memory.d.ts\n/** Dynamic memory lengths: never duplicate unavailable early-frame memories. */\ndeclare class Sam3MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: Float32Array);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount: number): {\n spatial: Float32Array;\n positions: Float32Array;\n pointers: Float32Array;\n encoding: Float32Array;\n pointerCount: number;\n };\n}\n/** SAM 3 PositionEmbeddingSine: y then x, normalized pixel centers at grid indices 1..72. */\ndeclare function sam3Position(): Float32Array;\n//#endregion\n//#region src/sam3/text-selector.d.ts\ndeclare function sam3Floats(outputs: VisionTensorOutputs, name: string): Float32Array;\ndeclare function sam3Run(session: VisionSession, inputs: readonly VisionTensorInput[]): Promise<VisionTensorOutputs>;\n/** Semantic model is separate from the visual tracker and loads only for text prompts. */\ndeclare class Sam3TextSelector {\n private readonly tokenizer;\n private readonly sessions;\n private encoded?;\n private constructor();\n static create(store: VisionModelStore, provider: SessionProvider): Promise<Sam3TextSelector>;\n /**\n * Mask logits (288²) of the instances matching `text` with sigmoid score of at least\n * `threshold`, best first and at most `max`. Queries that repeat an accepted instance\n * (mask IoU above 0.5) are skipped. Throws when nothing matches unless `required` is false.\n */\n select(pixels: Float32Array, text: string, threshold: number, max?: number, required?: boolean): Promise<Float32Array[]>;\n /** Text features for a prompt; the last one is kept, since re-detection repeats it every few frames. */\n private encodeText;\n release(): void;\n}\n//#endregion\n//#region src/sam3/types.d.ts\ninterface Sam3Prompt {\n /** Source analysis frame, before trimming or time remapping. */\n readonly frame: number;\n /** Normalized source coordinates; labels 2/3 define a box. */\n readonly points?: readonly Sam2Point[];\n /** Select matching instances (up to `maxObjects`, best first), then propagate their masks. */\n readonly text?: string;\n /**\n * Track ID (1-based) a points prompt seeds or corrects; defaults to 1. The next unused\n * ID adds an object. Text prompts re-select every object, so they take no ID.\n */\n readonly object?: number;\n}\ninterface Sam3Options extends SamLicenseOptions {\n /** Prompt list across frames. Optional if shorthand `text` is supplied. */\n readonly prompts?: readonly Sam3Prompt[];\n /** Convenience shorthand to select by text at frame 0. */\n readonly text?: string;\n /** Signal category metadata; defaults to \"object\". */\n readonly category?: string;\n /** Minimum sigmoid score for a text-selected instance. Default 0.5. */\n readonly textThreshold?: number;\n /** Most instances a text prompt selects, as track IDs 1…N by score. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /**\n * Select every instance matching the text as **one** object: one mask and one memory, so\n * tracking costs the same as a single object however many match (e.g. a whole crowd).\n */\n readonly merge?: boolean;\n /**\n * Every this many frames after a text prompt, run that text again and add the instances no\n * tracked object covers yet (people who walk in, turn up from behind someone, or were lost):\n * into the one object with `merge`, otherwise as new track IDs up to `maxObjects`. Each\n * detection pass costs about one text prompt. Default 0: select once, then only track.\n */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the backend in use (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n}\ndeclare function validateSam3Prompts(options: Sam3Options): void;\n/** One tracked SAM 3 object at a frame; an empty mask means it is absent there. */\ninterface Sam3ObjectResult {\n /** Track ID, 1-based and stable until a text prompt re-selects every object. */\n readonly id: number;\n /** Source-sized binary mask (0 or 255). */\n readonly mask: Uint8Array;\n /** Object-presence logit; positive means present. */\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam3FrameResult {\n readonly width: number;\n readonly height: number;\n /** Every tracked object, ordered by track ID. */\n readonly objects: readonly Sam3ObjectResult[];\n}\n//#endregion\n//#region src/sam3/tracker.d.ts\n/** Every graph and tokenizer revision, and the encoder precision: ClipVision's cache identity. */\ndeclare function sam3Revision(precision: Sam3Precision): string;\n/** The encoder precision a tracker on `provider` uses: the override, else the backend's best. */\ndeclare function sam3Precision(provider?: SessionProvider, override?: Sam3Precision): Promise<Sam3Precision>;\ninterface Sam3TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n readonly frameCount?: number;\n readonly textThreshold?: number;\n /** Most instances a text prompt selects. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /** Track every instance a text prompt selects as one object (one mask, one memory). */\n readonly merge?: boolean;\n /** Re-run the last text prompt every this many frames and add what no object covers (see `Sam3Options`). */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the provider's backend (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3's weights. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Explicitly selected SAM 3 instances with full neural memory propagation on the provider.\n * The image encoder runs once per frame; each object keeps its own memory bank.\n */\ndeclare class Sam3Tracker {\n private readonly store;\n private readonly provider;\n private readonly options;\n private readonly sessions;\n private encoder?;\n private readonly position;\n private readonly banks;\n private temporal?;\n private noMemory?;\n private selector?;\n /** The last text prompt and its frame, which re-detection repeats. */\n private text?;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam3TrackerOptions): Promise<Sam3Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, prompt?: Omit<Sam3Prompt, \"frame\">): Promise<Sam3FrameResult>;\n private track;\n /**\n * On a `redetect` frame, runs the last text prompt again and seeds what no tracked object\n * covers: merged into the one object (keeping what it tracks), or as new objects.\n */\n private redetect;\n private textSelector;\n /** A 288² concept mask as a seed that outputs (and remembers) that mask. */\n private textSeed;\n private densePrompt;\n /** Objects a prompt (re)seeds, by index. Text re-selects every object; points address one. */\n private seeds;\n private newBank;\n private decode;\n private initialFeatures;\n private condition;\n private remember;\n release(): void;\n}\n/** Resize logits before thresholding; source pixels are the public mask coordinate system. */\ndeclare function sam3Mask(logits: Float32Array, width: number, height: number, score: number): Uint8Array;\n//#endregion\nexport { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2FrameResult, Sam2FrameTracker, Sam2Graph, Sam2Memory, Sam2MemoryBank, Sam2Model, Sam2ModelKey, Sam2Options, Sam2Point, Sam2Prompt, Sam2Tracker, Sam2TrackerOptions, Sam3FrameResult, Sam3MemoryBank, Sam3ModelKey, Sam3ObjectResult, Sam3Options, Sam3Precision, Sam3Prompt, Sam3TextSelector, Sam3Tracker, Sam3TrackerOptions, SamLicenseOptions, SamModelKey, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };\n//# sourceMappingURL=index.d.mts.map"],"mappings":"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"}
1
+ {"version":3,"file":"index-CEKxvGY-.d.mts","names":["SessionProvider","VisionCompute","VisionImageInput","VisionModelDescriptor","VisionModelStore","VisionModelStoreOptions","VisionSession","VisionTensorInput","VisionTensorOutputs","SAM_LICENSE_TERMS_URL","SamLicenseOptions","assertSamLicenseAccepted","Sam2Model","Sam2Graph","Sam2ModelKey","SAM2_EXPORTS","Record","Readonly","Sam3Precision","SAM3_ENCODER","Sam3ModelKey","SamModelKey","SAM_LICENSE","sam3EncoderFiles","SAM_MODELS","ensureSamModelsRegistered","Sam2Memory","Float32Array","Sam2MemoryBank","sam2Tokens","Sam2Point","Sam2Prompt","Sam2Options","Sam2FrameResult","Uint8Array","Sam2FrameTracker","Promise","validateSam2Prompts","sam2Revision","Sam2TrackerOptions","Sam2Tracker","decodeSam2Mask","sam3SupportGraphs","sam3DenseDecoder","Sam3MemoryBank","sam3Position","sam3Floats","sam3Run","Sam3TextSelector","Sam3Prompt","Sam3Options","validateSam3Prompts","Sam3ObjectResult","Sam3FrameResult","sam3Revision","sam3Precision","Sam3TrackerOptions","Sam3Tracker","Omit","sam3Mask"],"sources":["../../vision-sam/dist/index.d.mts"],"sourcesContent":["import { SessionProvider, VisionCompute, VisionImageInput, VisionModelDescriptor, VisionModelStore, VisionModelStoreOptions, VisionSession, VisionTensorInput, VisionTensorOutputs } from \"@framefields/vision\";\n\n//#region src/license.d.ts\ndeclare const SAM_LICENSE_TERMS_URL = \"https://github.com/facebookresearch/sam3/blob/main/LICENSE\";\ninterface SamLicenseOptions {\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3 models. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Ensures that the user has explicitly accepted Meta's SAM License terms before\n * downloading SAM 3 weights or performing inference. SAM 2.1's weights are Apache-2.0 and\n * need no acceptance.\n */\ndeclare function assertSamLicenseAccepted(context?: string, options?: SamLicenseOptions): void;\n//#endregion\n//#region src/models/registry.d.ts\n/**\n * SAM model registry. Every file is pinned to an immutable Hugging Face revision with its\n * exact size and SHA-256; the shared `VisionModelStore` verifies both after download.\n * Nothing here touches the network: the descriptors are registered into the vision\n * registry on first tracker creation so `@framefields/vision` never lists SAM weights.\n */\n/** SAM 2.1 checkpoints with a pinned video export. */\ntype Sam2Model = \"tiny\" | \"small\";\ntype Sam2Graph = \"vision_encoder\" | \"mask_decoder\" | \"memory_encoder\" | \"memory_attention\" | \"pointer_tpos\";\ntype Sam2ModelKey = `sam2.1-${Sam2Model}-${Sam2Graph | \"constants\"}`;\n/**\n * Diffusion Studio's fp16 video exports of Meta SAM 2.1 (Apache-2.0). Tiny is built for\n * speed at 512² (32×32 features); Small runs SAM 2's native 1024² (64×64), resolving small\n * objects, thin structures and identity after cuts better at roughly 4× the encoder and\n * 16× the memory-attention work.\n */\ndeclare const SAM2_EXPORTS: Readonly<Record<Sam2Model, {\n repo: string;\n revision: string;\n size: number;\n name: string;\n}>>;\n/** Weight formats published for the SAM 3 tracker's image encoder. */\ntype Sam3Precision = \"fp16\" | \"q4f16\" | \"q4\";\n/**\n * The encoder precision each backend runs fastest. Measured on an M1 Pro (one 1008² frame):\n * WebGPU fp16 3.65 s, q4f16 4.43 s, q4 6.63 s, int8 140 s (its ops fall back to the CPU);\n * fp16 is also the closest to full precision. On WebGPU, 4-bit weights are dequantized\n * before every matmul, so they only save memory. CUDA runs fp16 on tensor cores. CPUs have\n * no fast fp16 path, so they get fp32-activation q4.\n */\ndeclare const SAM3_ENCODER: Readonly<Record<VisionCompute, Sam3Precision>>;\ntype Sam3ModelKey = `sam3-vision_encoder-${Sam3Precision}` | `sam3-vision_encoder-${Sam3Precision}-data` | \"sam3-mask_decoder\" | \"sam3-memory_encoder\" | \"sam3-memory_attention\" | \"sam3-support\" | \"sam3-support-data\" | \"sam3-text-vision_encoder\" | \"sam3-text-vision_encoder-data\" | \"sam3-text-encoder\" | \"sam3-text-decoder\" | \"sam3-tokenizer\" | \"sam3-tokenizer-config\";\ntype SamModelKey = Sam2ModelKey | Sam3ModelKey;\ndeclare const SAM_LICENSE = \"Meta SAM License\";\n/** File names of the encoder at `precision`; the graph refers to its weights by `data`. */\ndeclare function sam3EncoderFiles(precision: Sam3Precision): {\n graph: string;\n data: string;\n};\ndeclare const SAM_MODELS: readonly VisionModelDescriptor[];\n/** Registers the SAM descriptors into the shared vision registry (idempotent). */\ndeclare function ensureSamModelsRegistered(): void;\n//#endregion\n//#region src/sam2/memory.d.ts\n/** CPU-owned memory bank; neural inference uses the configured vision execution provider. */\ninterface Sam2Memory {\n readonly frame: number;\n readonly tokens: Float32Array;\n readonly positions: Float32Array;\n readonly pointer: Float32Array;\n}\ndeclare class Sam2MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: readonly (readonly number[])[]);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount?: number): {\n memory: Float32Array;\n positions: Float32Array;\n distances: Float32Array;\n };\n}\n/** NCHW features to the sequence-major layout consumed by memory attention. */\ndeclare function sam2Tokens(data: Float32Array): Float32Array;\n//#endregion\n//#region src/sam2/types.d.ts\n/** Normalized source-image coordinates. Labels 2/3 form a box's opposite corners. */\ninterface Sam2Point {\n readonly x: number;\n readonly y: number;\n readonly label: 0 | 1 | 2 | 3;\n}\n/** Frame is on the source analysis clock, before trim or time remapping. */\ninterface Sam2Prompt {\n readonly frame: number;\n readonly points: readonly Sam2Point[];\n}\ninterface Sam2Options {\n readonly prompts: readonly Sam2Prompt[];\n /** Metadata for object and class signals; SAM does not classify objects. */\n readonly category?: string;\n /**\n * Checkpoint: `\"tiny\"` (default; 512², ~0.3 s/frame on an M1 Pro) or `\"small\"` (SAM 2's\n * native 1024²; finer edges, small objects and thin structures, steadier identity after\n * cuts, at several times the cost).\n */\n readonly model?: Sam2Model;\n}\ninterface Sam2FrameResult {\n readonly mask: Uint8Array;\n readonly width: number;\n readonly height: number;\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam2FrameTracker {\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n release(): void;\n}\ndeclare function validateSam2Prompts(prompts: readonly Sam2Prompt[]): void;\n//#endregion\n//#region src/sam2/tracker.d.ts\n/** The pinned export revision of `model`: part of ClipVision's persistent cache identity. */\ndeclare function sam2Revision(model?: Sam2Model): string;\ninterface Sam2TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n /** Source sequence length; used to normalize object-pointer time positions for short videos. */\n readonly frameCount?: number;\n /** Checkpoint: `\"tiny\"` (default, 512², fast) or `\"small\"` (1024², finer detail). */\n readonly model?: Sam2Model;\n}\n/** Complete pinned SAM 2.1 video graph pipeline (Tiny or Small), one explicitly selected object. */\ndeclare class Sam2Tracker {\n private readonly constants;\n private readonly frameCount;\n private readonly sessions;\n private readonly bank;\n /** Model input side; image features are `size / 16` square, one memory token per cell. */\n private readonly size;\n private readonly tokens;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam2TrackerOptions): Promise<Sam2Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n private condition;\n private remember;\n release(): void;\n}\n/** Bilinear resize of square logits before thresholding, matching SAM's source-image mask contract. */\ndeclare function decodeSam2Mask(logits: Float32Array, width: number, height: number, score: number, iou: number): Sam2FrameResult;\n//#endregion\n//#region src/sam3/graphs.d.ts\ndeclare function sam3SupportGraphs(reference: Uint8Array, external: Uint8Array): {\n densePrompt: Uint8Array;\n pointerPosition: Uint8Array;\n temporal: Float32Array;\n noMemory: Float32Array;\n};\n/** Replace the no-mask embedding by the actual dense prompt head's output. */\ndeclare function sam3DenseDecoder(modelBytes: Uint8Array): Uint8Array;\n//#endregion\n//#region src/sam3/memory.d.ts\n/** Dynamic memory lengths: never duplicate unavailable early-frame memories. */\ndeclare class Sam3MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: Float32Array);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount: number): {\n spatial: Float32Array;\n positions: Float32Array;\n pointers: Float32Array;\n encoding: Float32Array;\n pointerCount: number;\n };\n}\n/** SAM 3 PositionEmbeddingSine: y then x, normalized pixel centers at grid indices 1..72. */\ndeclare function sam3Position(): Float32Array;\n//#endregion\n//#region src/sam3/text-selector.d.ts\ndeclare function sam3Floats(outputs: VisionTensorOutputs, name: string): Float32Array;\ndeclare function sam3Run(session: VisionSession, inputs: readonly VisionTensorInput[]): Promise<VisionTensorOutputs>;\n/** Semantic model is separate from the visual tracker and loads only for text prompts. */\ndeclare class Sam3TextSelector {\n private readonly tokenizer;\n private readonly sessions;\n private encoded?;\n private constructor();\n static create(store: VisionModelStore, provider: SessionProvider): Promise<Sam3TextSelector>;\n /**\n * Mask logits (288²) of the instances matching `text` with sigmoid score of at least\n * `threshold`, best first and at most `max`. Queries that repeat an accepted instance\n * (mask IoU above 0.5) are skipped. Throws when nothing matches unless `required` is false.\n */\n select(pixels: Float32Array, text: string, threshold: number, max?: number, required?: boolean): Promise<Float32Array[]>;\n /** Text features for a prompt; the last one is kept, since re-detection repeats it every few frames. */\n private encodeText;\n release(): void;\n}\n//#endregion\n//#region src/sam3/types.d.ts\ninterface Sam3Prompt {\n /** Source analysis frame, before trimming or time remapping. */\n readonly frame: number;\n /** Normalized source coordinates; labels 2/3 define a box. */\n readonly points?: readonly Sam2Point[];\n /** Select matching instances (up to `maxObjects`, best first), then propagate their masks. */\n readonly text?: string;\n /**\n * Track ID (1-based) a points prompt seeds or corrects; defaults to 1. The next unused\n * ID adds an object. Text prompts re-select every object, so they take no ID.\n */\n readonly object?: number;\n}\ninterface Sam3Options extends SamLicenseOptions {\n /** Prompt list across frames. Optional if shorthand `text` is supplied. */\n readonly prompts?: readonly Sam3Prompt[];\n /** Convenience shorthand to select by text at frame 0. */\n readonly text?: string;\n /** Signal category metadata; defaults to \"object\". */\n readonly category?: string;\n /** Minimum sigmoid score for a text-selected instance. Default 0.5. */\n readonly textThreshold?: number;\n /** Most instances a text prompt selects, as track IDs 1…N by score. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /**\n * Select every instance matching the text as **one** object: one mask and one memory, so\n * tracking costs the same as a single object however many match (e.g. a whole crowd).\n */\n readonly merge?: boolean;\n /**\n * Every this many frames after a text prompt, run that text again and add the instances no\n * tracked object covers yet (people who walk in, turn up from behind someone, or were lost):\n * into the one object with `merge`, otherwise as new track IDs up to `maxObjects`. Each\n * detection pass costs about one text prompt. Default 0: select once, then only track.\n */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the backend in use (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n}\ndeclare function validateSam3Prompts(options: Sam3Options): void;\n/** One tracked SAM 3 object at a frame; an empty mask means it is absent there. */\ninterface Sam3ObjectResult {\n /** Track ID, 1-based and stable until a text prompt re-selects every object. */\n readonly id: number;\n /** Source-sized binary mask (0 or 255). */\n readonly mask: Uint8Array;\n /** Object-presence logit; positive means present. */\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam3FrameResult {\n readonly width: number;\n readonly height: number;\n /** Every tracked object, ordered by track ID. */\n readonly objects: readonly Sam3ObjectResult[];\n}\n//#endregion\n//#region src/sam3/tracker.d.ts\n/** Every graph and tokenizer revision, and the encoder precision: ClipVision's cache identity. */\ndeclare function sam3Revision(precision: Sam3Precision): string;\n/** The encoder precision a tracker on `provider` uses: the override, else the backend's best. */\ndeclare function sam3Precision(provider?: SessionProvider, override?: Sam3Precision): Promise<Sam3Precision>;\ninterface Sam3TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n readonly frameCount?: number;\n readonly textThreshold?: number;\n /** Most instances a text prompt selects. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /** Track every instance a text prompt selects as one object (one mask, one memory). */\n readonly merge?: boolean;\n /** Re-run the last text prompt every this many frames and add what no object covers (see `Sam3Options`). */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the provider's backend (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3's weights. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Explicitly selected SAM 3 instances with full neural memory propagation on the provider.\n * The image encoder runs once per frame; each object keeps its own memory bank.\n */\ndeclare class Sam3Tracker {\n private readonly store;\n private readonly provider;\n private readonly options;\n private readonly sessions;\n private encoder?;\n private readonly position;\n private readonly banks;\n private temporal?;\n private noMemory?;\n private selector?;\n /** The last text prompt and its frame, which re-detection repeats. */\n private text?;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam3TrackerOptions): Promise<Sam3Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, prompt?: Omit<Sam3Prompt, \"frame\">): Promise<Sam3FrameResult>;\n private track;\n /**\n * On a `redetect` frame, runs the last text prompt again and seeds what no tracked object\n * covers: merged into the one object (keeping what it tracks), or as new objects.\n */\n private redetect;\n private textSelector;\n /** A 288² concept mask as a seed that outputs (and remembers) that mask. */\n private textSeed;\n private densePrompt;\n /** Objects a prompt (re)seeds, by index. Text re-selects every object; points address one. */\n private seeds;\n private newBank;\n private decode;\n private initialFeatures;\n private condition;\n private remember;\n release(): void;\n}\n/** Resize logits before thresholding; source pixels are the public mask coordinate system. */\ndeclare function sam3Mask(logits: Float32Array, width: number, height: number, score: number): Uint8Array;\n//#endregion\nexport { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2FrameResult, Sam2FrameTracker, Sam2Graph, Sam2Memory, Sam2MemoryBank, Sam2Model, Sam2ModelKey, Sam2Options, Sam2Point, Sam2Prompt, Sam2Tracker, Sam2TrackerOptions, Sam3FrameResult, Sam3MemoryBank, Sam3ModelKey, Sam3ObjectResult, Sam3Options, Sam3Precision, Sam3Prompt, Sam3TextSelector, Sam3Tracker, Sam3TrackerOptions, SamLicenseOptions, SamModelKey, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };\n//# sourceMappingURL=index.d.mts.map"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { Pt as MeshAudioDeformConfig, an as OutputItem, bt as MediaOperation, ur as VirtualMediaData } from "./index-a6JrbAK0.mjs";
1
+ import { $n as ToonShading, Ft as MeshAudioDeformConfig, fr as VirtualMediaData, it as GeometryOutlineOptions, on as OutputItem, xt as MediaOperation } from "./index-C-V6CAhP.mjs";
2
2
  import { z } from "zod";
3
3
  import { Input, VideoSample } from "mediabunny";
4
4
  import "fontkit";
5
5
 
6
6
  //#region ../webgpu-renderers/dist/math3d/index.d.mts
7
+
7
8
  //#region src/math3d/vector3.d.ts
8
9
  /**
9
10
  * 3D Vector mathematics for camera kinematics, scene projections, and spatial transforms.
@@ -229,6 +230,7 @@ interface Environment3DOptions {
229
230
  toneMapping?: ToneMapping;
230
231
  fog?: Environment3DFog;
231
232
  floor?: Environment3DFloor;
233
+ outlines?: boolean | GeometryOutlineOptions;
232
234
  }
233
235
  interface PresetDef {
234
236
  top: string;
@@ -2997,6 +2999,8 @@ declare class GlassPipeline {
2997
2999
  //#region src/renderer3d/surface-params.d.ts
2998
3000
  /** Physically based surface inputs every 3D draw (quad, text, mesh) accepts. */
2999
3001
  interface SurfaceParams {
3002
+ toon?: ToonShading;
3003
+ outline?: boolean;
3000
3004
  /** Microsurface roughness 0 (mirror) .. 1 (chalk). Physical scenes default to 0.5. */
3001
3005
  roughness?: number;
3002
3006
  /** 0 = dielectric (plastic, paint, wood), 1 = metal. */
@@ -3008,7 +3012,7 @@ interface SurfaceParams {
3008
3012
  /** Casts into a `castShadow` light's shadow map (meshes default on, quads off). */
3009
3013
  castShadow?: boolean;
3010
3014
  }
3011
- /** Floats appended to each 3D model uniform block: pbr vec4 + emissive vec4. */
3015
+ /** Shared model uniforms: PBR, emissive, and three art-direction vec4s. */
3012
3016
 
3013
3017
  //#endregion
3014
3018
  //#region src/renderer3d/mesh3d-pipeline.d.ts
@@ -3431,7 +3435,7 @@ interface ModelUniformData extends SurfaceParams {
3431
3435
  height?: number;
3432
3436
  /** Fraction of the texture the layer covers, [u, v] (default the whole texture) */
3433
3437
  textureExtent?: [number, number];
3434
- material?: "lit" | "unlit";
3438
+ material?: "lit" | "unlit" | "toon";
3435
3439
  /** Screen-space track matte: the layer shows where this texture's alpha does. */
3436
3440
  matte?: GPUTexture;
3437
3441
  /** Turns the flat quad into a surface lifted by another picture's brightness. */
@@ -3442,7 +3446,7 @@ interface ModelUniformData extends SurfaceParams {
3442
3446
  ambientIntensity?: number;
3443
3447
  metallic?: number;
3444
3448
  }
3445
- type MaterialUniformData = Pick<ModelUniformData, "material" | "shininess" | "roughness" | "specularIntensity" | "ambientIntensity" | "metallic" | "emissive" | "emissiveIntensity">;
3449
+ type MaterialUniformData = Pick<ModelUniformData, "material" | "shininess" | "roughness" | "specularIntensity" | "ambientIntensity" | "metallic" | "emissive" | "emissiveIntensity" | "toon" | "outline">;
3446
3450
  /** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */
3447
3451
 
3448
3452
  declare class Quad3DPipeline {
@@ -3682,7 +3686,7 @@ interface DrawQuad3DOpts extends SurfaceParams {
3682
3686
  /** Pre-computed normal matrix */
3683
3687
  normalMatrix?: Mat4;
3684
3688
  /** Material shading mode ("lit" vs "unlit") */
3685
- material?: "lit" | "unlit";
3689
+ material?: "lit" | "unlit" | "toon";
3686
3690
  /** Blinn-Phong specular shininess exponent */
3687
3691
  shininess?: number;
3688
3692
  /** Roughness factor [0, 1] */
@@ -3854,6 +3858,8 @@ declare class Renderer3D {
3854
3858
  private shadowSampler;
3855
3859
  private meshBounds;
3856
3860
  private bloomPipeline;
3861
+ private outlinePipeline;
3862
+ private geometryResolvePipeline;
3857
3863
  private lastCameraBuffer;
3858
3864
  /**
3859
3865
  * Samples per pixel in the 3D pass. Mesh silhouettes (extruded text,
@@ -3862,6 +3868,15 @@ declare class Renderer3D {
3862
3868
  */
3863
3869
  readonly sampleCount: number;
3864
3870
  constructor(device: GPUDevice, format: GPUTextureFormat, sampleCount?: number);
3871
+ /**
3872
+ * Size-dependent render targets, by label, size, samples and usage. One
3873
+ * frame (one command buffer) can render 3D scenes of different sizes, so
3874
+ * a target is never destroyed while the frame may use it: targets the last
3875
+ * frame did not use are destroyed at the next `resetPools`.
3876
+ */
3877
+ private attachments;
3878
+ private attachmentsUsed;
3879
+ private attachment;
3865
3880
  resetPools(): void;
3866
3881
  getOrCreateDepthTexture(width: number, height: number): GPUTexture;
3867
3882
  private getOrCreateMsaaTexture;
@@ -3905,10 +3920,11 @@ declare class Renderer3D {
3905
3920
  blurReflection(encoder: GPUCommandEncoder, reflectionTexture: GPUTexture, roughness: number): GPUTexture;
3906
3921
  drawFloor(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, reflectionTexture: GPUTexture, floor: Environment3DFloor, useMrt?: boolean, useBloom?: boolean): void;
3907
3922
  /**
3908
- * A layer's unit quad ([-0.5, 0.5] square) in world space:
3909
- * T(pos) * Rz * Ry * Rx * S(w * sx, h * sy, sz) * T(0.5 - ax, 0.5 - ay, 0).
3923
+ * A centered unit quad in world space. Translate to the authored pivot,
3924
+ * rotate and scale, then offset the unit quad back from that pivot.
3925
+ * Shared with children in preserve-3d containers.
3910
3926
  */
3911
- private quadModelMatrix;
3927
+ quadModelMatrix(opts: DrawQuad3DOpts): Mat4;
3912
3928
  /**
3913
3929
  * Draw a text layer's captured Slug glyphs on the plane its texture quad
3914
3930
  * would cover. Glyph coverage is solved per screen pixel, so the text is
@@ -3949,6 +3965,9 @@ declare class Renderer3D {
3949
3965
  /** Writes `source` with bloom into `dest` (see `BloomOptions`). */
3950
3966
  applyBloom(encoder: GPUCommandEncoder, source: GPUTexture, dest: GPUTexture, options?: BloomOptions, /** Scene radiance to threshold (from a `writeHdr` pass); default `source`. */
3951
3967
  hdrSource?: GPUTexture | null): void;
3968
+ /** Geometry ink is applied before lens blur, independently of material shading. */
3969
+ resolveGeometry(encoder: GPUCommandEncoder, geometry: GPUTexture): void;
3970
+ applyOutlines(encoder: GPUCommandEncoder, source: GPUTexture, geometry: GPUTexture, dest: GPUTextureView, camera: Camera3DPose, options: GeometryOutlineOptions, fog?: Environment3DFog): void;
3952
3971
  applyDepthOfField(encoder: GPUCommandEncoder, sourceColorTex: GPUTexture, depthTex: GPUTexture, destView: GPUTextureView, cameraBuffer: GPUBuffer): void;
3953
3972
  /** Uploads raw `InstanceData` float buffer to a GPU storage buffer from the instance pool. */
3954
3973
  uploadInstanceData(data: Float32Array): GPUBuffer;
@@ -4546,4 +4565,4 @@ declare const SignalResultSchema: z.ZodObject<{
4546
4565
  }, z.core.$strip>;
4547
4566
  //#endregion
4548
4567
  export { inputStore as $, evaluateCubicBezierDerivative as $n, SelectorMode as $t, PolyhedronGeometryOptions as A, TextSignalSelectorSchema as An, LIGHT_UNIFORM_SIZE_BYTES as Ar, EnhancedTextNode as At, SignalRegistryResource as B, Vec2Schema as Bn, Path3DSample as Br, GlyphAnchorPointSchema as Bt, MasterAudioEntry as C, TextRangeSelector as Cn, Environment3DFloor as Cr, AudioSpectrumTypographySchema as Ct, MotionBlurPipeline as D, TextSelector as Dn, FrustumPlanes as Dr, CubicBezierSegmentSchema as Dt, Model3DData as E, TextScrambleConfigSchema as En, FrustumPlane as Er, CubicBezierSegment as Et, RoundedBoxGeometryOptions as F, TypingCadence as Fn, MAX_LIGHTS as Fr, ExtendedGlyphProperties as Ft, TorusGeometryOptions as G, buildPathLUT as Gn, linearRgb as Gr, LongShadowConfig as Gt, SlugFontCache as H, VolumetricFormationConfigSchema as Hn, ShadowUniformInfo as Hr, KineticMarqueeConfigSchema as Ht, SSAOPipeline as I, TypingCadenceSchema as In, Mat4 as Ir, ExtendedGlyphPropertiesSchema as It, WebGPUAudioProcessor as J, computeRangeSelectorWeight as Jn, ParticleDissolveConfigSchema as Jt, TubeGeometryOptions as K, computeAnchorPivotOffset as Kn, parseColorToRgb as Kr, LongShadowConfigSchema as Kt, ShadowPipeline as L, VariableFontAxes as Ln, Matrix4Math as Lr, GlyphAnchorGrouping as Lt, Renderer2D as M, TextWigglySelectorSchema as Mn, Light3DOptions as Mr, ExpressionEvaluationContext as Mt, Renderer3D as N, TypewriterAnimator as Nn, LightKind as Nr, ExpressionSelector as Nt, NodeAnimationTrack3D as O, TextSelectorSchema as On, GPULightData as Or, DynamicStrokeProperties as Ot, RingGeometryOptions as P, TypewriterAnimatorSchema as Pn, LightsUniformData as Pr, ExpressionSelectorSchema as Pt, initHeadlessWebGPU as Q, evaluateCubicBezier as Qn, SelectorBasedOnSchema as Qt, ShardGeometryOptions as R, VariableFontAxesSchema as Rn, Path3D as Rr, GlyphAnchorGroupingSchema as Rt, LoadModelOptions as S, TextPathSourceSchema as Sn, ENVIRONMENT_PRESETS as Sr, AudioSpectrumTypography as St, Mesh3DData as T, TextScrambleConfig as Tn, Environment3DOptions as Tr, ChromaticGlitchConfigSchema as Tt, SlugPipeline as U, VolumetricFormationMode as Un, Vec3 as Ur, LineSpacingDynamics as Ut, Skeleton3D as V, VolumetricFormationConfig as Vn, ResolvedEnvironment as Vr, KineticMarqueeConfig as Vt, SphereGeometryOptions as W, VolumetricFormationModeSchema as Wn, Vector3Math as Wr, LineSpacingDynamicsSchema as Wt, describeGpu as X, distanceToCurveParameter as Xn, PathChainLUTEntry as Xt, buildWGSLSignalFn as Y, deterministicWigglyNoise as Yn, PathChainLUT as Yt, ensureDevice as Z, ellipseToCubicBeziers as Zn, SelectorBasedOn as Zt, ExtrudeShapeGeometryOptions as _, TextCursorStyleSchema as _n, Camera3D as _r, AnchorPreset as _t, AudioLatentData as a, SkewProperties as an, evaluateTypewriterState as ar, parseMTL as at, LatheGeometryOptions as b, TextPathOptionsSchema as bn, CatmullRomOptions as br, AnimatableGlyphPropsSchema as bt, AudioMeshDeformPipeline as c, Spatial3DPropertiesSchema as cn, generatePathSegments as cr, signalRegistry as ct, AudioSignalComputePipeline as d, TextAnchorConfig as dn, parseSvgPathToCubicBeziers as dr, AETextAnimatorSchema as dt, SelectorModeSchema as en, evaluateExpressionSelector as er, loadFBX as et, BlendMode as f, TextAnchorConfigSchema as fn, sampleAudioSpectrumScale as fr, AdvancedTextAnimator as ft, EffectPipeline as g, TextCursorStyle as gn, BezierSegment3D as gr, AnchorGroupingSchema as gt, CylinderGeometryOptions as h, TextCursorConfigSchema as hn, waveToCubicBeziers as hr, AnchorGrouping as ht, AnimationClip3D as i, SelectorUnitsSchema as in, evaluateSpringProgress as ir, parseFBX as it, RenderContextValue as j, TextWigglySelector as jn, Light3D as jr, EnhancedTextNodeSchema as jt, Points3DGeometryOptions as k, TextSignalSelector as kn, HelixOptions as kr, DynamicStrokePropertiesSchema as kt, AudioPitchTrackConfig as l, SpringPhysics as ln, getScramblePool as lr, textureCache as lt, CapsuleGeometryOptions as m, TextCursorConfig as mn, samplePathChainGeometry as mr, AdvancedTextAnimatorSchema as mt, NodeRendererPlugin as n, SelectorShapeSchema as nn, evaluateSelectorCombination as nr, loadOBJ as nt, AudioLatentEngine as o, SkewPropertiesSchema as on, evaluateVolumetricFormation as or, parseOBJ as ot, Bone3D as p, TextAnimatorBuilder as pn, sampleCurveGeometry as pr, AdvancedTextAnimatorBuilder as pt, TubePathSpec as q, computeLineLeadingDisplacement as qn, resolveEnvironment as qr, ParticleDissolveConfig as qt, WebGPUNodeRenderer as r, SelectorUnits as rn, evaluateSkewMatrix as rr, lutStore as rt, AudioLatentTrackCache as s, Spatial3DProperties as sn, generateArcLengthLUT as sr, shaderStore as st, SignalResultSchema as t, SelectorShape as tn, evaluateMarqueeOffset as tr, loadModel3D as tt, AudioSignalComputeConfig as u, SpringPhysicsSchema as un, getShuffledOrder as ur, AETextAnimator as ut, GlassPipeline as v, TextPathBuilder as vn, Camera3DPose as vr, AnchorPresetSchema as vt, Material3D as w, TextRangeSelectorSchema as wn, Environment3DFog as wr, ChromaticGlitchConfig as wt, Line3DGeometryOptions as x, TextPathSource as xn, CirclePathOptions as xr, ArcLengthLUTEntry as xt, GpuAdapterDescription as y, TextPathOptions as yn, CameraShakeOptions as yr, AnimatableGlyphProps as yt, SignalRegistry as z, Vec2 as zn, Path3DPoint as zr, GlyphAnchorPoint as zt };
4549
- //# sourceMappingURL=index-C2yaponf.d.mts.map
4568
+ //# sourceMappingURL=index-CRaydvLi.d.mts.map