framefields 2.9.2 → 2.9.3

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 (319) hide show
  1. package/NOTICE.md +14 -0
  2. package/README.md +1 -5
  3. package/dist/audio/index.d.mts +5 -4
  4. package/dist/audio/index.mjs +13 -13
  5. package/dist/{audio-BfQg37MW.mjs → audio-B6RmYOPe.mjs} +4 -4
  6. package/dist/{audio-BfQg37MW.mjs.map → audio-B6RmYOPe.mjs.map} +1 -1
  7. package/dist/{audio-a0MFkK6J.mjs → audio-BlDbnteH.mjs} +1 -1
  8. package/dist/{audio-a0MFkK6J.mjs.map → audio-BlDbnteH.mjs.map} +1 -1
  9. package/dist/{audio-Ccpl9mjV.d.mts → audio-D6tBMbHh.d.mts} +4 -3
  10. package/dist/audio-D6tBMbHh.d.mts.map +1 -0
  11. package/dist/{check-result-C3jlgV2i.mjs → check-result-Bj7g62ka.mjs} +1 -1
  12. package/dist/{check-result-C3jlgV2i.mjs.map → check-result-Bj7g62ka.mjs.map} +1 -1
  13. package/dist/cli/check-worker.mjs +50 -50
  14. package/dist/cli.mjs +1 -1
  15. package/dist/components/index.d.mts +14 -11
  16. package/dist/components/index.mjs +47 -47
  17. package/dist/dist-BlulwErl.mjs +3 -0
  18. package/dist/{dist-BlIrsfcn.mjs → dist-ByxHoMQI.mjs} +1 -1
  19. package/dist/{dist-BlIrsfcn.mjs.map → dist-ByxHoMQI.mjs.map} +1 -1
  20. package/dist/{dist-Buaaj-Ul.mjs → dist-Cn8bDsQF.mjs} +1 -1
  21. package/dist/{dist-Buaaj-Ul.mjs.map → dist-Cn8bDsQF.mjs.map} +1 -1
  22. package/dist/{dist-C1cCW7Bt.mjs → dist-D12-a3-x.mjs} +3 -3
  23. package/dist/{dist-C1cCW7Bt.mjs.map → dist-D12-a3-x.mjs.map} +1 -1
  24. package/dist/{dist-C8Xq3zgx.mjs → dist-DEUU6sNe.mjs} +4 -4
  25. package/dist/{dist-C8Xq3zgx.mjs.map → dist-DEUU6sNe.mjs.map} +1 -1
  26. package/dist/{dist-DVMepKaO.mjs → dist-DL1GwJvs.mjs} +2 -2
  27. package/dist/{dist-DVMepKaO.mjs.map → dist-DL1GwJvs.mjs.map} +1 -1
  28. package/dist/dist-Dq5TkNDI.mjs +1434 -0
  29. package/dist/dist-Dq5TkNDI.mjs.map +1 -0
  30. package/dist/effects/index.d.mts +6 -4
  31. package/dist/effects/index.mjs +36 -36
  32. package/dist/{effects-CemgqEPv.mjs → effects-CViUoQSV.mjs} +3 -3
  33. package/dist/{effects-CemgqEPv.mjs.map → effects-CViUoQSV.mjs.map} +1 -1
  34. package/dist/fonts/index.d.mts +1 -1
  35. package/dist/fonts/index.mjs +3 -3
  36. package/dist/{fonts-BW0pPcvJ.mjs → fonts-B0U2KO5I.mjs} +2 -2
  37. package/dist/{fonts-BW0pPcvJ.mjs.map → fonts-B0U2KO5I.mjs.map} +1 -1
  38. package/dist/{gpu-CMaa63nz.mjs → gpu-zFNrvhV9.mjs} +2 -2
  39. package/dist/{gpu-CMaa63nz.mjs.map → gpu-zFNrvhV9.mjs.map} +1 -1
  40. package/dist/index-9_4X2ro1.d.mts +2402 -0
  41. package/dist/index-9_4X2ro1.d.mts.map +1 -0
  42. package/dist/{index-Bnh42ouE.d.mts → index-B9Lm1x8i.d.mts} +9 -8
  43. package/dist/index-B9Lm1x8i.d.mts.map +1 -0
  44. package/dist/{index-BfDFmIBE.d.mts → index-BuYtrhzL.d.mts} +1 -1
  45. package/dist/{index-BfDFmIBE.d.mts.map → index-BuYtrhzL.d.mts.map} +1 -1
  46. package/dist/{index-D5UDyVMb.d.mts → index-Bzo1uj8h.d.mts} +4 -2401
  47. package/dist/index-Bzo1uj8h.d.mts.map +1 -0
  48. package/dist/{index-CQ-bbZk3.d.mts → index-C6GcuYVA.d.mts} +6 -1164
  49. package/dist/index-C6GcuYVA.d.mts.map +1 -0
  50. package/dist/{index-BIjMAW1h.d.mts → index-CgGM31I9.d.mts} +2 -2
  51. package/dist/{index-BIjMAW1h.d.mts.map → index-CgGM31I9.d.mts.map} +1 -1
  52. package/dist/index-DBhswLMO.d.mts +330 -0
  53. package/dist/index-DBhswLMO.d.mts.map +1 -0
  54. package/dist/{index-CJL0JAU8.d.mts → index-V0ZQ4JN6.d.mts} +2 -2
  55. package/dist/{index-CJL0JAU8.d.mts.map → index-V0ZQ4JN6.d.mts.map} +1 -1
  56. package/dist/{index-7Z9_a_iB.d.mts → index-f4IF1vRH.d.mts} +3 -3
  57. package/dist/{index-7Z9_a_iB.d.mts.map → index-f4IF1vRH.d.mts.map} +1 -1
  58. package/dist/index-svAgwTY_.d.mts +1163 -0
  59. package/dist/index-svAgwTY_.d.mts.map +1 -0
  60. package/dist/{index-CFoAmh7q.d.mts → index-w28KUM9A.d.mts} +3 -3
  61. package/dist/{index-CFoAmh7q.d.mts.map → index-w28KUM9A.d.mts.map} +1 -1
  62. package/dist/index.d.mts +15 -12
  63. package/dist/index.mjs +58 -57
  64. package/dist/preview/index.d.mts +4 -3
  65. package/dist/preview/index.mjs +12 -12
  66. package/dist/{preview-DvP8AZuV.mjs → preview-ZKJ_zTmd.mjs} +3 -3
  67. package/dist/{preview-DvP8AZuV.mjs.map → preview-ZKJ_zTmd.mjs.map} +1 -1
  68. package/dist/preview-engine/{chunk-KXLXP66K.mjs → chunk-Q62GPWGD.mjs} +23 -23
  69. package/dist/preview-engine/components.mjs +1 -1
  70. package/dist/preview-engine/framefields.mjs +1 -1
  71. package/dist/{program-CKpKkllV.mjs → program-xjIwjKb6.mjs} +4 -4
  72. package/dist/{program-CKpKkllV.mjs.map → program-xjIwjKb6.mjs.map} +1 -1
  73. package/dist/renderer/index.d.mts +3 -2
  74. package/dist/renderer/index.mjs +3 -3
  75. package/dist/renderer-129U3pc9.mjs +5 -0
  76. package/dist/renderer-2phFTFxQ.mjs +5 -0
  77. package/dist/{renderer-Bfk6A7UO.mjs → renderer-5qJPGvVL.mjs} +5 -5
  78. package/dist/{renderer-Bfk6A7UO.mjs.map → renderer-5qJPGvVL.mjs.map} +1 -1
  79. package/dist/renderer-9muKpDeE.mjs +5 -0
  80. package/dist/{renderer-B522Dkdk.mjs → renderer-AUK_ZS3p.mjs} +4 -4
  81. package/dist/{renderer-B522Dkdk.mjs.map → renderer-AUK_ZS3p.mjs.map} +1 -1
  82. package/dist/{renderer-DKgPVOLL.d.mts → renderer-B-inTgyb.d.mts} +2 -2
  83. package/dist/{renderer-DKgPVOLL.d.mts.map → renderer-B-inTgyb.d.mts.map} +1 -1
  84. package/dist/{renderer-BF0hx_iJ.mjs → renderer-B3IRvukr.mjs} +5 -5
  85. package/dist/{renderer-BF0hx_iJ.mjs.map → renderer-B3IRvukr.mjs.map} +1 -1
  86. package/dist/renderer-B5Dhv6j9.mjs +5 -0
  87. package/dist/{renderer-DO-KbpYZ.mjs → renderer-B6TjJi1g.mjs} +5 -5
  88. package/dist/{renderer-DO-KbpYZ.mjs.map → renderer-B6TjJi1g.mjs.map} +1 -1
  89. package/dist/{renderer-D61B9bXF.mjs → renderer-B78W9uad.mjs} +4 -4
  90. package/dist/{renderer-D61B9bXF.mjs.map → renderer-B78W9uad.mjs.map} +1 -1
  91. package/dist/{renderer-BPWDsufX.mjs → renderer-B7kOF_Az.mjs} +3 -3
  92. package/dist/{renderer-BPWDsufX.mjs.map → renderer-B7kOF_Az.mjs.map} +1 -1
  93. package/dist/renderer-BBUgCS3C.mjs +5 -0
  94. package/dist/{renderer-C7eFJf0_.mjs → renderer-BG6bkKtY.mjs} +5 -5
  95. package/dist/{renderer-C7eFJf0_.mjs.map → renderer-BG6bkKtY.mjs.map} +1 -1
  96. package/dist/{renderer-B39I6CQw.mjs → renderer-BJKzZwyn.mjs} +4 -4
  97. package/dist/{renderer-B39I6CQw.mjs.map → renderer-BJKzZwyn.mjs.map} +1 -1
  98. package/dist/{renderer-DqvoMLca.mjs → renderer-BJQt0RiZ.mjs} +5 -5
  99. package/dist/{renderer-DqvoMLca.mjs.map → renderer-BJQt0RiZ.mjs.map} +1 -1
  100. package/dist/renderer-BKXM28Mx.mjs +5 -0
  101. package/dist/renderer-BKqm6xdf.mjs +5 -0
  102. package/dist/{renderer-DiY70S8S.mjs → renderer-BMP_lYMk.mjs} +4 -4
  103. package/dist/{renderer-DiY70S8S.mjs.map → renderer-BMP_lYMk.mjs.map} +1 -1
  104. package/dist/renderer-BMfMMf0R.mjs +5 -0
  105. package/dist/{renderer-DkRSZg5g.mjs → renderer-BNbMi9CI.mjs} +5 -5
  106. package/dist/{renderer-DkRSZg5g.mjs.map → renderer-BNbMi9CI.mjs.map} +1 -1
  107. package/dist/{renderer-D7Al3_-5.mjs → renderer-BPYIqtNg.mjs} +5 -5
  108. package/dist/{renderer-D7Al3_-5.mjs.map → renderer-BPYIqtNg.mjs.map} +1 -1
  109. package/dist/renderer-BPsjEnnl.mjs +5 -0
  110. package/dist/{renderer-DDEkFbVI.mjs → renderer-BQOeeXTr.mjs} +5 -5
  111. package/dist/{renderer-DDEkFbVI.mjs.map → renderer-BQOeeXTr.mjs.map} +1 -1
  112. package/dist/{renderer-GBmWjBvy.mjs → renderer-BRWjLiHX.mjs} +3 -3
  113. package/dist/{renderer-GBmWjBvy.mjs.map → renderer-BRWjLiHX.mjs.map} +1 -1
  114. package/dist/{renderer-_iMAO698.mjs → renderer-BVql26Ay.mjs} +2 -2
  115. package/dist/{renderer-_iMAO698.mjs.map → renderer-BVql26Ay.mjs.map} +1 -1
  116. package/dist/{renderer-CHr7MiYW.mjs → renderer-BWMzjSgf.mjs} +5 -5
  117. package/dist/{renderer-CHr7MiYW.mjs.map → renderer-BWMzjSgf.mjs.map} +1 -1
  118. package/dist/{renderer-pHWEHDnM.mjs → renderer-BYqrtBvd.mjs} +5 -5
  119. package/dist/{renderer-pHWEHDnM.mjs.map → renderer-BYqrtBvd.mjs.map} +1 -1
  120. package/dist/{renderer-CwFqqpWY.mjs → renderer-BZmmekE8.mjs} +4 -4
  121. package/dist/{renderer-CwFqqpWY.mjs.map → renderer-BZmmekE8.mjs.map} +1 -1
  122. package/dist/{renderer-D47AEJE_.mjs → renderer-BcO7LUla.mjs} +3 -3
  123. package/dist/{renderer-D47AEJE_.mjs.map → renderer-BcO7LUla.mjs.map} +1 -1
  124. package/dist/{renderer-BlvGcyAN.mjs → renderer-BdbI_u9w.mjs} +3 -3
  125. package/dist/{renderer-BlvGcyAN.mjs.map → renderer-BdbI_u9w.mjs.map} +1 -1
  126. package/dist/{renderer-DPAD6fL1.mjs → renderer-Be5hfwSd.mjs} +74 -74
  127. package/dist/{renderer-DPAD6fL1.mjs.map → renderer-Be5hfwSd.mjs.map} +1 -1
  128. package/dist/{renderer-BAYTI6jj.mjs → renderer-BfbSvElt.mjs} +4 -4
  129. package/dist/{renderer-BAYTI6jj.mjs.map → renderer-BfbSvElt.mjs.map} +1 -1
  130. package/dist/{renderer-BpIF1QIE.mjs → renderer-BgDLCCuq.mjs} +5 -5
  131. package/dist/{renderer-BpIF1QIE.mjs.map → renderer-BgDLCCuq.mjs.map} +1 -1
  132. package/dist/renderer-Bofr6f88.mjs +6 -0
  133. package/dist/renderer-BqoGcujR.mjs +5 -0
  134. package/dist/renderer-BvuBt2aH.mjs +5 -0
  135. package/dist/renderer-BxTgXHu1.mjs +5 -0
  136. package/dist/renderer-Bz2Rrz60.mjs +5 -0
  137. package/dist/{renderer-g_vrrAQU.mjs → renderer-C06U4c9k.mjs} +3 -3
  138. package/dist/{renderer-g_vrrAQU.mjs.map → renderer-C06U4c9k.mjs.map} +1 -1
  139. package/dist/{renderer-D7r6onRT.mjs → renderer-C3Iev6zu.mjs} +4 -4
  140. package/dist/{renderer-D7r6onRT.mjs.map → renderer-C3Iev6zu.mjs.map} +1 -1
  141. package/dist/{renderer-CpUJBOfb.mjs → renderer-C3tVrzyT.mjs} +3 -3
  142. package/dist/{renderer-SWr3vbrV.mjs → renderer-C4yKI8MT.mjs} +3 -3
  143. package/dist/{renderer-SWr3vbrV.mjs.map → renderer-C4yKI8MT.mjs.map} +1 -1
  144. package/dist/{renderer-Xv6GfNUI.mjs → renderer-C6st34I6.mjs} +3 -3
  145. package/dist/{renderer-Xv6GfNUI.mjs.map → renderer-C6st34I6.mjs.map} +1 -1
  146. package/dist/{renderer-sCovEubT.mjs → renderer-C7MAqpIS.mjs} +4 -4
  147. package/dist/{renderer-sCovEubT.mjs.map → renderer-C7MAqpIS.mjs.map} +1 -1
  148. package/dist/renderer-CBjG8rjE.mjs +5 -0
  149. package/dist/{renderer-BAusZ6Vu.mjs → renderer-CCFHnafT.mjs} +4 -4
  150. package/dist/{renderer-BAusZ6Vu.mjs.map → renderer-CCFHnafT.mjs.map} +1 -1
  151. package/dist/{renderer-DVCJjVn7.mjs → renderer-CDVb4OfJ.mjs} +5 -5
  152. package/dist/{renderer-DVCJjVn7.mjs.map → renderer-CDVb4OfJ.mjs.map} +1 -1
  153. package/dist/{renderer-DpruWmZU.mjs → renderer-CEfVvcw-.mjs} +4 -4
  154. package/dist/{renderer-DpruWmZU.mjs.map → renderer-CEfVvcw-.mjs.map} +1 -1
  155. package/dist/{renderer-DbRZe0Re.mjs → renderer-CIB5L_C4.mjs} +5 -5
  156. package/dist/{renderer-DbRZe0Re.mjs.map → renderer-CIB5L_C4.mjs.map} +1 -1
  157. package/dist/{renderer-ktWXVYka.mjs → renderer-CPTXJs0n.mjs} +6 -6
  158. package/dist/{renderer-ktWXVYka.mjs.map → renderer-CPTXJs0n.mjs.map} +1 -1
  159. package/dist/renderer-CS2zyPyZ.mjs +5 -0
  160. package/dist/{renderer-CcvvoKiZ.mjs → renderer-CUBDxuxh.mjs} +5 -5
  161. package/dist/{renderer-CcvvoKiZ.mjs.map → renderer-CUBDxuxh.mjs.map} +1 -1
  162. package/dist/renderer-CWLF6cAz.mjs +1008 -0
  163. package/dist/renderer-CWLF6cAz.mjs.map +1 -0
  164. package/dist/{renderer-EaLUCobW.mjs → renderer-CXLugAe8.mjs} +4 -4
  165. package/dist/{renderer-EaLUCobW.mjs.map → renderer-CXLugAe8.mjs.map} +1 -1
  166. package/dist/renderer-CXnbl_jR.mjs +5 -0
  167. package/dist/{renderer-C7L8Ceqr.mjs → renderer-CYX9vKZ-.mjs} +4 -4
  168. package/dist/{renderer-C7L8Ceqr.mjs.map → renderer-CYX9vKZ-.mjs.map} +1 -1
  169. package/dist/{renderer-8QIwXh7O.mjs → renderer-C_2UDMEG.mjs} +6 -6
  170. package/dist/{renderer-8QIwXh7O.mjs.map → renderer-C_2UDMEG.mjs.map} +1 -1
  171. package/dist/renderer-CaF9vod_.mjs +5 -0
  172. package/dist/renderer-CbSBH3lp.mjs +5 -0
  173. package/dist/{renderer-B2jjxsjO.mjs → renderer-CbhnJi_8.mjs} +4 -4
  174. package/dist/{renderer-B2jjxsjO.mjs.map → renderer-CbhnJi_8.mjs.map} +1 -1
  175. package/dist/{renderer-BdyopiLC.mjs → renderer-CcJyD9Q5.mjs} +4 -4
  176. package/dist/{renderer-BdyopiLC.mjs.map → renderer-CcJyD9Q5.mjs.map} +1 -1
  177. package/dist/renderer-CdjuGRbO.mjs +5 -0
  178. package/dist/{renderer-DF-yvIrV.mjs → renderer-Cl8r1LJe.mjs} +4 -4
  179. package/dist/{renderer-DF-yvIrV.mjs.map → renderer-Cl8r1LJe.mjs.map} +1 -1
  180. package/dist/renderer-CoLbxC13.mjs +5 -0
  181. package/dist/{renderer-BgO6BA_z.mjs → renderer-CpedZNEG.mjs} +3 -3
  182. package/dist/{renderer-BgO6BA_z.mjs.map → renderer-CpedZNEG.mjs.map} +1 -1
  183. package/dist/renderer-Cr9G0dXB.mjs +5 -0
  184. package/dist/{renderer-bAKUeHF3.mjs → renderer-CwVbHki6.mjs} +5 -5
  185. package/dist/{renderer-bAKUeHF3.mjs.map → renderer-CwVbHki6.mjs.map} +1 -1
  186. package/dist/{renderer-DTqDy2m9.mjs → renderer-CyCtm0UV.mjs} +3 -3
  187. package/dist/{renderer-DTqDy2m9.mjs.map → renderer-CyCtm0UV.mjs.map} +1 -1
  188. package/dist/{renderer-CYC32bDW.mjs → renderer-D1VsqFf4.mjs} +5 -5
  189. package/dist/{renderer-CYC32bDW.mjs.map → renderer-D1VsqFf4.mjs.map} +1 -1
  190. package/dist/{renderer-CCycwCEB.mjs → renderer-D2TTDcgh.mjs} +3 -3
  191. package/dist/{renderer-CCycwCEB.mjs.map → renderer-D2TTDcgh.mjs.map} +1 -1
  192. package/dist/renderer-D63l6_UC.mjs +5 -0
  193. package/dist/renderer-DCJqnzER.mjs +5 -0
  194. package/dist/{renderer-cod5Ona9.mjs → renderer-DEQeONTd.mjs} +3 -3
  195. package/dist/renderer-DFBOR5J3.mjs +5 -0
  196. package/dist/renderer-DGAZSzw6.mjs +5 -0
  197. package/dist/{renderer-oKRF4A0M.mjs → renderer-DH7l5WFr.mjs} +4 -4
  198. package/dist/{renderer-oKRF4A0M.mjs.map → renderer-DH7l5WFr.mjs.map} +1 -1
  199. package/dist/{renderer-DNQvOrkY.mjs → renderer-DIEmK57T.mjs} +5 -5
  200. package/dist/{renderer-DNQvOrkY.mjs.map → renderer-DIEmK57T.mjs.map} +1 -1
  201. package/dist/{renderer-DEmYyaqj.mjs → renderer-DIqkhsLI.mjs} +4 -4
  202. package/dist/{renderer-DEmYyaqj.mjs.map → renderer-DIqkhsLI.mjs.map} +1 -1
  203. package/dist/{renderer-DX41niRU.mjs → renderer-DOKHd37M.mjs} +4 -4
  204. package/dist/{renderer-DX41niRU.mjs.map → renderer-DOKHd37M.mjs.map} +1 -1
  205. package/dist/renderer-DPLGk1Qk.mjs +5 -0
  206. package/dist/renderer-DTCUzByS.mjs +5 -0
  207. package/dist/{renderer-BXJXziIt.mjs → renderer-DW7hbluw.mjs} +3 -3
  208. package/dist/{renderer-BXJXziIt.mjs.map → renderer-DW7hbluw.mjs.map} +1 -1
  209. package/dist/{renderer--fkmiVjl.mjs → renderer-Dat8opUZ.mjs} +4 -4
  210. package/dist/{renderer--fkmiVjl.mjs.map → renderer-Dat8opUZ.mjs.map} +1 -1
  211. package/dist/renderer-DdGahYi1.mjs +5 -0
  212. package/dist/{renderer-DmkWrWAk.mjs → renderer-Dee8ksIV.mjs} +3 -3
  213. package/dist/{renderer-DmkWrWAk.mjs.map → renderer-Dee8ksIV.mjs.map} +1 -1
  214. package/dist/renderer-DhL4nNPk.mjs +5 -0
  215. package/dist/renderer-DkyTbiVz.mjs +3 -0
  216. package/dist/renderer-DnAZweRX.mjs +5 -0
  217. package/dist/{renderer-BX7jS14r.d.mts → renderer-DoPEPlbG.d.mts} +3 -2
  218. package/dist/{renderer-BX7jS14r.d.mts.map → renderer-DoPEPlbG.d.mts.map} +1 -1
  219. package/dist/renderer-DpisVnT2.mjs +5 -0
  220. package/dist/{renderer-mNSyac1V.mjs → renderer-DrWeb39d.mjs} +1 -1
  221. package/dist/{renderer-mNSyac1V.mjs.map → renderer-DrWeb39d.mjs.map} +1 -1
  222. package/dist/renderer-Ds7pAKnE.mjs +3 -0
  223. package/dist/{renderer-CiQhD8Gg.mjs → renderer-Dss7T71q.mjs} +5 -5
  224. package/dist/{renderer-CiQhD8Gg.mjs.map → renderer-Dss7T71q.mjs.map} +1 -1
  225. package/dist/{renderer-C41U1tK6.mjs → renderer-Du-GnKLb.mjs} +9 -9
  226. package/dist/{renderer-C41U1tK6.mjs.map → renderer-Du-GnKLb.mjs.map} +1 -1
  227. package/dist/renderer-DxZD5B54.mjs +5 -0
  228. package/dist/{renderer-WCZu2Rf5.mjs → renderer-ESkPj6pk.mjs} +4 -4
  229. package/dist/{renderer-WCZu2Rf5.mjs.map → renderer-ESkPj6pk.mjs.map} +1 -1
  230. package/dist/{renderer-DMvmf3T2.mjs → renderer-F1D9ZJ8I.mjs} +3 -3
  231. package/dist/{renderer-BlPqTEii.mjs → renderer-HnSiwSW8.mjs} +4 -4
  232. package/dist/{renderer-BlPqTEii.mjs.map → renderer-HnSiwSW8.mjs.map} +1 -1
  233. package/dist/{renderer-1r-Uq-Ae.mjs → renderer-IQ97z2rw.mjs} +3 -3
  234. package/dist/{renderer-1r-Uq-Ae.mjs.map → renderer-IQ97z2rw.mjs.map} +1 -1
  235. package/dist/{renderer-DFzI3yI_.mjs → renderer-NTCk1Srf.mjs} +3 -3
  236. package/dist/{renderer-DFzI3yI_.mjs.map → renderer-NTCk1Srf.mjs.map} +1 -1
  237. package/dist/{renderer-D8bBHrWC.mjs → renderer-OsQRvOle.mjs} +5 -5
  238. package/dist/{renderer-D8bBHrWC.mjs.map → renderer-OsQRvOle.mjs.map} +1 -1
  239. package/dist/renderer-PMHOnbnA.mjs +5 -0
  240. package/dist/renderer-STufNpMx.mjs +5 -0
  241. package/dist/renderer-SdrgfCxH.mjs +5 -0
  242. package/dist/{renderer-Lth37j17.mjs → renderer-US4GsamT.mjs} +3 -3
  243. package/dist/{renderer-zXPVLRlD.mjs → renderer-VhkubIx_.mjs} +5 -5
  244. package/dist/{renderer-zXPVLRlD.mjs.map → renderer-VhkubIx_.mjs.map} +1 -1
  245. package/dist/{renderer-DIw3UtEU.mjs → renderer-bbaMOD4I.mjs} +5 -5
  246. package/dist/{renderer-DIw3UtEU.mjs.map → renderer-bbaMOD4I.mjs.map} +1 -1
  247. package/dist/{renderer-hSCfnvaK.mjs → renderer-eT7Gp7FS.mjs} +5 -5
  248. package/dist/{renderer-hSCfnvaK.mjs.map → renderer-eT7Gp7FS.mjs.map} +1 -1
  249. package/dist/{renderer-CQvmbRQ5.mjs → renderer-g7fF2AYk.mjs} +5 -5
  250. package/dist/{renderer-CQvmbRQ5.mjs.map → renderer-g7fF2AYk.mjs.map} +1 -1
  251. package/dist/{renderer-B-ur0Ej8.mjs → renderer-mLlgfM7X.mjs} +4 -4
  252. package/dist/{renderer-B-ur0Ej8.mjs.map → renderer-mLlgfM7X.mjs.map} +1 -1
  253. package/dist/{renderer-SSBL4M1o.mjs → renderer-mQt-y49D.mjs} +5 -5
  254. package/dist/{renderer-SSBL4M1o.mjs.map → renderer-mQt-y49D.mjs.map} +1 -1
  255. package/dist/{renderer-BIGFP1cF.mjs → renderer-q4zMFfnY.mjs} +2 -2
  256. package/dist/{renderer-BIGFP1cF.mjs.map → renderer-q4zMFfnY.mjs.map} +1 -1
  257. package/dist/{renderer-DXEWbnRF.mjs → renderer-sPI7aY6c.mjs} +4 -4
  258. package/dist/{renderer-DXEWbnRF.mjs.map → renderer-sPI7aY6c.mjs.map} +1 -1
  259. package/dist/{renderer-sYSkIUfo.mjs → renderer-xDV2cCkX.mjs} +5 -5
  260. package/dist/{renderer-sYSkIUfo.mjs.map → renderer-xDV2cCkX.mjs.map} +1 -1
  261. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs → renderers-CP8CFWDs-BH1gUTYa.mjs} +4 -4
  262. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs.map → renderers-CP8CFWDs-BH1gUTYa.mjs.map} +1 -1
  263. package/dist/sam/index.d.mts +4 -0
  264. package/dist/sam/index.mjs +3 -0
  265. package/dist/signals/index.d.mts +7 -6
  266. package/dist/signals/index.mjs +8 -8
  267. package/dist/{signals-CXwgAUp-.mjs → signals-gOd0Ui9B.mjs} +4 -4
  268. package/dist/{signals-CXwgAUp-.mjs.map → signals-gOd0Ui9B.mjs.map} +1 -1
  269. package/dist/{src-DFEqficI.mjs → src-BU1VOWSk.mjs} +12 -18
  270. package/dist/src-BU1VOWSk.mjs.map +1 -0
  271. package/dist/{renderer-B2P1vgb7.mjs → src-Bnr8DUC--DzkRGA62.mjs} +8 -1008
  272. package/dist/src-Bnr8DUC--DzkRGA62.mjs.map +1 -0
  273. package/package.json +69 -69
  274. package/dist/audio-Ccpl9mjV.d.mts.map +0 -1
  275. package/dist/index-Bnh42ouE.d.mts.map +0 -1
  276. package/dist/index-CQ-bbZk3.d.mts.map +0 -1
  277. package/dist/index-D5UDyVMb.d.mts.map +0 -1
  278. package/dist/renderer--Ac-dg4A.mjs +0 -5
  279. package/dist/renderer--N7TMqzU.mjs +0 -5
  280. package/dist/renderer-2ecmdOae.mjs +0 -5
  281. package/dist/renderer-B2P1vgb7.mjs.map +0 -1
  282. package/dist/renderer-B5RJp5g-.mjs +0 -5
  283. package/dist/renderer-B7xyT1Vb.mjs +0 -5
  284. package/dist/renderer-BBeArN_x.mjs +0 -5
  285. package/dist/renderer-BCAZDu-r.mjs +0 -5
  286. package/dist/renderer-BJnhik7Y.mjs +0 -5
  287. package/dist/renderer-BxRW8MZO.mjs +0 -5
  288. package/dist/renderer-C-lfsEAN.mjs +0 -5
  289. package/dist/renderer-C6nOFN4-.mjs +0 -5
  290. package/dist/renderer-C84TSQmS.mjs +0 -5
  291. package/dist/renderer-C8_6YofT.mjs +0 -5
  292. package/dist/renderer-COb3tOPG.mjs +0 -5
  293. package/dist/renderer-CSCIzaLy.mjs +0 -5
  294. package/dist/renderer-CmI4c8MS.mjs +0 -5
  295. package/dist/renderer-CqVltdX9.mjs +0 -5
  296. package/dist/renderer-D-FpMzLY.mjs +0 -5
  297. package/dist/renderer-D-Oyn9mG.mjs +0 -5
  298. package/dist/renderer-D2QrkA8_.mjs +0 -5
  299. package/dist/renderer-D5bjOx83.mjs +0 -3
  300. package/dist/renderer-D64r4iN-.mjs +0 -5
  301. package/dist/renderer-DCq6YkgP.mjs +0 -5
  302. package/dist/renderer-DDHG3GdR.mjs +0 -5
  303. package/dist/renderer-DMdNfcud.mjs +0 -6
  304. package/dist/renderer-DZQXZ4lK.mjs +0 -5
  305. package/dist/renderer-DczJJLA1.mjs +0 -5
  306. package/dist/renderer-DfqJj9oe.mjs +0 -5
  307. package/dist/renderer-DgO9ihVJ.mjs +0 -5
  308. package/dist/renderer-DhgnQZYb.mjs +0 -5
  309. package/dist/renderer-DjxKjHMf.mjs +0 -5
  310. package/dist/renderer-DnRDW2Oz.mjs +0 -3
  311. package/dist/renderer-DqLA5cdR.mjs +0 -5
  312. package/dist/renderer-Dudp6ZlH.mjs +0 -5
  313. package/dist/renderer-_jC5KIT1.mjs +0 -5
  314. package/dist/renderer-cTgAuVmJ.mjs +0 -5
  315. package/dist/renderer-nVKDvDLO.mjs +0 -5
  316. package/dist/renderer-pZ6_pUo1.mjs +0 -5
  317. package/dist/src-DFEqficI.mjs.map +0 -1
  318. /package/dist/{chunk-BcJoO4Nm.mjs → chunk-D8S17ehY.mjs} +0 -0
  319. /package/dist/{renderer-COqFNSfV.mjs → renderer-Cputd36d.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CHr7MiYW.mjs","names":[],"sources":["../../../nodes/node-toon/dist/renderers-BsjrUZoi.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Toon\";\nconst UNIFORM_FLOATS = 12;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 3> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet edgeThreshold = u.v[1].y;\n\tlet edgeWidth = u.v[1].z;\n\tlet edgeColor = u.v[2];\n\tlet saturation = u.v[1].w;\n\n\tlet R = res();\n\tlet o = edgeWidth / R;\n\tlet c = sampleS(in.uv);\n\tlet tl = luma(sampleS(in.uv + vec2<f32>(-o.x, -o.y)).rgb);\n\tlet t = luma(sampleS(in.uv + vec2<f32>(0.0, -o.y)).rgb);\n\tlet tr = luma(sampleS(in.uv + vec2<f32>(o.x, -o.y)).rgb);\n\tlet l = luma(sampleS(in.uv + vec2<f32>(-o.x, 0.0)).rgb);\n\tlet r = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb);\n\tlet bl = luma(sampleS(in.uv + vec2<f32>(-o.x, o.y)).rgb);\n\tlet b = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb);\n\tlet br = luma(sampleS(in.uv + vec2<f32>(o.x, o.y)).rgb);\n\tlet gx = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);\n\tlet gy = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);\n\tlet edge = length(vec2<f32>(gx, gy));\n\tlet ink = smoothstep(edgeThreshold, edgeThreshold * 1.5 + 0.03, edge);\n\tlet lum = luma(c.rgb);\n\tlet band = (floor(lum * levels) + 0.5) / levels;\n\tvar rgb = c.rgb * (band / max(lum, 0.001));\n\trgb = clamp(mix(vec3<f32>(luma(rgb)), rgb, saturation), vec3<f32>(0.0), vec3<f32>(1.0));\n\trgb = mix(rgb, edgeColor.rgb, ink);\n\treturn premul(vec4<f32>(rgb, max(c.a, ink * c.a)));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 4);\n\tdata[5] = num(raw.edgeThreshold, .2);\n\tdata[6] = num(raw.edgeWidth, 1);\n\tdata.set(hexToRgba(String(raw.edgeColor ?? \"#111111\")), 8);\n\tdata[7] = num(raw.saturation, 1.15);\n}\nconst ToonWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ToonWebGPURenderer });\n\n//#endregion\nexport { ToonWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BsjrUZoi.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BWMzjSgf.mjs","names":[],"sources":["../../../nodes/node-toon/dist/renderers-BsjrUZoi.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Toon\";\nconst UNIFORM_FLOATS = 12;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 3> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet edgeThreshold = u.v[1].y;\n\tlet edgeWidth = u.v[1].z;\n\tlet edgeColor = u.v[2];\n\tlet saturation = u.v[1].w;\n\n\tlet R = res();\n\tlet o = edgeWidth / R;\n\tlet c = sampleS(in.uv);\n\tlet tl = luma(sampleS(in.uv + vec2<f32>(-o.x, -o.y)).rgb);\n\tlet t = luma(sampleS(in.uv + vec2<f32>(0.0, -o.y)).rgb);\n\tlet tr = luma(sampleS(in.uv + vec2<f32>(o.x, -o.y)).rgb);\n\tlet l = luma(sampleS(in.uv + vec2<f32>(-o.x, 0.0)).rgb);\n\tlet r = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb);\n\tlet bl = luma(sampleS(in.uv + vec2<f32>(-o.x, o.y)).rgb);\n\tlet b = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb);\n\tlet br = luma(sampleS(in.uv + vec2<f32>(o.x, o.y)).rgb);\n\tlet gx = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);\n\tlet gy = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);\n\tlet edge = length(vec2<f32>(gx, gy));\n\tlet ink = smoothstep(edgeThreshold, edgeThreshold * 1.5 + 0.03, edge);\n\tlet lum = luma(c.rgb);\n\tlet band = (floor(lum * levels) + 0.5) / levels;\n\tvar rgb = c.rgb * (band / max(lum, 0.001));\n\trgb = clamp(mix(vec3<f32>(luma(rgb)), rgb, saturation), vec3<f32>(0.0), vec3<f32>(1.0));\n\trgb = mix(rgb, edgeColor.rgb, ink);\n\treturn premul(vec4<f32>(rgb, max(c.a, ink * c.a)));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 4);\n\tdata[5] = num(raw.edgeThreshold, .2);\n\tdata[6] = num(raw.edgeWidth, 1);\n\tdata.set(hexToRgba(String(raw.edgeColor ?? \"#111111\")), 8);\n\tdata[7] = num(raw.saturation, 1.15);\n}\nconst ToonWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ToonWebGPURenderer });\n\n//#endregion\nexport { ToonWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BsjrUZoi.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import "./chunk-BcJoO4Nm.mjs";
2
- import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
3
- import "./dist-C1cCW7Bt.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CMaa63nz.mjs";
1
+ import "./chunk-D8S17ehY.mjs";
2
+ import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
+ import "./dist-D12-a3-x.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zFNrvhV9.mjs";
5
5
 
6
6
  //#region ../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs
7
7
  const OP = "Posterize";
@@ -305,4 +305,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer
305
305
 
306
306
  //#endregion
307
307
  export { PosterizeWebGPURenderer, renderers_default as default };
308
- //# sourceMappingURL=renderer-pHWEHDnM.mjs.map
308
+ //# sourceMappingURL=renderer-BYqrtBvd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-pHWEHDnM.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\n};\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":";;;;;;AAIA,MAAM,KAAK;AACX,MAAM,iBAAiB;;AAEvB,MAAM,SAAS,CAAC;;;;;EAKd,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8ErB;AACF,MAAM,WAAW;CAChB,SAAS;EACR;EACA;EACA;EACA;EACA;CACD,UAAU;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,KAAK;EACJ;EACA;EACA;EACA;EACA;CACD,OAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,KAAK;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,WAAW;EACV;EACA;EACA;EACA;EACA;CACD,OAAO;EACN;EACA;EACA;EACA;EACA;CACD;AACD,MAAM,YAAY,WAAW,YAAY;CACxC,QAAQ,wBAAwB,QAAQ;EACvC;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,SAAS;CAClB,2BAA2B,IAAI,KAAK;CACpC,SAAS,OAAO,cAAc;EAC7B,WAAW;EACX,WAAW;EACX,cAAc;EACd,cAAc;EACd,CAAC;CACF,EAAE;AACH,SAAS,aAAa,QAAQ,QAAQ;CACrC,MAAM,IAAI,UAAU,OAAO;CAC3B,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO;AAClC,KAAI,CAAC,MAAM;AACV,SAAO,OAAO,KAAK,MAAM,MAAM;GAC9B,MAAM,SAAS,OAAO,mBAAmB;IACxC;IACA,OAAO,GAAG,GAAG,GAAG,EAAE;IAClB,CAAC;AACF,UAAO,OAAO,qBAAqB;IAClC,OAAO,GAAG,GAAG,GAAG;IAChB,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;IACrE,QAAQ;KACP;KACA,YAAY;KACZ;IACD,UAAU;KACT;KACA,YAAY;KACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE,UAAU,kBAAkB;IACzC,CAAC;IACD;AACF,IAAE,UAAU,IAAI,QAAQ,KAAK;;AAE9B,QAAO;;AAER,SAAS,IAAI,GAAG,UAAU;CACzB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,EAAE;AAC/C,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;AAEjC,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG;AACnC,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAC3E,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG;EACvB;;;AAGF,SAAS,KAAK,KAAK,MAAM,MAAM,OAAO;AACrC,MAAK,KAAK,EAAE;AACZ,MAAK,KAAK;AACV,MAAK,KAAK;AACV,MAAK,KAAK,IAAI,IAAI,QAAQ,EAAE;AAC5B,MAAK,KAAK,KAAK,IAAI,GAAG;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,QAAQ,OAAO,IAAI,WAAW,OAAO,CAAC,CAAC;AACzC,MAAK,KAAK,IAAI,IAAI,QAAQ,EAAE;AAC5B,MAAK,KAAK,IAAI,IAAI,WAAW,EAAE;CAC/B,MAAM,cAAc,OAAO,IAAI,WAAW,OAAO;CACjD,MAAM,UAAU,gBAAgB,WAAW,IAAI,UAAU,EAAE,GAAG,SAAS,gBAAgB,EAAE;AACzF,MAAK,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG;AACtC,SAAQ,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,MAAM;AACtC,OAAK,IAAI,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE;GACjC;;AAEH,MAAM,0BAA0B,OAAO,SAAS;CAC/C,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,GAAI;CACnB,MAAM,QAAQ,MAAM,cAAc,WAAW;AAC7C,KAAI,CAAC,MAAO;AACZ,MAAK,KAAK;CACV,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ,KAAK,MAAM,MAAM,oBAAoB,MAAM,SAAS,EAAE;CACpE,MAAM,MAAM,GAAG,QAAQ,kBAAkB,GAAG,OAAO,gBAAgB;EAClE;EACA;EACA,MAAM,QAAQ;EACd,CAAC,GAAG;CACL,MAAM,OAAO,IAAI,aAAa,eAAe;AAC7C,MAAK,KAAK,MAAM,QAAQ,KAAK,MAAM;CACnC,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,MAAM;CACnE,MAAM,SAAS,IAAI;CACnB,MAAM,IAAI,UAAU,OAAO;CAC3B,MAAM,YAAY,aAAa,QAAQ,IAAI,SAAS,OAAO;CAC3D,MAAM,MAAM,IAAI,SAAS,mBAAmB,KAAK;CACjD,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;EACjC,MAAM,MAAM,IAAI,SAAS,oBAAoB,aAAa,cAAc;GACvE;GACA;GACA;GACA,GAAG,MAAM,mBAAmB,EAAE;GAC9B,CAAC;AACF,qBAAmB,SAAS,IAAI,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB;GAC/E,QAAQ,EAAE;GACV,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK;KACzB;IACD;KACC,SAAS;KACT,UAAU,SAAS,YAAY;KAC/B;IACD;KACC,SAAS;KACT,UAAU,KAAK,YAAY;KAC3B;IACD;KACC,SAAS;KACT,UAAU,EAAE;KACZ;IACD;GACD,CAAC,CAAC,CAAC;AACJ,SAAO;;AAER,qBAAoB,MAAM,KAAK;;AAKhC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
1
+ {"version":3,"file":"renderer-BYqrtBvd.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\n};\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-mNSyac1V.mjs";
2
- import { q as parseColor } from "./dist-C1cCW7Bt.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, u as perDevice } from "./gpu-CMaa63nz.mjs";
1
+ import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-DrWeb39d.mjs";
2
+ import { q as parseColor } from "./dist-D12-a3-x.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, u as perDevice } from "./gpu-zFNrvhV9.mjs";
4
4
 
5
5
  //#region ../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs
6
6
  const WGSL_HALFTONE_SHADER = `
@@ -456,4 +456,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURen
456
456
 
457
457
  //#endregion
458
458
  export { renderers_default as t };
459
- //# sourceMappingURL=renderer-CwFqqpWY.mjs.map
459
+ //# sourceMappingURL=renderer-BZmmekE8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CwFqqpWY.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = 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 !== \"HalftoneScreen\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\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\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\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};\n\t};\n\tconst freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(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 freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\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: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BZmmekE8.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = 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 !== \"HalftoneScreen\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\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\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\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};\n\t};\n\tconst freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(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 freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\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: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
2
- import { o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
1
+ import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
2
+ import { o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-zFNrvhV9.mjs";
3
3
 
4
4
  //#region ../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs
5
5
  const maskWgsl = `
@@ -238,4 +238,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });
238
238
 
239
239
  //#endregion
240
240
  export { renderers_default as t };
241
- //# sourceMappingURL=renderer-D47AEJE_.mjs.map
241
+ //# sourceMappingURL=renderer-BcO7LUla.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-D47AEJE_.mjs","names":[],"sources":["../../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst maskWgsl = `\nstruct MaskUniforms {\n\trect : vec4<f32>,\n\troundness : f32,\n\tmode : f32,\n\tnumPoints : f32,\n\tpadding : f32,\n\tpoints : array<vec2<f32>, 64>,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n\tlet q = abs(p) - b + r;\n\treturn min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = in.pos.xy;\n\t\n\tif (u.mode > 0.5) { // Path\n\t\tvar inside = false;\n\t\tlet count = u32(u.numPoints);\n\t\tfor (var i = 0u; i < count; i = i + 1u) {\n\t\t\tlet j = (i + 1u) % count;\n\t\t\tlet pi = u.points[i];\n\t\t\tlet pj = u.points[j];\n\t\t\tif (((pi.y > p.y) != (pj.y > p.y)) &&\n\t\t\t\t(p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n\t\t\t\tinside = !inside;\n\t\t\t}\n\t\t}\n\t\treturn select(vec4<f32>(0.0), vec4<f32>(1.0), inside);\n\t} else { // RRect\n\t\tlet center = u.rect.xy + u.rect.zw * 0.5;\n\t\tlet size = u.rect.zw * 0.5;\n\t\tlet d = sdRoundedRect(p - center, size, u.roundness);\n\t\tlet alpha = 1.0 - smoothstep(0.0, 1.5, d);\n\t\treturn vec4<f32>(1.0, 1.0, 1.0, alpha);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskPipeline(device, format) {\n\tlet pipeline = deviceResourceCache.get(device);\n\tif (!pipeline) {\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CropMaskPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tdeviceResourceCache.set(device, pipeline);\n\t}\n\treturn pipeline;\n}\nconst CropWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, containerWidth: propsContainerWidth, containerHeight: propsContainerHeight, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"Crop\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst containerWidth = propsContainerWidth ?? ctx.surface.width;\n\tconst containerHeight = propsContainerHeight ?? ctx.surface.height;\n\tconst isRest = op.mode === \"rest\";\n\tconst isPath = op.cropType === \"path\";\n\tconst pathPoints = op.pathPoints || [];\n\tconst roundness = Number(op.roundness) || 0;\n\tlet finalLp = Number(op.leftPercentage) || 0;\n\tlet finalTp = Number(op.topPercentage) || 0;\n\tlet finalWp = Math.max(.01, Number(op.widthPercentage) || 100);\n\tlet finalHp = Math.max(.01, Number(op.heightPercentage) || 100);\n\tif (isPath && pathPoints.length > 0) {\n\t\tconst xs = pathPoints.map((p) => p.x);\n\t\tconst ys = pathPoints.map((p) => p.y);\n\t\tfinalLp = Math.min(...xs);\n\t\tfinalTp = Math.min(...ys);\n\t\tfinalWp = Math.max(.01, Math.max(...xs) - finalLp);\n\t\tfinalHp = Math.max(.01, Math.max(...ys) - finalTp);\n\t}\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\tconst srcRect = {\n\t\tx: finalLp / 100 * sourceWidth,\n\t\ty: finalTp / 100 * sourceHeight,\n\t\twidth: finalWp / 100 * sourceWidth,\n\t\theight: finalHp / 100 * sourceHeight\n\t};\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t};\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}\n\t});\n\tif (!(roundness > 0 || isPath || isRest) && !isRest) {\n\t\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTextureRegion(outPass, childTex, srcRect, dstRect, { opacity });\n\t\targs.pass = outPass;\n\t\treturn;\n\t}\n\tlet maskedSourceTex = childTex;\n\tif (!isRest) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTextureRegion(upscaledPass, childTex, srcRect, dstRect);\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t} else if (sourceWidth !== containerWidth || sourceHeight !== containerHeight) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTexture(upscaledPass, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight\n\t\t});\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t}\n\tconst maskTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\tmaskedSourceTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst maskView = maskTex.createView();\n\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, containerWidth, containerHeight, \"clear\");\n\tconst maskPipeline = getMaskPipeline(ctx.device, ctx.renderer.format);\n\tconst maskData = new Float32Array(136);\n\tconst rectX = isRest ? finalLp / 100 * containerWidth : 0;\n\tconst rectY = isRest ? finalTp / 100 * containerHeight : 0;\n\tconst rectW = isRest ? finalWp / 100 * containerWidth : containerWidth;\n\tconst rectH = isRest ? finalHp / 100 * containerHeight : containerHeight;\n\tconst pixelRoundness = roundness / 100 * (Math.min(rectW, rectH) / 2);\n\tmaskData[0] = rectX;\n\tmaskData[1] = rectY;\n\tmaskData[2] = rectW;\n\tmaskData[3] = rectH;\n\tmaskData[4] = pixelRoundness;\n\tmaskData[5] = isPath ? 1 : 0;\n\tmaskData[6] = pathPoints.length;\n\tif (isPath) for (let i = 0; i < Math.min(pathPoints.length, 64); i++) {\n\t\tlet px = pathPoints[i].x / 100 * containerWidth;\n\t\tlet py = pathPoints[i].y / 100 * containerHeight;\n\t\tif (!isRest) {\n\t\t\tpx = (pathPoints[i].x - finalLp) / finalWp * containerWidth;\n\t\t\tpy = (pathPoints[i].y - finalTp) / finalHp * containerHeight;\n\t\t}\n\t\tmaskData[8 + i * 2] = px;\n\t\tmaskData[8 + i * 2 + 1] = py;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(maskData);\n\tconst bindGroup = ctx.device.createBindGroup({\n\t\tlayout: maskPipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tmaskPass.setPipeline(maskPipeline);\n\tmaskPass.setBindGroup(0, bindGroup);\n\tmaskPass.draw(4);\n\tmaskPass.end();\n\tconst resultTex = ctx.renderer.composite(encoder, maskedSourceTex, maskTex, isRest ? \"mask-out\" : \"mask-in\", [\n\t\tmaskedSourceTex,\n\t\tmaskTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, resultTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BE15Jhmk.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BcO7LUla.mjs","names":[],"sources":["../../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst maskWgsl = `\nstruct MaskUniforms {\n\trect : vec4<f32>,\n\troundness : f32,\n\tmode : f32,\n\tnumPoints : f32,\n\tpadding : f32,\n\tpoints : array<vec2<f32>, 64>,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n\tlet q = abs(p) - b + r;\n\treturn min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = in.pos.xy;\n\t\n\tif (u.mode > 0.5) { // Path\n\t\tvar inside = false;\n\t\tlet count = u32(u.numPoints);\n\t\tfor (var i = 0u; i < count; i = i + 1u) {\n\t\t\tlet j = (i + 1u) % count;\n\t\t\tlet pi = u.points[i];\n\t\t\tlet pj = u.points[j];\n\t\t\tif (((pi.y > p.y) != (pj.y > p.y)) &&\n\t\t\t\t(p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n\t\t\t\tinside = !inside;\n\t\t\t}\n\t\t}\n\t\treturn select(vec4<f32>(0.0), vec4<f32>(1.0), inside);\n\t} else { // RRect\n\t\tlet center = u.rect.xy + u.rect.zw * 0.5;\n\t\tlet size = u.rect.zw * 0.5;\n\t\tlet d = sdRoundedRect(p - center, size, u.roundness);\n\t\tlet alpha = 1.0 - smoothstep(0.0, 1.5, d);\n\t\treturn vec4<f32>(1.0, 1.0, 1.0, alpha);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskPipeline(device, format) {\n\tlet pipeline = deviceResourceCache.get(device);\n\tif (!pipeline) {\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CropMaskPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tdeviceResourceCache.set(device, pipeline);\n\t}\n\treturn pipeline;\n}\nconst CropWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, containerWidth: propsContainerWidth, containerHeight: propsContainerHeight, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"Crop\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst containerWidth = propsContainerWidth ?? ctx.surface.width;\n\tconst containerHeight = propsContainerHeight ?? ctx.surface.height;\n\tconst isRest = op.mode === \"rest\";\n\tconst isPath = op.cropType === \"path\";\n\tconst pathPoints = op.pathPoints || [];\n\tconst roundness = Number(op.roundness) || 0;\n\tlet finalLp = Number(op.leftPercentage) || 0;\n\tlet finalTp = Number(op.topPercentage) || 0;\n\tlet finalWp = Math.max(.01, Number(op.widthPercentage) || 100);\n\tlet finalHp = Math.max(.01, Number(op.heightPercentage) || 100);\n\tif (isPath && pathPoints.length > 0) {\n\t\tconst xs = pathPoints.map((p) => p.x);\n\t\tconst ys = pathPoints.map((p) => p.y);\n\t\tfinalLp = Math.min(...xs);\n\t\tfinalTp = Math.min(...ys);\n\t\tfinalWp = Math.max(.01, Math.max(...xs) - finalLp);\n\t\tfinalHp = Math.max(.01, Math.max(...ys) - finalTp);\n\t}\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\tconst srcRect = {\n\t\tx: finalLp / 100 * sourceWidth,\n\t\ty: finalTp / 100 * sourceHeight,\n\t\twidth: finalWp / 100 * sourceWidth,\n\t\theight: finalHp / 100 * sourceHeight\n\t};\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t};\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}\n\t});\n\tif (!(roundness > 0 || isPath || isRest) && !isRest) {\n\t\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTextureRegion(outPass, childTex, srcRect, dstRect, { opacity });\n\t\targs.pass = outPass;\n\t\treturn;\n\t}\n\tlet maskedSourceTex = childTex;\n\tif (!isRest) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTextureRegion(upscaledPass, childTex, srcRect, dstRect);\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t} else if (sourceWidth !== containerWidth || sourceHeight !== containerHeight) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTexture(upscaledPass, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight\n\t\t});\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t}\n\tconst maskTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\tmaskedSourceTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst maskView = maskTex.createView();\n\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, containerWidth, containerHeight, \"clear\");\n\tconst maskPipeline = getMaskPipeline(ctx.device, ctx.renderer.format);\n\tconst maskData = new Float32Array(136);\n\tconst rectX = isRest ? finalLp / 100 * containerWidth : 0;\n\tconst rectY = isRest ? finalTp / 100 * containerHeight : 0;\n\tconst rectW = isRest ? finalWp / 100 * containerWidth : containerWidth;\n\tconst rectH = isRest ? finalHp / 100 * containerHeight : containerHeight;\n\tconst pixelRoundness = roundness / 100 * (Math.min(rectW, rectH) / 2);\n\tmaskData[0] = rectX;\n\tmaskData[1] = rectY;\n\tmaskData[2] = rectW;\n\tmaskData[3] = rectH;\n\tmaskData[4] = pixelRoundness;\n\tmaskData[5] = isPath ? 1 : 0;\n\tmaskData[6] = pathPoints.length;\n\tif (isPath) for (let i = 0; i < Math.min(pathPoints.length, 64); i++) {\n\t\tlet px = pathPoints[i].x / 100 * containerWidth;\n\t\tlet py = pathPoints[i].y / 100 * containerHeight;\n\t\tif (!isRest) {\n\t\t\tpx = (pathPoints[i].x - finalLp) / finalWp * containerWidth;\n\t\t\tpy = (pathPoints[i].y - finalTp) / finalHp * containerHeight;\n\t\t}\n\t\tmaskData[8 + i * 2] = px;\n\t\tmaskData[8 + i * 2 + 1] = py;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(maskData);\n\tconst bindGroup = ctx.device.createBindGroup({\n\t\tlayout: maskPipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tmaskPass.setPipeline(maskPipeline);\n\tmaskPass.setBindGroup(0, bindGroup);\n\tmaskPass.draw(4);\n\tmaskPass.end();\n\tconst resultTex = ctx.renderer.composite(encoder, maskedSourceTex, maskTex, isRest ? \"mask-out\" : \"mask-in\", [\n\t\tmaskedSourceTex,\n\t\tmaskTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, resultTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BE15Jhmk.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { s as resolveHandleParam } from "./renderer-mNSyac1V.mjs";
2
- import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
1
+ import { s as resolveHandleParam } from "./renderer-DrWeb39d.mjs";
2
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-zFNrvhV9.mjs";
3
3
 
4
4
  //#region ../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs
5
5
  const deviceResourceCache = /* @__PURE__ */ new WeakMap();
@@ -307,4 +307,4 @@ var renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };
307
307
 
