framefields 2.2.0-beta.4 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/README.md +11 -2
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
  5. package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
  6. package/dist/{audio-DMUr01vS.mjs → audio-ChRqnFwB.mjs} +3 -3
  7. package/dist/{audio-DMUr01vS.mjs.map → audio-ChRqnFwB.mjs.map} +1 -1
  8. package/dist/{dist-cjxDXQdx.mjs → dist-PwT_Vmax.mjs} +102 -6
  9. package/dist/{dist-cjxDXQdx.mjs.map → dist-PwT_Vmax.mjs.map} +1 -1
  10. package/dist/{dist-CT___nEU.mjs → dist-t-NLlnhM.mjs} +7 -5
  11. package/dist/dist-t-NLlnhM.mjs.map +1 -0
  12. package/dist/effects/index.d.mts +5 -5
  13. package/dist/effects/index.mjs +36 -36
  14. package/dist/{effects-C06-AOge.mjs → effects-Duoqc_Oa.mjs} +532 -4
  15. package/dist/effects-Duoqc_Oa.mjs.map +1 -0
  16. package/dist/fonts/index.d.mts +1 -1
  17. package/dist/fonts/index.mjs +2 -2
  18. package/dist/{fonts-C0UuLQvr.mjs → fonts-CgNmeFXh.mjs} +2 -2
  19. package/dist/{fonts-C0UuLQvr.mjs.map → fonts-CgNmeFXh.mjs.map} +1 -1
  20. package/dist/{gpu-Du7GpVFW.mjs → gpu-1ZpAuQOR.mjs} +2 -2
  21. package/dist/{gpu-Du7GpVFW.mjs.map → gpu-1ZpAuQOR.mjs.map} +1 -1
  22. package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
  23. package/dist/index-AdrZIWT0.d.mts.map +1 -0
  24. package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
  25. package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
  26. package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
  27. package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
  28. package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
  29. package/dist/index-BU51pxZO.d.mts.map +1 -0
  30. package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
  31. package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
  32. package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
  33. package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
  34. package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
  35. package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
  36. package/dist/index.d.mts +1438 -66
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +3122 -83
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/preview/index.d.mts +2 -2
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-M0TsUzC6.mjs → preview-CArsjmkd.mjs} +2 -2
  43. package/dist/{preview-M0TsUzC6.mjs.map → preview-CArsjmkd.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
  46. package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
  47. package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
  48. package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
  49. package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
  50. package/dist/preview-engine/chunk-DLAHSLNX.mjs +1522 -0
  51. package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
  52. package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
  53. package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
  54. package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
  55. package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
  56. package/dist/preview-engine/effects.mjs +1 -1
  57. package/dist/preview-engine/framefields.mjs +26 -26
  58. package/dist/preview-engine/player.mjs +5 -5
  59. package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
  60. package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
  61. package/dist/preview-engine/renderers-527ONFIA.mjs +228 -0
  62. package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
  63. package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
  64. package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
  65. package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
  66. package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
  67. package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
  68. package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
  69. package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
  70. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
  71. package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
  72. package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
  73. package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
  74. package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
  75. package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
  76. package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
  77. package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
  78. package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
  79. package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
  80. package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
  81. package/dist/preview-engine/signals.mjs +1 -1
  82. package/dist/{program-DzknMiY0.mjs → program-Dd9tJFkY.mjs} +346 -13
  83. package/dist/program-Dd9tJFkY.mjs.map +1 -0
  84. package/dist/renderer/index.d.mts +2 -2
  85. package/dist/renderer/index.mjs +2 -2
  86. package/dist/{renderer-C8uKdelk.mjs → renderer-0L9MEb3A.mjs} +2 -2
  87. package/dist/{renderer-C8uKdelk.mjs.map → renderer-0L9MEb3A.mjs.map} +1 -1
  88. package/dist/renderer-0lp9ClNc.mjs +5 -0
  89. package/dist/{renderer-BbdZ0YHR.mjs → renderer-257LxOyx.mjs} +3 -3
  90. package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-257LxOyx.mjs.map} +1 -1
  91. package/dist/renderer-2BnBo6CX.mjs +219 -0
  92. package/dist/renderer-2BnBo6CX.mjs.map +1 -0
  93. package/dist/renderer-4g_BfiKp.mjs +5 -0
  94. package/dist/renderer-72A4SvOE.mjs +220 -0
  95. package/dist/renderer-72A4SvOE.mjs.map +1 -0
  96. package/dist/renderer-7Aw6AHqW.mjs +5 -0
  97. package/dist/{renderer-PKQNH21k.mjs → renderer-7OvgLE8w.mjs} +2 -2
  98. package/dist/{renderer-BerD3T-X.mjs → renderer-94byj7Mk.mjs} +2 -2
  99. package/dist/{renderer-BerD3T-X.mjs.map → renderer-94byj7Mk.mjs.map} +1 -1
  100. package/dist/{renderer-D-vRKssW.mjs → renderer-B2aXfdW_.mjs} +2 -2
  101. package/dist/{renderer-D-vRKssW.mjs.map → renderer-B2aXfdW_.mjs.map} +1 -1
  102. package/dist/{renderer-DD8napek.mjs → renderer-B3c-j-e5.mjs} +2 -2
  103. package/dist/{renderer-DD8napek.mjs.map → renderer-B3c-j-e5.mjs.map} +1 -1
  104. package/dist/renderer-B3ypX3MH.mjs +308 -0
  105. package/dist/renderer-B3ypX3MH.mjs.map +1 -0
  106. package/dist/renderer-B82v8PyC.mjs +5 -0
  107. package/dist/renderer-B8BDMJNz.mjs +5 -0
  108. package/dist/renderer-BARst3ZD.mjs +3 -0
  109. package/dist/renderer-BCPRrhP8.mjs +5 -0
  110. package/dist/{renderer-CMT4QcpV.mjs → renderer-BEdc-7JW.mjs} +3 -3
  111. package/dist/{renderer-CMT4QcpV.mjs.map → renderer-BEdc-7JW.mjs.map} +1 -1
  112. package/dist/renderer-BEpANdcO.mjs +204 -0
  113. package/dist/renderer-BEpANdcO.mjs.map +1 -0
  114. package/dist/renderer-BFhzO6En.mjs +5 -0
  115. package/dist/renderer-BH0KF-y-.mjs +6 -0
  116. package/dist/renderer-BHrqEgIA.mjs +541 -0
  117. package/dist/renderer-BHrqEgIA.mjs.map +1 -0
  118. package/dist/{renderer-DpW_LxLO.mjs → renderer-BId5hBLb.mjs} +3 -3
  119. package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BId5hBLb.mjs.map} +1 -1
  120. package/dist/renderer-BK32cV7E.mjs +203 -0
  121. package/dist/renderer-BK32cV7E.mjs.map +1 -0
  122. package/dist/renderer-BTI5ybyH.mjs +5 -0
  123. package/dist/{renderer-0gY4IQhM.mjs → renderer-BVR0mEIT.mjs} +2 -2
  124. package/dist/{renderer-0gY4IQhM.mjs.map → renderer-BVR0mEIT.mjs.map} +1 -1
  125. package/dist/{renderer-CebB0v1y.mjs → renderer-BY08hHFS.mjs} +2 -2
  126. package/dist/{renderer-CebB0v1y.mjs.map → renderer-BY08hHFS.mjs.map} +1 -1
  127. package/dist/renderer-Ba7LH8U2.mjs +5 -0
  128. package/dist/renderer-BcQBlfhC.mjs +5 -0
  129. package/dist/renderer-BdMJzCTz.mjs +5 -0
  130. package/dist/{renderer-D1Cm21eq.mjs → renderer-BmQbSQHf.mjs} +2 -2
  131. package/dist/{renderer-D1Cm21eq.mjs.map → renderer-BmQbSQHf.mjs.map} +1 -1
  132. package/dist/{renderer-DqdhsSwS.mjs → renderer-BmTDXIUI.mjs} +2 -2
  133. package/dist/{renderer-DqdhsSwS.mjs.map → renderer-BmTDXIUI.mjs.map} +1 -1
  134. package/dist/renderer-BpdzhZE7.mjs +224 -0
  135. package/dist/renderer-BpdzhZE7.mjs.map +1 -0
  136. package/dist/renderer-Bxi2j-tG.mjs +5 -0
  137. package/dist/{renderer-D8thCpS7.mjs → renderer-C-Qj0BnT.mjs} +3 -3
  138. package/dist/{renderer-D8thCpS7.mjs.map → renderer-C-Qj0BnT.mjs.map} +1 -1
  139. package/dist/{renderer-BiwIh_w4.mjs → renderer-C4tUATd_.mjs} +3 -3
  140. package/dist/{renderer-BiwIh_w4.mjs.map → renderer-C4tUATd_.mjs.map} +1 -1
  141. package/dist/{renderer-1vhaKMeg.mjs → renderer-CC72sZ8l.mjs} +141 -56
  142. package/dist/renderer-CC72sZ8l.mjs.map +1 -0
  143. package/dist/renderer-CCn5ISVM.mjs +5 -0
  144. package/dist/renderer-CDRsdhg9.mjs +5 -0
  145. package/dist/{renderer-BC8XOVl5.mjs → renderer-CI9Pq77W.mjs} +3 -3
  146. package/dist/{renderer-BC8XOVl5.mjs.map → renderer-CI9Pq77W.mjs.map} +1 -1
  147. package/dist/{renderer-CrABA3lB.mjs → renderer-CIMI33Yd.mjs} +2 -2
  148. package/dist/{renderer-CrABA3lB.mjs.map → renderer-CIMI33Yd.mjs.map} +1 -1
  149. package/dist/renderer-CKSdl0Xf.mjs +331 -0
  150. package/dist/renderer-CKSdl0Xf.mjs.map +1 -0
  151. package/dist/{renderer-Cce2fgpX.mjs → renderer-CKpwEo1w.mjs} +3 -3
  152. package/dist/{renderer-Cce2fgpX.mjs.map → renderer-CKpwEo1w.mjs.map} +1 -1
  153. package/dist/{renderer-CursFKUf.mjs → renderer-CLUyYFqS.mjs} +2 -2
  154. package/dist/{renderer-CursFKUf.mjs.map → renderer-CLUyYFqS.mjs.map} +1 -1
  155. package/dist/{renderer-Br6KyRO_.mjs → renderer-CS-goRD3.mjs} +3 -3
  156. package/dist/{renderer-Br6KyRO_.mjs.map → renderer-CS-goRD3.mjs.map} +1 -1
  157. package/dist/{renderer-DtgMsjyL.mjs → renderer-CSPpKLi3.mjs} +2 -2
  158. package/dist/{renderer-DtgMsjyL.mjs.map → renderer-CSPpKLi3.mjs.map} +1 -1
  159. package/dist/{renderer-CuVPo-wP.mjs → renderer-CWQ-Bct7.mjs} +2 -2
  160. package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CWQ-Bct7.mjs.map} +1 -1
  161. package/dist/{renderer-DHGTzype.mjs → renderer-ChoYV7Ko.mjs} +2 -2
  162. package/dist/{renderer-DHGTzype.mjs.map → renderer-ChoYV7Ko.mjs.map} +1 -1
  163. package/dist/renderer-CiCK8ZG_.mjs +5 -0
  164. package/dist/{renderer-CJB9nU1x.mjs → renderer-Ck2pRec0.mjs} +3 -3
  165. package/dist/{renderer-CJB9nU1x.mjs.map → renderer-Ck2pRec0.mjs.map} +1 -1
  166. package/dist/{renderer-BzDjy1_x.mjs → renderer-CrUudSLP.mjs} +2 -2
  167. package/dist/{renderer-BzDjy1_x.mjs.map → renderer-CrUudSLP.mjs.map} +1 -1
  168. package/dist/{renderer-DupsdRIw.mjs → renderer-CraudZUC.mjs} +3 -3
  169. package/dist/{renderer-DupsdRIw.mjs.map → renderer-CraudZUC.mjs.map} +1 -1
  170. package/dist/renderer-CsEk9TFz.mjs +5 -0
  171. package/dist/renderer-CvOzuDX3.mjs +215 -0
  172. package/dist/renderer-CvOzuDX3.mjs.map +1 -0
  173. package/dist/{renderer-DJfFc-XW.mjs → renderer-Cvysm2Jg.mjs} +3 -3
  174. package/dist/{renderer-DJfFc-XW.mjs.map → renderer-Cvysm2Jg.mjs.map} +1 -1
  175. package/dist/{renderer-Bn2eQE-t.mjs → renderer-CwwmwM7J.mjs} +3 -3
  176. package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-CwwmwM7J.mjs.map} +1 -1
  177. package/dist/{renderer-KnCcN_Nz.mjs → renderer-CxP2e6Ov.mjs} +2 -2
  178. package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-CxP2e6Ov.mjs.map} +1 -1
  179. package/dist/{renderer-BteUC_7n.mjs → renderer-D-yNHLG7.mjs} +3 -3
  180. package/dist/{renderer-BteUC_7n.mjs.map → renderer-D-yNHLG7.mjs.map} +1 -1
  181. package/dist/renderer-D0xLIq1r.mjs +203 -0
  182. package/dist/renderer-D0xLIq1r.mjs.map +1 -0
  183. package/dist/{renderer-id8TbKBY.mjs → renderer-D1MOTlWS.mjs} +2 -2
  184. package/dist/{renderer-id8TbKBY.mjs.map → renderer-D1MOTlWS.mjs.map} +1 -1
  185. package/dist/renderer-D1T7A3NF.mjs +233 -0
  186. package/dist/renderer-D1T7A3NF.mjs.map +1 -0
  187. package/dist/renderer-D1gx_-hi.mjs +5 -0
  188. package/dist/renderer-D5MCGNAF.mjs +5 -0
  189. package/dist/{renderer-Db3JIF1K.mjs → renderer-D6YcQTLI.mjs} +3 -3
  190. package/dist/{renderer-Db3JIF1K.mjs.map → renderer-D6YcQTLI.mjs.map} +1 -1
  191. package/dist/{renderer-BNqwn0gZ.mjs → renderer-D8_UYdDb.mjs} +2 -2
  192. package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-D8_UYdDb.mjs.map} +1 -1
  193. package/dist/renderer-DD_MzvM-.mjs +5 -0
  194. package/dist/{renderer-BHskWZNG.mjs → renderer-DIqwz7dV.mjs} +2 -2
  195. package/dist/{renderer-57ATc_mQ.mjs → renderer-DJQD7tai.mjs} +2 -2
  196. package/dist/{renderer-57ATc_mQ.mjs.map → renderer-DJQD7tai.mjs.map} +1 -1
  197. package/dist/{renderer-CWBHVCvA.mjs → renderer-DKXK5hDm.mjs} +2 -2
  198. package/dist/{renderer-CWBHVCvA.mjs.map → renderer-DKXK5hDm.mjs.map} +1 -1
  199. package/dist/{renderer-p_C_T9Kn.mjs → renderer-DNYSf2Fl.mjs} +2 -2
  200. package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-DNYSf2Fl.mjs.map} +1 -1
  201. package/dist/{renderer-DXqIslFk.mjs → renderer-DNaHFctD.mjs} +2 -2
  202. package/dist/{renderer-DXqIslFk.mjs.map → renderer-DNaHFctD.mjs.map} +1 -1
  203. package/dist/renderer-DO5r7ZV-.mjs +658 -0
  204. package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
  205. package/dist/renderer-DP7YoZ0K.mjs +5 -0
  206. package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
  207. package/dist/renderer-DQtk282o.mjs.map +1 -0
  208. package/dist/{renderer-u8ynJtAC.mjs → renderer-DWcbrx2M.mjs} +2 -2
  209. package/dist/{renderer-u8ynJtAC.mjs.map → renderer-DWcbrx2M.mjs.map} +1 -1
  210. package/dist/renderer-DXiWvKij.mjs +5 -0
  211. package/dist/renderer-DZnUiiBp.mjs +222 -0
  212. package/dist/renderer-DZnUiiBp.mjs.map +1 -0
  213. package/dist/renderer-Dc6fW-o1.mjs +5 -0
  214. package/dist/renderer-DiurlsNT.mjs +5 -0
  215. package/dist/{renderer-BmGPTWwV.mjs → renderer-Dju3SEAJ.mjs} +3 -3
  216. package/dist/{renderer-BmGPTWwV.mjs.map → renderer-Dju3SEAJ.mjs.map} +1 -1
  217. package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
  218. package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
  219. package/dist/{renderer-aArb4RwJ.mjs → renderer-DpQaiH6C.mjs} +2 -2
  220. package/dist/{renderer-aArb4RwJ.mjs.map → renderer-DpQaiH6C.mjs.map} +1 -1
  221. package/dist/{renderer-CeyAgJnw.mjs → renderer-DuxzqfoE.mjs} +2 -2
  222. package/dist/renderer-DvCUdgVz.mjs +5 -0
  223. package/dist/{renderer-AF884a7T.mjs → renderer-Dvg5nbgU.mjs} +3 -3
  224. package/dist/{renderer-AF884a7T.mjs.map → renderer-Dvg5nbgU.mjs.map} +1 -1
  225. package/dist/{renderer-DvFaC_-7.mjs → renderer-Dvq11SEA.mjs} +2 -2
  226. package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dvq11SEA.mjs.map} +1 -1
  227. package/dist/renderer-DyPgVl1l.mjs +223 -0
  228. package/dist/renderer-DyPgVl1l.mjs.map +1 -0
  229. package/dist/{renderer-DEuIwr-t.mjs → renderer-DzOzVxNS.mjs} +2 -2
  230. package/dist/{renderer-DEuIwr-t.mjs.map → renderer-DzOzVxNS.mjs.map} +1 -1
  231. package/dist/renderer-EhCkD11e.mjs +208 -0
  232. package/dist/renderer-EhCkD11e.mjs.map +1 -0
  233. package/dist/renderer-IiwAh9-K.mjs +5 -0
  234. package/dist/{renderer-jqByPgkD.mjs → renderer-JiEpssIz.mjs} +2 -2
  235. package/dist/{renderer-jqByPgkD.mjs.map → renderer-JiEpssIz.mjs.map} +1 -1
  236. package/dist/renderer-JlGXqH0E.mjs +5 -0
  237. package/dist/{renderer-Beg7FLt2.mjs → renderer-OxafT7Xm.mjs} +75 -27
  238. package/dist/renderer-OxafT7Xm.mjs.map +1 -0
  239. package/dist/renderer-TZFKKgL1.mjs +5 -0
  240. package/dist/renderer-UT0CcmMZ.mjs +191 -0
  241. package/dist/renderer-UT0CcmMZ.mjs.map +1 -0
  242. package/dist/{renderer-YbaCzPcG.mjs → renderer-YyEBKPcE.mjs} +2 -2
  243. package/dist/{renderer-jYxN4mHn.mjs → renderer-_AuL8mAi.mjs} +3 -3
  244. package/dist/{renderer-jYxN4mHn.mjs.map → renderer-_AuL8mAi.mjs.map} +1 -1
  245. package/dist/{renderer-C6md3msE.mjs → renderer-aCDIEYb3.mjs} +2 -2
  246. package/dist/{renderer-C6md3msE.mjs.map → renderer-aCDIEYb3.mjs.map} +1 -1
  247. package/dist/renderer-aEecoNPX.mjs +5 -0
  248. package/dist/{renderer-BeIUgp1r.mjs → renderer-aN60v8jR.mjs} +2 -2
  249. package/dist/{renderer-BeIUgp1r.mjs.map → renderer-aN60v8jR.mjs.map} +1 -1
  250. package/dist/renderer-ewhliYYP.mjs +5 -0
  251. package/dist/renderer-hQc6GgTi.mjs +5 -0
  252. package/dist/renderer-iuX0RZIi.mjs +5 -0
  253. package/dist/renderer-j4vkTzHa.mjs +5 -0
  254. package/dist/{renderer-EemDpvv3.mjs → renderer-mpInX4Iy.mjs} +3 -3
  255. package/dist/{renderer-EemDpvv3.mjs.map → renderer-mpInX4Iy.mjs.map} +1 -1
  256. package/dist/renderer-msPjwx_9.mjs +5 -0
  257. package/dist/renderer-pI2ndu-b.mjs +5 -0
  258. package/dist/renderer-x1OGMhsC.mjs +5 -0
  259. package/dist/{renderer-DZXbgVMK.mjs → renderer-xezE7IZX.mjs} +3 -3
  260. package/dist/{renderer-DZXbgVMK.mjs.map → renderer-xezE7IZX.mjs.map} +1 -1
  261. package/dist/renderer-yGAk7J9P.mjs +222 -0
  262. package/dist/renderer-yGAk7J9P.mjs.map +1 -0
  263. package/dist/{renderer-Bvx56GR6.mjs → renderer-zQIB2VZZ.mjs} +2 -2
  264. package/dist/{renderer-Bvx56GR6.mjs.map → renderer-zQIB2VZZ.mjs.map} +1 -1
  265. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-i6u_rhCX.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-i6u_rhCX.mjs.map} +1 -1
  267. package/dist/signals/index.d.mts +5 -5
  268. package/dist/signals/index.mjs +4 -4
  269. package/package.json +58 -55
  270. package/dist/dist-CT___nEU.mjs.map +0 -1
  271. package/dist/effects-C06-AOge.mjs.map +0 -1
  272. package/dist/index-B-oUlLoO.d.mts.map +0 -1
  273. package/dist/index-CwbszPDG.d.mts.map +0 -1
  274. package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
  275. package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
  276. package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
  277. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
  278. package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
  279. package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
  280. package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
  281. package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
  282. package/dist/program-DzknMiY0.mjs.map +0 -1
  283. package/dist/renderer--IDyGdqT.mjs +0 -5
  284. package/dist/renderer-17K4tjid.mjs +0 -5
  285. package/dist/renderer-1vhaKMeg.mjs.map +0 -1
  286. package/dist/renderer-Ab9Ttn_m.mjs +0 -5
  287. package/dist/renderer-B-roDBBo.mjs +0 -5
  288. package/dist/renderer-B03uwoUX.mjs +0 -5
  289. package/dist/renderer-B3BI_7YJ.mjs +0 -5
  290. package/dist/renderer-BGD4lQ74.mjs +0 -5
  291. package/dist/renderer-BHXhYfeC.mjs +0 -5
  292. package/dist/renderer-BRsTIMFa.mjs +0 -5
  293. package/dist/renderer-Beg7FLt2.mjs.map +0 -1
  294. package/dist/renderer-BjMTtYZw.mjs +0 -5
  295. package/dist/renderer-BoCh3Yts.mjs +0 -5
  296. package/dist/renderer-BqPbR8c4.mjs +0 -5
  297. package/dist/renderer-Bxa4SDm9.mjs +0 -3
  298. package/dist/renderer-C4Da2I1-.mjs +0 -5
  299. package/dist/renderer-C93X6dgl.mjs +0 -5
  300. package/dist/renderer-CE7fwGgw.mjs.map +0 -1
  301. package/dist/renderer-CMAwFfGx.mjs +0 -6
  302. package/dist/renderer-CRXeSuX2.mjs +0 -5
  303. package/dist/renderer-CSp6WYBN.mjs +0 -5
  304. package/dist/renderer-CUXX7HTL.mjs +0 -5
  305. package/dist/renderer-CUgThpka.mjs +0 -5
  306. package/dist/renderer-CeVtufiT.mjs +0 -5
  307. package/dist/renderer-CespkZUk.mjs +0 -5
  308. package/dist/renderer-D1l47xhL.mjs +0 -5
  309. package/dist/renderer-DDuG18J8.mjs +0 -5
  310. package/dist/renderer-DFhrFSMn.mjs +0 -5
  311. package/dist/renderer-DO48vQ7Y.mjs +0 -5
  312. package/dist/renderer-DTC39B_n.mjs +0 -5
  313. package/dist/renderer-DbyU3hNF.mjs +0 -5
  314. package/dist/renderer-DftVpmfu.mjs +0 -5
  315. package/dist/renderer-Dj5jm63K.mjs +0 -5
  316. package/dist/renderer-Dju57ZaF.mjs +0 -5
  317. package/dist/renderer-Dn8TQCw7.mjs +0 -5
  318. package/dist/renderer-ETF46K0D.mjs +0 -5
  319. package/dist/renderer-azYzWGC3.mjs +0 -5
  320. package/dist/renderer-dxNoRW59.mjs +0 -5
  321. package/dist/renderer-fdfelx_I.mjs +0 -5
  322. package/dist/renderer-snwEKwMw.mjs +0 -5
