framefields 2.3.1 → 2.3.2

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 (344) hide show
  1. package/dist/audio/index.mjs +10 -10
  2. package/dist/{audio-CS104aUj.mjs → audio-C7Kn5xBm.mjs} +3 -3
  3. package/dist/{audio-CS104aUj.mjs.map → audio-C7Kn5xBm.mjs.map} +1 -1
  4. package/dist/{dist-BOdxAhOT.mjs → dist-CPUIfrtw.mjs} +2 -2
  5. package/dist/{dist-BOdxAhOT.mjs.map → dist-CPUIfrtw.mjs.map} +1 -1
  6. package/dist/{dist-jU289ehm.mjs → dist-CturBK2Z.mjs} +138 -66
  7. package/dist/dist-CturBK2Z.mjs.map +1 -0
  8. package/dist/effects/index.mjs +34 -34
  9. package/dist/{effects-BzOlVD-w.mjs → effects-CW1VgdI5.mjs} +2 -2
  10. package/dist/{effects-BzOlVD-w.mjs.map → effects-CW1VgdI5.mjs.map} +1 -1
  11. package/dist/fonts/index.mjs +2 -2
  12. package/dist/{fonts-BhlV_3Qt.mjs → fonts-EgMNL8KE.mjs} +2 -2
  13. package/dist/{fonts-BhlV_3Qt.mjs.map → fonts-EgMNL8KE.mjs.map} +1 -1
  14. package/dist/{gpu-BA1Wz_mS.mjs → gpu-CN14e7Bi.mjs} +2 -2
  15. package/dist/{gpu-BA1Wz_mS.mjs.map → gpu-CN14e7Bi.mjs.map} +1 -1
  16. package/dist/index-AdrZIWT0.d.mts.map +1 -1
  17. package/dist/index-CeRv1KC0.d.mts.map +1 -1
  18. package/dist/index.mjs +48 -48
  19. package/dist/preview/index.mjs +10 -10
  20. package/dist/{preview-BVyG76gO.mjs → preview-1sjnhHQL.mjs} +2 -2
  21. package/dist/{preview-BVyG76gO.mjs.map → preview-1sjnhHQL.mjs.map} +1 -1
  22. package/dist/preview-engine/audio.mjs +1 -1
  23. package/dist/preview-engine/{chunk-VO2R3DWV.mjs → chunk-44CQSOYE.mjs} +1 -1
  24. package/dist/preview-engine/{chunk-FNE22WGA.mjs → chunk-6AEU4DC7.mjs} +4 -4
  25. package/dist/preview-engine/{chunk-PR2BUYCL.mjs → chunk-7G3XIOP7.mjs} +1 -1
  26. package/dist/preview-engine/{chunk-AXQZX3TC.mjs → chunk-AY7UX37L.mjs} +1 -1
  27. package/dist/preview-engine/{chunk-FPRXK2WD.mjs → chunk-DIGIQ5MJ.mjs} +1 -1
  28. package/dist/preview-engine/{chunk-K773AOF3.mjs → chunk-EVXWDOCL.mjs} +1 -1
  29. package/dist/preview-engine/{chunk-ZNL4W4DK.mjs → chunk-EYWPOCZW.mjs} +1 -1
  30. package/dist/preview-engine/{chunk-WSIURGP2.mjs → chunk-HE4R7EZM.mjs} +1 -1
  31. package/dist/preview-engine/{chunk-L3CHEZMZ.mjs → chunk-IR5DNNWR.mjs} +1 -1
  32. package/dist/preview-engine/{chunk-2MZXSWVT.mjs → chunk-JXNG2ACR.mjs} +1 -1
  33. package/dist/preview-engine/{chunk-O2RNIQXT.mjs → chunk-L6BH5J4P.mjs} +1 -1
  34. package/dist/preview-engine/{chunk-BVA5NGSH.mjs → chunk-M5HZPZHQ.mjs} +1 -1
  35. package/dist/preview-engine/{chunk-PFA427ZC.mjs → chunk-MLY5M7Y5.mjs} +1 -1
  36. package/dist/preview-engine/{chunk-ZH5MZQTZ.mjs → chunk-OG62XGCT.mjs} +1 -1
  37. package/dist/preview-engine/{chunk-LBRVQ4GE.mjs → chunk-PSRQA3QW.mjs} +1 -1
  38. package/dist/preview-engine/{chunk-3UPI4EPV.mjs → chunk-Q22PJXFJ.mjs} +1 -1
  39. package/dist/preview-engine/{chunk-E3HC4GRQ.mjs → chunk-T2FE5VOW.mjs} +1 -1
  40. package/dist/preview-engine/{chunk-Q2DPNVIA.mjs → chunk-TS3JI3BH.mjs} +1 -1
  41. package/dist/preview-engine/{chunk-NEE3KQTX.mjs → chunk-U4JIFQRR.mjs} +1 -1
  42. package/dist/preview-engine/{chunk-GCTVRM7J.mjs → chunk-U7NIY7UC.mjs} +14 -14
  43. package/dist/preview-engine/{chunk-BQY4BUMN.mjs → chunk-VGZZSPDN.mjs} +1 -1
  44. package/dist/preview-engine/{chunk-TPAEN6VV.mjs → chunk-VK2CVMWJ.mjs} +1 -1
  45. package/dist/preview-engine/effects.mjs +1 -1
  46. package/dist/preview-engine/framefields.mjs +3 -3
  47. package/dist/preview-engine/player.mjs +5 -5
  48. package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -1
  49. package/dist/preview-engine/renderers-2ILG23ED.mjs +1 -0
  50. package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -1
  51. package/dist/preview-engine/{renderers-P4S7GL64.mjs → renderers-2VN3AH45.mjs} +1 -1
  52. package/dist/preview-engine/{renderers-LLUEOW5T.mjs → renderers-3GHEWWVX.mjs} +1 -1
  53. package/dist/preview-engine/renderers-3SRG77SC.mjs +1 -1
  54. package/dist/preview-engine/{renderers-YNFKFM7D.mjs → renderers-3YCJOINH.mjs} +1 -1
  55. package/dist/preview-engine/{renderers-WP67KK5K.mjs → renderers-4GRVAW2W.mjs} +1 -1
  56. package/dist/preview-engine/{renderers-BGGRPAVV.mjs → renderers-5FQA2DP4.mjs} +1 -1
  57. package/dist/preview-engine/{renderers-FGHOLJJK.mjs → renderers-5YEIUTVN.mjs} +1 -1
  58. package/dist/preview-engine/{renderers-JLFGBYN4.mjs → renderers-6CG7DBTB.mjs} +1 -1
  59. package/dist/preview-engine/{renderers-O2DZPBOJ.mjs → renderers-6OGFUSH6.mjs} +1 -1
  60. package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -1
  61. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -1
  62. package/dist/preview-engine/{renderers-7JTNJE7M.mjs → renderers-A6HM64UZ.mjs} +1 -1
  63. package/dist/preview-engine/renderers-B7DSGUMI.mjs +1 -0
  64. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +1 -0
  65. package/dist/preview-engine/{renderers-XCMVZ2XG.mjs → renderers-BSKZXITT.mjs} +1 -1
  66. package/dist/preview-engine/renderers-CGYIDAVV.mjs +1 -0
  67. package/dist/preview-engine/{renderers-LVDUZZ75.mjs → renderers-CRRLV7IO.mjs} +1 -1
  68. package/dist/preview-engine/{renderers-TFZST6WW.mjs → renderers-D6T6IPER.mjs} +1 -1
  69. package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -1
  70. package/dist/preview-engine/{renderers-6ODPWZ2R.mjs → renderers-E76OKK66.mjs} +1 -1
  71. package/dist/preview-engine/renderers-ECA3P4ON.mjs +1 -0
  72. package/dist/preview-engine/{renderers-7NCG6BYS.mjs → renderers-EJWPVVQR.mjs} +1 -1
  73. package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -1
  74. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -1
  75. package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -1
  76. package/dist/preview-engine/{renderers-ZSENYGIY.mjs → renderers-I5E2RSV4.mjs} +1 -1
  77. package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -1
  78. package/dist/preview-engine/renderers-JHFT27YU.mjs +1 -0
  79. package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -1
  80. package/dist/preview-engine/{renderers-FQWWAETX.mjs → renderers-MCECHPCL.mjs} +1 -1
  81. package/dist/preview-engine/renderers-MON4QFRF.mjs +1 -0
  82. package/dist/preview-engine/{renderers-UJ4YVJZT.mjs → renderers-N7FR54V2.mjs} +1 -1
  83. package/dist/preview-engine/{renderers-PVYP2ONH.mjs → renderers-N7TS5562.mjs} +1 -1
  84. package/dist/preview-engine/renderers-NQXMYNSY.mjs +1 -0
  85. package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -1
  86. package/dist/preview-engine/renderers-ORAIXUL3.mjs +1 -0
  87. package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -1
  88. package/dist/preview-engine/{renderers-WHBDHTRI.mjs → renderers-PYWXELLG.mjs} +1 -1
  89. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -1
  90. package/dist/preview-engine/renderers-QVZVEYP5.mjs +1 -0
  91. package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -1
  92. package/dist/preview-engine/renderers-RKDPX5JU.mjs +1 -0
  93. package/dist/preview-engine/{renderers-D2EJULOJ.mjs → renderers-RLHTNLRE.mjs} +1 -1
  94. package/dist/preview-engine/renderers-SBFF7JP5.mjs +1 -0
  95. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -1
  96. package/dist/preview-engine/{renderers-HMR2NAD7.mjs → renderers-TR2V2HZ2.mjs} +1 -1
  97. package/dist/preview-engine/{renderers-UPKB5OLS.mjs → renderers-U6KY34TP.mjs} +1 -1
  98. package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -1
  99. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +1 -0
  100. package/dist/preview-engine/renderers-W773SBPV.mjs +1 -0
  101. package/dist/preview-engine/{renderers-3F5AIDEL.mjs → renderers-WP2LBR5U.mjs} +1 -1
  102. package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -1
  103. package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -1
  104. package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -1
  105. package/dist/preview-engine/{renderers-DN2GF3I7.mjs → renderers-YMPXGYRU.mjs} +1 -1
  106. package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -1
  107. package/dist/preview-engine/renderers-ZHTX73PR.mjs +1 -0
  108. package/dist/preview-engine/{renderers-TPBPNXWH.mjs → renderers-ZHZMGMLN.mjs} +1 -1
  109. package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -1
  110. package/dist/preview-engine/signals.mjs +1 -1
  111. package/dist/{program-CCSfHMfh.mjs → program-DtiNMTxO.mjs} +2 -2
  112. package/dist/{program-CCSfHMfh.mjs.map → program-DtiNMTxO.mjs.map} +1 -1
  113. package/dist/renderer/index.mjs +2 -2
  114. package/dist/{renderer-DCGLXnYW.mjs → renderer--Da6pAJ4.mjs} +2 -2
  115. package/dist/{renderer-BFRI5alp.mjs → renderer--S2cNYXS.mjs} +3 -3
  116. package/dist/{renderer-BFRI5alp.mjs.map → renderer--S2cNYXS.mjs.map} +1 -1
  117. package/dist/renderer-1hypa-l7.mjs +5 -0
  118. package/dist/renderer-6D8M4DRu.mjs +5 -0
  119. package/dist/{renderer-CWx3Kg79.mjs → renderer-6QAlE1Mp.mjs} +3 -3
  120. package/dist/{renderer-CWx3Kg79.mjs.map → renderer-6QAlE1Mp.mjs.map} +1 -1
  121. package/dist/{renderer-wL-ly4fT.mjs → renderer-8k-TR_Cy.mjs} +3 -3
  122. package/dist/{renderer-wL-ly4fT.mjs.map → renderer-8k-TR_Cy.mjs.map} +1 -1
  123. package/dist/renderer-APrj6tdP.mjs +5 -0
  124. package/dist/{renderer-DPWeKe_x.mjs → renderer-B3x-uogM.mjs} +3 -3
  125. package/dist/{renderer-DPWeKe_x.mjs.map → renderer-B3x-uogM.mjs.map} +1 -1
  126. package/dist/{renderer-BG5sbTXt.mjs → renderer-B48vtpou.mjs} +3 -3
  127. package/dist/{renderer-BG5sbTXt.mjs.map → renderer-B48vtpou.mjs.map} +1 -1
  128. package/dist/{renderer-Cu5k5D9N.mjs → renderer-B5Icb0XW.mjs} +2 -2
  129. package/dist/{renderer-Cu5k5D9N.mjs.map → renderer-B5Icb0XW.mjs.map} +1 -1
  130. package/dist/{renderer-DUBb7D17.mjs → renderer-B6c_Rk_2.mjs} +3 -3
  131. package/dist/{renderer-DUBb7D17.mjs.map → renderer-B6c_Rk_2.mjs.map} +1 -1
  132. package/dist/{renderer-C3lPwajT.mjs → renderer-BAmGO6Hj.mjs} +3 -3
  133. package/dist/{renderer-C3lPwajT.mjs.map → renderer-BAmGO6Hj.mjs.map} +1 -1
  134. package/dist/renderer-BF8wlbN1.mjs +5 -0
  135. package/dist/{renderer-pPiQwFYh.mjs → renderer-BFHgl-0f.mjs} +2 -2
  136. package/dist/{renderer-pPiQwFYh.mjs.map → renderer-BFHgl-0f.mjs.map} +1 -1
  137. package/dist/{renderer-LM_XIKl1.mjs → renderer-BI1nmIqA.mjs} +3 -3
  138. package/dist/{renderer-LM_XIKl1.mjs.map → renderer-BI1nmIqA.mjs.map} +1 -1
  139. package/dist/renderer-BOUcMCJB.mjs +5 -0
  140. package/dist/{renderer-DpwlN4LH.mjs → renderer-BRWpn3dT.mjs} +3 -3
  141. package/dist/{renderer-DpwlN4LH.mjs.map → renderer-BRWpn3dT.mjs.map} +1 -1
  142. package/dist/renderer-BSwn6KmG.mjs +5 -0
  143. package/dist/renderer-BUxvuC5A.mjs +5 -0
  144. package/dist/{renderer-DerDxKK3.mjs → renderer-BXCZev4l.mjs} +3 -3
  145. package/dist/{renderer-DerDxKK3.mjs.map → renderer-BXCZev4l.mjs.map} +1 -1
  146. package/dist/renderer-BYOsmJ8F.mjs +5 -0
  147. package/dist/{renderer-CuphUktB.mjs → renderer-BYj8x8YM.mjs} +2 -2
  148. package/dist/{renderer-CuphUktB.mjs.map → renderer-BYj8x8YM.mjs.map} +1 -1
  149. package/dist/{renderer-C8GZ0pCV.mjs → renderer-BaOC1Pd1.mjs} +3 -3
  150. package/dist/{renderer-C8GZ0pCV.mjs.map → renderer-BaOC1Pd1.mjs.map} +1 -1
  151. package/dist/{renderer-C6cF5seJ.mjs → renderer-BebePsG7.mjs} +2 -2
  152. package/dist/{renderer-C6cF5seJ.mjs.map → renderer-BebePsG7.mjs.map} +1 -1
  153. package/dist/{renderer-Bzl0s07U.mjs → renderer-Bf4BdBtb.mjs} +2 -2
  154. package/dist/{renderer-Bzl0s07U.mjs.map → renderer-Bf4BdBtb.mjs.map} +1 -1
  155. package/dist/{renderer-CLdwOhST.mjs → renderer-BkXqFmNO.mjs} +2 -2
  156. package/dist/{renderer-CLdwOhST.mjs.map → renderer-BkXqFmNO.mjs.map} +1 -1
  157. package/dist/{renderer-O1b-oYJE.mjs → renderer-BlafvK-L.mjs} +2 -2
  158. package/dist/{renderer-D1wd0FhZ.mjs → renderer-BmWH4dK1.mjs} +5 -5
  159. package/dist/{renderer-D1wd0FhZ.mjs.map → renderer-BmWH4dK1.mjs.map} +1 -1
  160. package/dist/renderer-Bp7LqSTt.mjs +5 -0
  161. package/dist/{renderer-BonWt8jF.mjs → renderer-Bq9jXYJ5.mjs} +3 -3
  162. package/dist/{renderer-BonWt8jF.mjs.map → renderer-Bq9jXYJ5.mjs.map} +1 -1
  163. package/dist/{renderer-AtLlZMQ9.mjs → renderer-BqSiWRoD.mjs} +2 -2
  164. package/dist/{renderer-AtLlZMQ9.mjs.map → renderer-BqSiWRoD.mjs.map} +1 -1
  165. package/dist/{renderer-kSs8VtY7.mjs → renderer-ButaUWLr.mjs} +3 -3
  166. package/dist/{renderer-kSs8VtY7.mjs.map → renderer-ButaUWLr.mjs.map} +1 -1
  167. package/dist/{renderer-4VpA7LfU.mjs → renderer-C2Ff-9u_.mjs} +2 -2
  168. package/dist/{renderer-4VpA7LfU.mjs.map → renderer-C2Ff-9u_.mjs.map} +1 -1
  169. package/dist/{renderer-BvBIHi6N.mjs → renderer-C4puWDLK.mjs} +2 -2
  170. package/dist/{renderer-BvBIHi6N.mjs.map → renderer-C4puWDLK.mjs.map} +1 -1
  171. package/dist/{renderer-BvvuGfZk.mjs → renderer-CBG6ewNf.mjs} +3 -3
  172. package/dist/{renderer-BvvuGfZk.mjs.map → renderer-CBG6ewNf.mjs.map} +1 -1
  173. package/dist/renderer-CD0amH_Q.mjs +5 -0
  174. package/dist/renderer-CIJGjrt7.mjs +5 -0
  175. package/dist/{renderer-DCYabwlC.mjs → renderer-CJwgsecF.mjs} +2 -2
  176. package/dist/{renderer-DCYabwlC.mjs.map → renderer-CJwgsecF.mjs.map} +1 -1
  177. package/dist/{renderer-DukD7S3w.mjs → renderer-CMzd3BrW.mjs} +2 -2
  178. package/dist/{renderer-DukD7S3w.mjs.map → renderer-CMzd3BrW.mjs.map} +1 -1
  179. package/dist/renderer-CNFTl94b.mjs +5 -0
  180. package/dist/{renderer-B93zd3sx.mjs → renderer-CPNLkir4.mjs} +2 -2
  181. package/dist/{renderer-B93zd3sx.mjs.map → renderer-CPNLkir4.mjs.map} +1 -1
  182. package/dist/{renderer-CMdtUn5o.mjs → renderer-CRYO5HQw.mjs} +2 -2
  183. package/dist/{renderer-CMdtUn5o.mjs.map → renderer-CRYO5HQw.mjs.map} +1 -1
  184. package/dist/renderer-CTJ0gHPS.mjs +5 -0
  185. package/dist/{renderer-D7ss6fLB.mjs → renderer-CbNW0KHh.mjs} +3 -3
  186. package/dist/{renderer-D7ss6fLB.mjs.map → renderer-CbNW0KHh.mjs.map} +1 -1
  187. package/dist/renderer-Cc3INn7w.mjs +5 -0
  188. package/dist/{renderer-DpWRj6zF.mjs → renderer-CczmOPAO.mjs} +3 -3
  189. package/dist/{renderer-DpWRj6zF.mjs.map → renderer-CczmOPAO.mjs.map} +1 -1
  190. package/dist/renderer-CeHh2lKY.mjs +5 -0
  191. package/dist/renderer-CfjwkQP4.mjs +5 -0
  192. package/dist/{renderer-DdlaBsk_.mjs → renderer-CgEMtLOL.mjs} +2 -2
  193. package/dist/{renderer-DdlaBsk_.mjs.map → renderer-CgEMtLOL.mjs.map} +1 -1
  194. package/dist/{renderer-CFe9pZFN.mjs → renderer-Ch1rv1XP.mjs} +2 -2
  195. package/dist/{renderer-CFe9pZFN.mjs.map → renderer-Ch1rv1XP.mjs.map} +1 -1
  196. package/dist/renderer-CiuOB-Md.mjs +5 -0
  197. package/dist/{renderer-YdLL2o6d.mjs → renderer-ClK7_Yzz.mjs} +2 -2
  198. package/dist/{renderer-YdLL2o6d.mjs.map → renderer-ClK7_Yzz.mjs.map} +1 -1
  199. package/dist/renderer-Cor66Y2X.mjs +5 -0
  200. package/dist/renderer-CtIM0LWe.mjs +5 -0
  201. package/dist/renderer-CyqgTsnx.mjs +5 -0
  202. package/dist/{renderer-BVUTOGHs.mjs → renderer-Cz11KJmQ.mjs} +2 -2
  203. package/dist/{renderer-BVUTOGHs.mjs.map → renderer-Cz11KJmQ.mjs.map} +1 -1
  204. package/dist/{renderer-c-bwxMde.mjs → renderer-D-eTVnDS.mjs} +2 -2
  205. package/dist/{renderer-c-bwxMde.mjs.map → renderer-D-eTVnDS.mjs.map} +1 -1
  206. package/dist/renderer-D2QG9yIW.mjs +5 -0
  207. package/dist/renderer-D2woU27o.mjs +6 -0
  208. package/dist/{renderer-PknbdJyL.mjs → renderer-D8tdGi2P.mjs} +3 -3
  209. package/dist/{renderer-PknbdJyL.mjs.map → renderer-D8tdGi2P.mjs.map} +1 -1
  210. package/dist/{renderer-DfkWYUTX.mjs → renderer-D90PpIKG.mjs} +2 -2
  211. package/dist/renderer-DAhDiQQY.mjs +5 -0
  212. package/dist/{renderer-DcAfp1Er.mjs → renderer-DDBmBmQN.mjs} +2 -2
  213. package/dist/{renderer-DcAfp1Er.mjs.map → renderer-DDBmBmQN.mjs.map} +1 -1
  214. package/dist/renderer-DIjxOQFi.mjs +5 -0
  215. package/dist/{renderer-ChloaI6P.mjs → renderer-DJWQWN1E.mjs} +3 -3
  216. package/dist/{renderer-ChloaI6P.mjs.map → renderer-DJWQWN1E.mjs.map} +1 -1
  217. package/dist/{renderer-D26S5hUh.mjs → renderer-DL4oR40b.mjs} +2 -2
  218. package/dist/{renderer-D26S5hUh.mjs.map → renderer-DL4oR40b.mjs.map} +1 -1
  219. package/dist/{renderer-D1Jt-c3F.mjs → renderer-DNhOjz6C.mjs} +2 -2
  220. package/dist/{renderer-D1Jt-c3F.mjs.map → renderer-DNhOjz6C.mjs.map} +1 -1
  221. package/dist/renderer-DRzalGhU.mjs +5 -0
  222. package/dist/{renderer-CqewgazK.mjs → renderer-DS64UaYK.mjs} +3 -3
  223. package/dist/{renderer-CqewgazK.mjs.map → renderer-DS64UaYK.mjs.map} +1 -1
  224. package/dist/renderer-DY6S1jWp.mjs +5 -0
  225. package/dist/{renderer-BI4OMlEx.mjs → renderer-DYo_a5-8.mjs} +2 -2
  226. package/dist/{renderer-BI4OMlEx.mjs.map → renderer-DYo_a5-8.mjs.map} +1 -1
  227. package/dist/{renderer-BD7Lmb8h.mjs → renderer-DacnnTjY.mjs} +3 -3
  228. package/dist/{renderer-BD7Lmb8h.mjs.map → renderer-DacnnTjY.mjs.map} +1 -1
  229. package/dist/renderer-DeW0KNQV.mjs +5 -0
  230. package/dist/{renderer-YJ3Yukou.mjs → renderer-DjPC9l3w.mjs} +3 -3
  231. package/dist/{renderer-YJ3Yukou.mjs.map → renderer-DjPC9l3w.mjs.map} +1 -1
  232. package/dist/{renderer-BmDpyiII.mjs → renderer-DjwF10p2.mjs} +3 -3
  233. package/dist/{renderer-BmDpyiII.mjs.map → renderer-DjwF10p2.mjs.map} +1 -1
  234. package/dist/{renderer-Celrh689.mjs → renderer-DmOewVsB.mjs} +3 -3
  235. package/dist/{renderer-Celrh689.mjs.map → renderer-DmOewVsB.mjs.map} +1 -1
  236. package/dist/{renderer-HMl2V4iM.mjs → renderer-DqlvbOUt.mjs} +3 -3
  237. package/dist/{renderer-HMl2V4iM.mjs.map → renderer-DqlvbOUt.mjs.map} +1 -1
  238. package/dist/renderer-DsVSVFkl.mjs +5 -0
  239. package/dist/{renderer-Bel1UHA5.mjs → renderer-DvoPplvC.mjs} +2 -2
  240. package/dist/{renderer-g-ui08Lh.mjs → renderer-Dw1e5phO.mjs} +3 -3
  241. package/dist/{renderer-g-ui08Lh.mjs.map → renderer-Dw1e5phO.mjs.map} +1 -1
  242. package/dist/renderer-DxvcIgEU.mjs +5 -0
  243. package/dist/renderer-F0MKqmol.mjs +5 -0
  244. package/dist/{renderer-C39GD6jP.mjs → renderer-F410V727.mjs} +3 -3
  245. package/dist/{renderer-C39GD6jP.mjs.map → renderer-F410V727.mjs.map} +1 -1
  246. package/dist/{renderer-dUkOBfGB.mjs → renderer-Fm2brScz.mjs} +3 -3
  247. package/dist/{renderer-dUkOBfGB.mjs.map → renderer-Fm2brScz.mjs.map} +1 -1
  248. package/dist/{renderer-BpEsZG3t.mjs → renderer-GlyeFl5R.mjs} +3 -3
  249. package/dist/{renderer-BpEsZG3t.mjs.map → renderer-GlyeFl5R.mjs.map} +1 -1
  250. package/dist/{renderer-Dk-THZHp.mjs → renderer-ITtBRR4o.mjs} +3 -3
  251. package/dist/{renderer-Dk-THZHp.mjs.map → renderer-ITtBRR4o.mjs.map} +1 -1
  252. package/dist/{renderer-DaCsT-XU.mjs → renderer-Kj9AhRCc.mjs} +3 -3
  253. package/dist/{renderer-DaCsT-XU.mjs.map → renderer-Kj9AhRCc.mjs.map} +1 -1
  254. package/dist/{renderer-CNYfB5cC.mjs → renderer-MS70wrQB.mjs} +2 -2
  255. package/dist/{renderer-CNYfB5cC.mjs.map → renderer-MS70wrQB.mjs.map} +1 -1
  256. package/dist/{renderer-Cn6VlWHZ.mjs → renderer-Mdyv_W8K.mjs} +3 -3
  257. package/dist/{renderer-Cn6VlWHZ.mjs.map → renderer-Mdyv_W8K.mjs.map} +1 -1
  258. package/dist/renderer-OkbovcAc.mjs +5 -0
  259. package/dist/{renderer-Dq4aO7az.mjs → renderer-QMGrRiab.mjs} +2 -2
  260. package/dist/{renderer-Dq4aO7az.mjs.map → renderer-QMGrRiab.mjs.map} +1 -1
  261. package/dist/renderer-QyBeWMEL.mjs +5 -0
  262. package/dist/{renderer-DMZ5aLU1.mjs → renderer-R0sJId_6.mjs} +2 -2
  263. package/dist/{renderer-DMZ5aLU1.mjs.map → renderer-R0sJId_6.mjs.map} +1 -1
  264. package/dist/{renderer-CdOy3EBJ.mjs → renderer-Rg1BFv8B.mjs} +2 -2
  265. package/dist/{renderer-CdOy3EBJ.mjs.map → renderer-Rg1BFv8B.mjs.map} +1 -1
  266. package/dist/{renderer-CiMpdh0s.mjs → renderer-S6ez0leJ.mjs} +2 -2
  267. package/dist/{renderer-CiMpdh0s.mjs.map → renderer-S6ez0leJ.mjs.map} +1 -1
  268. package/dist/{renderer-Dh-OF6aH.mjs → renderer-YtRSM2cv.mjs} +2 -2
  269. package/dist/{renderer-Dh-OF6aH.mjs.map → renderer-YtRSM2cv.mjs.map} +1 -1
  270. package/dist/{renderer-1uLtqb74.mjs → renderer-_-MCpvGq.mjs} +91 -73
  271. package/dist/renderer-_-MCpvGq.mjs.map +1 -0
  272. package/dist/{renderer-DOWekunR.mjs → renderer-_Fh9IBlE.mjs} +3 -3
  273. package/dist/{renderer-DOWekunR.mjs.map → renderer-_Fh9IBlE.mjs.map} +1 -1
  274. package/dist/{renderer-FXUCKps6.mjs → renderer-dJcu7WqI.mjs} +3 -3
  275. package/dist/{renderer-FXUCKps6.mjs.map → renderer-dJcu7WqI.mjs.map} +1 -1
  276. package/dist/renderer-hSh5IrDp.mjs +5 -0
  277. package/dist/{renderer-BetA_iVd.mjs → renderer-ktpusVT2.mjs} +3 -3
  278. package/dist/{renderer-BetA_iVd.mjs.map → renderer-ktpusVT2.mjs.map} +1 -1
  279. package/dist/renderer-puLncHft.mjs +5 -0
  280. package/dist/{renderer-8BM6sJUR.mjs → renderer-w8LKBg_5.mjs} +2 -2
  281. package/dist/{renderer-8BM6sJUR.mjs.map → renderer-w8LKBg_5.mjs.map} +1 -1
  282. package/dist/renderer-wnFCaw7j.mjs +5 -0
  283. package/dist/renderer-xjtlyGS1.mjs +5 -0
  284. package/dist/{renderer-BRwp1kV-.mjs → renderer-z3YOOR3k.mjs} +3 -3
  285. package/dist/{renderer-BRwp1kV-.mjs.map → renderer-z3YOOR3k.mjs.map} +1 -1
  286. package/dist/{renderers-CP8CFWDs-CVHwMTiz.mjs → renderers-CP8CFWDs-DXiR_PLR.mjs} +2 -2
  287. package/dist/{renderers-CP8CFWDs-CVHwMTiz.mjs.map → renderers-CP8CFWDs-DXiR_PLR.mjs.map} +1 -1
  288. package/dist/signals/index.mjs +4 -4
  289. package/package.json +56 -56
  290. package/dist/dist-jU289ehm.mjs.map +0 -1
  291. package/dist/preview-engine/chunk-OCX5AD23.mjs +0 -1
  292. package/dist/preview-engine/renderers-3T7Q4SPP.mjs +0 -1
  293. package/dist/preview-engine/renderers-4DV4REGM.mjs +0 -1
  294. package/dist/preview-engine/renderers-CQXQHOW2.mjs +0 -1
  295. package/dist/preview-engine/renderers-IXGM55XK.mjs +0 -1
  296. package/dist/preview-engine/renderers-KVHUVWSN.mjs +0 -1
  297. package/dist/preview-engine/renderers-M7R2ZJUP.mjs +0 -1
  298. package/dist/preview-engine/renderers-PMOO7DLX.mjs +0 -1
  299. package/dist/preview-engine/renderers-QCCPCH73.mjs +0 -1
  300. package/dist/preview-engine/renderers-RRXFJRGI.mjs +0 -1
  301. package/dist/preview-engine/renderers-VLMQR3DW.mjs +0 -1
  302. package/dist/preview-engine/renderers-WVTTRCVI.mjs +0 -1
  303. package/dist/preview-engine/renderers-X5PUIPU5.mjs +0 -1
  304. package/dist/preview-engine/renderers-YDCDY3BR.mjs +0 -1
  305. package/dist/preview-engine/renderers-YJNQ4B7B.mjs +0 -1
  306. package/dist/preview-engine/renderers-Z7YQUFAY.mjs +0 -1
  307. package/dist/preview-engine/skia-canvas-QBXAOGPB.mjs +0 -1
  308. package/dist/renderer-1Kv7oA86.mjs +0 -5
  309. package/dist/renderer-1uLtqb74.mjs.map +0 -1
  310. package/dist/renderer-AVHJ33nv.mjs +0 -5
  311. package/dist/renderer-B8dJGf8R.mjs +0 -6
  312. package/dist/renderer-BEA6nknY.mjs +0 -5
  313. package/dist/renderer-BOfi06L2.mjs +0 -5
  314. package/dist/renderer-BOhvtAGL.mjs +0 -5
  315. package/dist/renderer-BQT3GI9g.mjs +0 -5
  316. package/dist/renderer-BXmStgeT.mjs +0 -5
  317. package/dist/renderer-Bajxo7Nt.mjs +0 -5
  318. package/dist/renderer-BzRR0KMm.mjs +0 -5
  319. package/dist/renderer-C3Gjy2iE.mjs +0 -5
  320. package/dist/renderer-C5hQgkz-.mjs +0 -5
  321. package/dist/renderer-CLF-MiOA.mjs +0 -5
  322. package/dist/renderer-CLa43fCd.mjs +0 -5
  323. package/dist/renderer-CMK1d6w_.mjs +0 -5
  324. package/dist/renderer-CPEQOe3u.mjs +0 -5
  325. package/dist/renderer-CemfjOM9.mjs +0 -5
  326. package/dist/renderer-CkcrScs9.mjs +0 -5
  327. package/dist/renderer-CwrLihY6.mjs +0 -5
  328. package/dist/renderer-D4S6i2MC.mjs +0 -5
  329. package/dist/renderer-DB8F0XoP.mjs +0 -5
  330. package/dist/renderer-DGpVLJOn.mjs +0 -5
  331. package/dist/renderer-DGxibeSa.mjs +0 -5
  332. package/dist/renderer-DJQm3bAW.mjs +0 -5
  333. package/dist/renderer-DMftVSfX.mjs +0 -5
  334. package/dist/renderer-DNpovOd8.mjs +0 -5
  335. package/dist/renderer-DSHlvKQk.mjs +0 -5
  336. package/dist/renderer-DYtrdR2p.mjs +0 -5
  337. package/dist/renderer-DuSImLUz.mjs +0 -5
  338. package/dist/renderer-FbyMYKXe.mjs +0 -5
  339. package/dist/renderer-NMFv7Auz.mjs +0 -5
  340. package/dist/renderer-P3vpdUnb.mjs +0 -5
  341. package/dist/renderer-QTOm26Lg.mjs +0 -5
  342. package/dist/renderer-ahzhMa5q.mjs +0 -5
  343. package/dist/renderer-dThfTNge.mjs +0 -5
  344. package/dist/renderer-dgAS_k7B.mjs +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-PknbdJyL.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\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: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tflow: new OpticalFlowComputePipeline(device),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height, format) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\n\t]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-D8tdGi2P.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\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: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tflow: new OpticalFlowComputePipeline(device),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height, format) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\n\t]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-jU289ehm.mjs";
