framefields 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/README.md +30 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CGVJlZb9.mjs → audio-BfQg37MW.mjs} +3 -3
  5. package/dist/{audio-CGVJlZb9.mjs.map → audio-BfQg37MW.mjs.map} +1 -1
  6. package/dist/{audio-CxAUxVyA.d.mts → audio-Ccpl9mjV.d.mts} +3 -3
  7. package/dist/{audio-CxAUxVyA.d.mts.map → audio-Ccpl9mjV.d.mts.map} +1 -1
  8. package/dist/cli/check-worker.mjs +44 -44
  9. package/dist/components/index.d.mts +10 -10
  10. package/dist/components/index.mjs +43 -43
  11. package/dist/{dist-CnFcSau0.mjs → dist-C1cCW7Bt.mjs} +2297 -213
  12. package/dist/dist-C1cCW7Bt.mjs.map +1 -0
  13. package/dist/{dist-C5eZw8ms.mjs → dist-C8Xq3zgx.mjs} +2 -2
  14. package/dist/{dist-C5eZw8ms.mjs.map → dist-C8Xq3zgx.mjs.map} +1 -1
  15. package/dist/effects/index.d.mts +4 -4
  16. package/dist/effects/index.mjs +35 -35
  17. package/dist/{effects-DdvkiI3u.mjs → effects-CemgqEPv.mjs} +2 -2
  18. package/dist/{effects-DdvkiI3u.mjs.map → effects-CemgqEPv.mjs.map} +1 -1
  19. package/dist/fonts/index.mjs +2 -2
  20. package/dist/{fonts-k_89s1HO.mjs → fonts-BW0pPcvJ.mjs} +2 -2
  21. package/dist/{fonts-k_89s1HO.mjs.map → fonts-BW0pPcvJ.mjs.map} +1 -1
  22. package/dist/{gpu-BoyykRdD.mjs → gpu-CMaa63nz.mjs} +2 -2
  23. package/dist/{gpu-BoyykRdD.mjs.map → gpu-CMaa63nz.mjs.map} +1 -1
  24. package/dist/{index-CPFKis94.d.mts → index-7Z9_a_iB.d.mts} +3 -3
  25. package/dist/{index-CPFKis94.d.mts.map → index-7Z9_a_iB.d.mts.map} +1 -1
  26. package/dist/{index-CFKMZDv1.d.mts → index-BIjMAW1h.d.mts} +2 -2
  27. package/dist/{index-CFKMZDv1.d.mts.map → index-BIjMAW1h.d.mts.map} +1 -1
  28. package/dist/{index-BukqOGDa.d.mts → index-CFoAmh7q.d.mts} +3 -3
  29. package/dist/{index-BukqOGDa.d.mts.map → index-CFoAmh7q.d.mts.map} +1 -1
  30. package/dist/{index-CPeaSZoz.d.mts → index-CJL0JAU8.d.mts} +2 -2
  31. package/dist/{index-CPeaSZoz.d.mts.map → index-CJL0JAU8.d.mts.map} +1 -1
  32. package/dist/{index-Ds9_v60R.d.mts → index-CZjrnylh.d.mts} +544 -336
  33. package/dist/index-CZjrnylh.d.mts.map +1 -0
  34. package/dist/{index-Ced1Ry4S.d.mts → index-D5UDyVMb.d.mts} +211 -9
  35. package/dist/index-D5UDyVMb.d.mts.map +1 -0
  36. package/dist/{index-B_nooAhS.d.mts → index-Du5YgdzM.d.mts} +53 -15
  37. package/dist/index-Du5YgdzM.d.mts.map +1 -0
  38. package/dist/index.d.mts +11 -11
  39. package/dist/index.mjs +50 -50
  40. package/dist/preview/index.d.mts +3 -3
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-DHqCrFhG.mjs → preview-BQVgn6Ho.mjs} +2 -2
  43. package/dist/{preview-DHqCrFhG.mjs.map → preview-BQVgn6Ho.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/{chunk-JGDZQCNU.mjs → chunk-2B722GXM.mjs} +1 -1
  46. package/dist/preview-engine/{chunk-GFW3D464.mjs → chunk-2DWY7UBV.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-72DYOIMP.mjs → chunk-2PYTDN2C.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-PF3SXQNV.mjs → chunk-34DL53D5.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-GLXJOXBE.mjs → chunk-34RJ7GAS.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-6OY4YLTC.mjs → chunk-35HMRW4I.mjs} +1 -1
  51. package/dist/preview-engine/chunk-374QY63R.mjs +1974 -0
  52. package/dist/preview-engine/{chunk-W26U6BP2.mjs → chunk-4WYM72ZN.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-EQ4VBUWM.mjs → chunk-5AWAOMBR.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-J4SHMCTG.mjs → chunk-6R3UJBL5.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-VHGC72XP.mjs → chunk-73CNXGAK.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-K5F4ZW6T.mjs → chunk-7U34VKNO.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-KYOPOCO5.mjs → chunk-AHQCDTD6.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-ADV2TIKA.mjs → chunk-BEYA25UZ.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-RBDIRBEI.mjs → chunk-BJV2LBII.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-LBJBBEKP.mjs → chunk-BVDWS3D2.mjs} +1 -1
  61. package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
  62. package/dist/preview-engine/{chunk-NIPWL6Z5.mjs → chunk-C4M3B2Q2.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-LLUFOFF4.mjs → chunk-CC4NNNIY.mjs} +1 -1
  64. package/dist/preview-engine/chunk-CCB3VTY2.mjs +39 -0
  65. package/dist/preview-engine/{chunk-NX66555S.mjs → chunk-CN2VLYLB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-SK7PUBTC.mjs → chunk-DMSZXG56.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-WC257OBY.mjs → chunk-DVZITDQS.mjs} +1 -1
  68. package/dist/preview-engine/chunk-FKG27DVO.mjs +4 -0
  69. package/dist/preview-engine/{chunk-COZG35ZR.mjs → chunk-FTCEG3SF.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-57LES7TL.mjs → chunk-GA4HNR44.mjs} +1 -1
  71. package/dist/preview-engine/chunk-GEUUXTDL.mjs +138 -0
  72. package/dist/preview-engine/{chunk-S4WNCEMO.mjs → chunk-GIICZZQI.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-RTHU7REC.mjs → chunk-GRJJVSOV.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-RGDM6PQ5.mjs → chunk-GZWA5QJS.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-LZNNM5OB.mjs → chunk-H7BSN7V7.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-JXUENEQO.mjs → chunk-HOV6DDBZ.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-C6XLAJLL.mjs → chunk-JSYG6OWZ.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-GZVPVOHB.mjs → chunk-K3C6GUQD.mjs} +1 -1
  79. package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
  80. package/dist/preview-engine/{chunk-Y6TWMUJC.mjs → chunk-LVYVXVZO.mjs} +1 -1
  81. package/dist/preview-engine/chunk-MIEH74UH.mjs +480 -0
  82. package/dist/preview-engine/{chunk-AVDHZNIZ.mjs → chunk-OH5W5EL6.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-22F33PPP.mjs → chunk-P5FKRQFU.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-7X2AUKTU.mjs → chunk-PM2W4VLT.mjs} +1 -1
  85. package/dist/preview-engine/chunk-QCSVT73T.mjs +2403 -0
  86. package/dist/preview-engine/{chunk-523CTDOC.mjs → chunk-RJIAES3X.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-DPQN7WYQ.mjs → chunk-S2ABWY5G.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-G7JJ6HVL.mjs → chunk-SF37HXAH.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-OKLYIQ5F.mjs → chunk-SPJPM43P.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-UOTMBWBJ.mjs → chunk-TNJEZKXM.mjs} +1 -1
  91. package/dist/preview-engine/chunk-ULOFDFHJ.mjs +1 -0
  92. package/dist/preview-engine/{chunk-LLB3AGBQ.mjs → chunk-UQKPDGEH.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-DISKQ5MH.mjs → chunk-UXYM2G6J.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-U5YNECNG.mjs → chunk-VN36PRVD.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-PMOKPVSD.mjs → chunk-VVE2QHVG.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-PEUQRSIM.mjs → chunk-Y5K5LVOR.mjs} +1 -1
  97. package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
  98. package/dist/preview-engine/{chunk-PSEMCJBH.mjs → chunk-ZJ5SWTCW.mjs} +1 -1
  99. package/dist/preview-engine/chunk-ZY47XIRK.mjs +5 -0
  100. package/dist/preview-engine/components.mjs +1 -1
  101. package/dist/preview-engine/effects.mjs +1 -1
  102. package/dist/preview-engine/framefields.mjs +1 -1
  103. package/dist/preview-engine/player.mjs +1 -1
  104. package/dist/preview-engine/renderers-3BOQOUEU.mjs +1 -0
  105. package/dist/preview-engine/renderers-3M2FESR2.mjs +1 -0
  106. package/dist/preview-engine/{renderers-FEEIDQF3.mjs → renderers-4F7WLQD5.mjs} +1 -1
  107. package/dist/preview-engine/{renderers-OP6MKYRM.mjs → renderers-5KANN7XF.mjs} +1 -1
  108. package/dist/preview-engine/{renderers-TVRR7PGN.mjs → renderers-5TO2SXFR.mjs} +1 -1
  109. package/dist/preview-engine/{renderers-DR7UZ3QR.mjs → renderers-5UZ3YFBD.mjs} +1 -1
  110. package/dist/preview-engine/renderers-6LHIWKMZ.mjs +1 -0
  111. package/dist/preview-engine/{renderers-7F2KF5RE.mjs → renderers-6Z7DWAPH.mjs} +1 -1
  112. package/dist/preview-engine/renderers-77PDUMYI.mjs +1 -0
  113. package/dist/preview-engine/{renderers-3J3NCOAI.mjs → renderers-7C5RA3R5.mjs} +1 -1
  114. package/dist/preview-engine/renderers-7XHO6M3B.mjs +228 -0
  115. package/dist/preview-engine/{renderers-KJAOPYAU.mjs → renderers-A24KZK2Q.mjs} +1 -1
  116. package/dist/preview-engine/renderers-A43VCJ7X.mjs +1 -0
  117. package/dist/preview-engine/renderers-AKY464RY.mjs +1 -0
  118. package/dist/preview-engine/renderers-C5UO6PL5.mjs +1 -0
  119. package/dist/preview-engine/renderers-C64QSZO4.mjs +1 -0
  120. package/dist/preview-engine/renderers-CIRCR6NG.mjs +1 -0
  121. package/dist/preview-engine/renderers-CIWOPETY.mjs +1 -0
  122. package/dist/preview-engine/renderers-CUMVIVHI.mjs +1 -0
  123. package/dist/preview-engine/renderers-CZEZCELP.mjs +1 -0
  124. package/dist/preview-engine/{renderers-R3YVLWKV.mjs → renderers-ENMY4DKF.mjs} +1 -1
  125. package/dist/preview-engine/{renderers-AAENCA7X.mjs → renderers-FSI5KNGZ.mjs} +1 -1
  126. package/dist/preview-engine/renderers-FSQMWHQM.mjs +1 -0
  127. package/dist/preview-engine/renderers-FZEW5C23.mjs +1 -0
  128. package/dist/preview-engine/renderers-HCET2IML.mjs +1 -0
  129. package/dist/preview-engine/{renderers-LBX7GPDU.mjs → renderers-IHGAWLUF.mjs} +1 -1
  130. package/dist/preview-engine/renderers-IUOOC6K7.mjs +1 -0
  131. package/dist/preview-engine/{renderers-VXMR47WZ.mjs → renderers-KC6ZSKCW.mjs} +1 -1
  132. package/dist/preview-engine/renderers-KYYJLVIJ.mjs +1 -0
  133. package/dist/preview-engine/renderers-L4GE7WV3.mjs +1 -0
  134. package/dist/preview-engine/renderers-L6YDX6GS.mjs +1 -0
  135. package/dist/preview-engine/renderers-LRAFWKCO.mjs +1 -0
  136. package/dist/preview-engine/renderers-LU3XZWEB.mjs +1 -0
  137. package/dist/preview-engine/{renderers-4YYGKLDK.mjs → renderers-MD3PRFZL.mjs} +1 -1
  138. package/dist/preview-engine/renderers-MOEC2XZZ.mjs +1 -0
  139. package/dist/preview-engine/{renderers-RGDTRVZM.mjs → renderers-NCGH2WWJ.mjs} +1 -1
  140. package/dist/preview-engine/renderers-ND2WV4K3.mjs +1 -0
  141. package/dist/preview-engine/renderers-NJ5CWVVH.mjs +1 -0
  142. package/dist/preview-engine/renderers-NKXYPR3V.mjs +1 -0
  143. package/dist/preview-engine/{renderers-WVQQZQ6Y.mjs → renderers-NUAI4TO5.mjs} +1 -1
  144. package/dist/preview-engine/renderers-NWR66CGK.mjs +1 -0
  145. package/dist/preview-engine/renderers-O22WTBRM.mjs +1 -0
  146. package/dist/preview-engine/renderers-O55BEDQZ.mjs +1 -0
  147. package/dist/preview-engine/renderers-PBBA7LQB.mjs +1 -0
  148. package/dist/preview-engine/{renderers-BL7Z3FTF.mjs → renderers-PIIEUKFE.mjs} +1 -1
  149. package/dist/preview-engine/renderers-PPZK6VEW.mjs +1 -0
  150. package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +1 -0
  151. package/dist/preview-engine/{renderers-7TNEKJZS.mjs → renderers-QA2HKUJJ.mjs} +1 -1
  152. package/dist/preview-engine/renderers-RMEACSRL.mjs +1 -0
  153. package/dist/preview-engine/{renderers-AWRIELVX.mjs → renderers-RN2MHIFK.mjs} +1 -1
  154. package/dist/preview-engine/renderers-SEIAUKJF.mjs +1 -0
  155. package/dist/preview-engine/renderers-SP42LCSI.mjs +1 -0
  156. package/dist/preview-engine/{renderers-OE55O27K.mjs → renderers-T74CQCEN.mjs} +1 -1
  157. package/dist/preview-engine/renderers-T7SZA3BX.mjs +1 -0
  158. package/dist/preview-engine/{renderers-ZUQ2ZBYY.mjs → renderers-TGJSOKDY.mjs} +1 -1
  159. package/dist/preview-engine/renderers-TSBV4KPE.mjs +1 -0
  160. package/dist/preview-engine/{renderers-2SE5BLLB.mjs → renderers-U4M7ZCV4.mjs} +1 -1
  161. package/dist/preview-engine/{renderers-YEI4K4W4.mjs → renderers-V3AQO7AR.mjs} +1 -1
  162. package/dist/preview-engine/renderers-VADTDAHD.mjs +1 -0
  163. package/dist/preview-engine/renderers-VNNWI5C3.mjs +1 -0
  164. package/dist/preview-engine/{renderers-YYMRKHAA.mjs → renderers-WEYAHOBK.mjs} +1 -1
  165. package/dist/preview-engine/renderers-WZ75MLP3.mjs +1 -0
  166. package/dist/preview-engine/renderers-XB5R4UQA.mjs +1 -0
  167. package/dist/preview-engine/{renderers-YIVPMPQS.mjs → renderers-Y22VSOXF.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-Y53D5CQ7.mjs → renderers-YBIUZDGQ.mjs} +1 -1
  169. package/dist/preview-engine/renderers-YESJR4O7.mjs +1 -0
  170. package/dist/preview-engine/renderers-YKSRZRRT.mjs +1 -0
  171. package/dist/preview-engine/{renderers-V4VML5IG.mjs → renderers-ZACSHGNZ.mjs} +1 -1
  172. package/dist/preview-engine/signals.mjs +1 -1
  173. package/dist/preview-engine/src-NGVAJYHC.mjs +8 -0
  174. package/dist/{program-CqQDWfSV.mjs → program-CKpKkllV.mjs} +5 -6
  175. package/dist/program-CKpKkllV.mjs.map +1 -0
  176. package/dist/renderer/index.d.mts +2 -2
  177. package/dist/renderer/index.mjs +2 -2
  178. package/dist/renderer--Ac-dg4A.mjs +5 -0
  179. package/dist/renderer--N7TMqzU.mjs +5 -0
  180. package/dist/{renderer-DYfNgEhK.mjs → renderer--fkmiVjl.mjs} +2 -2
  181. package/dist/{renderer-DYfNgEhK.mjs.map → renderer--fkmiVjl.mjs.map} +1 -1
  182. package/dist/{renderer-JDLYPnRh.mjs → renderer-1r-Uq-Ae.mjs} +2 -2
  183. package/dist/{renderer-JDLYPnRh.mjs.map → renderer-1r-Uq-Ae.mjs.map} +1 -1
  184. package/dist/renderer-2ecmdOae.mjs +5 -0
  185. package/dist/{renderer-DZKZup7n.mjs → renderer-8QIwXh7O.mjs} +3 -3
  186. package/dist/{renderer-DZKZup7n.mjs.map → renderer-8QIwXh7O.mjs.map} +1 -1
  187. package/dist/{renderer-DCyp-jzQ.mjs → renderer-B-ur0Ej8.mjs} +3 -3
  188. package/dist/{renderer-DCyp-jzQ.mjs.map → renderer-B-ur0Ej8.mjs.map} +1 -1
  189. package/dist/{renderer-BD25uND8.mjs → renderer-B0piZg9r.mjs} +383 -171
  190. package/dist/renderer-B0piZg9r.mjs.map +1 -0
  191. package/dist/{renderer-Cn34qZC4.mjs → renderer-B2jjxsjO.mjs} +2 -2
  192. package/dist/{renderer-Cn34qZC4.mjs.map → renderer-B2jjxsjO.mjs.map} +1 -1
  193. package/dist/{renderer-DbO4xZBb.mjs → renderer-B39I6CQw.mjs} +3 -3
  194. package/dist/{renderer-DbO4xZBb.mjs.map → renderer-B39I6CQw.mjs.map} +1 -1
  195. package/dist/{renderer-CTr_Zi08.mjs → renderer-B522Dkdk.mjs} +3 -3
  196. package/dist/{renderer-CTr_Zi08.mjs.map → renderer-B522Dkdk.mjs.map} +1 -1
  197. package/dist/renderer-B5RJp5g-.mjs +5 -0
  198. package/dist/renderer-B7xyT1Vb.mjs +5 -0
  199. package/dist/{renderer-4a4koLCl.mjs → renderer-BAYTI6jj.mjs} +2 -2
  200. package/dist/{renderer-4a4koLCl.mjs.map → renderer-BAYTI6jj.mjs.map} +1 -1
  201. package/dist/{renderer-CCnrG0Pd.mjs → renderer-BAusZ6Vu.mjs} +2 -2
  202. package/dist/{renderer-CCnrG0Pd.mjs.map → renderer-BAusZ6Vu.mjs.map} +1 -1
  203. package/dist/renderer-BBeArN_x.mjs +5 -0
  204. package/dist/renderer-BCAZDu-r.mjs +5 -0
  205. package/dist/{renderer-bE6yZ_Ef.mjs → renderer-BF0hx_iJ.mjs} +3 -3
  206. package/dist/{renderer-bE6yZ_Ef.mjs.map → renderer-BF0hx_iJ.mjs.map} +1 -1
  207. package/dist/renderer-BJnhik7Y.mjs +5 -0
  208. package/dist/{renderer-kg8-ngnB.mjs → renderer-BPWDsufX.mjs} +2 -2
  209. package/dist/{renderer-kg8-ngnB.mjs.map → renderer-BPWDsufX.mjs.map} +1 -1
  210. package/dist/{renderer-DXu0nrzo.d.mts → renderer-BX7jS14r.d.mts} +2 -2
  211. package/dist/{renderer-DXu0nrzo.d.mts.map → renderer-BX7jS14r.d.mts.map} +1 -1
  212. package/dist/{renderer-DBN6SV8L.mjs → renderer-BXJXziIt.mjs} +2 -2
  213. package/dist/{renderer-DBN6SV8L.mjs.map → renderer-BXJXziIt.mjs.map} +1 -1
  214. package/dist/{renderer-4F4FypvN.mjs → renderer-BdyopiLC.mjs} +2 -2
  215. package/dist/{renderer-4F4FypvN.mjs.map → renderer-BdyopiLC.mjs.map} +1 -1
  216. package/dist/{renderer-wH_l-jMH.mjs → renderer-Bfk6A7UO.mjs} +3 -3
  217. package/dist/{renderer-wH_l-jMH.mjs.map → renderer-Bfk6A7UO.mjs.map} +1 -1
  218. package/dist/{renderer-DYT4iPi-.mjs → renderer-BgO6BA_z.mjs} +2 -2
  219. package/dist/{renderer-DYT4iPi-.mjs.map → renderer-BgO6BA_z.mjs.map} +1 -1
  220. package/dist/{renderer-Dv5yE4LE.mjs → renderer-BlPqTEii.mjs} +2 -2
  221. package/dist/{renderer-Dv5yE4LE.mjs.map → renderer-BlPqTEii.mjs.map} +1 -1
  222. package/dist/{renderer-CuK1lPnA.mjs → renderer-BlvGcyAN.mjs} +2 -2
  223. package/dist/{renderer-CuK1lPnA.mjs.map → renderer-BlvGcyAN.mjs.map} +1 -1
  224. package/dist/{renderer-DX5ZpEBB.mjs → renderer-BpIF1QIE.mjs} +3 -3
  225. package/dist/{renderer-DX5ZpEBB.mjs.map → renderer-BpIF1QIE.mjs.map} +1 -1
  226. package/dist/renderer-BxRW8MZO.mjs +5 -0
  227. package/dist/renderer-C-lfsEAN.mjs +5 -0
  228. package/dist/{renderer-DRLtfxdW.mjs → renderer-C41U1tK6.mjs} +95 -16
  229. package/dist/renderer-C41U1tK6.mjs.map +1 -0
  230. package/dist/renderer-C6nOFN4-.mjs +5 -0
  231. package/dist/{renderer-CpEU-TRR.mjs → renderer-C7L8Ceqr.mjs} +2 -2
  232. package/dist/{renderer-CpEU-TRR.mjs.map → renderer-C7L8Ceqr.mjs.map} +1 -1
  233. package/dist/{renderer-BMnX_-PZ.mjs → renderer-C7eFJf0_.mjs} +3 -3
  234. package/dist/{renderer-BMnX_-PZ.mjs.map → renderer-C7eFJf0_.mjs.map} +1 -1
  235. package/dist/renderer-C84TSQmS.mjs +5 -0
  236. package/dist/renderer-C8_6YofT.mjs +5 -0
  237. package/dist/{renderer-CeIXVu9F.mjs → renderer-CCycwCEB.mjs} +2 -2
  238. package/dist/{renderer-CeIXVu9F.mjs.map → renderer-CCycwCEB.mjs.map} +1 -1
  239. package/dist/{renderer-CNVzJIBz.mjs → renderer-CHr7MiYW.mjs} +3 -3
  240. package/dist/{renderer-CNVzJIBz.mjs.map → renderer-CHr7MiYW.mjs.map} +1 -1
  241. package/dist/renderer-COR66Sby.mjs +3 -0
  242. package/dist/renderer-COb3tOPG.mjs +5 -0
  243. package/dist/{renderer-Crl8q_vD.mjs → renderer-CQvmbRQ5.mjs} +3 -3
  244. package/dist/{renderer-Crl8q_vD.mjs.map → renderer-CQvmbRQ5.mjs.map} +1 -1
  245. package/dist/renderer-CSCIzaLy.mjs +5 -0
  246. package/dist/{renderer-DO15Nj-w.mjs → renderer-CYC32bDW.mjs} +3 -3
  247. package/dist/{renderer-DO15Nj-w.mjs.map → renderer-CYC32bDW.mjs.map} +1 -1
  248. package/dist/{renderer-NvGahExL.mjs → renderer-CcvvoKiZ.mjs} +3 -3
  249. package/dist/{renderer-NvGahExL.mjs.map → renderer-CcvvoKiZ.mjs.map} +1 -1
  250. package/dist/{renderer-vVKNp3ri.mjs → renderer-CiQhD8Gg.mjs} +3 -3
  251. package/dist/{renderer-vVKNp3ri.mjs.map → renderer-CiQhD8Gg.mjs.map} +1 -1
  252. package/dist/renderer-CmI4c8MS.mjs +5 -0
  253. package/dist/{renderer-Sj11W1xq.mjs → renderer-CpUJBOfb.mjs} +2 -2
  254. package/dist/renderer-CqVltdX9.mjs +5 -0
  255. package/dist/{renderer-j-3XB8YI.mjs → renderer-CwFqqpWY.mjs} +3 -3
  256. package/dist/{renderer-j-3XB8YI.mjs.map → renderer-CwFqqpWY.mjs.map} +1 -1
  257. package/dist/renderer-D-FpMzLY.mjs +5 -0
  258. package/dist/renderer-D-Oyn9mG.mjs +5 -0
  259. package/dist/renderer-D2QrkA8_.mjs +5 -0
  260. package/dist/{renderer-ClxmV_id.mjs → renderer-D47AEJE_.mjs} +2 -2
  261. package/dist/{renderer-ClxmV_id.mjs.map → renderer-D47AEJE_.mjs.map} +1 -1
  262. package/dist/{renderer-BrXkb-9N.mjs → renderer-D61B9bXF.mjs} +2 -2
  263. package/dist/{renderer-BrXkb-9N.mjs.map → renderer-D61B9bXF.mjs.map} +1 -1
  264. package/dist/renderer-D64r4iN-.mjs +5 -0
  265. package/dist/{renderer-DXsV3mZD.mjs → renderer-D7Al3_-5.mjs} +3 -3
  266. package/dist/{renderer-DXsV3mZD.mjs.map → renderer-D7Al3_-5.mjs.map} +1 -1
  267. package/dist/{renderer-Bw3tlr9I.mjs → renderer-D7r6onRT.mjs} +2 -2
  268. package/dist/{renderer-Bw3tlr9I.mjs.map → renderer-D7r6onRT.mjs.map} +1 -1
  269. package/dist/{renderer-Dypn26aP.mjs → renderer-D8bBHrWC.mjs} +3 -3
  270. package/dist/{renderer-Dypn26aP.mjs.map → renderer-D8bBHrWC.mjs.map} +1 -1
  271. package/dist/renderer-DCq6YkgP.mjs +5 -0
  272. package/dist/{renderer-BHwbnT6S.mjs → renderer-DDEkFbVI.mjs} +3 -3
  273. package/dist/{renderer-BHwbnT6S.mjs.map → renderer-DDEkFbVI.mjs.map} +1 -1
  274. package/dist/renderer-DDHG3GdR.mjs +5 -0
  275. package/dist/{renderer-DqMZiy5N.mjs → renderer-DEmYyaqj.mjs} +2 -2
  276. package/dist/{renderer-DqMZiy5N.mjs.map → renderer-DEmYyaqj.mjs.map} +1 -1
  277. package/dist/{renderer-CyELq6P6.mjs → renderer-DF-yvIrV.mjs} +2 -2
  278. package/dist/{renderer-CyELq6P6.mjs.map → renderer-DF-yvIrV.mjs.map} +1 -1
  279. package/dist/{renderer-XnWe1hSL.mjs → renderer-DFzI3yI_.mjs} +2 -2
  280. package/dist/{renderer-XnWe1hSL.mjs.map → renderer-DFzI3yI_.mjs.map} +1 -1
  281. package/dist/{renderer-Cx2Sw9Ib.mjs → renderer-DIw3UtEU.mjs} +3 -3
  282. package/dist/{renderer-Cx2Sw9Ib.mjs.map → renderer-DIw3UtEU.mjs.map} +1 -1
  283. package/dist/{renderer-D_Mf-Zft.d.mts → renderer-DKgPVOLL.d.mts} +2 -2
  284. package/dist/{renderer-D_Mf-Zft.d.mts.map → renderer-DKgPVOLL.d.mts.map} +1 -1
  285. package/dist/renderer-DMdNfcud.mjs +6 -0
  286. package/dist/{renderer-CaRPsrbX.mjs → renderer-DMvmf3T2.mjs} +2 -2
  287. package/dist/{renderer-jvgqy4Td.mjs → renderer-DNQvOrkY.mjs} +3 -3
  288. package/dist/{renderer-jvgqy4Td.mjs.map → renderer-DNQvOrkY.mjs.map} +1 -1
  289. package/dist/{renderer-DB7PM7nZ.mjs → renderer-DO-KbpYZ.mjs} +3 -3
  290. package/dist/{renderer-DB7PM7nZ.mjs.map → renderer-DO-KbpYZ.mjs.map} +1 -1
  291. package/dist/{renderer-CQkZUsvc.mjs → renderer-DTqDy2m9.mjs} +3 -3
  292. package/dist/{renderer-CQkZUsvc.mjs.map → renderer-DTqDy2m9.mjs.map} +1 -1
  293. package/dist/{renderer-DPUULdjh.mjs → renderer-DVCJjVn7.mjs} +2 -2
  294. package/dist/{renderer-DPUULdjh.mjs.map → renderer-DVCJjVn7.mjs.map} +1 -1
  295. package/dist/{renderer-C7SYbHgB.mjs → renderer-DX41niRU.mjs} +2 -2
  296. package/dist/{renderer-C7SYbHgB.mjs.map → renderer-DX41niRU.mjs.map} +1 -1
  297. package/dist/{renderer-BYIa_hnS.mjs → renderer-DXEWbnRF.mjs} +3 -3
  298. package/dist/{renderer-BYIa_hnS.mjs.map → renderer-DXEWbnRF.mjs.map} +1 -1
  299. package/dist/renderer-DZQXZ4lK.mjs +5 -0
  300. package/dist/{renderer-iA7rxZmR.mjs → renderer-DbRZe0Re.mjs} +3 -3
  301. package/dist/{renderer-iA7rxZmR.mjs.map → renderer-DbRZe0Re.mjs.map} +1 -1
  302. package/dist/renderer-DczJJLA1.mjs +5 -0
  303. package/dist/renderer-DfqJj9oe.mjs +5 -0
  304. package/dist/renderer-DgO9ihVJ.mjs +5 -0
  305. package/dist/renderer-DhgnQZYb.mjs +5 -0
  306. package/dist/{renderer-l-K6iZLC.mjs → renderer-DiY70S8S.mjs} +3 -3
  307. package/dist/{renderer-l-K6iZLC.mjs.map → renderer-DiY70S8S.mjs.map} +1 -1
  308. package/dist/renderer-DjxKjHMf.mjs +5 -0
  309. package/dist/{renderer-Qd-HCwKj.mjs → renderer-DkRSZg5g.mjs} +3 -3
  310. package/dist/{renderer-Qd-HCwKj.mjs.map → renderer-DkRSZg5g.mjs.map} +1 -1
  311. package/dist/{renderer-CaE0rp9j.mjs → renderer-DmkWrWAk.mjs} +2 -2
  312. package/dist/{renderer-CaE0rp9j.mjs.map → renderer-DmkWrWAk.mjs.map} +1 -1
  313. package/dist/{renderer-BUV6IH0o.mjs → renderer-DpruWmZU.mjs} +2 -2
  314. package/dist/{renderer-BUV6IH0o.mjs.map → renderer-DpruWmZU.mjs.map} +1 -1
  315. package/dist/renderer-DqLA5cdR.mjs +5 -0
  316. package/dist/{renderer-DfTnsfy9.mjs → renderer-DqvoMLca.mjs} +3 -3
  317. package/dist/{renderer-DfTnsfy9.mjs.map → renderer-DqvoMLca.mjs.map} +1 -1
  318. package/dist/{renderer-Dhi0Q1cI.mjs → renderer-DsEyjwfT.mjs} +70 -70
  319. package/dist/{renderer-Dhi0Q1cI.mjs.map → renderer-DsEyjwfT.mjs.map} +1 -1
  320. package/dist/renderer-Dudp6ZlH.mjs +5 -0
  321. package/dist/{renderer-Bw5jGUo5.mjs → renderer-EaLUCobW.mjs} +2 -2
  322. package/dist/{renderer-Bw5jGUo5.mjs.map → renderer-EaLUCobW.mjs.map} +1 -1
  323. package/dist/{renderer-Ca-LoeJh.mjs → renderer-GBmWjBvy.mjs} +2 -2
  324. package/dist/{renderer-Ca-LoeJh.mjs.map → renderer-GBmWjBvy.mjs.map} +1 -1
  325. package/dist/{renderer-DS-Gv-3w.mjs → renderer-Lth37j17.mjs} +2 -2
  326. package/dist/{renderer-BlUfAZyK.mjs → renderer-SSBL4M1o.mjs} +3 -3
  327. package/dist/{renderer-BlUfAZyK.mjs.map → renderer-SSBL4M1o.mjs.map} +1 -1
  328. package/dist/{renderer-DSM5c7UA.mjs → renderer-SWr3vbrV.mjs} +2 -2
  329. package/dist/{renderer-DSM5c7UA.mjs.map → renderer-SWr3vbrV.mjs.map} +1 -1
  330. package/dist/{renderer-BLrhcSex.mjs → renderer-WCZu2Rf5.mjs} +3 -3
  331. package/dist/{renderer-BLrhcSex.mjs.map → renderer-WCZu2Rf5.mjs.map} +1 -1
  332. package/dist/{renderer-D7FuHXiz.mjs → renderer-Xv6GfNUI.mjs} +2 -2
  333. package/dist/{renderer-D7FuHXiz.mjs.map → renderer-Xv6GfNUI.mjs.map} +1 -1
  334. package/dist/renderer-_jC5KIT1.mjs +5 -0
  335. package/dist/{renderer-8pS82_mX.mjs → renderer-bAKUeHF3.mjs} +3 -3
  336. package/dist/{renderer-8pS82_mX.mjs.map → renderer-bAKUeHF3.mjs.map} +1 -1
  337. package/dist/renderer-cTgAuVmJ.mjs +5 -0
  338. package/dist/{renderer-DjWBBISJ.mjs → renderer-cod5Ona9.mjs} +2 -2
  339. package/dist/{renderer-C55eLbl1.mjs → renderer-g_vrrAQU.mjs} +2 -2
  340. package/dist/{renderer-C55eLbl1.mjs.map → renderer-g_vrrAQU.mjs.map} +1 -1
  341. package/dist/{renderer-CT_aJBk2.mjs → renderer-hSCfnvaK.mjs} +3 -3
  342. package/dist/{renderer-CT_aJBk2.mjs.map → renderer-hSCfnvaK.mjs.map} +1 -1
  343. package/dist/{renderer-BuYRrBRf.mjs → renderer-ktWXVYka.mjs} +3 -3
  344. package/dist/{renderer-BuYRrBRf.mjs.map → renderer-ktWXVYka.mjs.map} +1 -1
  345. package/dist/renderer-nVKDvDLO.mjs +5 -0
  346. package/dist/{renderer-7Tx-L9Vf.mjs → renderer-oKRF4A0M.mjs} +2 -2
  347. package/dist/{renderer-7Tx-L9Vf.mjs.map → renderer-oKRF4A0M.mjs.map} +1 -1
  348. package/dist/{renderer-fv9WvK0d.mjs → renderer-pHWEHDnM.mjs} +3 -3
  349. package/dist/{renderer-fv9WvK0d.mjs.map → renderer-pHWEHDnM.mjs.map} +1 -1
  350. package/dist/renderer-pZ6_pUo1.mjs +5 -0
  351. package/dist/{renderer-DsGE9qtz.mjs → renderer-sCovEubT.mjs} +3 -3
  352. package/dist/{renderer-DsGE9qtz.mjs.map → renderer-sCovEubT.mjs.map} +1 -1
  353. package/dist/{renderer-BcHpcLq3.mjs → renderer-sYSkIUfo.mjs} +3 -3
  354. package/dist/{renderer-BcHpcLq3.mjs.map → renderer-sYSkIUfo.mjs.map} +1 -1
  355. package/dist/{renderer-4GwADfB0.mjs → renderer-zXPVLRlD.mjs} +3 -3
  356. package/dist/{renderer-4GwADfB0.mjs.map → renderer-zXPVLRlD.mjs.map} +1 -1
  357. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs → renderers-CP8CFWDs-DH2oktaC.mjs} +2 -2
  358. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs.map → renderers-CP8CFWDs-DH2oktaC.mjs.map} +1 -1
  359. package/dist/signals/index.d.mts +5 -5
  360. package/dist/signals/index.mjs +4 -4
  361. package/dist/{src-DggYlKaX.mjs → src-CK5rGVbh.mjs} +664 -72
  362. package/dist/src-CK5rGVbh.mjs.map +1 -0
  363. package/package.json +67 -58
  364. package/dist/dist-CnFcSau0.mjs.map +0 -1
  365. package/dist/index-B_nooAhS.d.mts.map +0 -1
  366. package/dist/index-Ced1Ry4S.d.mts.map +0 -1
  367. package/dist/index-Ds9_v60R.d.mts.map +0 -1
  368. package/dist/preview-engine/chunk-3OXRGTQ2.mjs +0 -2390
  369. package/dist/preview-engine/chunk-3U2A3RW4.mjs +0 -5
  370. package/dist/preview-engine/chunk-6E3JSPJN.mjs +0 -1
  371. package/dist/preview-engine/chunk-7EYVBRN3.mjs +0 -480
  372. package/dist/preview-engine/chunk-7WBDEZ2A.mjs +0 -1974
  373. package/dist/preview-engine/chunk-F4F2UDRX.mjs +0 -1
  374. package/dist/preview-engine/chunk-HPP52AQI.mjs +0 -4
  375. package/dist/preview-engine/chunk-PYSBWKIJ.mjs +0 -1
  376. package/dist/preview-engine/chunk-U2IFQMS3.mjs +0 -174
  377. package/dist/preview-engine/renderers-2GMY2ZNK.mjs +0 -1
  378. package/dist/preview-engine/renderers-2QJNKL7Q.mjs +0 -1
  379. package/dist/preview-engine/renderers-3OYU6O6F.mjs +0 -1
  380. package/dist/preview-engine/renderers-433Y2PCK.mjs +0 -1
  381. package/dist/preview-engine/renderers-4AGPGEL4.mjs +0 -1
  382. package/dist/preview-engine/renderers-54DBHGUW.mjs +0 -1
  383. package/dist/preview-engine/renderers-5M2O55U3.mjs +0 -1
  384. package/dist/preview-engine/renderers-6FVMDEAY.mjs +0 -1
  385. package/dist/preview-engine/renderers-6R7ZJ7DU.mjs +0 -1
  386. package/dist/preview-engine/renderers-75GCMFOD.mjs +0 -1
  387. package/dist/preview-engine/renderers-7LWLUCVQ.mjs +0 -1
  388. package/dist/preview-engine/renderers-BLDENIEV.mjs +0 -1
  389. package/dist/preview-engine/renderers-CCOEGTZJ.mjs +0 -228
  390. package/dist/preview-engine/renderers-CDB3YK3R.mjs +0 -1
  391. package/dist/preview-engine/renderers-D6D4XDFY.mjs +0 -1
  392. package/dist/preview-engine/renderers-DJVFQZYU.mjs +0 -1
  393. package/dist/preview-engine/renderers-DMXSV7VO.mjs +0 -1
  394. package/dist/preview-engine/renderers-EBMASIOE.mjs +0 -1
  395. package/dist/preview-engine/renderers-F262HDFS.mjs +0 -1
  396. package/dist/preview-engine/renderers-FMXKIF22.mjs +0 -1
  397. package/dist/preview-engine/renderers-GJKSZ6DR.mjs +0 -1
  398. package/dist/preview-engine/renderers-GR3RLYDZ.mjs +0 -1
  399. package/dist/preview-engine/renderers-GT3W2QIA.mjs +0 -1
  400. package/dist/preview-engine/renderers-IHC7HUK3.mjs +0 -1
  401. package/dist/preview-engine/renderers-J56ZGEVM.mjs +0 -1
  402. package/dist/preview-engine/renderers-KYM6352U.mjs +0 -1
  403. package/dist/preview-engine/renderers-LFXX6TWI.mjs +0 -1
  404. package/dist/preview-engine/renderers-NAHUPFPU.mjs +0 -1
  405. package/dist/preview-engine/renderers-NM3FZLHH.mjs +0 -1
  406. package/dist/preview-engine/renderers-NNB4BTJA.mjs +0 -1
  407. package/dist/preview-engine/renderers-OYVQW6QI.mjs +0 -1
  408. package/dist/preview-engine/renderers-P5RIFU3C.mjs +0 -1
  409. package/dist/preview-engine/renderers-QB7HJUTS.mjs +0 -1
  410. package/dist/preview-engine/renderers-QRQVOCDC.mjs +0 -1
  411. package/dist/preview-engine/renderers-QVFHJTZA.mjs +0 -1
  412. package/dist/preview-engine/renderers-R3WQIE4L.mjs +0 -1
  413. package/dist/preview-engine/renderers-SQBVOLG7.mjs +0 -1
  414. package/dist/preview-engine/renderers-TLXMYEDI.mjs +0 -1
  415. package/dist/preview-engine/renderers-X4S3WELJ.mjs +0 -1
  416. package/dist/preview-engine/renderers-XT7U25I7.mjs +0 -1
  417. package/dist/preview-engine/renderers-XVGLMBB3.mjs +0 -1
  418. package/dist/preview-engine/renderers-YUWU3TQZ.mjs +0 -1
  419. package/dist/preview-engine/renderers-ZNUD5OVO.mjs +0 -1
  420. package/dist/program-CqQDWfSV.mjs.map +0 -1
  421. package/dist/renderer-68XHoE2b.mjs +0 -5
  422. package/dist/renderer-AqUForA-.mjs +0 -5
  423. package/dist/renderer-B0J-uGBG.mjs +0 -5
  424. package/dist/renderer-BD25uND8.mjs.map +0 -1
  425. package/dist/renderer-BF2R0rwb.mjs +0 -5
  426. package/dist/renderer-BLrO9lqK.mjs +0 -5
  427. package/dist/renderer-BMy8jXhL.mjs +0 -5
  428. package/dist/renderer-BUxENp9L.mjs +0 -5
  429. package/dist/renderer-C-ebryrM.mjs +0 -5
  430. package/dist/renderer-C8Gbs3kr.mjs +0 -5
  431. package/dist/renderer-CFZvMv2-.mjs +0 -5
  432. package/dist/renderer-CGXW7mOs.mjs +0 -5
  433. package/dist/renderer-CNq6OGbb.mjs +0 -5
  434. package/dist/renderer-CO-Ddz6-.mjs +0 -5
  435. package/dist/renderer-CRdxAsP7.mjs +0 -5
  436. package/dist/renderer-CZLo0ALi.mjs +0 -5
  437. package/dist/renderer-CdvVUkhR.mjs +0 -5
  438. package/dist/renderer-Cjg7kmTq.mjs +0 -5
  439. package/dist/renderer-Cvz22ZSh.mjs +0 -3
  440. package/dist/renderer-CxKymhVa.mjs +0 -5
  441. package/dist/renderer-Cxlpu3pN.mjs +0 -5
  442. package/dist/renderer-Cz6qZ2Ii.mjs +0 -5
  443. package/dist/renderer-DDGvF2YA.mjs +0 -5
  444. package/dist/renderer-DFxtOKpi.mjs +0 -5
  445. package/dist/renderer-DGBNjTsB.mjs +0 -6
  446. package/dist/renderer-DRLtfxdW.mjs.map +0 -1
  447. package/dist/renderer-DUFcdZmw.mjs +0 -5
  448. package/dist/renderer-DUMu6EOH.mjs +0 -5
  449. package/dist/renderer-DdULrvJo.mjs +0 -5
  450. package/dist/renderer-DoaOOP6_.mjs +0 -5
  451. package/dist/renderer-DqmZqV-a.mjs +0 -5
  452. package/dist/renderer-LxTQ2E-G.mjs +0 -5
  453. package/dist/renderer-SpU-RddZ.mjs +0 -5
  454. package/dist/renderer-W6ahCM9z.mjs +0 -5
  455. package/dist/renderer-gGqtzw-S.mjs +0 -5
  456. package/dist/renderer-l0Wn1AoV.mjs +0 -5
  457. package/dist/renderer-rpXHvMZG.mjs +0 -5
  458. package/dist/renderer-twdsKOiz.mjs +0 -5
  459. package/dist/renderer-uJz-eIqO.mjs +0 -5
  460. package/dist/src-DggYlKaX.mjs.map +0 -1
