framefields 2.1.2 → 2.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +48 -618
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CfBpzxn9.d.mts → audio-1QquqDJs.d.mts} +3 -3
  5. package/dist/{audio-CfBpzxn9.d.mts.map → audio-1QquqDJs.d.mts.map} +1 -1
  6. package/dist/{audio-GGuQ_JI0.mjs → audio-BYqbtdH8.mjs} +3 -3
  7. package/dist/{audio-GGuQ_JI0.mjs.map → audio-BYqbtdH8.mjs.map} +1 -1
  8. package/dist/{dist-Bb8BoMiw.mjs → dist-BLbXEC6V.mjs} +5 -3
  9. package/dist/dist-BLbXEC6V.mjs.map +1 -0
  10. package/dist/{dist-DkuDAIrG.mjs → dist-DQlYw4eG.mjs} +85 -43
  11. package/dist/dist-DQlYw4eG.mjs.map +1 -0
  12. package/dist/effects/index.d.mts +4 -4
  13. package/dist/effects/index.mjs +34 -34
  14. package/dist/{effects-D6wFg2FR.mjs → effects-DgpPr38s.mjs} +2 -2
  15. package/dist/{effects-D6wFg2FR.mjs.map → effects-DgpPr38s.mjs.map} +1 -1
  16. package/dist/fonts/index.mjs +2 -2
  17. package/dist/{fonts-CZMYtbP7.mjs → fonts-DakFEiDw.mjs} +3 -3
  18. package/dist/fonts-DakFEiDw.mjs.map +1 -0
  19. package/dist/{gpu-DG3gI88-.mjs → gpu-AbcLcr1f.mjs} +2 -2
  20. package/dist/{gpu-DG3gI88-.mjs.map → gpu-AbcLcr1f.mjs.map} +1 -1
  21. package/dist/{index-Cpkzy5XR.d.mts → index--1jnkoBj.d.mts} +20 -2
  22. package/dist/index--1jnkoBj.d.mts.map +1 -0
  23. package/dist/index-BcA8rep0.d.mts.map +1 -1
  24. package/dist/{index-D__HdInU.d.mts → index-Bg8HIYAO.d.mts} +4 -4
  25. package/dist/{index-D__HdInU.d.mts.map → index-Bg8HIYAO.d.mts.map} +1 -1
  26. package/dist/{index-BzQc812z.d.mts → index-BqzHDFkU.d.mts} +3 -3
  27. package/dist/{index-BzQc812z.d.mts.map → index-BqzHDFkU.d.mts.map} +1 -1
  28. package/dist/{index-DpWia6iH.d.mts → index-CaZfxDXx.d.mts} +27 -3
  29. package/dist/index-CaZfxDXx.d.mts.map +1 -0
  30. package/dist/{index-Fciq8bcC.d.mts → index-D6_KcajH.d.mts} +2 -2
  31. package/dist/{index-Fciq8bcC.d.mts.map → index-D6_KcajH.d.mts.map} +1 -1
  32. package/dist/{index--0vVZDPM.d.mts → index-DgJIBC_N.d.mts} +3 -3
  33. package/dist/{index--0vVZDPM.d.mts.map → index-DgJIBC_N.d.mts.map} +1 -1
  34. package/dist/index.d.mts +72 -65
  35. package/dist/index.d.mts.map +1 -1
  36. package/dist/index.mjs +49 -49
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/preview/index.d.mts +2 -2
  39. package/dist/preview/index.mjs +10 -10
  40. package/dist/{preview--rOXbBxl.mjs → preview-RdaP0Rfv.mjs} +2 -2
  41. package/dist/{preview--rOXbBxl.mjs.map → preview-RdaP0Rfv.mjs.map} +1 -1
  42. package/dist/preview-engine/audio.mjs +1 -1
  43. package/dist/preview-engine/chunk-2W4BMOAZ.mjs +1 -0
  44. package/dist/preview-engine/{chunk-XC5WZNOY.mjs → chunk-5MSAA3DL.mjs} +2 -2
  45. package/dist/preview-engine/chunk-AKMCLVJ6.mjs +5 -0
  46. package/dist/preview-engine/{chunk-E4RAFHZM.mjs → chunk-ATLWPS6N.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-5FC7GOWW.mjs → chunk-FFQ3K5FW.mjs} +1 -1
  48. package/dist/preview-engine/chunk-FJH5A2PV.mjs +1 -0
  49. package/dist/preview-engine/{chunk-BWJS6G7R.mjs → chunk-LQENNFBA.mjs} +6 -6
  50. package/dist/preview-engine/{chunk-5DOD2NVY.mjs → chunk-MOW55DX2.mjs} +1 -1
  51. package/dist/preview-engine/chunk-N4OG2BHX.mjs +3 -0
  52. package/dist/preview-engine/{chunk-QY7MHWZW.mjs → chunk-UKBUEM3G.mjs} +1 -1
  53. package/dist/preview-engine/chunk-VUFDQJ2B.mjs +1 -0
  54. package/dist/preview-engine/{chunk-ZIIFTWDH.mjs → chunk-XETMNJVV.mjs} +1 -1
  55. package/dist/preview-engine/effects.mjs +1 -1
  56. package/dist/preview-engine/fonts.mjs +1 -1
  57. package/dist/preview-engine/framefields.mjs +21 -21
  58. package/dist/preview-engine/player.mjs +5 -5
  59. package/dist/preview-engine/{renderers-YZEVPHPQ.mjs → renderers-OZYUGZG7.mjs} +1 -1
  60. package/dist/preview-engine/{renderers-2SVWAB42.mjs → renderers-UHYNEWQD.mjs} +1 -1
  61. package/dist/preview-engine/signals.mjs +1 -1
  62. package/dist/{program-Cc5AsBHz.mjs → program-Cc_2_YXn.mjs} +2 -2
  63. package/dist/{program-Cc5AsBHz.mjs.map → program-Cc_2_YXn.mjs.map} +1 -1
  64. package/dist/renderer/index.d.mts +3 -3
  65. package/dist/renderer/index.mjs +3 -3
  66. package/dist/{renderer-Br9BOkQs.mjs → renderer-2DjggBBS.mjs} +2 -2
  67. package/dist/{renderer-Br9BOkQs.mjs.map → renderer-2DjggBBS.mjs.map} +1 -1
  68. package/dist/{renderer-DyzNM721.mjs → renderer-4GYrnTfw.mjs} +2 -2
  69. package/dist/{renderer-DyzNM721.mjs.map → renderer-4GYrnTfw.mjs.map} +1 -1
  70. package/dist/renderer-9ETXaINw.mjs +5 -0
  71. package/dist/renderer-B3MVDN_e.mjs +5 -0
  72. package/dist/{renderer-qsg-JMuN.mjs → renderer-B4cnT3ce.mjs} +3 -3
  73. package/dist/{renderer-qsg-JMuN.mjs.map → renderer-B4cnT3ce.mjs.map} +1 -1
  74. package/dist/{renderer-NXdm6HLb.mjs → renderer-B5PFBOjv.mjs} +3 -3
  75. package/dist/{renderer-NXdm6HLb.mjs.map → renderer-B5PFBOjv.mjs.map} +1 -1
  76. package/dist/renderer-B6iUuWcx.mjs +6 -0
  77. package/dist/renderer-B8IdU-7S.mjs +5 -0
  78. package/dist/renderer-BEGJCxuL.mjs +5 -0
  79. package/dist/{renderer-CoGP4Mvf.mjs → renderer-BEzUirF0.mjs} +2 -2
  80. package/dist/{renderer-CoGP4Mvf.mjs.map → renderer-BEzUirF0.mjs.map} +1 -1
  81. package/dist/{renderer-CydWqyf0.mjs → renderer-BKd2nRnO.mjs} +2 -2
  82. package/dist/{renderer-CydWqyf0.mjs.map → renderer-BKd2nRnO.mjs.map} +1 -1
  83. package/dist/renderer-BLAkNFx7.mjs +5 -0
  84. package/dist/{renderer-C7UZLOYk.mjs → renderer-BN0CzoG_.mjs} +2 -2
  85. package/dist/{renderer-C7UZLOYk.mjs.map → renderer-BN0CzoG_.mjs.map} +1 -1
  86. package/dist/{renderer-D2BRlqof.mjs → renderer-BNcsS03m.mjs} +2 -2
  87. package/dist/{renderer-D2BRlqof.mjs.map → renderer-BNcsS03m.mjs.map} +1 -1
  88. package/dist/{renderer-Bs_f_App.d.mts → renderer-BO-7bYa5.d.mts} +2 -2
  89. package/dist/{renderer-Bs_f_App.d.mts.map → renderer-BO-7bYa5.d.mts.map} +1 -1
  90. package/dist/{renderer-DzrM1KMN.mjs → renderer-BPMywsr4.mjs} +3 -3
  91. package/dist/{renderer-DzrM1KMN.mjs.map → renderer-BPMywsr4.mjs.map} +1 -1
  92. package/dist/renderer-BVNhv2ft.mjs +5 -0
  93. package/dist/renderer-BaXTEIe0.mjs +5 -0
  94. package/dist/{renderer-Dno-fujw.mjs → renderer-Bfrwo_It.mjs} +2 -2
  95. package/dist/{renderer-Dno-fujw.mjs.map → renderer-Bfrwo_It.mjs.map} +1 -1
  96. package/dist/{renderer-Bc6J0iVG.mjs → renderer-BhxQzrHF.mjs} +2 -2
  97. package/dist/{renderer-Bc6J0iVG.mjs.map → renderer-BhxQzrHF.mjs.map} +1 -1
  98. package/dist/renderer-BjeA7s36.mjs +5 -0
  99. package/dist/renderer-BtGNxEay.mjs +5 -0
  100. package/dist/renderer-BvZg2RJG.mjs +5 -0
  101. package/dist/{renderer-BKf1qDwL.mjs → renderer-C2eBC0FB.mjs} +3 -3
  102. package/dist/{renderer-BKf1qDwL.mjs.map → renderer-C2eBC0FB.mjs.map} +1 -1
  103. package/dist/{renderer-BWVsBB3t.mjs → renderer-C4UqxwcT.mjs} +2 -2
  104. package/dist/{renderer-BWVsBB3t.mjs.map → renderer-C4UqxwcT.mjs.map} +1 -1
  105. package/dist/{renderer-BI5rvAyo.mjs → renderer-C6u-XrH-.mjs} +3 -3
  106. package/dist/{renderer-BI5rvAyo.mjs.map → renderer-C6u-XrH-.mjs.map} +1 -1
  107. package/dist/{renderer-D2FFvxsq.mjs → renderer-CB87_0vL.mjs} +3 -3
  108. package/dist/{renderer-D2FFvxsq.mjs.map → renderer-CB87_0vL.mjs.map} +1 -1
  109. package/dist/{renderer-CAJe9eLS.mjs → renderer-CD38wGmN.mjs} +2 -2
  110. package/dist/{renderer-CAJe9eLS.mjs.map → renderer-CD38wGmN.mjs.map} +1 -1
  111. package/dist/{renderer-C92mwhZz.mjs → renderer-CGZqCmf2.mjs} +2 -2
  112. package/dist/{renderer-C92mwhZz.mjs.map → renderer-CGZqCmf2.mjs.map} +1 -1
  113. package/dist/{renderer-DqjITuT-.mjs → renderer-CHkqgIOL.mjs} +2 -2
  114. package/dist/{renderer-DqjITuT-.mjs.map → renderer-CHkqgIOL.mjs.map} +1 -1
  115. package/dist/{renderer-BXQQxeNC.mjs → renderer-CK0u3Psf.mjs} +3 -3
  116. package/dist/{renderer-BXQQxeNC.mjs.map → renderer-CK0u3Psf.mjs.map} +1 -1
  117. package/dist/renderer-CLW6tUUn.mjs +5 -0
  118. package/dist/{renderer-9L0p8IT3.mjs → renderer-CO4theVJ.mjs} +2 -2
  119. package/dist/{renderer-DoYdfDEA.mjs → renderer-CPW9o3Lc.mjs} +3 -3
  120. package/dist/{renderer-DoYdfDEA.mjs.map → renderer-CPW9o3Lc.mjs.map} +1 -1
  121. package/dist/renderer-CS-ojgJk.mjs +5 -0
  122. package/dist/{renderer-timEC0Gl.mjs → renderer-CSfLMXN8.mjs} +3 -3
  123. package/dist/{renderer-timEC0Gl.mjs.map → renderer-CSfLMXN8.mjs.map} +1 -1
  124. package/dist/{renderer-BygIYH8s.mjs → renderer-CSoyJ8GH.mjs} +2 -2
  125. package/dist/{renderer-BygIYH8s.mjs.map → renderer-CSoyJ8GH.mjs.map} +1 -1
  126. package/dist/renderer-CUQtKECw.mjs +5 -0
  127. package/dist/renderer-CV-l8wMq.mjs +5 -0
  128. package/dist/renderer-CV7_ALA5.mjs +5 -0
  129. package/dist/renderer-CVR6T6Lp.mjs +5 -0
  130. package/dist/{renderer-DkyXqrQ6.mjs → renderer-CZ9gHx-4.mjs} +2 -2
  131. package/dist/{renderer-DkyXqrQ6.mjs.map → renderer-CZ9gHx-4.mjs.map} +1 -1
  132. package/dist/{renderer-D0aZNkQE.mjs → renderer-CciB_sav.mjs} +3 -3
  133. package/dist/{renderer-D0aZNkQE.mjs.map → renderer-CciB_sav.mjs.map} +1 -1
  134. package/dist/{renderer-DX2qEJTL.mjs → renderer-CfR0GeQL.mjs} +246 -62
  135. package/dist/renderer-CfR0GeQL.mjs.map +1 -0
  136. package/dist/{renderer-BhhSyHKF.mjs → renderer-ClWgdN2v.mjs} +2 -2
  137. package/dist/renderer-CtUF95UW.mjs +5 -0
  138. package/dist/{renderer-D8-zNjyz.mjs → renderer-Cv1wmjhA.mjs} +2 -2
  139. package/dist/{renderer-D8-zNjyz.mjs.map → renderer-Cv1wmjhA.mjs.map} +1 -1
  140. package/dist/{renderer-DUhXH5Tz.mjs → renderer-Cxh7j423.mjs} +3 -3
  141. package/dist/{renderer-DUhXH5Tz.mjs.map → renderer-Cxh7j423.mjs.map} +1 -1
  142. package/dist/{renderer-C5caYAA3.mjs → renderer-D0enmulV.mjs} +2 -2
  143. package/dist/{renderer-C5caYAA3.mjs.map → renderer-D0enmulV.mjs.map} +1 -1
  144. package/dist/renderer-D8ymQoTB.mjs +5 -0
  145. package/dist/renderer-D9x3UE1Y.mjs +5 -0
  146. package/dist/renderer-DAEXqa2Q.mjs +5 -0
  147. package/dist/renderer-DDhU9Goq.mjs +5 -0
  148. package/dist/{renderer-BhKIZDsm.mjs → renderer-DEQ09sg7.mjs} +2 -2
  149. package/dist/{renderer-BhKIZDsm.mjs.map → renderer-DEQ09sg7.mjs.map} +1 -1
  150. package/dist/{renderer-DX8aBDqR.mjs → renderer-DRpIQFAK.mjs} +2 -2
  151. package/dist/{renderer-DX8aBDqR.mjs.map → renderer-DRpIQFAK.mjs.map} +1 -1
  152. package/dist/{renderer-CrAqu3Rg.mjs → renderer-DT3QVVht.mjs} +2 -2
  153. package/dist/{renderer-CrAqu3Rg.mjs.map → renderer-DT3QVVht.mjs.map} +1 -1
  154. package/dist/{renderer-C27RfwXN.mjs → renderer-DU3216cx.mjs} +3 -3
  155. package/dist/{renderer-C27RfwXN.mjs.map → renderer-DU3216cx.mjs.map} +1 -1
  156. package/dist/{renderer-Dy-DBU0X.mjs → renderer-DU6i7shO.mjs} +2 -2
  157. package/dist/{renderer-Dy-DBU0X.mjs.map → renderer-DU6i7shO.mjs.map} +1 -1
  158. package/dist/renderer-DcCKath2.mjs +5 -0
  159. package/dist/{renderer-C--Dqe-3.mjs → renderer-DfSRmz7q.mjs} +3 -3
  160. package/dist/{renderer-C--Dqe-3.mjs.map → renderer-DfSRmz7q.mjs.map} +1 -1
  161. package/dist/renderer-DiBphLzn.mjs +5 -0
  162. package/dist/renderer-Diq9Z7gZ.mjs +5 -0
  163. package/dist/renderer-DjZiO7iA.mjs +5 -0
  164. package/dist/{renderer-Bg7647VN.mjs → renderer-DkGODUgE.mjs} +3 -3
  165. package/dist/{renderer-Bg7647VN.mjs.map → renderer-DkGODUgE.mjs.map} +1 -1
  166. package/dist/{renderer-FHyZn0em.mjs → renderer-DlqDnh-8.mjs} +2 -2
  167. package/dist/{renderer-FHyZn0em.mjs.map → renderer-DlqDnh-8.mjs.map} +1 -1
  168. package/dist/{renderer-DYIPWN_B.mjs → renderer-Dnm_SVy6.mjs} +3 -3
  169. package/dist/{renderer-DYIPWN_B.mjs.map → renderer-Dnm_SVy6.mjs.map} +1 -1
  170. package/dist/{renderer-CzBQgGD2.mjs → renderer-DppnY7RT.mjs} +3 -3
  171. package/dist/{renderer-CzBQgGD2.mjs.map → renderer-DppnY7RT.mjs.map} +1 -1
  172. package/dist/{renderer-DVnVnS3c.mjs → renderer-DqhZTIiC.mjs} +2 -2
  173. package/dist/{renderer-DVnVnS3c.mjs.map → renderer-DqhZTIiC.mjs.map} +1 -1
  174. package/dist/renderer-Dtj6o-74.mjs +5 -0
  175. package/dist/renderer-Duaam6bJ.mjs +5 -0
  176. package/dist/{renderer-DZD2G76E.mjs → renderer-DwCg5pXn.mjs} +2 -2
  177. package/dist/{renderer-DZD2G76E.mjs.map → renderer-DwCg5pXn.mjs.map} +1 -1
  178. package/dist/{renderer-c4AorKyw.mjs → renderer-Dyh8c41v.mjs} +2 -2
  179. package/dist/renderer-FHqZe3K1.mjs +5 -0
  180. package/dist/renderer-FTKfOejk.mjs +5 -0
  181. package/dist/{renderer-_1xGBbxn.mjs → renderer-FgcNOe1R.mjs} +5 -5
  182. package/dist/{renderer-_1xGBbxn.mjs.map → renderer-FgcNOe1R.mjs.map} +1 -1
  183. package/dist/{renderer-Bb8T5eRX.mjs → renderer-L7UTxwZT.mjs} +2 -2
  184. package/dist/{renderer-Bb8T5eRX.mjs.map → renderer-L7UTxwZT.mjs.map} +1 -1
  185. package/dist/renderer-LmbkN82X.mjs +5 -0
  186. package/dist/{renderer-B1Zn91xt.mjs → renderer-PbJk25JW.mjs} +3 -3
  187. package/dist/{renderer-B1Zn91xt.mjs.map → renderer-PbJk25JW.mjs.map} +1 -1
  188. package/dist/renderer-SDspl6p-.mjs +5 -0
  189. package/dist/renderer-SWVUDypd.mjs +5 -0
  190. package/dist/renderer-WhpTBwDM.mjs +5 -0
  191. package/dist/renderer-WrpQEVdv.mjs +5 -0
  192. package/dist/{renderer-CMsjnZ0G.mjs → renderer-dj3f8cMg.mjs} +3 -3
  193. package/dist/{renderer-CMsjnZ0G.mjs.map → renderer-dj3f8cMg.mjs.map} +1 -1
  194. package/dist/{renderer-DWEvQ-hQ.mjs → renderer-dwTzrQ2G.mjs} +3 -3
  195. package/dist/{renderer-DWEvQ-hQ.mjs.map → renderer-dwTzrQ2G.mjs.map} +1 -1
  196. package/dist/{renderer-C5zpaQed.mjs → renderer-egZPy7vq.mjs} +2 -2
  197. package/dist/{renderer-C5zpaQed.mjs.map → renderer-egZPy7vq.mjs.map} +1 -1
  198. package/dist/{renderer-DKqG9Lek.mjs → renderer-gwV6hyYm.mjs} +2 -2
  199. package/dist/{renderer-DKqG9Lek.mjs.map → renderer-gwV6hyYm.mjs.map} +1 -1
  200. package/dist/{renderer-BaaOR3Ao.mjs → renderer-lXmtdrdI.mjs} +2 -2
  201. package/dist/{renderer-BaaOR3Ao.mjs.map → renderer-lXmtdrdI.mjs.map} +1 -1
  202. package/dist/{renderer-Da06_9FZ.mjs → renderer-n2kYIGtb.mjs} +2 -2
  203. package/dist/{renderer-Da06_9FZ.mjs.map → renderer-n2kYIGtb.mjs.map} +1 -1
  204. package/dist/renderer-r4ney0FZ.mjs +5 -0
  205. package/dist/{renderer-DDqwds9R.mjs → renderer-sHDPBywo.mjs} +2 -2
  206. package/dist/{renderer-DDqwds9R.mjs.map → renderer-sHDPBywo.mjs.map} +1 -1
  207. package/dist/{renderer-DGtBOdst.mjs → renderer-scbJx-Dx.mjs} +2 -2
  208. package/dist/{renderers-CP8CFWDs-CMYe4kvZ.mjs → renderers-CP8CFWDs-B8HIr3kj.mjs} +2 -2
  209. package/dist/{renderers-CP8CFWDs-CMYe4kvZ.mjs.map → renderers-CP8CFWDs-B8HIr3kj.mjs.map} +1 -1
  210. package/dist/signals/index.d.mts +5 -5
  211. package/dist/signals/index.mjs +4 -4
  212. package/package.json +55 -55
  213. package/dist/dist-Bb8BoMiw.mjs.map +0 -1
  214. package/dist/dist-DkuDAIrG.mjs.map +0 -1
  215. package/dist/fonts-CZMYtbP7.mjs.map +0 -1
  216. package/dist/index-Cpkzy5XR.d.mts.map +0 -1
  217. package/dist/index-DpWia6iH.d.mts.map +0 -1
  218. package/dist/preview-engine/chunk-7EPDVSCL.mjs +0 -1
  219. package/dist/preview-engine/chunk-B43Z3J7J.mjs +0 -5
  220. package/dist/preview-engine/chunk-CYY366IE.mjs +0 -1
  221. package/dist/preview-engine/chunk-LGVEFPOG.mjs +0 -3
  222. package/dist/preview-engine/chunk-PNB3ERR3.mjs +0 -1
  223. package/dist/renderer-1VSi7Vum.mjs +0 -5
  224. package/dist/renderer-4BlpUHQT.mjs +0 -5
  225. package/dist/renderer-AzSX2-mZ.mjs +0 -5
  226. package/dist/renderer-B-cxK24t.mjs +0 -5
  227. package/dist/renderer-B5d5oM_D.mjs +0 -5
  228. package/dist/renderer-B8BdNjaN.mjs +0 -5
  229. package/dist/renderer-BKEfeg-4.mjs +0 -5
  230. package/dist/renderer-BLLOkeFB.mjs +0 -5
  231. package/dist/renderer-BTvov1NH.mjs +0 -5
  232. package/dist/renderer-BVun05IK.mjs +0 -5
  233. package/dist/renderer-B_3h5nhy.mjs +0 -5
  234. package/dist/renderer-BaZjoFYK.mjs +0 -5
  235. package/dist/renderer-BcApaCVe.mjs +0 -5
  236. package/dist/renderer-C14mKYCw.mjs +0 -5
  237. package/dist/renderer-CFqhAXkH.mjs +0 -5
  238. package/dist/renderer-CK-spD4j.mjs +0 -5
  239. package/dist/renderer-CLLzQTIk.mjs +0 -5
  240. package/dist/renderer-COwa6xlF.mjs +0 -5
  241. package/dist/renderer-CQPuuoVf.mjs +0 -6
  242. package/dist/renderer-CRd-cDqZ.mjs +0 -5
  243. package/dist/renderer-CTVnQAUm.mjs +0 -5
  244. package/dist/renderer-CbiEBSGx.mjs +0 -5
  245. package/dist/renderer-Cl7PruQ1.mjs +0 -5
  246. package/dist/renderer-CmuGGUDR.mjs +0 -5
  247. package/dist/renderer-CoNRrfqx.mjs +0 -5
  248. package/dist/renderer-CvIGa0mE.mjs +0 -5
  249. package/dist/renderer-CwMDPv0p.mjs +0 -5
  250. package/dist/renderer-DOHbhGPu.mjs +0 -5
  251. package/dist/renderer-DOmA6IKc.mjs +0 -5
  252. package/dist/renderer-DX2qEJTL.mjs.map +0 -1
  253. package/dist/renderer-DmCWc4JL.mjs +0 -5
  254. package/dist/renderer-OLaYikwi.mjs +0 -5
  255. package/dist/renderer-Q75RC5Uz.mjs +0 -5
  256. package/dist/renderer-T0LJ4Po3.mjs +0 -5
  257. package/dist/renderer-VuXt1hfq.mjs +0 -5
  258. package/dist/renderer-hY_2WLt3.mjs +0 -5
  259. package/dist/renderer-y4EqE06a.mjs +0 -5