308
308
  //#endregion
309
309
  export { renderers_default as n, ColorBalanceWebGPURenderer as t };
310
- //# sourceMappingURL=renderer-BlvGcyAN.mjs.map
310
+ //# sourceMappingURL=renderer-BdbI_u9w.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BlvGcyAN.mjs","names":[],"sources":["../../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs"],"sourcesContent":["import { resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_COLOR_BALANCE_SHADER = `\nstruct ColorBalanceUniforms {\n\tshadows : vec4<f32>,\n\tmidtones : vec4<f32>,\n\thighlights : vec4<f32>,\n\tpreserveLuminosity : f32,\n\thasShadowsCyanRedSig : f32,\n\thasShadowsMagentaGreenSig : f32,\n\thasShadowsYellowBlueSig : f32,\n\n\thasMidtonesCyanRedSig : f32,\n\thasMidtonesMagentaGreenSig : f32,\n\thasMidtonesYellowBlueSig : f32,\n\thasHighlightsCyanRedSig : f32,\n\n\thasHighlightsMagentaGreenSig : f32,\n\thasHighlightsYellowBlueSig : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;\n@group(2) @binding(9) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet d = l - get_luminance(c);\n\tvar res = c + vec3<f32>(d);\n\tlet min_c = min(res.r, min(res.g, res.b));\n\tlet max_c = max(res.r, max(res.g, res.b));\n\tif (min_c < 0.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);\n\t}\n\tif (max_c > 1.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);\n\t}\n\treturn clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\tvar sShift = u.shadows.rgb;\n\tif (u.hasShadowsCyanRedSig > 0.5) {\n\t\tsShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsMagentaGreenSig > 0.5) {\n\t\tsShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsYellowBlueSig > 0.5) {\n\t\tsShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar mShift = u.midtones.rgb;\n\tif (u.hasMidtonesCyanRedSig > 0.5) {\n\t\tmShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesMagentaGreenSig > 0.5) {\n\t\tmShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesYellowBlueSig > 0.5) {\n\t\tmShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar hShift = u.highlights.rgb;\n\tif (u.hasHighlightsCyanRedSig > 0.5) {\n\t\thShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsMagentaGreenSig > 0.5) {\n\t\thShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsYellowBlueSig > 0.5) {\n\t\thShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tlet origLum = get_luminance(rgb);\n\n\t// Tonal range weighting curves\n\tlet wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);\n\tlet wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);\n\tlet wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);\n\n\tlet delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;\n\tvar adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));\n\n\tif (u.preserveLuminosity > 0.5) {\n\t\tadjustedRgb = set_luminance(adjustedRgb, origLum);\n\t}\n\n\treturn vec4<f32>(adjustedRgb * alpha, alpha);\n}\n`;\nfunction getColorBalanceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"ColorBalanceUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"ColorBalanceTextureLayout\");\n\tconst signalTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"ColorBalanceSignalTextureLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"ColorBalancePipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"ColorBalanceShaderModule\",\n\t\t\t\tcode: WGSL_COLOR_BALANCE_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(24);\nconst ColorBalanceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorBalance\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"colorbalance_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = -100, clampMax = 100) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst resolveVal = (val) => {\n\t\tif (val !== void 0 && val !== null) {\n\t\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\t\tframe: compositionFrame,\n\t\t\t\t\tfps\n\t\t\t\t});\n\t\t\t\telse if (\"value\" in val) val = val.value;\n\t\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\t}\n\t\tconst n = Number(val ?? 0);\n\t\treturn isNaN(n) ? 0 : n;\n\t};\n\tconst sCR = resolveField(op.shadows_cyanRedHandleId, resolveVal(op.shadows?.cyanRed));\n\tconst sMG = resolveField(op.shadows_magentaGreenHandleId, resolveVal(op.shadows?.magentaGreen));\n\tconst sYB = resolveField(op.shadows_yellowBlueHandleId, resolveVal(op.shadows?.yellowBlue));\n\tconst mCR = resolveField(op.midtones_cyanRedHandleId, resolveVal(op.midtones?.cyanRed));\n\tconst mMG = resolveField(op.midtones_magentaGreenHandleId, resolveVal(op.midtones?.magentaGreen));\n\tconst mYB = resolveField(op.midtones_yellowBlueHandleId, resolveVal(op.midtones?.yellowBlue));\n\tconst hCR = resolveField(op.highlights_cyanRedHandleId, resolveVal(op.highlights?.cyanRed));\n\tconst hMG = resolveField(op.highlights_magentaGreenHandleId, resolveVal(op.highlights?.magentaGreen));\n\tconst hYB = resolveField(op.highlights_yellowBlueHandleId, resolveVal(op.highlights?.yellowBlue));\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getColorBalanceResources(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 sCRView = getSignalView(sCR, \"shadows_cyanRed_sig\");\n\tconst sMGView = getSignalView(sMG, \"shadows_magentaGreen_sig\");\n\tconst sYBView = getSignalView(sYB, \"shadows_yellowBlue_sig\");\n\tconst mCRView = getSignalView(mCR, \"midtones_cyanRed_sig\");\n\tconst mMGView = getSignalView(mMG, \"midtones_magentaGreen_sig\");\n\tconst mYBView = getSignalView(mYB, \"midtones_yellowBlue_sig\");\n\tconst hCRView = getSignalView(hCR, \"highlights_cyanRed_sig\");\n\tconst hMGView = getSignalView(hMG, \"highlights_magentaGreen_sig\");\n\tconst hYBView = getSignalView(hYB, \"highlights_yellowBlue_sig\");\n\tconst preserveLum = op.preserveLuminosity === false ? 0 : 1;\n\tuniformBufferData[0] = sCR.val / 100;\n\tuniformBufferData[1] = sMG.val / 100;\n\tuniformBufferData[2] = sYB.val / 100;\n\tuniformBufferData[3] = 0;\n\tuniformBufferData[4] = mCR.val / 100;\n\tuniformBufferData[5] = mMG.val / 100;\n\tuniformBufferData[6] = mYB.val / 100;\n\tuniformBufferData[7] = 0;\n\tuniformBufferData[8] = hCR.val / 100;\n\tuniformBufferData[9] = hMG.val / 100;\n\tuniformBufferData[10] = hYB.val / 100;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = preserveLum;\n\tuniformBufferData[13] = sCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[14] = sMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[15] = sYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[16] = mCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[17] = mMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[18] = mYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[19] = hCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[20] = hMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[21] = hYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[22] = 0;\n\tuniformBufferData[23] = 0;\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: mCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: mMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: mYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: hCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: hMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: hYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };\n\n//#endregion\nexport { ColorBalanceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BaZtHi33.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BdbI_u9w.mjs","names":[],"sources":["../../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs"],"sourcesContent":["import { resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_COLOR_BALANCE_SHADER = `\nstruct ColorBalanceUniforms {\n\tshadows : vec4<f32>,\n\tmidtones : vec4<f32>,\n\thighlights : vec4<f32>,\n\tpreserveLuminosity : f32,\n\thasShadowsCyanRedSig : f32,\n\thasShadowsMagentaGreenSig : f32,\n\thasShadowsYellowBlueSig : f32,\n\n\thasMidtonesCyanRedSig : f32,\n\thasMidtonesMagentaGreenSig : f32,\n\thasMidtonesYellowBlueSig : f32,\n\thasHighlightsCyanRedSig : f32,\n\n\thasHighlightsMagentaGreenSig : f32,\n\thasHighlightsYellowBlueSig : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;\n@group(2) @binding(9) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet d = l - get_luminance(c);\n\tvar res = c + vec3<f32>(d);\n\tlet min_c = min(res.r, min(res.g, res.b));\n\tlet max_c = max(res.r, max(res.g, res.b));\n\tif (min_c < 0.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);\n\t}\n\tif (max_c > 1.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);\n\t}\n\treturn clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\tvar sShift = u.shadows.rgb;\n\tif (u.hasShadowsCyanRedSig > 0.5) {\n\t\tsShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsMagentaGreenSig > 0.5) {\n\t\tsShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsYellowBlueSig > 0.5) {\n\t\tsShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar mShift = u.midtones.rgb;\n\tif (u.hasMidtonesCyanRedSig > 0.5) {\n\t\tmShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesMagentaGreenSig > 0.5) {\n\t\tmShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesYellowBlueSig > 0.5) {\n\t\tmShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar hShift = u.highlights.rgb;\n\tif (u.hasHighlightsCyanRedSig > 0.5) {\n\t\thShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsMagentaGreenSig > 0.5) {\n\t\thShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsYellowBlueSig > 0.5) {\n\t\thShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tlet origLum = get_luminance(rgb);\n\n\t// Tonal range weighting curves\n\tlet wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);\n\tlet wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);\n\tlet wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);\n\n\tlet delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;\n\tvar adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));\n\n\tif (u.preserveLuminosity > 0.5) {\n\t\tadjustedRgb = set_luminance(adjustedRgb, origLum);\n\t}\n\n\treturn vec4<f32>(adjustedRgb * alpha, alpha);\n}\n`;\nfunction getColorBalanceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"ColorBalanceUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"ColorBalanceTextureLayout\");\n\tconst signalTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"ColorBalanceSignalTextureLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"ColorBalancePipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"ColorBalanceShaderModule\",\n\t\t\t\tcode: WGSL_COLOR_BALANCE_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(24);\nconst ColorBalanceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorBalance\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"colorbalance_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = -100, clampMax = 100) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst resolveVal = (val) => {\n\t\tif (val !== void 0 && val !== null) {\n\t\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\t\tframe: compositionFrame,\n\t\t\t\t\tfps\n\t\t\t\t});\n\t\t\t\telse if (\"value\" in val) val = val.value;\n\t\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\t}\n\t\tconst n = Number(val ?? 0);\n\t\treturn isNaN(n) ? 0 : n;\n\t};\n\tconst sCR = resolveField(op.shadows_cyanRedHandleId, resolveVal(op.shadows?.cyanRed));\n\tconst sMG = resolveField(op.shadows_magentaGreenHandleId, resolveVal(op.shadows?.magentaGreen));\n\tconst sYB = resolveField(op.shadows_yellowBlueHandleId, resolveVal(op.shadows?.yellowBlue));\n\tconst mCR = resolveField(op.midtones_cyanRedHandleId, resolveVal(op.midtones?.cyanRed));\n\tconst mMG = resolveField(op.midtones_magentaGreenHandleId, resolveVal(op.midtones?.magentaGreen));\n\tconst mYB = resolveField(op.midtones_yellowBlueHandleId, resolveVal(op.midtones?.yellowBlue));\n\tconst hCR = resolveField(op.highlights_cyanRedHandleId, resolveVal(op.highlights?.cyanRed));\n\tconst hMG = resolveField(op.highlights_magentaGreenHandleId, resolveVal(op.highlights?.magentaGreen));\n\tconst hYB = resolveField(op.highlights_yellowBlueHandleId, resolveVal(op.highlights?.yellowBlue));\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getColorBalanceResources(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 sCRView = getSignalView(sCR, \"shadows_cyanRed_sig\");\n\tconst sMGView = getSignalView(sMG, \"shadows_magentaGreen_sig\");\n\tconst sYBView = getSignalView(sYB, \"shadows_yellowBlue_sig\");\n\tconst mCRView = getSignalView(mCR, \"midtones_cyanRed_sig\");\n\tconst mMGView = getSignalView(mMG, \"midtones_magentaGreen_sig\");\n\tconst mYBView = getSignalView(mYB, \"midtones_yellowBlue_sig\");\n\tconst hCRView = getSignalView(hCR, \"highlights_cyanRed_sig\");\n\tconst hMGView = getSignalView(hMG, \"highlights_magentaGreen_sig\");\n\tconst hYBView = getSignalView(hYB, \"highlights_yellowBlue_sig\");\n\tconst preserveLum = op.preserveLuminosity === false ? 0 : 1;\n\tuniformBufferData[0] = sCR.val / 100;\n\tuniformBufferData[1] = sMG.val / 100;\n\tuniformBufferData[2] = sYB.val / 100;\n\tuniformBufferData[3] = 0;\n\tuniformBufferData[4] = mCR.val / 100;\n\tuniformBufferData[5] = mMG.val / 100;\n\tuniformBufferData[6] = mYB.val / 100;\n\tuniformBufferData[7] = 0;\n\tuniformBufferData[8] = hCR.val / 100;\n\tuniformBufferData[9] = hMG.val / 100;\n\tuniformBufferData[10] = hYB.val / 100;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = preserveLum;\n\tuniformBufferData[13] = sCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[14] = sMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[15] = sYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[16] = mCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[17] = mMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[18] = mYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[19] = hCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[20] = hMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[21] = hYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[22] = 0;\n\tuniformBufferData[23] = 0;\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: mCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: mMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: mYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: hCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: hMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: hYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };\n\n//#endregion\nexport { ColorBalanceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BaZtHi33.mjs.map"],"mappings":"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"}