@@ -0,0 +1,5 @@
1
+ import "./chunk-BcJoO4Nm.mjs";
2
+ import "./dist-C1cCW7Bt.mjs";
3
+ import { t as renderers_default } from "./renderer-sYSkIUfo.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,6 +1,6 @@
1
1
  import { n as defineRenderer, s as resolveHandleParam } from "./renderer-mNSyac1V.mjs";
2
2
  import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-DVMepKaO.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-BoyykRdD.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-CMaa63nz.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-Bw5jGUo5.mjs.map
256
+ //# sourceMappingURL=renderer-EaLUCobW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-Bw5jGUo5.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":";;;;;;AAMA,MAAM,aAAa;AACnB,MAAM,iBAAiB,eAAe,CAAC,MAAM,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE;CACrG,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;CAC/E,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,cAAc,EAAE,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,aAAa,iGAAiG,CAAC,CAAC,OAAO;AAC3K,MAAM,2BAA2B,eAAe;AAChD,MAAM,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,kBAAkB,CAAC;AAW5E,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAqB7B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,sBAAsB,IAAI,aAAa,EAAE;AAC/C,SAAS,qBAAqB,QAAQ,cAAc;CACnD,MAAM,SAAS,oBAAoB,IAAI,OAAO;AAC9C,KAAI,OAAQ,QAAO;CACnB,MAAM,wBAAwB,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC1E,MAAM,sBAAsB,wBAAwB,QAAQ;EAC3D;EACA;EACA;EACA,CAAC;CACF,MAAM,sBAAsB,eAAe,QAAQ,EAAE;CACrD,MAAM,MAAM;EACX;EACA;EACA;EACA,kBAAkB,yBAAyB,QAAQ;GAClD,QAAQ,OAAO,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;GACnE,SAAS,OAAO,qBAAqB,EAAE,kBAAkB;IACxD;IACA;IACA;IACA,EAAE,CAAC;GACJ,QAAQ;GACR,CAAC;EACF;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,MAAM,iBAAiB,OAAO,SAAS;CACtC,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,cAAc,CAAC,GAAI;CAClC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,SAAS,GAAG,SAAS,OAAO,KAAK,GAAG,OAAO,CAAC,KAAK;CACvD,MAAM,gBAAgB,UAAU,aAAa,WAAW,GAAG,WAAW,QAAQ,mBAAmB,GAAG,QAAQ,UAAU,aAAa,UAAU,SAAS;CACtJ,MAAM,YAAY,aAAa,GAAG,gBAAgB,OAAO,GAAG,UAAU,EAAE,EAAE,IAAI,WAAW;CACzF,MAAM,cAAc,aAAa,GAAG,uBAAuB,OAAO,GAAG,iBAAiB,EAAE,EAAE,GAAG,GAAG;CAChG,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,WAAW;CACtE,MAAM,EAAE,kBAAkB,UAAU,uBAAuB,SAAS,qBAAqB,SAAS,qBAAqB,cAAc,qBAAqB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAC1L,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;CAC3E,MAAM,gBAAgB;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,MAAM,iBAAiB,KAAK,WAAW,kBAAkB,eAAe,KAAK,GAAG,OAAO,GAAG,SAAS;CACnG,MAAM,aAAa,cAAc,WAAW,aAAa;CACzD,MAAM,eAAe,cAAc,aAAa,eAAe;CAC/D,MAAM,4BAA4B,UAAU,gBAAgB,IAAI,OAAO,gBAAgB;EACtF,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU,SAAS,YAAY;IAC/B;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU,YAAY,YAAY;IAClC;GACD;EACD,CAAC;AACF,qBAAoB,KAAK,UAAU;AACnC,qBAAoB,KAAK,YAAY;AACrC,qBAAoB,KAAK,GAAG,cAAc,OAAO,IAAI;AACrD,qBAAoB,KAAK,UAAU,eAAe,IAAI;AACtD,qBAAoB,KAAK,YAAY,eAAe,IAAI;AACxD,qBAAoB,KAAK;CACzB,MAAM,UAAU,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC/D;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC/D;EACA;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;CACF,MAAM,eAAe,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC;AACF,qBAAoB,KAAK;AACzB,qBAAoB,KAAK;AACzB,qBAAoB,KAAK;CACzB,MAAM,UAAU,IAAI,SAAS,mBAAmB,oBAAoB;AACpE,oBAAmB,SAAS,QAAQ,YAAY,EAAE,UAAU;EAC3D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,SAAS;IAC7B,CAAC;GACF,CAAC;EACF,yBAAyB,QAAQ,OAAO;EACxC;EACA,CAAC;AACF,qBAAoB,KAAK;AACzB,qBAAoB,KAAK;AACzB,qBAAoB,KAAK;CACzB,MAAM,UAAU,IAAI,SAAS,mBAAmB,oBAAoB;AACpE,oBAAmB,SAAS,QAAQ,YAAY,EAAE,UAAU;EAC3D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,SAAS;IAC7B,CAAC;GACF,CAAC;EACF,yBAAyB,SAAS,OAAO;EACzC;EACA,CAAC;AACF,qBAAoB,MAAM,SAAS,GAAG,WAAW,EAAE;;AAKpD,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,CAAC"}
1
+ {"version":3,"file":"renderer-EaLUCobW.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-mNSyac1V.mjs";
2
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BoyykRdD.mjs";
2
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
3
3
 
4
4
  //#region ../../nodes/node-curves/dist/renderers-DzdBU1io.mjs
5
5
  /**
@@ -639,4 +639,4 @@ var renderers_default = rendererNode;
639
639
 
640
640
  //#endregion
641
641
  export { renderers_default as n, rendererNode as t };
642
- //# sourceMappingURL=renderer-Ca-LoeJh.mjs.map
642
+ //# sourceMappingURL=renderer-GBmWjBvy.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-Ca-LoeJh.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-GBmWjBvy.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import "./chunk-BcJoO4Nm.mjs";
2
- import "./dist-CnFcSau0.mjs";
3
- import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-DCyp-jzQ.mjs";
2
+ import "./dist-C1cCW7Bt.mjs";
3
+ import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-B-ur0Ej8.mjs";
4
4
 
5
5
  export { RefractionCaustics3DWebGPURenderer, renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-mNSyac1V.mjs";
2
2
  import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-DVMepKaO.mjs";
3
- import { Rn as signalRegistry } from "./dist-CnFcSau0.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-BoyykRdD.mjs";
3
+ import { Rn as signalRegistry } from "./dist-C1cCW7Bt.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-CMaa63nz.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-BlUfAZyK.mjs.map
848
+ //# sourceMappingURL=renderer-SSBL4M1o.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BlUfAZyK.mjs","names":[],"sources":["../../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_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_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\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 strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; 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\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tblurUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]),\n\tsignalTextureLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tmodule: blurModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tconst unwrapped = unwrapFrameParam(op[configKey], compositionFrame, fps);\n\t\t\tif (unwrapped.gpuTextureView) {\n\t\t\t\tgpuTextureView = unwrapped.gpuTextureView;\n\t\t\t\thasStaticSig = true;\n\t\t\t}\n\t\t\tconst rawVal = unwrapped.value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => 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: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(outTex1, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t}\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-rcrwEq-B.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-SSBL4M1o.mjs","names":[],"sources":["../../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_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_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\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 strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; 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\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tblurUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]),\n\tsignalTextureLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tmodule: blurModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tconst unwrapped = unwrapFrameParam(op[configKey], compositionFrame, fps);\n\t\t\tif (unwrapped.gpuTextureView) {\n\t\t\t\tgpuTextureView = unwrapped.gpuTextureView;\n\t\t\t\thasStaticSig = true;\n\t\t\t}\n\t\t\tconst rawVal = unwrapped.value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => 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: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(outTex1, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t}\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-rcrwEq-B.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { l as solveHomography, n as defineRenderer } from "./renderer-mNSyac1V.mjs";
2
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BoyykRdD.mjs";
2
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
3
3
 
4
4
  //#region ../../nodes/node-corner-pin/dist/renderers-pM5Tx32P.mjs
5
5
  function getDefaultPoints() {
@@ -145,4 +145,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer
145
145
 
146
146
  //#endregion
147
147
  export { renderers_default as t };
148
- //# sourceMappingURL=renderer-DSM5c7UA.mjs.map
148
+ //# sourceMappingURL=renderer-SWr3vbrV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DSM5c7UA.mjs","names":[],"sources":["../../../nodes/node-corner-pin/dist/renderers-pM5Tx32P.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { solveHomography } from \"@framefields/node-sdk\";\n\n//#region src/shared/utils.ts\nfunction getDefaultPoints() {\n\treturn [\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 100\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 100\n\t\t}\n\t];\n}\n/**\n* Homography mapping the corner-pin quad (percent coordinates, TL, TR, BL, BR)\n* to the unit square it samples from. Falls back to the identity quad.\n*/\nfunction solveCornerPinHomography(targetPoints) {\n\treturn solveHomography((targetPoints && targetPoints.length === 4 ? targetPoints : getDefaultPoints()).map((p) => ({\n\t\tx: p.x / 100,\n\t\ty: p.y / 100\n\t})));\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst cornerPinWgsl = `\nstruct CornerPinUniforms {\n\tmatrix_row0 : vec4<f32>,\n\tmatrix_row1 : vec4<f32>,\n\tmatrix_row2 : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CornerPinUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet x = in.uv.x;\n\tlet y = in.uv.y;\n\n\tlet d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;\n\tif (abs(d) < 1e-6) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;\n\tlet src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;\n\n\tif (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);\n\treturn color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getCornerPinResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst pinUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst pinTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpinPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CornerPinPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"corner_pin.wgsl\",\n\t\t\t\t\tcode: cornerPinWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [pinUniformLayout, pinTextureLayout],\n\t\t\t\tformat,\n\t\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t\t}),\n\t\t\tpinUniformLayout,\n\t\t\tpinTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst CornerPinWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"CornerPin\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\targs.pass.end();\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst h = solveCornerPinHomography(op.points || []);\n\tconst uniformData = new Float32Array(12);\n\tuniformData[0] = h[0];\n\tuniformData[1] = h[1];\n\tuniformData[2] = h[2];\n\tuniformData[3] = 0;\n\tuniformData[4] = h[3];\n\tuniformData[5] = h[4];\n\tuniformData[6] = h[5];\n\tuniformData[7] = 0;\n\tuniformData[8] = h[6];\n\tuniformData[9] = h[7];\n\tuniformData[10] = h[8];\n\tuniformData[11] = 0;\n\tconst { pinPipeline: pipeline, pinUniformLayout: uLayout, pinTextureLayout: tLayout } = getCornerPinResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uniformBindGroup = 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\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, childTex, sampler);\n\tconst outTex = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uniformBindGroup, textureBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer });\n\n//#endregion\nexport { getDefaultPoints as n, solveCornerPinHomography as r, renderers_default as t };\n//# sourceMappingURL=renderers-pM5Tx32P.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-SWr3vbrV.mjs","names":[],"sources":["../../../nodes/node-corner-pin/dist/renderers-pM5Tx32P.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { solveHomography } from \"@framefields/node-sdk\";\n\n//#region src/shared/utils.ts\nfunction getDefaultPoints() {\n\treturn [\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 100\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 100\n\t\t}\n\t];\n}\n/**\n* Homography mapping the corner-pin quad (percent coordinates, TL, TR, BL, BR)\n* to the unit square it samples from. Falls back to the identity quad.\n*/\nfunction solveCornerPinHomography(targetPoints) {\n\treturn solveHomography((targetPoints && targetPoints.length === 4 ? targetPoints : getDefaultPoints()).map((p) => ({\n\t\tx: p.x / 100,\n\t\ty: p.y / 100\n\t})));\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst cornerPinWgsl = `\nstruct CornerPinUniforms {\n\tmatrix_row0 : vec4<f32>,\n\tmatrix_row1 : vec4<f32>,\n\tmatrix_row2 : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CornerPinUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet x = in.uv.x;\n\tlet y = in.uv.y;\n\n\tlet d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;\n\tif (abs(d) < 1e-6) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;\n\tlet src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;\n\n\tif (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);\n\treturn color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getCornerPinResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst pinUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst pinTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpinPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CornerPinPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"corner_pin.wgsl\",\n\t\t\t\t\tcode: cornerPinWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [pinUniformLayout, pinTextureLayout],\n\t\t\t\tformat,\n\t\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t\t}),\n\t\t\tpinUniformLayout,\n\t\t\tpinTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst CornerPinWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"CornerPin\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\targs.pass.end();\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst h = solveCornerPinHomography(op.points || []);\n\tconst uniformData = new Float32Array(12);\n\tuniformData[0] = h[0];\n\tuniformData[1] = h[1];\n\tuniformData[2] = h[2];\n\tuniformData[3] = 0;\n\tuniformData[4] = h[3];\n\tuniformData[5] = h[4];\n\tuniformData[6] = h[5];\n\tuniformData[7] = 0;\n\tuniformData[8] = h[6];\n\tuniformData[9] = h[7];\n\tuniformData[10] = h[8];\n\tuniformData[11] = 0;\n\tconst { pinPipeline: pipeline, pinUniformLayout: uLayout, pinTextureLayout: tLayout } = getCornerPinResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uniformBindGroup = 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\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, childTex, sampler);\n\tconst outTex = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uniformBindGroup, textureBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer });\n\n//#endregion\nexport { getDefaultPoints as n, solveCornerPinHomography as r, renderers_default as t };\n//# sourceMappingURL=renderers-pM5Tx32P.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
2
- import { Rn as signalRegistry, W as lutStore } from "./dist-CnFcSau0.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-BoyykRdD.mjs";
2
+ import { Rn as signalRegistry, W as lutStore } from "./dist-C1cCW7Bt.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CMaa63nz.mjs";
4
4
 
5
5
  //#region ../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs
6
6
  const LUT_3D_SHADER = `
@@ -219,4 +219,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });
219
219
 
220
220
  //#endregion
221
221
  export { renderers_default as t };
222
- //# sourceMappingURL=renderer-BLrhcSex.mjs.map
222
+ //# sourceMappingURL=renderer-WCZu2Rf5.mjs.map