framefields 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/README.md +11 -2
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
  5. package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
  6. package/dist/{audio-DMUr01vS.mjs → audio-CS104aUj.mjs} +3 -3
  7. package/dist/{audio-DMUr01vS.mjs.map → audio-CS104aUj.mjs.map} +1 -1
  8. package/dist/{dist-CT___nEU.mjs → dist-BOdxAhOT.mjs} +7 -5
  9. package/dist/dist-BOdxAhOT.mjs.map +1 -0
  10. package/dist/{dist-cjxDXQdx.mjs → dist-jU289ehm.mjs} +209 -31
  11. package/dist/{dist-cjxDXQdx.mjs.map → dist-jU289ehm.mjs.map} +1 -1
  12. package/dist/effects/index.d.mts +5 -5
  13. package/dist/effects/index.mjs +36 -36
  14. package/dist/{effects-C06-AOge.mjs → effects-BzOlVD-w.mjs} +532 -4
  15. package/dist/effects-BzOlVD-w.mjs.map +1 -0
  16. package/dist/fonts/index.d.mts +1 -1
  17. package/dist/fonts/index.mjs +2 -2
  18. package/dist/{fonts-C0UuLQvr.mjs → fonts-BhlV_3Qt.mjs} +2 -2
  19. package/dist/{fonts-C0UuLQvr.mjs.map → fonts-BhlV_3Qt.mjs.map} +1 -1
  20. package/dist/{gpu-Du7GpVFW.mjs → gpu-BA1Wz_mS.mjs} +2 -2
  21. package/dist/{gpu-Du7GpVFW.mjs.map → gpu-BA1Wz_mS.mjs.map} +1 -1
  22. package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
  23. package/dist/index-AdrZIWT0.d.mts.map +1 -0
  24. package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
  25. package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
  26. package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
  27. package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
  28. package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
  29. package/dist/index-BU51pxZO.d.mts.map +1 -0
  30. package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
  31. package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
  32. package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
  33. package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
  34. package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
  35. package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
  36. package/dist/index.d.mts +1383 -11
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +3122 -83
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/preview/index.d.mts +2 -2
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-M0TsUzC6.mjs → preview-BVyG76gO.mjs} +2 -2
  43. package/dist/{preview-M0TsUzC6.mjs.map → preview-BVyG76gO.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
  46. package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
  47. package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
  48. package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
  49. package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
  50. package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
  51. package/dist/preview-engine/chunk-GCTVRM7J.mjs +1522 -0
  52. package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
  53. package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
  54. package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
  55. package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
  56. package/dist/preview-engine/effects.mjs +1 -1
  57. package/dist/preview-engine/framefields.mjs +26 -26
  58. package/dist/preview-engine/player.mjs +5 -5
  59. package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
  60. package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
  61. package/dist/preview-engine/renderers-3F5AIDEL.mjs +228 -0
  62. package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
  63. package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
  64. package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
  65. package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
  66. package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
  67. package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
  68. package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
  69. package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
  70. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
  71. package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
  72. package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
  73. package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
  74. package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
  75. package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
  76. package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
  77. package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
  78. package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
  79. package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
  80. package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
  81. package/dist/preview-engine/signals.mjs +1 -1
  82. package/dist/{program-DzknMiY0.mjs → program-CCSfHMfh.mjs} +346 -13
  83. package/dist/program-CCSfHMfh.mjs.map +1 -0
  84. package/dist/renderer/index.d.mts +2 -2
  85. package/dist/renderer/index.mjs +2 -2
  86. package/dist/renderer-1Kv7oA86.mjs +5 -0
  87. package/dist/{renderer-1vhaKMeg.mjs → renderer-1uLtqb74.mjs} +141 -56
  88. package/dist/renderer-1uLtqb74.mjs.map +1 -0
  89. package/dist/{renderer-BerD3T-X.mjs → renderer-4VpA7LfU.mjs} +2 -2
  90. package/dist/{renderer-BerD3T-X.mjs.map → renderer-4VpA7LfU.mjs.map} +1 -1
  91. package/dist/{renderer-BNqwn0gZ.mjs → renderer-8BM6sJUR.mjs} +2 -2
  92. package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-8BM6sJUR.mjs.map} +1 -1
  93. package/dist/renderer-AVHJ33nv.mjs +5 -0
  94. package/dist/{renderer-0gY4IQhM.mjs → renderer-AtLlZMQ9.mjs} +2 -2
  95. package/dist/{renderer-0gY4IQhM.mjs.map → renderer-AtLlZMQ9.mjs.map} +1 -1
  96. package/dist/renderer-B8dJGf8R.mjs +6 -0
  97. package/dist/{renderer-57ATc_mQ.mjs → renderer-B93zd3sx.mjs} +2 -2
  98. package/dist/{renderer-57ATc_mQ.mjs.map → renderer-B93zd3sx.mjs.map} +1 -1
  99. package/dist/renderer-BARst3ZD.mjs +3 -0
  100. package/dist/{renderer-CJB9nU1x.mjs → renderer-BD7Lmb8h.mjs} +3 -3
  101. package/dist/{renderer-CJB9nU1x.mjs.map → renderer-BD7Lmb8h.mjs.map} +1 -1
  102. package/dist/renderer-BEA6nknY.mjs +5 -0
  103. package/dist/renderer-BFRI5alp.mjs +222 -0
  104. package/dist/renderer-BFRI5alp.mjs.map +1 -0
  105. package/dist/{renderer-BiwIh_w4.mjs → renderer-BG5sbTXt.mjs} +3 -3
  106. package/dist/{renderer-BiwIh_w4.mjs.map → renderer-BG5sbTXt.mjs.map} +1 -1
  107. package/dist/{renderer-DtgMsjyL.mjs → renderer-BI4OMlEx.mjs} +2 -2
  108. package/dist/{renderer-DtgMsjyL.mjs.map → renderer-BI4OMlEx.mjs.map} +1 -1
  109. package/dist/renderer-BOfi06L2.mjs +5 -0
  110. package/dist/renderer-BOhvtAGL.mjs +5 -0
  111. package/dist/renderer-BQT3GI9g.mjs +5 -0
  112. package/dist/{renderer-DJfFc-XW.mjs → renderer-BRwp1kV-.mjs} +3 -3
  113. package/dist/{renderer-DJfFc-XW.mjs.map → renderer-BRwp1kV-.mjs.map} +1 -1
  114. package/dist/{renderer-u8ynJtAC.mjs → renderer-BVUTOGHs.mjs} +2 -2
  115. package/dist/{renderer-u8ynJtAC.mjs.map → renderer-BVUTOGHs.mjs.map} +1 -1
  116. package/dist/renderer-BXmStgeT.mjs +5 -0
  117. package/dist/renderer-Bajxo7Nt.mjs +5 -0
  118. package/dist/{renderer-BHskWZNG.mjs → renderer-Bel1UHA5.mjs} +2 -2
  119. package/dist/{renderer-AF884a7T.mjs → renderer-BetA_iVd.mjs} +3 -3
  120. package/dist/{renderer-AF884a7T.mjs.map → renderer-BetA_iVd.mjs.map} +1 -1
  121. package/dist/{renderer-DpW_LxLO.mjs → renderer-BmDpyiII.mjs} +3 -3
  122. package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BmDpyiII.mjs.map} +1 -1
  123. package/dist/{renderer-BteUC_7n.mjs → renderer-BonWt8jF.mjs} +3 -3
  124. package/dist/{renderer-BteUC_7n.mjs.map → renderer-BonWt8jF.mjs.map} +1 -1
  125. package/dist/{renderer-BC8XOVl5.mjs → renderer-BpEsZG3t.mjs} +3 -3
  126. package/dist/{renderer-BC8XOVl5.mjs.map → renderer-BpEsZG3t.mjs.map} +1 -1
  127. package/dist/{renderer-aArb4RwJ.mjs → renderer-BvBIHi6N.mjs} +2 -2
  128. package/dist/{renderer-aArb4RwJ.mjs.map → renderer-BvBIHi6N.mjs.map} +1 -1
  129. package/dist/{renderer-Db3JIF1K.mjs → renderer-BvvuGfZk.mjs} +3 -3
  130. package/dist/{renderer-Db3JIF1K.mjs.map → renderer-BvvuGfZk.mjs.map} +1 -1
  131. package/dist/renderer-BzRR0KMm.mjs +5 -0
  132. package/dist/{renderer-DEuIwr-t.mjs → renderer-Bzl0s07U.mjs} +2 -2
  133. package/dist/{renderer-DEuIwr-t.mjs.map → renderer-Bzl0s07U.mjs.map} +1 -1
  134. package/dist/renderer-C39GD6jP.mjs +331 -0
  135. package/dist/renderer-C39GD6jP.mjs.map +1 -0
  136. package/dist/renderer-C3Gjy2iE.mjs +5 -0
  137. package/dist/{renderer-Br6KyRO_.mjs → renderer-C3lPwajT.mjs} +3 -3
  138. package/dist/{renderer-Br6KyRO_.mjs.map → renderer-C3lPwajT.mjs.map} +1 -1
  139. package/dist/renderer-C5hQgkz-.mjs +5 -0
  140. package/dist/{renderer-CebB0v1y.mjs → renderer-C6cF5seJ.mjs} +2 -2
  141. package/dist/{renderer-CebB0v1y.mjs.map → renderer-C6cF5seJ.mjs.map} +1 -1
  142. package/dist/renderer-C8GZ0pCV.mjs +191 -0
  143. package/dist/renderer-C8GZ0pCV.mjs.map +1 -0
  144. package/dist/{renderer-CuVPo-wP.mjs → renderer-CFe9pZFN.mjs} +2 -2
  145. package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CFe9pZFN.mjs.map} +1 -1
  146. package/dist/renderer-CLF-MiOA.mjs +5 -0
  147. package/dist/renderer-CLa43fCd.mjs +5 -0
  148. package/dist/{renderer-Bvx56GR6.mjs → renderer-CLdwOhST.mjs} +2 -2
  149. package/dist/{renderer-Bvx56GR6.mjs.map → renderer-CLdwOhST.mjs.map} +1 -1
  150. package/dist/renderer-CMK1d6w_.mjs +5 -0
  151. package/dist/{renderer-CursFKUf.mjs → renderer-CMdtUn5o.mjs} +2 -2
  152. package/dist/{renderer-CursFKUf.mjs.map → renderer-CMdtUn5o.mjs.map} +1 -1
  153. package/dist/{renderer-DXqIslFk.mjs → renderer-CNYfB5cC.mjs} +2 -2
  154. package/dist/{renderer-DXqIslFk.mjs.map → renderer-CNYfB5cC.mjs.map} +1 -1
  155. package/dist/renderer-CPEQOe3u.mjs +5 -0
  156. package/dist/{renderer-BbdZ0YHR.mjs → renderer-CWx3Kg79.mjs} +3 -3
  157. package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-CWx3Kg79.mjs.map} +1 -1
  158. package/dist/{renderer-CWBHVCvA.mjs → renderer-CdOy3EBJ.mjs} +2 -2
  159. package/dist/{renderer-CWBHVCvA.mjs.map → renderer-CdOy3EBJ.mjs.map} +1 -1
  160. package/dist/{renderer-DupsdRIw.mjs → renderer-Celrh689.mjs} +3 -3
  161. package/dist/{renderer-DupsdRIw.mjs.map → renderer-Celrh689.mjs.map} +1 -1
  162. package/dist/renderer-CemfjOM9.mjs +5 -0
  163. package/dist/{renderer-jYxN4mHn.mjs → renderer-ChloaI6P.mjs} +3 -3
  164. package/dist/{renderer-jYxN4mHn.mjs.map → renderer-ChloaI6P.mjs.map} +1 -1
  165. package/dist/{renderer-DqdhsSwS.mjs → renderer-CiMpdh0s.mjs} +2 -2
  166. package/dist/{renderer-DqdhsSwS.mjs.map → renderer-CiMpdh0s.mjs.map} +1 -1
  167. package/dist/renderer-CkcrScs9.mjs +5 -0
  168. package/dist/{renderer-CMT4QcpV.mjs → renderer-Cn6VlWHZ.mjs} +3 -3
  169. package/dist/{renderer-CMT4QcpV.mjs.map → renderer-Cn6VlWHZ.mjs.map} +1 -1
  170. package/dist/renderer-CqewgazK.mjs +224 -0
  171. package/dist/renderer-CqewgazK.mjs.map +1 -0
  172. package/dist/{renderer-C6md3msE.mjs → renderer-Cu5k5D9N.mjs} +2 -2
  173. package/dist/{renderer-C6md3msE.mjs.map → renderer-Cu5k5D9N.mjs.map} +1 -1
  174. package/dist/{renderer-id8TbKBY.mjs → renderer-CuphUktB.mjs} +2 -2
  175. package/dist/{renderer-id8TbKBY.mjs.map → renderer-CuphUktB.mjs.map} +1 -1
  176. package/dist/renderer-CwrLihY6.mjs +5 -0
  177. package/dist/{renderer-BzDjy1_x.mjs → renderer-D1Jt-c3F.mjs} +2 -2
  178. package/dist/{renderer-BzDjy1_x.mjs.map → renderer-D1Jt-c3F.mjs.map} +1 -1
  179. package/dist/{renderer-Beg7FLt2.mjs → renderer-D1wd0FhZ.mjs} +75 -27
  180. package/dist/renderer-D1wd0FhZ.mjs.map +1 -0
  181. package/dist/{renderer-jqByPgkD.mjs → renderer-D26S5hUh.mjs} +2 -2
  182. package/dist/{renderer-jqByPgkD.mjs.map → renderer-D26S5hUh.mjs.map} +1 -1
  183. package/dist/renderer-D4S6i2MC.mjs +5 -0
  184. package/dist/{renderer-BmGPTWwV.mjs → renderer-D7ss6fLB.mjs} +3 -3
  185. package/dist/{renderer-BmGPTWwV.mjs.map → renderer-D7ss6fLB.mjs.map} +1 -1
  186. package/dist/renderer-DB8F0XoP.mjs +5 -0
  187. package/dist/{renderer-PKQNH21k.mjs → renderer-DCGLXnYW.mjs} +2 -2
  188. package/dist/{renderer-CrABA3lB.mjs → renderer-DCYabwlC.mjs} +2 -2
  189. package/dist/{renderer-CrABA3lB.mjs.map → renderer-DCYabwlC.mjs.map} +1 -1
  190. package/dist/renderer-DGpVLJOn.mjs +5 -0
  191. package/dist/renderer-DGxibeSa.mjs +5 -0
  192. package/dist/renderer-DJQm3bAW.mjs +5 -0
  193. package/dist/{renderer-DD8napek.mjs → renderer-DMZ5aLU1.mjs} +2 -2
  194. package/dist/{renderer-DD8napek.mjs.map → renderer-DMZ5aLU1.mjs.map} +1 -1
  195. package/dist/renderer-DMftVSfX.mjs +5 -0
  196. package/dist/renderer-DNpovOd8.mjs +5 -0
  197. package/dist/renderer-DO5r7ZV-.mjs +658 -0
  198. package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
  199. package/dist/{renderer-DZXbgVMK.mjs → renderer-DOWekunR.mjs} +3 -3
  200. package/dist/{renderer-DZXbgVMK.mjs.map → renderer-DOWekunR.mjs.map} +1 -1
  201. package/dist/{renderer-Cce2fgpX.mjs → renderer-DPWeKe_x.mjs} +3 -3
  202. package/dist/{renderer-Cce2fgpX.mjs.map → renderer-DPWeKe_x.mjs.map} +1 -1
  203. package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
  204. package/dist/renderer-DQtk282o.mjs.map +1 -0
  205. package/dist/renderer-DSHlvKQk.mjs +5 -0
  206. package/dist/renderer-DUBb7D17.mjs +219 -0
  207. package/dist/renderer-DUBb7D17.mjs.map +1 -0
  208. package/dist/renderer-DYtrdR2p.mjs +5 -0
  209. package/dist/{renderer-Bn2eQE-t.mjs → renderer-DaCsT-XU.mjs} +3 -3
  210. package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-DaCsT-XU.mjs.map} +1 -1
  211. package/dist/{renderer-D1Cm21eq.mjs → renderer-DcAfp1Er.mjs} +2 -2
  212. package/dist/{renderer-D1Cm21eq.mjs.map → renderer-DcAfp1Er.mjs.map} +1 -1
  213. package/dist/{renderer-C8uKdelk.mjs → renderer-DdlaBsk_.mjs} +2 -2
  214. package/dist/{renderer-C8uKdelk.mjs.map → renderer-DdlaBsk_.mjs.map} +1 -1
  215. package/dist/renderer-DerDxKK3.mjs +220 -0
  216. package/dist/renderer-DerDxKK3.mjs.map +1 -0
  217. package/dist/{renderer-CeyAgJnw.mjs → renderer-DfkWYUTX.mjs} +2 -2
  218. package/dist/{renderer-DHGTzype.mjs → renderer-Dh-OF6aH.mjs} +2 -2
  219. package/dist/{renderer-DHGTzype.mjs.map → renderer-Dh-OF6aH.mjs.map} +1 -1
  220. package/dist/renderer-Dk-THZHp.mjs +222 -0
  221. package/dist/renderer-Dk-THZHp.mjs.map +1 -0
  222. package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
  223. package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
  224. package/dist/renderer-DpWRj6zF.mjs +203 -0
  225. package/dist/renderer-DpWRj6zF.mjs.map +1 -0
  226. package/dist/renderer-DpwlN4LH.mjs +233 -0
  227. package/dist/renderer-DpwlN4LH.mjs.map +1 -0
  228. package/dist/{renderer-DvFaC_-7.mjs → renderer-Dq4aO7az.mjs} +2 -2
  229. package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dq4aO7az.mjs.map} +1 -1
  230. package/dist/renderer-DuSImLUz.mjs +5 -0
  231. package/dist/{renderer-BeIUgp1r.mjs → renderer-DukD7S3w.mjs} +2 -2
  232. package/dist/{renderer-BeIUgp1r.mjs.map → renderer-DukD7S3w.mjs.map} +1 -1
  233. package/dist/{renderer-EemDpvv3.mjs → renderer-FXUCKps6.mjs} +3 -3
  234. package/dist/{renderer-EemDpvv3.mjs.map → renderer-FXUCKps6.mjs.map} +1 -1
  235. package/dist/renderer-FbyMYKXe.mjs +5 -0
  236. package/dist/renderer-HMl2V4iM.mjs +541 -0
  237. package/dist/renderer-HMl2V4iM.mjs.map +1 -0
  238. package/dist/renderer-LM_XIKl1.mjs +203 -0
  239. package/dist/renderer-LM_XIKl1.mjs.map +1 -0
  240. package/dist/renderer-NMFv7Auz.mjs +5 -0
  241. package/dist/{renderer-YbaCzPcG.mjs → renderer-O1b-oYJE.mjs} +2 -2
  242. package/dist/renderer-P3vpdUnb.mjs +5 -0
  243. package/dist/renderer-PknbdJyL.mjs +208 -0
  244. package/dist/renderer-PknbdJyL.mjs.map +1 -0
  245. package/dist/renderer-QTOm26Lg.mjs +5 -0
  246. package/dist/renderer-YJ3Yukou.mjs +215 -0
  247. package/dist/renderer-YJ3Yukou.mjs.map +1 -0
  248. package/dist/{renderer-p_C_T9Kn.mjs → renderer-YdLL2o6d.mjs} +2 -2
  249. package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-YdLL2o6d.mjs.map} +1 -1
  250. package/dist/renderer-ahzhMa5q.mjs +5 -0
  251. package/dist/{renderer-D-vRKssW.mjs → renderer-c-bwxMde.mjs} +2 -2
  252. package/dist/{renderer-D-vRKssW.mjs.map → renderer-c-bwxMde.mjs.map} +1 -1
  253. package/dist/renderer-dThfTNge.mjs +5 -0
  254. package/dist/renderer-dUkOBfGB.mjs +308 -0
  255. package/dist/renderer-dUkOBfGB.mjs.map +1 -0
  256. package/dist/renderer-dgAS_k7B.mjs +5 -0
  257. package/dist/renderer-g-ui08Lh.mjs +204 -0
  258. package/dist/renderer-g-ui08Lh.mjs.map +1 -0
  259. package/dist/renderer-kSs8VtY7.mjs +223 -0
  260. package/dist/renderer-kSs8VtY7.mjs.map +1 -0
  261. package/dist/{renderer-KnCcN_Nz.mjs → renderer-pPiQwFYh.mjs} +2 -2
  262. package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-pPiQwFYh.mjs.map} +1 -1
  263. package/dist/{renderer-D8thCpS7.mjs → renderer-wL-ly4fT.mjs} +3 -3
  264. package/dist/{renderer-D8thCpS7.mjs.map → renderer-wL-ly4fT.mjs.map} +1 -1
  265. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-CVHwMTiz.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-CVHwMTiz.mjs.map} +1 -1
  267. package/dist/signals/index.d.mts +5 -5
  268. package/dist/signals/index.mjs +4 -4
  269. package/package.json +58 -55
  270. package/dist/dist-CT___nEU.mjs.map +0 -1
  271. package/dist/effects-C06-AOge.mjs.map +0 -1
  272. package/dist/index-B-oUlLoO.d.mts.map +0 -1
  273. package/dist/index-CwbszPDG.d.mts.map +0 -1
  274. package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
  275. package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
  276. package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
  277. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
  278. package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
  279. package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
  280. package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
  281. package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
  282. package/dist/program-DzknMiY0.mjs.map +0 -1
  283. package/dist/renderer--IDyGdqT.mjs +0 -5
  284. package/dist/renderer-17K4tjid.mjs +0 -5
  285. package/dist/renderer-1vhaKMeg.mjs.map +0 -1
  286. package/dist/renderer-Ab9Ttn_m.mjs +0 -5
  287. package/dist/renderer-B-roDBBo.mjs +0 -5
  288. package/dist/renderer-B03uwoUX.mjs +0 -5
  289. package/dist/renderer-B3BI_7YJ.mjs +0 -5
  290. package/dist/renderer-BGD4lQ74.mjs +0 -5
  291. package/dist/renderer-BHXhYfeC.mjs +0 -5
  292. package/dist/renderer-BRsTIMFa.mjs +0 -5
  293. package/dist/renderer-Beg7FLt2.mjs.map +0 -1
  294. package/dist/renderer-BjMTtYZw.mjs +0 -5
  295. package/dist/renderer-BoCh3Yts.mjs +0 -5
  296. package/dist/renderer-BqPbR8c4.mjs +0 -5
  297. package/dist/renderer-Bxa4SDm9.mjs +0 -3
  298. package/dist/renderer-C4Da2I1-.mjs +0 -5
  299. package/dist/renderer-C93X6dgl.mjs +0 -5
  300. package/dist/renderer-CE7fwGgw.mjs.map +0 -1
  301. package/dist/renderer-CMAwFfGx.mjs +0 -6
  302. package/dist/renderer-CRXeSuX2.mjs +0 -5
  303. package/dist/renderer-CSp6WYBN.mjs +0 -5
  304. package/dist/renderer-CUXX7HTL.mjs +0 -5
  305. package/dist/renderer-CUgThpka.mjs +0 -5
  306. package/dist/renderer-CeVtufiT.mjs +0 -5
  307. package/dist/renderer-CespkZUk.mjs +0 -5
  308. package/dist/renderer-D1l47xhL.mjs +0 -5
  309. package/dist/renderer-DDuG18J8.mjs +0 -5
  310. package/dist/renderer-DFhrFSMn.mjs +0 -5
  311. package/dist/renderer-DO48vQ7Y.mjs +0 -5
  312. package/dist/renderer-DTC39B_n.mjs +0 -5
  313. package/dist/renderer-DbyU3hNF.mjs +0 -5
  314. package/dist/renderer-DftVpmfu.mjs +0 -5
  315. package/dist/renderer-Dj5jm63K.mjs +0 -5
  316. package/dist/renderer-Dju57ZaF.mjs +0 -5
  317. package/dist/renderer-Dn8TQCw7.mjs +0 -5
  318. package/dist/renderer-ETF46K0D.mjs +0 -5
  319. package/dist/renderer-azYzWGC3.mjs +0 -5
  320. package/dist/renderer-dxNoRW59.mjs +0 -5
  321. package/dist/renderer-fdfelx_I.mjs +0 -5
  322. package/dist/renderer-snwEKwMw.mjs +0 -5