3
- import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-DMZ5aLU1.mjs";
2
+ import "./dist-CturBK2Z.mjs";
3
+ import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-R0sJId_6.mjs";
4
4
 
5
5
  export { PatchHealWebGPURenderer, renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-CturBK2Z.mjs";
3
+ import { n as renderers_default, t as WebGPURenderer } from "./renderer-CPNLkir4.mjs";
4
+
5
+ export { WebGPURenderer, renderers_default as default };
@@ -1,6 +1,6 @@
1
1
  import { Jt as resolveNumber, Pt as isSignal } from "./dist-fjKpBYkc.mjs";
2
2
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-jU289ehm.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-CturBK2Z.mjs";
4
4
 
5
5
  //#region ../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs
6
6
  const PARAM_ORDER = ["pan"];
@@ -96,4 +96,4 @@ var renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProce
96
96
 
97
97
  //#endregion
98
98
  export { renderers_default as t };
99
- //# sourceMappingURL=renderer-DcAfp1Er.mjs.map
99
+ //# sourceMappingURL=renderer-DDBmBmQN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DcAfp1Er.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"renderer-DDBmBmQN.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-CturBK2Z.mjs";
3
+ import { t as renderers_default } from "./renderer-CRYO5HQw.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import "./dist-jU289ehm.mjs";
4
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
3
+ import "./dist-CturBK2Z.mjs";
4
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
5
5
 
6
6
  //#region ../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs
7
7
  const CANVAS_SHADER = `
@@ -127,4 +127,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURe
127
127
 
128
128
  //#endregion
129
129
  export { CanvasGeneratorWebGPURenderer, renderers_default as default };
130
- //# sourceMappingURL=renderer-ChloaI6P.mjs.map
130
+ //# sourceMappingURL=renderer-DJWQWN1E.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-ChloaI6P.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\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 CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\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.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":";;;;;;AAIA,MAAM,gBAAgB;;;;;;;;;;;;;;EAcpB,qBAAqB;;;;;;;;;;;;;;;;;;;;;AAqBvB,MAAM,oBAAoB,IAAI,aAAa,GAAG;AAC9C,MAAM,mBAAmB,WAAW,YAAY;CAC/C,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC3D,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,mBAAmB,QAAQ,QAAQ;CAC3C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,UAAU;CAC3B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO,UAAU,OAAO;GACxB,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,2BAA2B;GAClC,QAAQ;GACR,SAAS,CAAC,QAAQ,cAAc;GAChC;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,gBAAgB;EAChB,eAAe,QAAQ;EACvB;;AAEF,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,QAAQ,KAAK,GAAG;AAC5B,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAChF,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,IAAI,IAAI;AACR,KAAI,EAAE,WAAW,EAAG,KAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN;EACA;EACA;EACA;EACA;;AAEF,MAAM,gCAAgC,OAAO,SAAS;CACrD,MAAM,EAAE,KAAK,MAAM,UAAU;CAC7B,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,qBAAqB,CAAC,GAAI;CACzC,MAAM,EAAE,gBAAgB,UAAU,eAAe,YAAY,mBAAmB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAChH,MAAM,cAAc,GAAG,aAAa,WAAW,IAAI,GAAG,aAAa,WAAW,IAAI;CAClF,MAAM,eAAe,GAAG,iBAAiB,OAAO,KAAK,KAAK;CAC1D,MAAM,kBAAkB,GAAG,gBAAgB;CAC3C,MAAM,WAAW,UAAU,GAAG,cAAc,UAAU;CACtD,MAAM,WAAW,UAAU,GAAG,iBAAiB,UAAU;CACzD,MAAM,SAAS,UAAU,GAAG,eAAe,UAAU;AACrD,mBAAkB,KAAK;AACvB,mBAAkB,KAAK;AACvB,mBAAkB,KAAK;AACvB,mBAAkB,KAAK;AACvB,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,KAAK,SAAS;AAChC,mBAAkB,MAAM,SAAS;AACjC,mBAAkB,MAAM,SAAS;AACjC,mBAAkB,MAAM,OAAO;AAC/B,mBAAkB,MAAM,OAAO;AAC/B,mBAAkB,MAAM,OAAO;AAC/B,mBAAkB,MAAM,OAAO;AAC/B,mBAAkB,MAAM,GAAG,iBAAiB;AAC5C,mBAAkB,MAAM,GAAG,iBAAiB;AAC5C,mBAAkB,MAAM;AACxB,mBAAkB,MAAM;CACxB,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,kBAAkB;AACxE,MAAK,YAAY,SAAS;AAC1B,MAAK,aAAa,GAAG,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC,CAAC;AACH,MAAK,KAAK,EAAE;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,+BAA+B,CAAC"}
1
+ {"version":3,"file":"renderer-DJWQWN1E.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\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 CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\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.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { n as defineRenderer, o as resolveHandleParam } from "./renderer-BSitV56h.mjs";
2
2
  import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BA1Wz_mS.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CN14e7Bi.mjs";
4
4
  import { z } from "zod";
5
5
 
6
6
  //#region ../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs
@@ -253,4 +253,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
253
253
 
254
254
  //#endregion
255
255
  export { renderers_default as t };
256
- //# sourceMappingURL=renderer-D26S5hUh.mjs.map
256
+ //# sourceMappingURL=renderer-DL4oR40b.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-D26S5hUh.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst highPassConfig = configBuilder().field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The cutoff radius in pixels. Frequencies smaller than this radius are preserved.\"\n}).field(\"contrastBoost\", z.number().multipleOf(.01).min(1).max(10).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Contrast Boost Signal\",\n\tdescription: \"Multiplier applied to the extracted high-frequency detail delta.\"\n}).field(\"monochrome\", z.boolean().default(true), { description: \"When enabled, high-pass delta is converted to luminance before centering on 50% neutral gray.\" }).build();\nconst HighPassNodeConfigSchema = highPassConfig.schema;\nconst HighPassResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst HIGH_PASS_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 WGSL_HIGHPASS_UNIFORMS = `\nstruct HighPassUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tcontrastBoost : f32,\n\n\tmonochrome : f32,\n\thasRadiusSig : f32,\n\thasContrastSig : f32,\n\tisSecondPass : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HighPassUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar contrastBoost = u.contrastBoost;\n\tif (u.hasContrastSig > 0.5) {\n\t\tcontrastBoost = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn vec4<f32>(vec3<f32>(0.5) * origCol.a, origCol.a);\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate High Pass difference against original\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet origUnpremult = origCol.rgb / origCol.a;\n\tlet blurUnpremult = blurResult.rgb / max(blurResult.a, 1e-5);\n\tlet diff = origUnpremult - blurUnpremult;\n\n\tvar highPassRgb : vec3<f32>;\n\tif (u.monochrome > 0.5) {\n\t\tlet lumaDiff = dot(diff, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\thighPassRgb = vec3<f32>(0.5) + vec3<f32>(lumaDiff * contrastBoost);\n\t} else {\n\t\thighPassRgb = vec3<f32>(0.5) + diff * contrastBoost;\n\t}\n\n\tlet clampedRgb = clamp(highPassRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(clampedRgb * origCol.a, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst highPassUniformData = new Float32Array(8);\nfunction getHighPassResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst highPassUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 2);\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\thighPassUniformLayout,\n\t\t\t\tsingleTextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HighPass\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"highpass_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 3), .1, MAX_RADIUS);\n\tconst contrastRes = resolveField(op.contrastBoostHandleId, Number(op.contrastBoost ?? 1), 1, 10);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { highPassPipeline: pipeline, highPassUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHighPassResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst createHighPassBindGroup1 = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[2] = radiusRes.val;\n\thighPassUniformData[3] = contrastRes.val;\n\thighPassUniformData[4] = op.monochrome ?? true ? 1 : 0;\n\thighPassUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[6] = contrastRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[7] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = 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: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[0] = 1;\n\thighPassUniformData[1] = 0;\n\thighPassUniformData[7] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(outTex1, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, HighPassResultSchema as i, HIGH_PASS_OUTPUT_TYPE_MAP as n, highPassConfig as o, HighPassNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-DUL8Peaw.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DL4oR40b.mjs","names":[],"sources":["../../../nodes/node-high-pass/dist/renderers-DUL8Peaw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst highPassConfig = configBuilder().field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The cutoff radius in pixels. Frequencies smaller than this radius are preserved.\"\n}).field(\"contrastBoost\", z.number().multipleOf(.01).min(1).max(10).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Contrast Boost Signal\",\n\tdescription: \"Multiplier applied to the extracted high-frequency detail delta.\"\n}).field(\"monochrome\", z.boolean().default(true), { description: \"When enabled, high-pass delta is converted to luminance before centering on 50% neutral gray.\" }).build();\nconst HighPassNodeConfigSchema = highPassConfig.schema;\nconst HighPassResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst HIGH_PASS_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 WGSL_HIGHPASS_UNIFORMS = `\nstruct HighPassUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tcontrastBoost : f32,\n\n\tmonochrome : f32,\n\thasRadiusSig : f32,\n\thasContrastSig : f32,\n\tisSecondPass : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HighPassUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar contrastBoost = u.contrastBoost;\n\tif (u.hasContrastSig > 0.5) {\n\t\tcontrastBoost = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn vec4<f32>(vec3<f32>(0.5) * origCol.a, origCol.a);\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate High Pass difference against original\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet origUnpremult = origCol.rgb / origCol.a;\n\tlet blurUnpremult = blurResult.rgb / max(blurResult.a, 1e-5);\n\tlet diff = origUnpremult - blurUnpremult;\n\n\tvar highPassRgb : vec3<f32>;\n\tif (u.monochrome > 0.5) {\n\t\tlet lumaDiff = dot(diff, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\thighPassRgb = vec3<f32>(0.5) + vec3<f32>(lumaDiff * contrastBoost);\n\t} else {\n\t\thighPassRgb = vec3<f32>(0.5) + diff * contrastBoost;\n\t}\n\n\tlet clampedRgb = clamp(highPassRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(clampedRgb * origCol.a, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst highPassUniformData = new Float32Array(8);\nfunction getHighPassResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst highPassUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tconst signalTextureLayout = texturesLayout(device, 2);\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\thighPassUniformLayout,\n\t\t\t\tsingleTextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HighPass\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"highpass_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 3), .1, MAX_RADIUS);\n\tconst contrastRes = resolveField(op.contrastBoostHandleId, Number(op.contrastBoost ?? 1), 1, 10);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { highPassPipeline: pipeline, highPassUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHighPassResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst createHighPassBindGroup1 = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[2] = radiusRes.val;\n\thighPassUniformData[3] = contrastRes.val;\n\thighPassUniformData[4] = op.monochrome ?? true ? 1 : 0;\n\thighPassUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[6] = contrastRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[7] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = 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: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[0] = 1;\n\thighPassUniformData[1] = 0;\n\thighPassUniformData[7] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(tmpTex, tmpTex),\n\t\tsigBindGroup\n\t]);\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tcreateHighPassBindGroup1(outTex1, tmpTex),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, HighPassResultSchema as i, HIGH_PASS_OUTPUT_TYPE_MAP as n, highPassConfig as o, HighPassNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-DUL8Peaw.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, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BA1Wz_mS.mjs";
2
+ import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CN14e7Bi.mjs";
3
3
 
4
4
  //#region ../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs
5
5
  const MAX_OPERATIONS = 1024;
@@ -184,4 +184,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer }
184
184
 
185
185
  //#endregion
186
186
  export { renderers_default as n, LiquifyWebGPURenderer as t };
187
- //# sourceMappingURL=renderer-D1Jt-c3F.mjs.map
187
+ //# sourceMappingURL=renderer-DNhOjz6C.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-D1Jt-c3F.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.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.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DNhOjz6C.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.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.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-CturBK2Z.mjs";
3
+ import { t as renderers_default } from "./renderer-w8LKBg_5.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import "./dist-jU289ehm.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
3
+ import "./dist-CturBK2Z.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
5
5
 
6
6
  //#region ../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs
7
7
  const OP = "CRT";
@@ -221,4 +221,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });
221
221
 