@@ -1,5 +1,5 @@
1
1
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DG3gI88-.mjs";
2
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-AbcLcr1f.mjs";
3
3
 
4
4
  //#region ../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs
5
5
  const easeIn = (t) => t * t;
@@ -261,4 +261,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer
261
261
 
262
262
  //#endregion
263
263
  export { renderers_default as t };
264
- //# sourceMappingURL=renderer-DqjITuT-.mjs.map
264
+ //# sourceMappingURL=renderer-CHkqgIOL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DqjITuT-.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-CHkqgIOL.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
@@ -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 { v as colorMatrixWgsl } from "./dist-DkuDAIrG.mjs";
4
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass } from "./gpu-DG3gI88-.mjs";
3
+ import { v as colorMatrixWgsl } from "./dist-DQlYw4eG.mjs";
4
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass } from "./gpu-AbcLcr1f.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-BXQQxeNC.mjs.map
176
+ //# sourceMappingURL=renderer-CK0u3Psf.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BXQQxeNC.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-CK0u3Psf.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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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { t as renderers_default } from "./renderer-dj3f8cMg.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-DDqwds9R.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-sHDPBywo.mjs";
4
4
 
5
5
  export { ColorBalanceWebGPURenderer, 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-DkuDAIrG.mjs";
4
- import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DG3gI88-.mjs";
3
+ import "./dist-DQlYw4eG.mjs";
4
+ import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-AbcLcr1f.mjs";
5
5
 
6
6
  //#region ../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs
7
7
  const COLOR_SPACE_MAP = {
@@ -290,4 +290,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURend
290
290
 
291
291
  //#endregion
292
292
  export { ChannelMergerWebGPURenderer, renderers_default as default };
293
- //# sourceMappingURL=renderer-DoYdfDEA.mjs.map
293
+ //# sourceMappingURL=renderer-CPW9o3Lc.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DoYdfDEA.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } 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_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\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 lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\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: texturesLayout(device, 4),\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 = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\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 ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\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\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\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: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.mjs.map"],"mappings":";;;;;;AAIA,MAAM,kBAAkB;CACvB,MAAM;CACN,MAAM;CACN,MAAM;CACN,KAAK;CACL;AACD,MAAM,sBAAsB;;;;;;;;;;;;;;EAc1B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,cAAc,IAAI,aAAa,EAAE;AACvC,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;AAChB,OAAM;EACL,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;EAC3D,eAAe,eAAe,QAAQ,EAAE;EACxC,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,YAAY,QAAQ,QAAQ;CACpC,MAAM,YAAY,iBAAiB,OAAO;CAC1C,MAAM,MAAM,UAAU;CACtB,IAAI,WAAW,UAAU,cAAc,IAAI,IAAI;AAC/C,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;EACF,MAAM,SAAS,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,UAAU,eAAe,UAAU,cAAc,EAAE,CAAC;AACpH,aAAW,OAAO,qBAAqB;GACtC,OAAO;GACP;GACA,QAAQ;IACP;IACA,YAAY;IACZ;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,YAAU,cAAc,IAAI,KAAK,SAAS;;AAE3C,QAAO;EACN;EACA;EACA;;AAEF,MAAM,8BAA8B,OAAO,SAAS;CACnD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,OAAO,cAAc;CAC3F,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,mBAAmB,CAAC,GAAI;CACvC,MAAM,WAAW,GAAG,iBAAiB,MAAM,aAAa,WAAW;CACnE,MAAM,WAAW,GAAG;CACpB,MAAM,WAAW,GAAG;CACpB,MAAM,WAAW,GAAG;AACpB,KAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAU;AACzC,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU,EAAE,OAAO;EACxF,GAAG;EACH,cAAc;EACd,UAAU,GAAG,MAAM,SAAS;EAC5B,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU;EAC/E,OAAO;GACN,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB,CAAC,GAAG,MAAM,mBAAmB,EAAE,EAAE,KAAK;GACvD;EACD,SAAS,CAAC,KAAK;EACf,CAAC;AACF,MAAK,KAAK,KAAK;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU;EAC/E,OAAO;GACN,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB;IAChB,GAAG,MAAM,mBAAmB,EAAE;IAC9B;IACA;IACA;GACD;EACD,SAAS,CAAC,MAAM,KAAK;EACrB,CAAC;AACF,MAAK,KAAK,KAAK;CACf,MAAM,OAAO,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC5D,GAAG,MAAM,mBAAmB,EAAE;EAC9B;EACA;EACA;EACA;EACA,CAAC;CACF,MAAM,QAAQ,KAAK,YAAY;AAC/B,KAAI,SAAS,WAAW,SAAS,OAAO;EACvC,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,OAAO,QAAQ,QAAQ,CAAC,KAAK;CAChC,MAAM,SAAS,WAAW,IAAI;AAC9B,KAAI,UAAU;AACb,MAAI,SAAS,YAAY;GACxB,GAAG;GACH,GAAG;GACH;GACA;GACA,CAAC;AACF,MAAI,SAAS,cAAc;AAC3B,QAAM,UAAU,UAAU;GACzB,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB;IAChB,GAAG,MAAM,mBAAmB,EAAE;IAC9B;IACA;IACA;IACA;IACA;GACD,EAAE,OAAO,MAAM,OAAO,OAAO;AAC9B,MAAI,SAAS,cAAc;AAC3B,MAAI,SAAS,YAAY;AACzB,OAAK,KAAK,KAAK;;CAEhB,MAAM,aAAa,GAAG,cAAc;CACpC,MAAM,aAAa,GAAG,oBAAoB,eAAe,SAAS,IAAI;AACtE,aAAY,KAAK,gBAAgB,eAAe;AAChD,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;CACjB,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,EAAE,UAAU,cAAc,YAAY,IAAI,QAAQ,cAAc,OAAO;CAC7E,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS;GACR;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC;CACF,MAAM,YAAY,gBAAgB,KAAK;AACvC,WAAU,YAAY,SAAS;AAC/B,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,KAAK,GAAG,GAAG,GAAG,EAAE;;AAK3B,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"renderer-CPW9o3Lc.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } 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_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\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 lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\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: texturesLayout(device, 4),\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 = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\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 ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\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\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\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: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { n as renderers_default, t as WebGPURenderer } from "./renderer-Bfrwo_It.mjs";
4
+
5
+ export { WebGPURenderer, 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 { An as signalRegistry } from "./dist-DkuDAIrG.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-DG3gI88-.mjs";
3
+ import { jn as signalRegistry } from "./dist-DQlYw4eG.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-AbcLcr1f.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-timEC0Gl.mjs.map
395
+ //# sourceMappingURL=renderer-CSfLMXN8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-timEC0Gl.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-CSfLMXN8.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,5 +1,5 @@
1
1
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DG3gI88-.mjs";
2
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-AbcLcr1f.mjs";
3
3
 
4
4
  //#region ../../nodes/node-curves/dist/renderers-DzdBU1io.mjs
5
5
  /**
@@ -639,4 +639,4 @@ var renderers_default = rendererNode;
639
639
 
640
640
  //#endregion
641
641
  export { renderers_default as n, rendererNode as t };
642
- //# sourceMappingURL=renderer-BygIYH8s.mjs.map
642
+ //# sourceMappingURL=renderer-CSoyJ8GH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BygIYH8s.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-CSoyJ8GH.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { t as renderers_default } from "./renderer-DRpIQFAK.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { t as renderers_default } from "./renderer-DwCg5pXn.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { t as renderers_default } from "./renderer-DT3QVVht.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-DQlYw4eG.mjs";
3
+ import { t as renderers_default } from "./renderer-CZ9gHx-4.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
1
  import { a as resolveFrameNumber, n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-DG3gI88-.mjs";
2
+ import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-AbcLcr1f.mjs";
3
3
  import { o as TemporalDeflickerPipeline } from "./dist-0QGroRYZ.mjs";
4
4
 
5
5
  //#region ../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs
@@ -62,4 +62,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPU
62
62
 
63
63
  //#endregion
64
64
  export { renderers_default as t };
65
- //# sourceMappingURL=renderer-DkyXqrQ6.mjs.map
65
+ //# sourceMappingURL=renderer-CZ9gHx-4.mjs.map