@@ -0,0 +1,78 @@
1
+ import{a as S,d as U,f as w,h as R,j as G,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as l}from"./chunk-BVF64D6H.mjs";l();l();var f="Iridescence",N=8,$=[`struct U { v : array<vec4<f32>, 2> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${S}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let strength = u.v[1].x;
55
+ let scale = u.v[1].y;
56
+ let shift = u.v[1].z;
57
+ let mode = u32(u.v[1].w + 0.5);
58
+
59
+ let R = res();
60
+ let c = sampleS(in.uv);
61
+ let l = luma(c.rgb);
62
+ var phase = l;
63
+ var amount = strength;
64
+ if (mode == 1u) {
65
+ let o = 5.0 / R;
66
+ let gx = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb) - luma(sampleS(in.uv - vec2<f32>(o.x, 0.0)).rgb);
67
+ let gy = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb) - luma(sampleS(in.uv - vec2<f32>(0.0, o.y)).rgb);
68
+ let n = normalize(vec3<f32>(-gx * 3.0, -gy * 3.0, 1.0));
69
+ let slope = 1.0 - n.z;
70
+ phase = slope * 3.0 + l * 0.6 + in.uv.x * 0.4 + in.uv.y * 0.3;
71
+ amount = strength * clamp(0.3 + slope * 6.0, 0.0, 1.0);
72
+ }
73
+ phase = phase * scale + shift / 360.0;
74
+ let rainbow = 0.5 + 0.5 * cos(6.2831853 * (phase + vec3<f32>(0.0, 0.33, 0.67)));
75
+ let screened = vec3<f32>(1.0) - (vec3<f32>(1.0) - c.rgb) * (vec3<f32>(1.0) - rainbow * 0.85);
76
+ return premul(vec4<f32>(mix(c.rgb, screened, amount), c.a));
77
+ }
78
+ `],k=w(e=>({layout:U(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function z(e,r){let t=k(e),n=t.pipelines.get(r);return n||(n=$.map((p,i)=>{let a=e.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return e.createRenderPipeline({label:`${f}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function g(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=g(e.strength,.6),r[5]=g(e.scale,2),r[6]=g(e.shift,0),r[7]=Math.max(0,["luminance","relief"].indexOf(String(e.mode??"relief")))}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:a,props:o}=e,c=o.virtualMedia?.operation;if(c?.op!==f)return;let x=o.virtualMedia?.children?.[0];if(!x)return;n.end();let m=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),L=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:m,time:u/m}):c,h=new Float32Array(N);A(L,h,u/m,u);let{texture:v}=await R(e,x),d=r.device,b=k(d),M=z(d,r.renderer.format),_=r.renderer.getTemporaryBuffer(h),s=v;for(let W of M){let y=r.renderer.getTemporaryTexture(i,a,[v,s,p,...o.excludeTextures||[]]);T(t,y.createView(),W,[d.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:v.createView()},{binding:2,resource:s.createView()},{binding:3,resource:b.sampler}]})]),s=y}G(e,s)};var q=P({WebGPURenderer:F});export{F as IridescenceWebGPURenderer,q as default};
@@ -0,0 +1,77 @@
1
+ import{a as U,d as R,f as G,h as S,j as T,m as k}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as f}from"./chunk-BVF64D6H.mjs";f();f();var p="Kaleidoscope",D=12,N=[`struct U { v : array<vec4<f32>, 3> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${U}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let segments = u.v[1].x;
55
+ let rotation = u.v[1].y;
56
+ let centerX = u.v[1].z;
57
+ let centerY = u.v[1].w;
58
+ let zoom = u.v[2].x;
59
+
60
+ let R = res();
61
+ let aspect = R.x / R.y;
62
+ let center = vec2<f32>(centerX, centerY);
63
+ var p = in.uv - center;
64
+ p.x *= aspect;
65
+ let rad = length(p) / zoom;
66
+ let rot = radians(rotation);
67
+ let seg = 6.2831853 / segments;
68
+ var a = atan2(p.y, p.x) - rot;
69
+ a = a - seg * floor(a / seg);
70
+ a = min(a, seg - a);
71
+ var q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;
72
+ q.x /= aspect;
73
+ let uv = q + center;
74
+ let m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));
75
+ return sampleP(m);
76
+ }
77
+ `],w=G(e=>({layout:R(e,["uniform","texture","texture","sampler"],`${p}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=w(e),n=t.pipelines.get(r);return n||(n=N.map((m,i)=>{let c=e.createShaderModule({code:m,label:`${p}_${i}.wgsl`});return e.createRenderPipeline({label:`${p}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:c,entryPoint:"vs"},fragment:{module:c,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function a(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function q(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=a(e.segments,6),r[5]=a(e.rotation,0),r[6]=a(e.centerX,.5),r[7]=a(e.centerY,.5),r[8]=a(e.zoom,1)}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:m,targetWidth:i,targetHeight:c,props:o}=e,s=o.virtualMedia?.operation;if(s?.op!==p)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let v=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),L=s.effect?.resolveUniforms?s.effect.resolveUniforms({frame:u,fps:v,time:u/v}):s,y=new Float32Array(D);q(L,y,u/v,u);let{texture:d}=await S(e,g),x=r.device,b=w(x),M=$(x,r.renderer.format),_=r.renderer.getTemporaryBuffer(y),l=d;for(let W of M){let h=r.renderer.getTemporaryTexture(i,c,[d,l,m,...o.excludeTextures||[]]);k(t,h.createView(),W,[x.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:d.createView()},{binding:2,resource:l.createView()},{binding:3,resource:b.sampler}]})]),l=h}T(e,l)};var K=P({WebGPURenderer:F});export{F as KaleidoscopeWebGPURenderer,K as default};
@@ -0,0 +1 @@
1
+ import{T as a}from"./chunk-KERW7QJ4.mjs";import"./chunk-YQRKT47I.mjs";import"./chunk-VXUJWPIK.mjs";import"./chunk-YKMBRUAE.mjs";import"./chunk-XKO4RYKN.mjs";import"./chunk-X6HUH6K4.mjs";import"./chunk-NQZKBFC6.mjs";import"./chunk-24P6DAB3.mjs";import"./chunk-63SFBHEH.mjs";import"./chunk-4GEWSUX5.mjs";import"./chunk-MTJHQATU.mjs";import"./chunk-IQKIHFNZ.mjs";import"./chunk-YAQFFQPG.mjs";import"./chunk-BVF64D6H.mjs";export{a as default};
@@ -0,0 +1,76 @@
1
+ import{a as P,d as U,f as S,h as R,j as G,m as w}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as y}from"./chunk-63SFBHEH.mjs";import{e as u}from"./chunk-BVF64D6H.mjs";u();u();var f="Pixelate",D=8,N=[`struct U { v : array<vec4<f32>, 2> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${P}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let size = u.v[1].x;
55
+ let shape = u32(u.v[1].y + 0.5);
56
+ let gap = u.v[1].z;
57
+
58
+ let R = res();
59
+ let cell = max(size, 1.0);
60
+ let p = in.uv * R;
61
+ let c0 = floor(p / cell) * cell + cell * 0.5;
62
+ let col = texelS(c0);
63
+ let f = (p - c0) / cell;
64
+ let g = 1.0 - gap;
65
+ let e = 1.0 / cell;
66
+ var m = 1.0;
67
+ if (shape == 1u) {
68
+ m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, length(f));
69
+ } else if (shape == 2u) {
70
+ m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, abs(f.x) + abs(f.y));
71
+ } else if (gap > 0.0) {
72
+ m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, max(abs(f.x), abs(f.y)));
73
+ }
74
+ return premul(vec4<f32>(col.rgb, col.a * m));
75
+ }
76
+ `],k=S(e=>({layout:U(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=k(e),n=t.pipelines.get(r);return n||(n=N.map((p,i)=>{let a=e.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return e.createRenderPipeline({label:`${f}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function T(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=T(e.size,12),r[5]=Math.max(0,["square","circle","diamond"].indexOf(String(e.shape??"square"))),r[6]=T(e.gap,0)}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:a,props:o}=e,l=o.virtualMedia?.operation;if(l?.op!==f)return;let x=o.virtualMedia?.children?.[0];if(!x)return;n.end();let m=o.fps||30,c=Math.round(o.compositionFrame??o.frame??0),L=l.effect?.resolveUniforms?l.effect.resolveUniforms({frame:c,fps:m,time:c/m}):l,g=new Float32Array(D);A(L,g,c/m,c);let{texture:d}=await R(e,x),v=r.device,h=k(v),M=$(v,r.renderer.format),_=r.renderer.getTemporaryBuffer(g),s=d;for(let W of M){let b=r.renderer.getTemporaryTexture(i,a,[d,s,p,...o.excludeTextures||[]]);w(t,b.createView(),W,[v.createBindGroup({layout:h.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:d.createView()},{binding:2,resource:s.createView()},{binding:3,resource:h.sampler}]})]),s=b}G(e,s)};var C=y({WebGPURenderer:F});export{F as PixelateWebGPURenderer,C as default};
@@ -0,0 +1,26 @@
1
+ import{a as G}from"./chunk-7I7PKKDL.mjs";import{a as T,d as w,f as U,h,j as P,m as k}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as g}from"./chunk-63SFBHEH.mjs";import{e as p}from"./chunk-BVF64D6H.mjs";p();p();var v="rgba16float",D=`
2
+ struct U { a : vec4<f32>, b : vec4<f32> };
3
+ @group(0) @binding(0) var<uniform> u : U;
4
+ @group(0) @binding(1) var moshTex : texture_2d<f32>;
5
+ @group(0) @binding(2) var currentTex : texture_2d<f32>;
6
+ @group(0) @binding(3) var flowTex : texture_2d<f32>;
7
+ @group(0) @binding(4) var samp : sampler;
8
+ ${T}
9
+
10
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
11
+ let strength = u.a.x;
12
+ let bleed = u.a.y;
13
+ let inv = u.a.zw;
14
+ let cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);
15
+ if (u.b.x > 0.5) { return cur0; }
16
+ let dims = vec2<f32>(textureDimensions(flowTex));
17
+ let coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));
18
+ let flow = textureLoad(flowTex, coord, 0).xy;
19
+ let cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);
20
+ // The old picture moves with the new motion instead of being replaced.
21
+ let moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);
22
+ var out = mix(moved, cur, bleed);
23
+ if (moved.a < 0.01) { out = cur; }
24
+ return out;
25
+ }
26
+ `,_=U(e=>{let r=w(e,["uniform","texture","texture","texture","sampler"],"datamosh_layout"),a=e.createShaderModule({code:D,label:"datamosh.wgsl"});return{layout:r,pipeline:e.createRenderPipeline({label:"datamosh",layout:e.createPipelineLayout({bindGroupLayouts:[r]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:v}]},primitive:{topology:"triangle-strip"}}),flow:new G(e),sampler:e.createSampler({magFilter:"linear",minFilter:"linear"})}});function H(e,r,a,i,s){let t=e.feedbackHistory;if(t&&t.device===r&&t.width===a&&t.height===i)return t;t?.front.destroy(),t?.back.destroy(),t?.prev?.destroy();let o=(n,c)=>r.createTexture({label:n,size:[a,i],format:c,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),u={device:r,width:a,height:i,front:o("feedback_front",v),back:o("feedback_back",v),prev:o("feedback_prev",s),frame:-1};return e.feedbackHistory=u,u}async function S(e,r,a,i){let s=e.props.virtualMedia?.children?.[0];return s?h(e,s,{exclude:[i.front,i.back,...i.prev?[i.prev]:[]],props:{...e.props,virtualMedia:s,frame:r,compositionFrame:a+r}}):null}function A(e){let r=e.front;e.front=e.back,e.back=r}async function L(e,r,a,i,s,t){let o=await S(e,i,s,r);if(!o||!r.prev)return;let u=_(e.ctx.device),{encoder:n}=e,c=t||r.frame<0,b=c?o.texture:u.flow.execute(r.prev,o.texture,{},n),m=new Float32Array([a.strength,a.bleed,1/r.width,1/r.height,c?1:0,0,0,0]);k(n,r.back.createView(),u.pipeline,[e.ctx.device.createBindGroup({layout:u.layout,entries:[{binding:0,resource:{buffer:e.ctx.renderer.getTemporaryBuffer(m)}},{binding:1,resource:r.front.createView()},{binding:2,resource:o.view},{binding:3,resource:b.createView()},{binding:4,resource:u.sampler}]})]),n.copyTextureToTexture({texture:o.texture},{texture:r.prev},[r.width,r.height,1]),A(r),r.frame=i}function x(e,r){return typeof e=="number"&&Number.isFinite(e)?e:r}var F=async e=>{let{ctx:r,pass:a,targetWidth:i,targetHeight:s,props:t}=e,o=t.virtualMedia?.operation;if(o?.op!=="Datamosh"||!o.effect?.resolveUniforms||!t.virtualMedia?.children?.[0])return;a.end();let u=t.fps||30,n=Math.max(0,Math.round(t.frame??0)),c=Math.round(t.compositionFrame??n),b=c-n,m=o.effect.resolveUniforms({frame:c,fps:u,time:c/u}),d=H(o.effect,r.device,i,s,r.renderer.format);{let l={keyframes:Array.isArray(m.keyframes)?m.keyframes.map(Math.round):[],strength:x(m.strength,1),bleed:Math.min(1,Math.max(0,x(m.bleed,0))),warmup:Math.max(1,Math.round(x(m.warmup,48)))};if(d.frame!==n){let y=n;if(d.frame!==n-1){let f=Math.max(0,...l.keyframes.filter(M=>M<=n));y=Math.max(f,n-l.warmup),d.frame=-1}for(let f=y;f<=n;f++)await L(e,d,l,f,b,f===0||l.keyframes.includes(f)||d.frame<0)}}P(e,d.front)};var B=g({WebGPURenderer:F});export{F as DatamoshWebGPURenderer,B as default};
@@ -0,0 +1,80 @@
1
+ import{a as S,d as U,f as R,h as w,j as G,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as c}from"./chunk-BVF64D6H.mjs";c();c();var f="Contour",D=16,$=[`struct U { v : array<vec4<f32>, 4> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${S}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let levels = u.v[1].x;
55
+ let lineWidth = u.v[1].y;
56
+ let lineColor = u.v[2];
57
+ let fill = u32(u.v[1].z + 0.5);
58
+ let fillColor = u.v[3];
59
+ let smoothing = u.v[1].w;
60
+
61
+ let R = res();
62
+ let s = smoothing / R;
63
+ var lsum = 0.0;
64
+ for (var j = -1; j <= 1; j++) {
65
+ for (var i = -1; i <= 1; i++) {
66
+ lsum += luma(sampleS(in.uv + vec2<f32>(f32(i), f32(j)) * s).rgb);
67
+ }
68
+ }
69
+ let h = lsum / 9.0 * levels;
70
+ let w = max(fwidth(h), 1e-4);
71
+ let d = abs(fract(h - 0.5) - 0.5) / w;
72
+ let line = 1.0 - smoothstep(lineWidth * 0.5, lineWidth * 0.5 + 1.0, d);
73
+ let c = sampleS(in.uv);
74
+ var base = vec4<f32>(c.rgb, c.a);
75
+ if (fill == 1u) { base = vec4<f32>(fillColor.rgb, 1.0); }
76
+ if (fill == 2u) { base = vec4<f32>(lineColor.rgb, 0.0); }
77
+ let rgb = mix(base.rgb, lineColor.rgb, line);
78
+ return premul(vec4<f32>(rgb, max(base.a, line * select(1.0, c.a, fill == 0u))));
79
+ }
80
+ `],F=R(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function j(r,e){let t=F(r),n=t.pipelines.get(e);return n||(n=$.map((p,o)=>{let l=r.createShaderModule({code:p,label:`${f}_${o}.wgsl`});return r.createRenderPipeline({label:`${f}_${o}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:l,entryPoint:"vs"},fragment:{module:l,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function g(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function k(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function A(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=g(r.levels,14),e[5]=g(r.lineWidth,1.2),e.set(k(String(r.lineColor??"#2b1d0e")),8),e[6]=Math.max(0,["source","flat","none"].indexOf(String(r.fill??"source"))),e.set(k(String(r.fillColor??"#f3ead8")),12),e[7]=g(r.smoothing,2)}var C=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:p,targetWidth:o,targetHeight:l,props:i}=r,u=i.virtualMedia?.operation;if(u?.op!==f)return;let b=i.virtualMedia?.children?.[0];if(!b)return;n.end();let m=i.fps||30,s=Math.round(i.compositionFrame??i.frame??0),W=u.effect?.resolveUniforms?u.effect.resolveUniforms({frame:s,fps:m,time:s/m}):u,x=new Float32Array(D);A(W,x,s/m,s);let{texture:v}=await w(r,b),d=e.device,h=F(d),L=j(d,e.renderer.format),M=e.renderer.getTemporaryBuffer(x),a=v;for(let _ of L){let y=e.renderer.getTemporaryTexture(o,l,[v,a,p,...i.excludeTextures||[]]);T(t,y.createView(),_,[d.createBindGroup({layout:h.layout,entries:[{binding:0,resource:{buffer:M}},{binding:1,resource:v.createView()},{binding:2,resource:a.createView()},{binding:3,resource:h.sampler}]})]),a=y}G(r,a)};var q=P({WebGPURenderer:C});export{C as ContourWebGPURenderer,q as default};
@@ -0,0 +1,78 @@
1
+ import{a as P,d as U,f as S,h as R,j as k,m as G}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as y}from"./chunk-63SFBHEH.mjs";import{e as s}from"./chunk-BVF64D6H.mjs";s();s();var f="Dither",$=16,A=[`struct U { v : array<vec4<f32>, 4> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${P}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let mode = u32(u.v[1].x + 0.5);
55
+ let levels = u.v[1].y;
56
+ let scale = u.v[1].z;
57
+ let monochrome = u.v[1].w;
58
+ let dark = u.v[2];
59
+ let light = u.v[3];
60
+
61
+ let R = res();
62
+ let s = max(scale, 1.0);
63
+ let cellp = floor(in.uv * R / s);
64
+ let c = texelS(cellp * s + s * 0.5);
65
+ var t = bayer8(cellp);
66
+ if (mode == 1u) { t = hash12(cellp); }
67
+ if (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }
68
+ let n = max(levels - 1.0, 1.0);
69
+ var rgb : vec3<f32>;
70
+ if (monochrome > 0.5) {
71
+ let q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);
72
+ rgb = mix(dark.rgb, light.rgb, q);
73
+ } else {
74
+ rgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));
75
+ }
76
+ return premul(vec4<f32>(rgb, c.a));
77
+ }
78
+ `],w=S(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function O(r,e){let t=w(r),n=t.pipelines.get(e);return n||(n=A.map((p,i)=>{let l=r.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return r.createRenderPipeline({label:`${f}_${i}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:l,entryPoint:"vs"},fragment:{module:l,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function T(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function F(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function V(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=Math.max(0,["bayer","noise","halftone"].indexOf(String(r.mode??"bayer"))),e[5]=T(r.levels,2),e[6]=T(r.scale,2),e[7]=r.monochrome===void 0||r.monochrome?1:0,e.set(F(String(r.dark??"#111111")),8),e.set(F(String(r.light??"#f2efe6")),12)}var L=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:l,props:o}=r,c=o.virtualMedia?.operation;if(c?.op!==f)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let m=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),D=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:m,time:u/m}):c,x=new Float32Array($);V(D,x,u/m,u);let{texture:v}=await R(r,g),d=e.device,b=w(d),M=O(d,e.renderer.format),_=e.renderer.getTemporaryBuffer(x),a=v;for(let N of M){let h=e.renderer.getTemporaryTexture(i,l,[v,a,p,...o.excludeTextures||[]]);G(t,h.createView(),N,[d.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:v.createView()},{binding:2,resource:a.createView()},{binding:3,resource:b.sampler}]})]),a=h}k(r,a)};var I=y({WebGPURenderer:L});export{L as DitherWebGPURenderer,I as default};
@@ -0,0 +1,89 @@
1
+ import{a as P,d as U,f as S,h as w,j as R,m as G}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as k}from"./chunk-63SFBHEH.mjs";import{e as l}from"./chunk-BVF64D6H.mjs";l();l();var p="OpArt",_=20,N=[`struct U { v : array<vec4<f32>, 5> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${P}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let pattern = u32(u.v[1].x + 0.5);
55
+ let frequency = u.v[1].y;
56
+ let angle = u.v[1].z;
57
+ let warp = u.v[1].w;
58
+ let source = u.v[2].x;
59
+ let colorA = u.v[3];
60
+ let colorB = u.v[4];
61
+
62
+ let R = res();
63
+ let c = sampleS(in.uv);
64
+ let l = luma(c.rgb) * c.a + (1.0 - c.a);
65
+ var p = (in.uv - 0.5) * vec2<f32>(R.x / R.y, 1.0);
66
+ p = rot2(radians(angle)) * p;
67
+ var v = p.y * frequency;
68
+ if (pattern == 1u) { v = length(p) * frequency; }
69
+ if (pattern == 3u) { v = p.y * frequency + sin(p.x * frequency * 0.25) * 2.0; }
70
+ v += (1.0 - l) * warp * 3.0;
71
+ var v2 = p.x * frequency + (1.0 - l) * warp * 3.0;
72
+ let duty = mix(0.5, clamp(1.0 - l, 0.05, 0.95), source);
73
+ let e = max(fwidth(v), 1e-4);
74
+ let e2 = max(fwidth(v2), 1e-4);
75
+ let s = fract(v);
76
+ var ink = smoothstep(duty + e, duty - e, s) * smoothstep(-e, e, s);
77
+ if (pattern == 2u) {
78
+ let s2 = fract(v2);
79
+ let a = step(0.5, s);
80
+ let b = step(0.5, s2);
81
+ ink = abs(a - b);
82
+ ink = mix(ink, 1.0 - ink, step(duty, 0.5) * 0.0);
83
+ let edgeA = smoothstep(0.0, e, min(s, 1.0 - s)) * smoothstep(0.0, e, abs(s - 0.5));
84
+ let edgeB = smoothstep(0.0, e2, min(s2, 1.0 - s2)) * smoothstep(0.0, e2, abs(s2 - 0.5));
85
+ ink = mix(0.5, ink, edgeA * edgeB);
86
+ }
87
+ return vec4<f32>(mix(colorB.rgb, colorA.rgb, ink), 1.0);
88
+ }
89
+ `],A=S(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${p}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function W(r,e){let t=A(r),n=t.pipelines.get(e);return n||(n=N.map((m,i)=>{let s=r.createShaderModule({code:m,label:`${p}_${i}.wgsl`});return r.createRenderPipeline({label:`${p}_${i}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function f(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function T(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function D(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=Math.max(0,["stripes","rings","checker","waves"].indexOf(String(r.pattern??"stripes"))),e[5]=f(r.frequency,48),e[6]=f(r.angle,0),e[7]=f(r.warp,.6),e[8]=f(r.source,1),e.set(T(String(r.colorA??"#0a0a0a")),12),e.set(T(String(r.colorB??"#f5f5f5")),16)}var F=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:m,targetWidth:i,targetHeight:s,props:o}=r,u=o.virtualMedia?.operation;if(u?.op!==p)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let v=o.fps||30,a=Math.round(o.compositionFrame??o.frame??0),L=u.effect?.resolveUniforms?u.effect.resolveUniforms({frame:a,fps:v,time:a/v}):u,y=new Float32Array(_);D(L,y,a/v,a);let{texture:d}=await w(r,g),x=e.device,b=A(x),q=W(x,e.renderer.format),M=e.renderer.getTemporaryBuffer(y),c=d;for(let B of q){let h=e.renderer.getTemporaryTexture(i,s,[d,c,m,...o.excludeTextures||[]]);G(t,h.createView(),B,[x.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:M}},{binding:1,resource:d.createView()},{binding:2,resource:c.createView()},{binding:3,resource:b.sampler}]})]),c=h}R(r,c)};var I=k({WebGPURenderer:F});export{F as OpArtWebGPURenderer,I as default};
@@ -0,0 +1,67 @@
1
+ import{a as P,d as R,f as U,h as G,j as S,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as h}from"./chunk-63SFBHEH.mjs";import{e as s}from"./chunk-BVF64D6H.mjs";s();s();var f="RGBSplit",D=8,N=[`struct U { v : array<vec4<f32>, 2> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${P}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
52
+ let time = u.v[0].x;
53
+ let frame = u.v[0].y;
54
+ let amount = u.v[1].x;
55
+ let angle = u.v[1].y;
56
+ let radial = u.v[1].z;
57
+
58
+ let R = res();
59
+ let a = radians(angle);
60
+ var d = vec2<f32>(cos(a), sin(a)) * amount / R;
61
+ if (radial > 0.5) { d = (in.uv - 0.5) * 2.0 * amount / R; }
62
+ let cr = sampleP(in.uv + d);
63
+ let cg = sampleP(in.uv);
64
+ let cb = sampleP(in.uv - d);
65
+ return vec4<f32>(cr.r, cg.g, cb.b, max(max(cr.a, cg.a), cb.a));
66
+ }
67
+ `],w=U(e=>({layout:R(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=w(e),n=t.pipelines.get(r);return n||(n=N.map((p,a)=>{let o=e.createShaderModule({code:p,label:`${f}_${a}.wgsl`});return e.createRenderPipeline({label:`${f}_${a}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function k(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=k(e.amount,8),r[5]=k(e.angle,0),r[6]=e.radial===void 0?0:e.radial?1:0}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:a,targetHeight:o,props:i}=e,c=i.virtualMedia?.operation;if(c?.op!==f)return;let x=i.virtualMedia?.children?.[0];if(!x)return;n.end();let d=i.fps||30,u=Math.round(i.compositionFrame??i.frame??0),L=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:d,time:u/d}):c,g=new Float32Array(D);A(L,g,u/d,u);let{texture:m}=await G(e,x),v=r.device,b=w(v),M=$(v,r.renderer.format),_=r.renderer.getTemporaryBuffer(g),l=m;for(let W of M){let y=r.renderer.getTemporaryTexture(a,o,[m,l,p,...i.excludeTextures||[]]);T(t,y.createView(),W,[v.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:m.createView()},{binding:2,resource:l.createView()},{binding:3,resource:b.sampler}]})]),l=y}S(e,l)};var C=h({WebGPURenderer:F});export{F as RGBSplitWebGPURenderer,C as default};