222
222
  //#endregion
223
223
  export { CRTWebGPURenderer, renderers_default as default };
224
- //# sourceMappingURL=renderer-CqewgazK.mjs.map
224
+ //# sourceMappingURL=renderer-DS64UaYK.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CqewgazK.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DS64UaYK.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-CturBK2Z.mjs";
3
+ import { t as renderers_default } from "./renderer-C2Ff-9u_.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,6 +1,6 @@
1
1
  import { Jt as resolveNumber, Xt as resolveString } from "./dist-fjKpBYkc.mjs";
2
2
  import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-jU289ehm.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-CturBK2Z.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs
6
6
  const PARAM_ORDER = ["fadeInDuration", "fadeOutDuration"];
@@ -173,4 +173,4 @@ var renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });
173
173
 
174
174
  //#endregion
175
175
  export { renderers_default as t };
176
- //# sourceMappingURL=renderer-BI4OMlEx.mjs.map
176
+ //# sourceMappingURL=renderer-DYo_a5-8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BI4OMlEx.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
1
+ {"version":3,"file":"renderer-DYo_a5-8.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { l as unwrapFrameParam, n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
2
  import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
3
- import { Nn as signalRegistry } from "./dist-jU289ehm.mjs";
4
- import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BA1Wz_mS.mjs";
3
+ import { Nn as signalRegistry } from "./dist-CturBK2Z.mjs";
4
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CN14e7Bi.mjs";
5
5
  import { z } from "zod";
6
6
 
7
7
  //#region ../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs
@@ -845,4 +845,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });
845
845
 
846
846
  //#endregion
847
847
  export { renderers_default as t };
848
- //# sourceMappingURL=renderer-BD7Lmb8h.mjs.map
848
+ //# sourceMappingURL=renderer-DacnnTjY.mjs.map