@@ -1,7 +1,7 @@
1
1
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
2
  import { i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
3
- import { y as colorMatrixWgsl } from "./dist-cjxDXQdx.mjs";
4
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass } from "./gpu-Du7GpVFW.mjs";
3
+ import { b as colorMatrixWgsl } from "./dist-jU289ehm.mjs";
4
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass } from "./gpu-BA1Wz_mS.mjs";
5
5
  import { z } from "zod";
6
6
 
7
7
  //#region ../../nodes/node-levels/dist/renderers-DdSgwTj2.mjs
@@ -173,4 +173,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer })
173
173
 
174
174
  //#endregion
175
175
  export { renderers_default as t };
176
- //# sourceMappingURL=renderer-BiwIh_w4.mjs.map
176
+ //# sourceMappingURL=renderer-BG5sbTXt.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BiwIh_w4.mjs","names":[],"sources":["../../../nodes/node-levels/dist/renderers-DdSgwTj2.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { colorMatrixWgsl } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst LevelChannelSchema = z.object({\n\tinBlack: z.number().min(0).max(1).default(0),\n\tinWhite: z.number().min(0).max(1).default(1),\n\toutBlack: z.number().min(0).max(1).default(0),\n\toutWhite: z.number().min(0).max(1).default(1)\n}).strict().superRefine((val, ctx) => {\n\tif (val.inBlack >= val.inWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"inWhite\"],\n\t\tmessage: \"inWhite must be greater than inBlack\"\n\t});\n\tif (val.outBlack >= val.outWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"outWhite\"],\n\t\tmessage: \"outWhite must be greater than outBlack\"\n\t});\n});\nconst LevelsNodeConfigSchema = z.object({\n\tmaster: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tred: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tgreen: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tblue: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t})\n}).strict();\nconst LevelsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LevelsOperationSchema = LevelsNodeConfigSchema.extend({\n\top: z.literal(\"Levels\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultLevelChannel = {\n\tinBlack: 0,\n\tinWhite: 1,\n\toutBlack: 0,\n\toutWhite: 1\n};\nconst defaultLevelsConfig = {\n\tmaster: { ...defaultLevelChannel },\n\tred: { ...defaultLevelChannel },\n\tgreen: { ...defaultLevelChannel },\n\tblue: { ...defaultLevelChannel }\n};\nconst LEVELS_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorMatrixData = new Float32Array(20);\nfunction getColorMatrixResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst colorMatrixUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tcolorMatrixPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"ColorMatrixPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"color-matrix.wgsl\",\n\t\t\t\t\tcode: colorMatrixWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [colorMatrixUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tcolorMatrixUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getTransform(ch) {\n\tconst inRange = Math.max(ch.inWhite - ch.inBlack, 1e-5);\n\tconst scale = (ch.outWhite - ch.outBlack) / inRange;\n\treturn {\n\t\tscale,\n\t\tbias: ch.outBlack - ch.inBlack * scale\n\t};\n}\nconst LevelsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Levels\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst m = getTransform(op.master ?? defaultLevelChannel);\n\tconst r = getTransform(op.red ?? defaultLevelChannel);\n\tconst g = getTransform(op.green ?? defaultLevelChannel);\n\tconst b = getTransform(op.blue ?? defaultLevelChannel);\n\tconst matrix = [\n\t\tr.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\tr.bias * m.scale + m.bias,\n\t\t0,\n\t\tg.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\tg.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\tb.scale * m.scale,\n\t\t0,\n\t\tb.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t0\n\t];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorMatrixPipeline: pipeline, colorMatrixUniformLayout: uLayout, singleTextureLayout: tLayout } = getColorMatrixResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tcolorMatrixData[0] = matrix[0];\n\tcolorMatrixData[1] = matrix[1];\n\tcolorMatrixData[2] = matrix[2];\n\tcolorMatrixData[3] = matrix[3];\n\tcolorMatrixData[4] = matrix[5];\n\tcolorMatrixData[5] = matrix[6];\n\tcolorMatrixData[6] = matrix[7];\n\tcolorMatrixData[7] = matrix[8];\n\tcolorMatrixData[8] = matrix[10];\n\tcolorMatrixData[9] = matrix[11];\n\tcolorMatrixData[10] = matrix[12];\n\tcolorMatrixData[11] = matrix[13];\n\tcolorMatrixData[12] = matrix[15];\n\tcolorMatrixData[13] = matrix[16];\n\tcolorMatrixData[14] = matrix[17];\n\tcolorMatrixData[15] = matrix[18];\n\tcolorMatrixData[16] = matrix[4];\n\tcolorMatrixData[17] = matrix[9];\n\tcolorMatrixData[18] = matrix[14];\n\tcolorMatrixData[19] = matrix[19];\n\tconst buffer = ctx.renderer.getTemporaryBuffer(colorMatrixData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler)]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer });\n\n//#endregion\nexport { LevelsOperationSchema as a, defaultLevelsConfig as c, LevelsNodeConfigSchema as i, LEVELS_OUTPUT_TYPE_MAP as n, LevelsResultSchema as o, LevelChannelSchema as r, defaultLevelChannel as s, renderers_default as t };\n//# sourceMappingURL=renderers-DdSgwTj2.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BG5sbTXt.mjs","names":[],"sources":["../../../nodes/node-levels/dist/renderers-DdSgwTj2.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { colorMatrixWgsl } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst LevelChannelSchema = z.object({\n\tinBlack: z.number().min(0).max(1).default(0),\n\tinWhite: z.number().min(0).max(1).default(1),\n\toutBlack: z.number().min(0).max(1).default(0),\n\toutWhite: z.number().min(0).max(1).default(1)\n}).strict().superRefine((val, ctx) => {\n\tif (val.inBlack >= val.inWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"inWhite\"],\n\t\tmessage: \"inWhite must be greater than inBlack\"\n\t});\n\tif (val.outBlack >= val.outWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"outWhite\"],\n\t\tmessage: \"outWhite must be greater than outBlack\"\n\t});\n});\nconst LevelsNodeConfigSchema = z.object({\n\tmaster: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tred: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tgreen: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tblue: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t})\n}).strict();\nconst LevelsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LevelsOperationSchema = LevelsNodeConfigSchema.extend({\n\top: z.literal(\"Levels\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultLevelChannel = {\n\tinBlack: 0,\n\tinWhite: 1,\n\toutBlack: 0,\n\toutWhite: 1\n};\nconst defaultLevelsConfig = {\n\tmaster: { ...defaultLevelChannel },\n\tred: { ...defaultLevelChannel },\n\tgreen: { ...defaultLevelChannel },\n\tblue: { ...defaultLevelChannel }\n};\nconst LEVELS_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorMatrixData = new Float32Array(20);\nfunction getColorMatrixResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst colorMatrixUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tcolorMatrixPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"ColorMatrixPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"color-matrix.wgsl\",\n\t\t\t\t\tcode: colorMatrixWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [colorMatrixUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tcolorMatrixUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getTransform(ch) {\n\tconst inRange = Math.max(ch.inWhite - ch.inBlack, 1e-5);\n\tconst scale = (ch.outWhite - ch.outBlack) / inRange;\n\treturn {\n\t\tscale,\n\t\tbias: ch.outBlack - ch.inBlack * scale\n\t};\n}\nconst LevelsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Levels\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst m = getTransform(op.master ?? defaultLevelChannel);\n\tconst r = getTransform(op.red ?? defaultLevelChannel);\n\tconst g = getTransform(op.green ?? defaultLevelChannel);\n\tconst b = getTransform(op.blue ?? defaultLevelChannel);\n\tconst matrix = [\n\t\tr.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\tr.bias * m.scale + m.bias,\n\t\t0,\n\t\tg.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\tg.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\tb.scale * m.scale,\n\t\t0,\n\t\tb.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t0\n\t];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorMatrixPipeline: pipeline, colorMatrixUniformLayout: uLayout, singleTextureLayout: tLayout } = getColorMatrixResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tcolorMatrixData[0] = matrix[0];\n\tcolorMatrixData[1] = matrix[1];\n\tcolorMatrixData[2] = matrix[2];\n\tcolorMatrixData[3] = matrix[3];\n\tcolorMatrixData[4] = matrix[5];\n\tcolorMatrixData[5] = matrix[6];\n\tcolorMatrixData[6] = matrix[7];\n\tcolorMatrixData[7] = matrix[8];\n\tcolorMatrixData[8] = matrix[10];\n\tcolorMatrixData[9] = matrix[11];\n\tcolorMatrixData[10] = matrix[12];\n\tcolorMatrixData[11] = matrix[13];\n\tcolorMatrixData[12] = matrix[15];\n\tcolorMatrixData[13] = matrix[16];\n\tcolorMatrixData[14] = matrix[17];\n\tcolorMatrixData[15] = matrix[18];\n\tcolorMatrixData[16] = matrix[4];\n\tcolorMatrixData[17] = matrix[9];\n\tcolorMatrixData[18] = matrix[14];\n\tcolorMatrixData[19] = matrix[19];\n\tconst buffer = ctx.renderer.getTemporaryBuffer(colorMatrixData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler)]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer });\n\n//#endregion\nexport { LevelsOperationSchema as a, defaultLevelsConfig as c, LevelsNodeConfigSchema as i, LEVELS_OUTPUT_TYPE_MAP as n, LevelsResultSchema as o, LevelChannelSchema as r, defaultLevelChannel as s, renderers_default as t };\n//# sourceMappingURL=renderers-DdSgwTj2.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Jt as resolveNumber, Xt as resolveString } from "./dist-fjKpBYkc.mjs";
2
2
  import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-cjxDXQdx.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-jU289ehm.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs
6
6
  const PARAM_ORDER = ["fadeInDuration", "fadeOutDuration"];
@@ -173,4 +173,4 @@ var renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });
173
173
 
174
174
  //#endregion
175
175
  export { renderers_default as t };
176
- //# sourceMappingURL=renderer-DtgMsjyL.mjs.map
176
+ //# sourceMappingURL=renderer-BI4OMlEx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DtgMsjyL.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
1
+ {"version":3,"file":"renderer-BI4OMlEx.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { t as renderers_default } from "./renderer-CNYfB5cC.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { t as renderers_default } from "./renderer-D26S5hUh.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { t as renderers_default } from "./renderer-Dq4aO7az.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import "./dist-cjxDXQdx.mjs";
4
- import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Du7GpVFW.mjs";
3
+ import "./dist-jU289ehm.mjs";
4
+ import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BA1Wz_mS.mjs";
5
5
 
6
6
  //#region ../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs
7
7
  const COLOR_SPACE_MAP = {
@@ -203,4 +203,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURe
203
203
 
204
204
  //#endregion
205
205
  export { ChannelSplitterWebGPURenderer, renderers_default as default };
206
- //# sourceMappingURL=renderer-DJfFc-XW.mjs.map
206
+ //# sourceMappingURL=renderer-BRwp1kV-.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DJfFc-XW.mjs","names":[],"sources":["../../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_SPLITTER = `\nstruct SplitterUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\tchannelIndex : f32, // 0=Ch1, 1=Ch2, 2=Ch3, 3=Ch4\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SplitterUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn srgb2lin(v: f32) -> f32 {\n\tlet cv = clamp(v, 0.0, 1.0);\n\treturn select(cv / 12.92, pow((cv + 0.055) / 1.055, 2.4), cv > 0.04045);\n}\n\nfn lab_f(t: f32) -> f32 {\n\treturn select(pow(t, 1.0 / 3.0), (7.787 * t) + (16.0 / 116.0), t <= 0.008856);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(srcTex, srcSamp, in.uv);\n\tlet cs = u32(u.colorSpace + 0.5);\n\tlet idx = u32(u.channelIndex + 0.5);\n\n\tvar val: f32 = 0.0;\n\n\tif (cs == 0u) { // RGBA\n\t\tif (idx == 0u) { val = c.r; }\n\t\telse if (idx == 1u) { val = c.g; }\n\t\telse if (idx == 2u) { val = c.b; }\n\t\telse { val = c.a; }\n\t} else if (cs == 1u) { // HSLA\n\t\tlet maxV = max(c.r, max(c.g, c.b));\n\t\tlet minV = min(c.r, min(c.g, c.b));\n\t\tlet d = maxV - minV;\n\t\tlet L = (maxV + minV) * 0.5;\n\t\tlet S = select(select(d / (2.0 - maxV - minV), d / (maxV + minV), L < 0.5), 0.0, d < 0.00001);\n\t\tvar H: f32 = 0.0;\n\t\tif (d > 0.00001) {\n\t\t\tif (maxV == c.r) {\n\t\t\t\tH = ((c.g - c.b) / d + select(0.0, 6.0, c.g < c.b)) / 6.0;\n\t\t\t} else if (maxV == c.g) {\n\t\t\t\tH = ((c.b - c.r) / d + 2.0) / 6.0;\n\t\t\t} else {\n\t\t\t\tH = ((c.r - c.g) / d + 4.0) / 6.0;\n\t\t\t}\n\t\t}\n\t\tif (idx == 0u) { val = H; }\n\t\telse if (idx == 1u) { val = S; }\n\t\telse if (idx == 2u) { val = L; }\n\t\telse { val = c.a; }\n\t} else if (cs == 2u) { // CMYK\n\t\tlet K = 1.0 - max(c.r, max(c.g, c.b));\n\t\tif (K >= 1.0 - 0.00001) {\n\t\t\tval = select(0.0, 1.0, idx == 3u);\n\t\t} else {\n\t\t\tlet denom = 1.0 - K;\n\t\t\tif (idx == 0u) { val = (1.0 - c.r - K) / denom; }\n\t\t\telse if (idx == 1u) { val = (1.0 - c.g - K) / denom; }\n\t\t\telse if (idx == 2u) { val = (1.0 - c.b - K) / denom; }\n\t\t\telse { val = K; }\n\t\t}\n\t} else { // LAB\n\t\tlet lr = srgb2lin(c.r);\n\t\tlet lg = srgb2lin(c.g);\n\t\tlet lb = srgb2lin(c.b);\n\n\t\tlet X = lr * 0.4124564 + lg * 0.3575761 + lb * 0.1804375;\n\t\tlet Y = lr * 0.2126729 + lg * 0.7151522 + lb * 0.0721750;\n\t\tlet Z = lr * 0.0193339 + lg * 0.1191920 + lb * 0.9503041;\n\n\t\tlet x = X / 0.95047;\n\t\tlet y = Y / 1.00000;\n\t\tlet z = Z / 1.08883;\n\n\t\tlet fx = lab_f(x);\n\t\tlet fy = lab_f(y);\n\t\tlet fz = lab_f(z);\n\n\t\tlet L_star = 116.0 * fy - 16.0;\n\t\tlet a_star = 500.0 * (fx - fy);\n\t\tlet b_star = 200.0 * (fy - fz);\n\n\t\tlet L_norm = clamp(L_star / 100.0, 0.0, 1.0);\n\t\tlet a_norm = clamp((a_star + 128.0) / 255.0, 0.0, 1.0);\n\t\tlet b_norm = clamp((b_star + 128.0) / 255.0, 0.0, 1.0);\n\n\t\tif (idx == 0u) { val = L_norm; }\n\t\telse if (idx == 1u) { val = a_norm; }\n\t\telse if (idx == 2u) { val = b_norm; }\n\t\telse { val = c.a; }\n\t}\n\n\tval = clamp(val, 0.0, 1.0);\n\treturn vec4<f32>(val, val, val, 1.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `splitter_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelSplitterShader\",\n\t\t\tcode: WGSL_CHANNEL_SPLITTER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelSplitterPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelSplitterWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetTexture, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelSplitter\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst { view: srcView } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\targs.pass.end();\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst channelIndex = op.channelIndex ?? 0;\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = channelIndex;\n\tuniformData[2] = 0;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: srcView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURenderer });\n\n//#endregion\nexport { ChannelSplitterWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CBDMTYgr.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BRwp1kV-.mjs","names":[],"sources":["../../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_SPLITTER = `\nstruct SplitterUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\tchannelIndex : f32, // 0=Ch1, 1=Ch2, 2=Ch3, 3=Ch4\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SplitterUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn srgb2lin(v: f32) -> f32 {\n\tlet cv = clamp(v, 0.0, 1.0);\n\treturn select(cv / 12.92, pow((cv + 0.055) / 1.055, 2.4), cv > 0.04045);\n}\n\nfn lab_f(t: f32) -> f32 {\n\treturn select(pow(t, 1.0 / 3.0), (7.787 * t) + (16.0 / 116.0), t <= 0.008856);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(srcTex, srcSamp, in.uv);\n\tlet cs = u32(u.colorSpace + 0.5);\n\tlet idx = u32(u.channelIndex + 0.5);\n\n\tvar val: f32 = 0.0;\n\n\tif (cs == 0u) { // RGBA\n\t\tif (idx == 0u) { val = c.r; }\n\t\telse if (idx == 1u) { val = c.g; }\n\t\telse if (idx == 2u) { val = c.b; }\n\t\telse { val = c.a; }\n\t} else if (cs == 1u) { // HSLA\n\t\tlet maxV = max(c.r, max(c.g, c.b));\n\t\tlet minV = min(c.r, min(c.g, c.b));\n\t\tlet d = maxV - minV;\n\t\tlet L = (maxV + minV) * 0.5;\n\t\tlet S = select(select(d / (2.0 - maxV - minV), d / (maxV + minV), L < 0.5), 0.0, d < 0.00001);\n\t\tvar H: f32 = 0.0;\n\t\tif (d > 0.00001) {\n\t\t\tif (maxV == c.r) {\n\t\t\t\tH = ((c.g - c.b) / d + select(0.0, 6.0, c.g < c.b)) / 6.0;\n\t\t\t} else if (maxV == c.g) {\n\t\t\t\tH = ((c.b - c.r) / d + 2.0) / 6.0;\n\t\t\t} else {\n\t\t\t\tH = ((c.r - c.g) / d + 4.0) / 6.0;\n\t\t\t}\n\t\t}\n\t\tif (idx == 0u) { val = H; }\n\t\telse if (idx == 1u) { val = S; }\n\t\telse if (idx == 2u) { val = L; }\n\t\telse { val = c.a; }\n\t} else if (cs == 2u) { // CMYK\n\t\tlet K = 1.0 - max(c.r, max(c.g, c.b));\n\t\tif (K >= 1.0 - 0.00001) {\n\t\t\tval = select(0.0, 1.0, idx == 3u);\n\t\t} else {\n\t\t\tlet denom = 1.0 - K;\n\t\t\tif (idx == 0u) { val = (1.0 - c.r - K) / denom; }\n\t\t\telse if (idx == 1u) { val = (1.0 - c.g - K) / denom; }\n\t\t\telse if (idx == 2u) { val = (1.0 - c.b - K) / denom; }\n\t\t\telse { val = K; }\n\t\t}\n\t} else { // LAB\n\t\tlet lr = srgb2lin(c.r);\n\t\tlet lg = srgb2lin(c.g);\n\t\tlet lb = srgb2lin(c.b);\n\n\t\tlet X = lr * 0.4124564 + lg * 0.3575761 + lb * 0.1804375;\n\t\tlet Y = lr * 0.2126729 + lg * 0.7151522 + lb * 0.0721750;\n\t\tlet Z = lr * 0.0193339 + lg * 0.1191920 + lb * 0.9503041;\n\n\t\tlet x = X / 0.95047;\n\t\tlet y = Y / 1.00000;\n\t\tlet z = Z / 1.08883;\n\n\t\tlet fx = lab_f(x);\n\t\tlet fy = lab_f(y);\n\t\tlet fz = lab_f(z);\n\n\t\tlet L_star = 116.0 * fy - 16.0;\n\t\tlet a_star = 500.0 * (fx - fy);\n\t\tlet b_star = 200.0 * (fy - fz);\n\n\t\tlet L_norm = clamp(L_star / 100.0, 0.0, 1.0);\n\t\tlet a_norm = clamp((a_star + 128.0) / 255.0, 0.0, 1.0);\n\t\tlet b_norm = clamp((b_star + 128.0) / 255.0, 0.0, 1.0);\n\n\t\tif (idx == 0u) { val = L_norm; }\n\t\telse if (idx == 1u) { val = a_norm; }\n\t\telse if (idx == 2u) { val = b_norm; }\n\t\telse { val = c.a; }\n\t}\n\n\tval = clamp(val, 0.0, 1.0);\n\treturn vec4<f32>(val, val, val, 1.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `splitter_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelSplitterShader\",\n\t\t\tcode: WGSL_CHANNEL_SPLITTER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelSplitterPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelSplitterWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetTexture, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelSplitter\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst { view: srcView } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\targs.pass.end();\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst channelIndex = op.channelIndex ?? 0;\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = channelIndex;\n\tuniformData[2] = 0;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: srcView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURenderer });\n\n//#endregion\nexport { ChannelSplitterWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CBDMTYgr.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Jt as resolveNumber } from "./dist-fjKpBYkc.mjs";
2
2
  import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-cjxDXQdx.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-jU289ehm.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-reverb/dist/renderers-DCFjIwTB.mjs
6
6
  const PARAM_ORDER = [
@@ -370,4 +370,4 @@ var renderers_default = defineRenderer({ audioProcessor: reverbAudioProcessor })
370
370
 
371
371
  //#endregion
372
372
  export { renderers_default as t };
373
- //# sourceMappingURL=renderer-u8ynJtAC.mjs.map
373
+ //# sourceMappingURL=renderer-BVUTOGHs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-u8ynJtAC.mjs","names":[],"sources":["../../../nodes/node-audio-reverb/dist/renderers-DCFjIwTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"roomSize\",\n\t\"damping\",\n\t\"wet\",\n\t\"dry\",\n\t\"width\"\n];\nconst REVERB_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n roomSize : f32,\n damping : f32,\n wet : f32,\n dry : f32,\n width : f32,\n hasRoomSizeSig : f32,\n hasDampingSig : f32,\n hasWetSig : f32,\n hasDrySig : f32,\n hasWidthSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> roomSizeSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> dampingSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> wetSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> drySignal : array<f32>;\n@group(0) @binding(8) var<storage, read> widthSignal : array<f32>;\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let fixedgain: f32 = 0.015f;\n\n var bufIndices: array<u32, 24>;\n var filterStores: array<f32, 24>;\n var sizes: array<u32, 24>;\n var startOffsets: array<u32, 24>;\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n sizes[f] = u32(state[metaOffset]);\n startOffsets[f] = u32(state[metaOffset + 1u]);\n bufIndices[f] = u32(state[metaOffset + 2u]);\n var fs = state[metaOffset + 3u];\n if (is_nan_or_inf(fs)) { fs = 0.0f; }\n filterStores[f] = fs;\n }\n\n if (numChannels == 1u) {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var x = inputChannels[index];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n let inputVal = x * fixedgain;\n\n var combSum = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSum = combSum + output;\n }\n\n var revOut = combSum;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOut + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOut;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOut = output;\n }\n\n var outVal = x * effDry + revOut * effWet;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) { outVal = 1.0f; }\n else if (outVal < -1.0f) { outVal = -1.0f; }\n else if (outVal > 0.9f) { outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f); }\n else if (outVal < -0.9f) { outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f); }\n\n outputChannels[index] = outVal;\n }\n } else {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var effWidth = u.width;\n if (u.hasWidthSig > 0.5f) { effWidth = widthSignal[index]; }\n effWidth = clamp(effWidth, 0.0f, 1.0f);\n\n let wet1 = effWet * (effWidth / 2.0f + 0.5f);\n let wet2 = effWet * ((1.0f - effWidth) / 2.0f);\n\n var inputL = inputChannels[index];\n if (is_nan_or_inf(inputL)) { inputL = 0.0f; }\n var inputR = inputChannels[numSamples + index];\n if (is_nan_or_inf(inputR)) { inputR = 0.0f; }\n\n let inputVal = (inputL + inputR) * fixedgain;\n\n // Left channel (Filters 0-11)\n var combSumL = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSumL = combSumL + output;\n }\n var revOutL = combSumL;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutL + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutL;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutL = output;\n }\n\n // Right channel (Filters 12-23)\n var combSumR = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let f = 12u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n var fs = filterStores[f];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[f] = (bufferIndex + 1u) % size;\n filterStores[f] = fs;\n combSumR = combSumR + output;\n }\n var revOutR = combSumR;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 20u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutR + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutR;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutR = output;\n }\n\n var outL = inputL * effDry + revOutL * wet1 + revOutR * wet2;\n var outR = inputR * effDry + revOutR * wet1 + revOutL * wet2;\n if (is_nan_or_inf(outL)) { outL = 0.0f; }\n if (is_nan_or_inf(outR)) { outR = 0.0f; }\n\n if (outL > 1.0f) { outL = 1.0f; } else if (outL < -1.0f) { outL = -1.0f; }\n else if (outL > 0.9f) { outL = 0.9f + 0.1f * tanh((outL - 0.9f) / 0.1f); }\n else if (outL < -0.9f) { outL = -0.9f + 0.1f * tanh((outL + 0.9f) / 0.1f); }\n\n if (outR > 1.0f) { outR = 1.0f; } else if (outR < -1.0f) { outR = -1.0f; }\n else if (outR > 0.9f) { outR = 0.9f + 0.1f * tanh((outR - 0.9f) / 0.1f); }\n else if (outR < -0.9f) { outR = -0.9f + 0.1f * tanh((outR + 0.9f) / 0.1f); }\n\n outputChannels[index] = outL;\n outputChannels[numSamples + index] = outR;\n }\n }\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n state[metaOffset + 2u] = f32(bufIndices[f]);\n state[metaOffset + 3u] = filterStores[f];\n }\n}\n`;\nconst leftCombLengths = [\n\t1116,\n\t1188,\n\t1277,\n\t1356,\n\t1422,\n\t1491,\n\t1557,\n\t1617\n];\nconst leftAllpassLengths = [\n\t556,\n\t441,\n\t341,\n\t225\n];\nconst reverbAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Reverb.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst roomSizeInternal = Math.max(0, Math.min(resolveNumber(op.roomSize, .5), .98));\n\tconst dampingInternal = Math.max(0, Math.min(resolveNumber(op.damping, .5), 1));\n\tconst wetInternal = Math.max(0, Math.min(resolveNumber(op.wet, .3), 1));\n\tconst dryInternal = Math.max(0, Math.min(resolveNumber(op.dry, 1), 1));\n\tconst widthInternal = Math.max(0, Math.min(resolveNumber(op.width, 1), 1));\n\tconst hasRoomSizeSig = isHandleConnected(op, \"roomSizeHandleId\") ? 1 : 0;\n\tconst hasDampingSig = isHandleConnected(op, \"dampingHandleId\") ? 1 : 0;\n\tconst hasWetSig = isHandleConnected(op, \"wetHandleId\") ? 1 : 0;\n\tconst hasDrySig = isHandleConnected(op, \"dryHandleId\") ? 1 : 0;\n\tconst hasWidthSig = isHandleConnected(op, \"widthHandleId\") ? 1 : 0;\n\tconst scale = sampleRate / 44100;\n\tconst nodeId = op.id || \"audio-reverb\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst sizesL = [];\n\tconst sizesR = [];\n\tleftCombLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftCombLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tconst totalMetadataFloats = 96;\n\tlet totalDelaySamples = 0;\n\tconst filterSizes = [...sizesL, ...sizesR];\n\tfor (const size of filterSizes) totalDelaySamples += size;\n\tconst stateFloatCount = totalMetadataFloats + totalDelaySamples;\n\tconst metaData = new Float32Array(totalMetadataFloats);\n\tlet currentOffset = totalMetadataFloats;\n\tfor (let f = 0; f < 24; f++) {\n\t\tconst size = filterSizes[f];\n\t\tmetaData[f * 4] = size;\n\t\tmetaData[f * 4 + 1] = currentOffset;\n\t\tmetaData[f * 4 + 2] = 0;\n\t\tmetaData[f * 4 + 3] = 0;\n\t\tcurrentOffset += size;\n\t}\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, REVERB_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\troomSizeInternal,\n\t\tdampingInternal,\n\t\twetInternal,\n\t\tdryInternal,\n\t\twidthInternal,\n\t\thasRoomSizeSig,\n\t\thasDampingSig,\n\t\thasWetSig,\n\t\thasDrySig,\n\t\thasWidthSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, metaData, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: reverbAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DCFjIwTB.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BVUTOGHs.mjs","names":[],"sources":["../../../nodes/node-audio-reverb/dist/renderers-DCFjIwTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"roomSize\",\n\t\"damping\",\n\t\"wet\",\n\t\"dry\",\n\t\"width\"\n];\nconst REVERB_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n roomSize : f32,\n damping : f32,\n wet : f32,\n dry : f32,\n width : f32,\n hasRoomSizeSig : f32,\n hasDampingSig : f32,\n hasWetSig : f32,\n hasDrySig : f32,\n hasWidthSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> roomSizeSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> dampingSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> wetSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> drySignal : array<f32>;\n@group(0) @binding(8) var<storage, read> widthSignal : array<f32>;\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let fixedgain: f32 = 0.015f;\n\n var bufIndices: array<u32, 24>;\n var filterStores: array<f32, 24>;\n var sizes: array<u32, 24>;\n var startOffsets: array<u32, 24>;\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n sizes[f] = u32(state[metaOffset]);\n startOffsets[f] = u32(state[metaOffset + 1u]);\n bufIndices[f] = u32(state[metaOffset + 2u]);\n var fs = state[metaOffset + 3u];\n if (is_nan_or_inf(fs)) { fs = 0.0f; }\n filterStores[f] = fs;\n }\n\n if (numChannels == 1u) {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var x = inputChannels[index];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n let inputVal = x * fixedgain;\n\n var combSum = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSum = combSum + output;\n }\n\n var revOut = combSum;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOut + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOut;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOut = output;\n }\n\n var outVal = x * effDry + revOut * effWet;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) { outVal = 1.0f; }\n else if (outVal < -1.0f) { outVal = -1.0f; }\n else if (outVal > 0.9f) { outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f); }\n else if (outVal < -0.9f) { outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f); }\n\n outputChannels[index] = outVal;\n }\n } else {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var effWidth = u.width;\n if (u.hasWidthSig > 0.5f) { effWidth = widthSignal[index]; }\n effWidth = clamp(effWidth, 0.0f, 1.0f);\n\n let wet1 = effWet * (effWidth / 2.0f + 0.5f);\n let wet2 = effWet * ((1.0f - effWidth) / 2.0f);\n\n var inputL = inputChannels[index];\n if (is_nan_or_inf(inputL)) { inputL = 0.0f; }\n var inputR = inputChannels[numSamples + index];\n if (is_nan_or_inf(inputR)) { inputR = 0.0f; }\n\n let inputVal = (inputL + inputR) * fixedgain;\n\n // Left channel (Filters 0-11)\n var combSumL = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSumL = combSumL + output;\n }\n var revOutL = combSumL;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutL + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutL;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutL = output;\n }\n\n // Right channel (Filters 12-23)\n var combSumR = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let f = 12u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n var fs = filterStores[f];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[f] = (bufferIndex + 1u) % size;\n filterStores[f] = fs;\n combSumR = combSumR + output;\n }\n var revOutR = combSumR;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 20u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutR + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutR;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutR = output;\n }\n\n var outL = inputL * effDry + revOutL * wet1 + revOutR * wet2;\n var outR = inputR * effDry + revOutR * wet1 + revOutL * wet2;\n if (is_nan_or_inf(outL)) { outL = 0.0f; }\n if (is_nan_or_inf(outR)) { outR = 0.0f; }\n\n if (outL > 1.0f) { outL = 1.0f; } else if (outL < -1.0f) { outL = -1.0f; }\n else if (outL > 0.9f) { outL = 0.9f + 0.1f * tanh((outL - 0.9f) / 0.1f); }\n else if (outL < -0.9f) { outL = -0.9f + 0.1f * tanh((outL + 0.9f) / 0.1f); }\n\n if (outR > 1.0f) { outR = 1.0f; } else if (outR < -1.0f) { outR = -1.0f; }\n else if (outR > 0.9f) { outR = 0.9f + 0.1f * tanh((outR - 0.9f) / 0.1f); }\n else if (outR < -0.9f) { outR = -0.9f + 0.1f * tanh((outR + 0.9f) / 0.1f); }\n\n outputChannels[index] = outL;\n outputChannels[numSamples + index] = outR;\n }\n }\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n state[metaOffset + 2u] = f32(bufIndices[f]);\n state[metaOffset + 3u] = filterStores[f];\n }\n}\n`;\nconst leftCombLengths = [\n\t1116,\n\t1188,\n\t1277,\n\t1356,\n\t1422,\n\t1491,\n\t1557,\n\t1617\n];\nconst leftAllpassLengths = [\n\t556,\n\t441,\n\t341,\n\t225\n];\nconst reverbAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Reverb.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst roomSizeInternal = Math.max(0, Math.min(resolveNumber(op.roomSize, .5), .98));\n\tconst dampingInternal = Math.max(0, Math.min(resolveNumber(op.damping, .5), 1));\n\tconst wetInternal = Math.max(0, Math.min(resolveNumber(op.wet, .3), 1));\n\tconst dryInternal = Math.max(0, Math.min(resolveNumber(op.dry, 1), 1));\n\tconst widthInternal = Math.max(0, Math.min(resolveNumber(op.width, 1), 1));\n\tconst hasRoomSizeSig = isHandleConnected(op, \"roomSizeHandleId\") ? 1 : 0;\n\tconst hasDampingSig = isHandleConnected(op, \"dampingHandleId\") ? 1 : 0;\n\tconst hasWetSig = isHandleConnected(op, \"wetHandleId\") ? 1 : 0;\n\tconst hasDrySig = isHandleConnected(op, \"dryHandleId\") ? 1 : 0;\n\tconst hasWidthSig = isHandleConnected(op, \"widthHandleId\") ? 1 : 0;\n\tconst scale = sampleRate / 44100;\n\tconst nodeId = op.id || \"audio-reverb\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst sizesL = [];\n\tconst sizesR = [];\n\tleftCombLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftCombLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tconst totalMetadataFloats = 96;\n\tlet totalDelaySamples = 0;\n\tconst filterSizes = [...sizesL, ...sizesR];\n\tfor (const size of filterSizes) totalDelaySamples += size;\n\tconst stateFloatCount = totalMetadataFloats + totalDelaySamples;\n\tconst metaData = new Float32Array(totalMetadataFloats);\n\tlet currentOffset = totalMetadataFloats;\n\tfor (let f = 0; f < 24; f++) {\n\t\tconst size = filterSizes[f];\n\t\tmetaData[f * 4] = size;\n\t\tmetaData[f * 4 + 1] = currentOffset;\n\t\tmetaData[f * 4 + 2] = 0;\n\t\tmetaData[f * 4 + 3] = 0;\n\t\tcurrentOffset += size;\n\t}\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, REVERB_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\troomSizeInternal,\n\t\tdampingInternal,\n\t\twetInternal,\n\t\tdryInternal,\n\t\twidthInternal,\n\t\thasRoomSizeSig,\n\t\thasDampingSig,\n\t\thasWetSig,\n\t\thasDrySig,\n\t\thasWidthSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, metaData, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: reverbAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DCFjIwTB.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { t as renderers_default } from "./renderer-BD7Lmb8h.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { t as renderers_default } from "./renderer-8BM6sJUR.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-cjxDXQdx.mjs";
3
- import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-D8thCpS7.mjs";
2
+ import "./dist-jU289ehm.mjs";
3
+ import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-wL-ly4fT.mjs";
4
4
 
5
5
  export { GradientMapWebGPURenderer, renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer, s as resolveSignalField } from "./renderer-BSitV56h.mjs";
3
- import { jn as signalRegistry } from "./dist-cjxDXQdx.mjs";
4
- import { a as createFullscreenPipeline, f as signalTiming, l as fragmentBindGroupLayout, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Du7GpVFW.mjs";
3
+ import { Nn as signalRegistry } from "./dist-jU289ehm.mjs";
4
+ import { a as createFullscreenPipeline, f as signalTiming, l as fragmentBindGroupLayout, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
5
5
 
6
6
  //#region ../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs
7
7
  const NOISE_SHADER = `
@@ -392,4 +392,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });
392
392
 
393
393
  //#endregion
394
394
  export { NoiseWebGPURenderer, renderers_default as default };
395
- //# sourceMappingURL=renderer-AF884a7T.mjs.map
395
+ //# sourceMappingURL=renderer-BetA_iVd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-AF884a7T.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst noiseUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tmodule: noiseModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveSignalField(op, \"scale\", 10);\n\tconst octavesInfo = resolveSignalField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveSignalField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveSignalField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DdsDStam.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BetA_iVd.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst noiseUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tmodule: noiseModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveSignalField(op, \"scale\", 10);\n\tconst octavesInfo = resolveSignalField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveSignalField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveSignalField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DdsDStam.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { jn as signalRegistry } from "./dist-cjxDXQdx.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Du7GpVFW.mjs";
2
+ import { Nn as signalRegistry } from "./dist-jU289ehm.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
4
4
 
5
5
  //#region ../../nodes/node-colorkey/dist/renderers-eo_mW2uK.mjs
6
6
  const COLORKEY_SHADER = `
@@ -279,4 +279,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ColorKeyWebGPURenderer
279
279
 
280
280
  //#endregion
281
281
  export { renderers_default as t };
282
- //# sourceMappingURL=renderer-DpW_LxLO.mjs.map
282
+ //# sourceMappingURL=renderer-BmDpyiII.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DpW_LxLO.mjs","names":[],"sources":["../../../nodes/node-colorkey/dist/renderers-eo_mW2uK.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLORKEY_SHADER = `\nstruct ColorKeyUniforms {\n\tsimilarity : f32,\n\tsmoothness : f32,\n\tspillSuppression : f32,\n\tcolorSpace : f32, // 0 for YUV, 1 for RGB\n\tspillSuppressionType : f32, // 0 for Desaturate, 1 for Neutralize, 2 for None\n\tkeyR : f32,\n\tkeyG : f32,\n\tkeyB : f32,\n\thasSimilaritySig : f32,\n\thasSmoothnessSig : f32,\n\thasSpillSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorKeyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var similaritySigTex : texture_2d<f32>;\n@group(2) @binding(1) var smoothnessSigTex : texture_2d<f32>;\n@group(2) @binding(2) var spillSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb2yuv(rgb: vec3<f32>) -> vec3<f32> {\n\tlet y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n\tlet u = -0.169 * rgb.r - 0.331 * rgb.g + 0.500 * rgb.b;\n\tlet v = 0.500 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b;\n\treturn vec3<f32>(y, u, v);\n}\n\nfn yuv2rgb(yuv: vec3<f32>) -> vec3<f32> {\n\tlet r = yuv.x + 1.402 * yuv.z;\n\tlet g = yuv.x - 0.344 * yuv.y - 0.714 * yuv.z;\n\tlet b = yuv.x + 1.772 * yuv.y;\n\treturn vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet src_color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (src_color.a < 1e-5) {\n\t\treturn src_color;\n\t}\n\n\t// Unpremultiply alpha for keying and grading\n\tlet unpremult_rgb = src_color.rgb / src_color.a;\n\n\t// Resolve dynamic signals if connected, otherwise use static uniform values\n\tvar similarity = u.similarity;\n\tif (u.hasSimilaritySig > 0.5) {\n\t\tsimilarity = textureSampleLevel(similaritySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar smoothness = u.smoothness;\n\tif (u.hasSmoothnessSig > 0.5) {\n\t\tsmoothness = textureSampleLevel(smoothnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar spillSuppression = u.spillSuppression;\n\tif (u.hasSpillSig > 0.5) {\n\t\tspillSuppression = textureSampleLevel(spillSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet keyColor = vec3<f32>(u.keyR, u.keyG, u.keyB);\n\n\t// 1. Calculate similarity distance\n\tvar dist = 0.0;\n\tif (u.colorSpace < 0.5) {\n\t\t// YUV (Chroma Distance)\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tdist = distance(C_yuv.yz, K_yuv.yz);\n\t} else {\n\t\t// RGB (Exact Distance)\n\t\tdist = distance(unpremult_rgb, keyColor);\n\t}\n\n\t// 2. Calculate transparency mask\n\tvar mask = 0.0;\n\tif (smoothness < 0.0001) {\n\t\tmask = select(0.0, 1.0, dist >= similarity);\n\t} else {\n\t\tmask = smoothstep(similarity, similarity + smoothness, dist);\n\t}\n\n\t// 3. Apply spill suppression\n\tvar final_rgb = unpremult_rgb;\n\tif (u.spillSuppressionType < 2.5) { // 0 for Desaturate, 1 for Neutralize, 2 for None\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tlet K_chroma = K_yuv.yz;\n\t\tlet K_len_sq = dot(K_chroma, K_chroma);\n\n\t\tif (K_len_sq > 1e-6) {\n\t\t\tlet C_chroma = C_yuv.yz;\n\t\t\tlet proj = dot(C_chroma, K_chroma) / K_len_sq;\n\t\t\tif (proj > 0.0) {\n\t\t\t\tlet C_para = proj * K_chroma;\n\t\t\t\tvar C_chroma_suppressed = C_chroma;\n\n\t\t\t\tif (u.spillSuppressionType < 0.5) {\n\t\t\t\t\t// Desaturate\n\t\t\t\t\tC_chroma_suppressed = C_chroma - spillSuppression * C_para;\n\t\t\t\t} else {\n\t\t\t\t\t// Neutralize (completely shift to neutral gray chroma)\n\t\t\t\t\tC_chroma_suppressed = C_chroma - C_para;\n\t\t\t\t}\n\n\t\t\t\tfinal_rgb = yuv2rgb(vec3<f32>(C_yuv.x, C_chroma_suppressed.x, C_chroma_suppressed.y));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet final_alpha = src_color.a * mask;\n\treturn vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * final_alpha, final_alpha);\n}\n`;\nconst colorKeyData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 3),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getColorKeyResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `colorkey_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst colorKeyModule = device.createShaderModule({\n\t\t\tlabel: `colorkey_${format}.wgsl`,\n\t\t\tcode: COLORKEY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ColorKeyPipeline_${format}`,\n\t\t\tmodule: colorKeyModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcolorKeyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction hexToRgb(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n\treturn [\n\t\tparseInt(h.substring(0, 2), 16) / 255,\n\t\tparseInt(h.substring(2, 4), 16) / 255,\n\t\tparseInt(h.substring(4, 6), 16) / 255\n\t];\n}\nconst ColorKeyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorKey\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"colorkey_node\";\n\tconst similarityInput = op.similarityHandleId ? op.inputs?.[op.similarityHandleId] : null;\n\tconst hasSimilaritySig = !!(similarityInput?.connectionValid && (similarityInput.outputItem?.type === \"Signal\" || similarityInput.outputItem?.type === \"Numeric\"));\n\tconst similaritySd = hasSimilaritySig && similarityInput?.outputItem?.data ? similarityInput.outputItem.data : null;\n\tlet similarity = .4;\n\tlet hasStaticSimilaritySig = false;\n\tif (!hasSimilaritySig) if (similarityInput?.connectionValid && similarityInput.outputItem?.type === \"Number\") similarity = Math.max(0, Math.min(1, Number(similarityInput.outputItem.data ?? .4)));\n\telse similarity = Math.max(0, Math.min(1, Number(op.similarity ?? .4)));\n\telse if (similaritySd) {\n\t\tsimilarity = Math.max(0, Math.min(1, Number(similaritySd.offset ?? 0)));\n\t\thasStaticSimilaritySig = true;\n\t}\n\tconst smoothnessInput = op.smoothnessHandleId ? op.inputs?.[op.smoothnessHandleId] : null;\n\tconst hasSmoothnessSig = !!(smoothnessInput?.connectionValid && (smoothnessInput.outputItem?.type === \"Signal\" || smoothnessInput.outputItem?.type === \"Numeric\"));\n\tconst smoothnessSd = hasSmoothnessSig && smoothnessInput?.outputItem?.data ? smoothnessInput.outputItem.data : null;\n\tlet smoothness = .1;\n\tlet hasStaticSmoothnessSig = false;\n\tif (!hasSmoothnessSig) if (smoothnessInput?.connectionValid && smoothnessInput.outputItem?.type === \"Number\") smoothness = Math.max(0, Math.min(1, Number(smoothnessInput.outputItem.data ?? .1)));\n\telse smoothness = Math.max(0, Math.min(1, Number(op.smoothness ?? .1)));\n\telse if (smoothnessSd) {\n\t\tsmoothness = Math.max(0, Math.min(1, Number(smoothnessSd.offset ?? 0)));\n\t\thasStaticSmoothnessSig = true;\n\t}\n\tconst spillInput = op.spillSuppressionHandleId ? op.inputs?.[op.spillSuppressionHandleId] : null;\n\tconst hasSpillSig = !!(spillInput?.connectionValid && (spillInput.outputItem?.type === \"Signal\" || spillInput.outputItem?.type === \"Numeric\"));\n\tconst spillSd = hasSpillSig && spillInput?.outputItem?.data ? spillInput.outputItem.data : null;\n\tlet spillSuppression = .2;\n\tlet hasStaticSpillSig = false;\n\tif (!hasSpillSig) if (spillInput?.connectionValid && spillInput.outputItem?.type === \"Number\") spillSuppression = Math.max(0, Math.min(1, Number(spillInput.outputItem.data ?? .2)));\n\telse spillSuppression = Math.max(0, Math.min(1, Number(op.spillSuppression ?? .2)));\n\telse if (spillSd) {\n\t\tspillSuppression = Math.max(0, Math.min(1, Number(spillSd.offset ?? 0)));\n\t\thasStaticSpillSig = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorKeyPipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getColorKeyResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet similarityView;\n\tif (hasStaticSimilaritySig && similaritySd) similarityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, similaritySd.nodeId ?? `${nodeId}_similarity_sig`, elapsedSeconds, durationSeconds, similaritySd, width, height, props.renderId, frame, fps);\n\telse similarityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet smoothnessView;\n\tif (hasStaticSmoothnessSig && smoothnessSd) smoothnessView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, smoothnessSd.nodeId ?? `${nodeId}_smoothness_sig`, elapsedSeconds, durationSeconds, smoothnessSd, width, height, props.renderId, frame, fps);\n\telse smoothnessView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet spillView;\n\tif (hasStaticSpillSig && spillSd) spillView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, spillSd.nodeId ?? `${nodeId}_spill_sig`, elapsedSeconds, durationSeconds, spillSd, width, height, props.renderId, frame, fps);\n\telse spillView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst [keyR, keyG, keyB] = hexToRgb(op.keyColor ?? \"#00ff00\");\n\tcolorKeyData[0] = similarity;\n\tcolorKeyData[1] = smoothness;\n\tcolorKeyData[2] = spillSuppression;\n\tcolorKeyData[3] = op.colorSpace === \"RGB\" ? 1 : 0;\n\tcolorKeyData[4] = op.spillSuppressionType === \"None\" ? 2 : op.spillSuppressionType === \"Neutralize\" ? 1 : 0;\n\tcolorKeyData[5] = keyR;\n\tcolorKeyData[6] = keyG;\n\tcolorKeyData[7] = keyB;\n\tcolorKeyData[8] = hasStaticSimilaritySig ? 1 : 0;\n\tcolorKeyData[9] = hasStaticSmoothnessSig ? 1 : 0;\n\tcolorKeyData[10] = hasStaticSpillSig ? 1 : 0;\n\tcolorKeyData[11] = 0;\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(colorKeyData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: similarityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: smoothnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: spillView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ColorKeyWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-eo_mW2uK.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BmDpyiII.mjs","names":[],"sources":["../../../nodes/node-colorkey/dist/renderers-eo_mW2uK.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLORKEY_SHADER = `\nstruct ColorKeyUniforms {\n\tsimilarity : f32,\n\tsmoothness : f32,\n\tspillSuppression : f32,\n\tcolorSpace : f32, // 0 for YUV, 1 for RGB\n\tspillSuppressionType : f32, // 0 for Desaturate, 1 for Neutralize, 2 for None\n\tkeyR : f32,\n\tkeyG : f32,\n\tkeyB : f32,\n\thasSimilaritySig : f32,\n\thasSmoothnessSig : f32,\n\thasSpillSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorKeyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var similaritySigTex : texture_2d<f32>;\n@group(2) @binding(1) var smoothnessSigTex : texture_2d<f32>;\n@group(2) @binding(2) var spillSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb2yuv(rgb: vec3<f32>) -> vec3<f32> {\n\tlet y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n\tlet u = -0.169 * rgb.r - 0.331 * rgb.g + 0.500 * rgb.b;\n\tlet v = 0.500 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b;\n\treturn vec3<f32>(y, u, v);\n}\n\nfn yuv2rgb(yuv: vec3<f32>) -> vec3<f32> {\n\tlet r = yuv.x + 1.402 * yuv.z;\n\tlet g = yuv.x - 0.344 * yuv.y - 0.714 * yuv.z;\n\tlet b = yuv.x + 1.772 * yuv.y;\n\treturn vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet src_color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (src_color.a < 1e-5) {\n\t\treturn src_color;\n\t}\n\n\t// Unpremultiply alpha for keying and grading\n\tlet unpremult_rgb = src_color.rgb / src_color.a;\n\n\t// Resolve dynamic signals if connected, otherwise use static uniform values\n\tvar similarity = u.similarity;\n\tif (u.hasSimilaritySig > 0.5) {\n\t\tsimilarity = textureSampleLevel(similaritySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar smoothness = u.smoothness;\n\tif (u.hasSmoothnessSig > 0.5) {\n\t\tsmoothness = textureSampleLevel(smoothnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar spillSuppression = u.spillSuppression;\n\tif (u.hasSpillSig > 0.5) {\n\t\tspillSuppression = textureSampleLevel(spillSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet keyColor = vec3<f32>(u.keyR, u.keyG, u.keyB);\n\n\t// 1. Calculate similarity distance\n\tvar dist = 0.0;\n\tif (u.colorSpace < 0.5) {\n\t\t// YUV (Chroma Distance)\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tdist = distance(C_yuv.yz, K_yuv.yz);\n\t} else {\n\t\t// RGB (Exact Distance)\n\t\tdist = distance(unpremult_rgb, keyColor);\n\t}\n\n\t// 2. Calculate transparency mask\n\tvar mask = 0.0;\n\tif (smoothness < 0.0001) {\n\t\tmask = select(0.0, 1.0, dist >= similarity);\n\t} else {\n\t\tmask = smoothstep(similarity, similarity + smoothness, dist);\n\t}\n\n\t// 3. Apply spill suppression\n\tvar final_rgb = unpremult_rgb;\n\tif (u.spillSuppressionType < 2.5) { // 0 for Desaturate, 1 for Neutralize, 2 for None\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tlet K_chroma = K_yuv.yz;\n\t\tlet K_len_sq = dot(K_chroma, K_chroma);\n\n\t\tif (K_len_sq > 1e-6) {\n\t\t\tlet C_chroma = C_yuv.yz;\n\t\t\tlet proj = dot(C_chroma, K_chroma) / K_len_sq;\n\t\t\tif (proj > 0.0) {\n\t\t\t\tlet C_para = proj * K_chroma;\n\t\t\t\tvar C_chroma_suppressed = C_chroma;\n\n\t\t\t\tif (u.spillSuppressionType < 0.5) {\n\t\t\t\t\t// Desaturate\n\t\t\t\t\tC_chroma_suppressed = C_chroma - spillSuppression * C_para;\n\t\t\t\t} else {\n\t\t\t\t\t// Neutralize (completely shift to neutral gray chroma)\n\t\t\t\t\tC_chroma_suppressed = C_chroma - C_para;\n\t\t\t\t}\n\n\t\t\t\tfinal_rgb = yuv2rgb(vec3<f32>(C_yuv.x, C_chroma_suppressed.x, C_chroma_suppressed.y));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet final_alpha = src_color.a * mask;\n\treturn vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * final_alpha, final_alpha);\n}\n`;\nconst colorKeyData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 3),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getColorKeyResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `colorkey_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst colorKeyModule = device.createShaderModule({\n\t\t\tlabel: `colorkey_${format}.wgsl`,\n\t\t\tcode: COLORKEY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ColorKeyPipeline_${format}`,\n\t\t\tmodule: colorKeyModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcolorKeyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction hexToRgb(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n\treturn [\n\t\tparseInt(h.substring(0, 2), 16) / 255,\n\t\tparseInt(h.substring(2, 4), 16) / 255,\n\t\tparseInt(h.substring(4, 6), 16) / 255\n\t];\n}\nconst ColorKeyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorKey\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"colorkey_node\";\n\tconst similarityInput = op.similarityHandleId ? op.inputs?.[op.similarityHandleId] : null;\n\tconst hasSimilaritySig = !!(similarityInput?.connectionValid && (similarityInput.outputItem?.type === \"Signal\" || similarityInput.outputItem?.type === \"Numeric\"));\n\tconst similaritySd = hasSimilaritySig && similarityInput?.outputItem?.data ? similarityInput.outputItem.data : null;\n\tlet similarity = .4;\n\tlet hasStaticSimilaritySig = false;\n\tif (!hasSimilaritySig) if (similarityInput?.connectionValid && similarityInput.outputItem?.type === \"Number\") similarity = Math.max(0, Math.min(1, Number(similarityInput.outputItem.data ?? .4)));\n\telse similarity = Math.max(0, Math.min(1, Number(op.similarity ?? .4)));\n\telse if (similaritySd) {\n\t\tsimilarity = Math.max(0, Math.min(1, Number(similaritySd.offset ?? 0)));\n\t\thasStaticSimilaritySig = true;\n\t}\n\tconst smoothnessInput = op.smoothnessHandleId ? op.inputs?.[op.smoothnessHandleId] : null;\n\tconst hasSmoothnessSig = !!(smoothnessInput?.connectionValid && (smoothnessInput.outputItem?.type === \"Signal\" || smoothnessInput.outputItem?.type === \"Numeric\"));\n\tconst smoothnessSd = hasSmoothnessSig && smoothnessInput?.outputItem?.data ? smoothnessInput.outputItem.data : null;\n\tlet smoothness = .1;\n\tlet hasStaticSmoothnessSig = false;\n\tif (!hasSmoothnessSig) if (smoothnessInput?.connectionValid && smoothnessInput.outputItem?.type === \"Number\") smoothness = Math.max(0, Math.min(1, Number(smoothnessInput.outputItem.data ?? .1)));\n\telse smoothness = Math.max(0, Math.min(1, Number(op.smoothness ?? .1)));\n\telse if (smoothnessSd) {\n\t\tsmoothness = Math.max(0, Math.min(1, Number(smoothnessSd.offset ?? 0)));\n\t\thasStaticSmoothnessSig = true;\n\t}\n\tconst spillInput = op.spillSuppressionHandleId ? op.inputs?.[op.spillSuppressionHandleId] : null;\n\tconst hasSpillSig = !!(spillInput?.connectionValid && (spillInput.outputItem?.type === \"Signal\" || spillInput.outputItem?.type === \"Numeric\"));\n\tconst spillSd = hasSpillSig && spillInput?.outputItem?.data ? spillInput.outputItem.data : null;\n\tlet spillSuppression = .2;\n\tlet hasStaticSpillSig = false;\n\tif (!hasSpillSig) if (spillInput?.connectionValid && spillInput.outputItem?.type === \"Number\") spillSuppression = Math.max(0, Math.min(1, Number(spillInput.outputItem.data ?? .2)));\n\telse spillSuppression = Math.max(0, Math.min(1, Number(op.spillSuppression ?? .2)));\n\telse if (spillSd) {\n\t\tspillSuppression = Math.max(0, Math.min(1, Number(spillSd.offset ?? 0)));\n\t\thasStaticSpillSig = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorKeyPipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getColorKeyResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet similarityView;\n\tif (hasStaticSimilaritySig && similaritySd) similarityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, similaritySd.nodeId ?? `${nodeId}_similarity_sig`, elapsedSeconds, durationSeconds, similaritySd, width, height, props.renderId, frame, fps);\n\telse similarityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet smoothnessView;\n\tif (hasStaticSmoothnessSig && smoothnessSd) smoothnessView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, smoothnessSd.nodeId ?? `${nodeId}_smoothness_sig`, elapsedSeconds, durationSeconds, smoothnessSd, width, height, props.renderId, frame, fps);\n\telse smoothnessView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet spillView;\n\tif (hasStaticSpillSig && spillSd) spillView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, spillSd.nodeId ?? `${nodeId}_spill_sig`, elapsedSeconds, durationSeconds, spillSd, width, height, props.renderId, frame, fps);\n\telse spillView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst [keyR, keyG, keyB] = hexToRgb(op.keyColor ?? \"#00ff00\");\n\tcolorKeyData[0] = similarity;\n\tcolorKeyData[1] = smoothness;\n\tcolorKeyData[2] = spillSuppression;\n\tcolorKeyData[3] = op.colorSpace === \"RGB\" ? 1 : 0;\n\tcolorKeyData[4] = op.spillSuppressionType === \"None\" ? 2 : op.spillSuppressionType === \"Neutralize\" ? 1 : 0;\n\tcolorKeyData[5] = keyR;\n\tcolorKeyData[6] = keyG;\n\tcolorKeyData[7] = keyB;\n\tcolorKeyData[8] = hasStaticSimilaritySig ? 1 : 0;\n\tcolorKeyData[9] = hasStaticSmoothnessSig ? 1 : 0;\n\tcolorKeyData[10] = hasStaticSpillSig ? 1 : 0;\n\tcolorKeyData[11] = 0;\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(colorKeyData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: similarityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: smoothnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: spillView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ColorKeyWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-eo_mW2uK.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { a as resolveFrameNumber, n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { W as parseColor, jn as signalRegistry } from "./dist-cjxDXQdx.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Du7GpVFW.mjs";
2
+ import { G as parseColor, Nn as signalRegistry } from "./dist-jU289ehm.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
4
4
 
5
5
  //#region ../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs
6
6
  const RELIGHT_SHADER = `
@@ -448,4 +448,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer
448
448
 
449
449
  //#endregion
450
450
  export { renderers_default as t };
451
- //# sourceMappingURL=renderer-BteUC_7n.mjs.map
451
+ //# sourceMappingURL=renderer-BonWt8jF.mjs.map