framefields 2.4.3 → 2.5.1

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 (514) hide show
  1. package/README.md +26 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-DJeVoE8b.mjs → audio-BluXgSeG.mjs} +1 -1
  5. package/dist/{audio-DJeVoE8b.mjs.map → audio-BluXgSeG.mjs.map} +1 -1
  6. package/dist/{audio-BymXfAvH.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
  7. package/dist/{audio-BymXfAvH.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
  8. package/dist/{audio-BzHHpImj.mjs → audio-CZwVENqB.mjs} +4 -4
  9. package/dist/{audio-BzHHpImj.mjs.map → audio-CZwVENqB.mjs.map} +1 -1
  10. package/dist/cli.d.mts +1 -0
  11. package/dist/cli.mjs +221 -0
  12. package/dist/cli.mjs.map +1 -0
  13. package/dist/components/index.d.mts +12 -0
  14. package/dist/components/index.mjs +49 -0
  15. package/dist/{dist-Bo2_zeCn.mjs → dist-CQZ5_60A.mjs} +2 -2
  16. package/dist/{dist-Bo2_zeCn.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
  17. package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
  18. package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
  19. package/dist/{dist-hmWTJPik.mjs → dist-DBWkkSvJ.mjs} +113 -68
  20. package/dist/dist-DBWkkSvJ.mjs.map +1 -0
  21. package/dist/{dist-TrtLGPvc.mjs → dist-DFeF-ygz.mjs} +1 -1
  22. package/dist/{dist-TrtLGPvc.mjs.map → dist-DFeF-ygz.mjs.map} +1 -1
  23. package/dist/{dist-DMa2BbYs.mjs → dist-DHQVWaV2.mjs} +53 -21
  24. package/dist/dist-DHQVWaV2.mjs.map +1 -0
  25. package/dist/effects/index.d.mts +4 -4
  26. package/dist/effects/index.mjs +36 -36
  27. package/dist/{effects-CiZjSwIh.mjs → effects-DZvq-nWT.mjs} +3 -3
  28. package/dist/{effects-CiZjSwIh.mjs.map → effects-DZvq-nWT.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +3 -3
  31. package/dist/{fonts-Da1JDKpc.mjs → fonts-DcsxFpyU.mjs} +3 -2
  32. package/dist/fonts-DcsxFpyU.mjs.map +1 -0
  33. package/dist/{gpu-CHIgM_YH.mjs → gpu-Dq_uI_00.mjs} +2 -2
  34. package/dist/{gpu-CHIgM_YH.mjs.map → gpu-Dq_uI_00.mjs.map} +1 -1
  35. package/dist/{index-DIvWBm-q.d.mts → index-B-KVpJMb.d.mts} +2 -2
  36. package/dist/{index-DIvWBm-q.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
  37. package/dist/{index-WMofVN02.d.mts → index-BpdVOlsV.d.mts} +3 -3
  38. package/dist/{index-WMofVN02.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
  39. package/dist/index-C2f4Hm-p.d.mts +89 -0
  40. package/dist/index-C2f4Hm-p.d.mts.map +1 -0
  41. package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
  42. package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
  43. package/dist/{index-CJkihekp.d.mts → index-D6-lH1Mx.d.mts} +189 -189
  44. package/dist/index-D6-lH1Mx.d.mts.map +1 -0
  45. package/dist/index-DKssQ_wn.d.mts +5968 -0
  46. package/dist/index-DKssQ_wn.d.mts.map +1 -0
  47. package/dist/{index-Dwf76Qep.d.mts → index-DNKM3to5.d.mts} +3 -3
  48. package/dist/{index-Dwf76Qep.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
  49. package/dist/{index-DGe83M-p.d.mts → index-fymoeGNW.d.mts} +6 -1
  50. package/dist/index-fymoeGNW.d.mts.map +1 -0
  51. package/dist/index.d.mts +13 -4659
  52. package/dist/index.mjs +59 -6654
  53. package/dist/preview/index.d.mts +4 -90
  54. package/dist/preview/index.mjs +12 -12
  55. package/dist/{preview-5E4B96RD.mjs → preview-CYI4i4m3.mjs} +5 -4
  56. package/dist/preview-CYI4i4m3.mjs.map +1 -0
  57. package/dist/preview-engine/audio.mjs +1 -1
  58. package/dist/preview-engine/{chunk-TFFG5YFI.mjs → chunk-24H3QVYB.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-7J4OK4VE.mjs → chunk-25T3M6MI.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-O3NOB5IB.mjs → chunk-2QQQTZHS.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-XTPEGKOZ.mjs → chunk-2RZ6S4SW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-37P2KIFE.mjs → chunk-3AYICEZ5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-JTUK7ZXK.mjs → chunk-3I6B3YPF.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-LQBDZSQD.mjs → chunk-6GMEF2QB.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-5CWQHYQP.mjs → chunk-7BUKVFWB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-AWX4YGC5.mjs → chunk-7JYMNGNK.mjs} +1 -1
  67. package/dist/preview-engine/chunk-AB5VITYM.mjs +1974 -0
  68. package/dist/preview-engine/{chunk-LSBCFJZM.mjs → chunk-BNO5JAEZ.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-6WKWYUOM.mjs → chunk-CE6CG5BH.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-LQENNFBA.mjs → chunk-CT2WFPYG.mjs} +11 -11
  71. package/dist/preview-engine/{chunk-5JSSXOBB.mjs → chunk-DUEY7AXY.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-UDDK5QZF.mjs → chunk-DWHQSNSJ.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-AY2ZIXST.mjs → chunk-ENS4KUJV.mjs} +1 -1
  74. package/dist/preview-engine/chunk-EU7CFSB5.mjs +1 -0
  75. package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
  76. package/dist/preview-engine/{chunk-7QE6II7R.mjs → chunk-JMOJKT5W.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-NIRW77QA.mjs → chunk-KJGNTREI.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-ILBZQLUF.mjs → chunk-KKBJ7X3T.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-GQN35VLT.mjs → chunk-LNJYHSYX.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-6TGNQ5FD.mjs → chunk-LQVACZDE.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-YQYLBXOX.mjs → chunk-M6ZKK6ZU.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-EEOUHDUD.mjs → chunk-MA4YVA2E.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-JAJOZG5P.mjs → chunk-MBJXS3D7.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-BIS3W4Z5.mjs → chunk-MCR7XMNQ.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-C45ROXI6.mjs → chunk-NAISBHLR.mjs} +11 -11
  86. package/dist/preview-engine/{chunk-AKYUVDKM.mjs → chunk-NB55FW7D.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-3SOD7OTO.mjs → chunk-NHQR76WL.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-MJN3LOZ7.mjs → chunk-NKGXINCU.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-FDNR4PRC.mjs → chunk-NXKXOSE6.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-N3PRZLZJ.mjs → chunk-NYEDWUFS.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-W3QGP5XF.mjs → chunk-P734GD7D.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-YJ6GWVL4.mjs → chunk-PDM3TJ45.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-KJ2DTA77.mjs → chunk-PXWCGXTF.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-V6LCSK6Q.mjs → chunk-QCUGWPYP.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-JJYNYYPA.mjs → chunk-QJYAIQYU.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-VUFDQJ2B.mjs → chunk-QKQYHPBK.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-NVTPJUNG.mjs → chunk-QVW5METG.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-UMF7NNUA.mjs → chunk-QYIKOOFI.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-FSAELHVT.mjs → chunk-RNFYEZLL.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-CEIOI4HO.mjs → chunk-SIXIF5QZ.mjs} +1 -1
  101. package/dist/preview-engine/chunk-SNASF7OM.mjs +3 -0
  102. package/dist/preview-engine/{chunk-A2775RSO.mjs → chunk-T4VP45AP.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-5EVEGKWT.mjs → chunk-TE2QAKKF.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-6MBYREBG.mjs → chunk-UXCTWFKK.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-V6DAD4S4.mjs → chunk-V3FODTPI.mjs} +2 -2
  106. package/dist/preview-engine/{chunk-JJA4G3OU.mjs → chunk-VH5V54RA.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-GIH5QURF.mjs → chunk-VTE3IISK.mjs} +1 -1
  108. package/dist/preview-engine/chunk-W4HIVUUA.mjs +4 -0
  109. package/dist/preview-engine/{chunk-O5LA63CK.mjs → chunk-WUMVCQYI.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-U4SQUTDV.mjs → chunk-X6BJLPW6.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-54HE34HO.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-XUPZBI3Y.mjs} +6 -6
  113. package/dist/preview-engine/{chunk-LMZHCWXP.mjs → chunk-XYRBFLFF.mjs} +1 -1
  114. package/dist/preview-engine/{chunk-S7NG26UG.mjs → chunk-YJ24W73B.mjs} +1 -1
  115. package/dist/preview-engine/{chunk-5SVJIGPK.mjs → chunk-Z4TKEI3I.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-UVWGZUKZ.mjs → chunk-ZAIVXGSS.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-OZDZQMTB.mjs → chunk-ZVUTFXDR.mjs} +1 -1
  118. package/dist/preview-engine/components.mjs +1 -0
  119. package/dist/preview-engine/effects.mjs +1 -1
  120. package/dist/preview-engine/fonts.mjs +1 -1
  121. package/dist/preview-engine/framefields.mjs +1 -1971
  122. package/dist/preview-engine/player.mjs +5 -5
  123. package/dist/preview-engine/renderers-2S5ZWL2J.mjs +1 -0
  124. package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
  125. package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
  126. package/dist/preview-engine/{renderers-2A7YDJMJ.mjs → renderers-4RFB2LG2.mjs} +1 -1
  127. package/dist/preview-engine/renderers-6NFRKHNO.mjs +1 -0
  128. package/dist/preview-engine/{renderers-QJNGN722.mjs → renderers-6PVGRTXV.mjs} +1 -1
  129. package/dist/preview-engine/renderers-7MPBAHYA.mjs +1 -0
  130. package/dist/preview-engine/renderers-AFTYMS3H.mjs +1 -0
  131. package/dist/preview-engine/renderers-AKZAAGR7.mjs +1 -0
  132. package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
  133. package/dist/preview-engine/{renderers-5OGAF66H.mjs → renderers-BNXTSIXJ.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-XPO2WQNF.mjs → renderers-BQLYS4TM.mjs} +1 -1
  135. package/dist/preview-engine/renderers-C7SJ3M6S.mjs +1 -0
  136. package/dist/preview-engine/{renderers-VD5GHHK6.mjs → renderers-CEJP6Q7F.mjs} +1 -1
  137. package/dist/preview-engine/{renderers-KW75FYFG.mjs → renderers-CLLR5MOQ.mjs} +1 -1
  138. package/dist/preview-engine/{renderers-PM4Q5QOW.mjs → renderers-DHKB5LI6.mjs} +1 -1
  139. package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
  140. package/dist/preview-engine/{renderers-XTRFEQO4.mjs → renderers-DZZFIYYA.mjs} +1 -1
  141. package/dist/preview-engine/renderers-EIJFIY6L.mjs +1 -0
  142. package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
  143. package/dist/preview-engine/{renderers-NJAKGI25.mjs → renderers-FOHW7RWH.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-K23EAM2J.mjs → renderers-GF77N2KM.mjs} +1 -1
  145. package/dist/preview-engine/renderers-H3ZM2TOA.mjs +1 -0
  146. package/dist/preview-engine/{renderers-NPKRNXAT.mjs → renderers-HJ6NO5ZD.mjs} +1 -1
  147. package/dist/preview-engine/renderers-JXBZPQKP.mjs +1 -0
  148. package/dist/preview-engine/renderers-KSQM7EM5.mjs +1 -0
  149. package/dist/preview-engine/{renderers-WNMRLGZS.mjs → renderers-KV3TTCO6.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-U2ZWRL25.mjs → renderers-L7EITUCD.mjs} +1 -1
  151. package/dist/preview-engine/renderers-LD3COS4X.mjs +1 -0
  152. package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
  153. package/dist/preview-engine/renderers-MKEXNBCW.mjs +1 -0
  154. package/dist/preview-engine/{renderers-ZRR7BLB7.mjs → renderers-MPCYLXXU.mjs} +1 -1
  155. package/dist/preview-engine/{renderers-DKOWLKDE.mjs → renderers-MS4HG3M4.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-MHDLRY3S.mjs → renderers-N7T34SCI.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-2GE5HE56.mjs → renderers-O56IOD7J.mjs} +1 -1
  158. package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
  159. package/dist/preview-engine/renderers-PSEDMUBV.mjs +1 -0
  160. package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
  161. package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
  162. package/dist/preview-engine/{renderers-7M3YOI7E.mjs → renderers-QO2RHF7F.mjs} +1 -1
  163. package/dist/preview-engine/renderers-QPFZBLDI.mjs +1 -0
  164. package/dist/preview-engine/renderers-R4U2TK6P.mjs +1 -0
  165. package/dist/preview-engine/renderers-RBLNDAO4.mjs +1 -0
  166. package/dist/preview-engine/renderers-RM25AXWZ.mjs +1 -0
  167. package/dist/preview-engine/{renderers-DFJDEPCU.mjs → renderers-ROSSJ7Y2.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-4H34AFW2.mjs → renderers-RRJ2DX2W.mjs} +1 -1
  169. package/dist/preview-engine/renderers-RYRFCEYT.mjs +1 -0
  170. package/dist/preview-engine/renderers-SIBP54WK.mjs +1 -0
  171. package/dist/preview-engine/renderers-SRU6QXLN.mjs +1 -0
  172. package/dist/preview-engine/{renderers-TFEDHXPY.mjs → renderers-T62TXGVO.mjs} +1 -1
  173. package/dist/preview-engine/{renderers-6GYRMHGQ.mjs → renderers-TAMDNTEQ.mjs} +1 -1
  174. package/dist/preview-engine/{renderers-LF6W5P2I.mjs → renderers-TASYN62K.mjs} +1 -1
  175. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
  176. package/dist/preview-engine/{renderers-FNPXT2EH.mjs → renderers-TWZHTKW7.mjs} +1 -1
  177. package/dist/preview-engine/renderers-UQHKFGDX.mjs +1 -0
  178. package/dist/preview-engine/{renderers-35G4KCQ2.mjs → renderers-UVABXXQF.mjs} +1 -1
  179. package/dist/preview-engine/{renderers-XTCBHTHC.mjs → renderers-VYK2BJID.mjs} +1 -1
  180. package/dist/preview-engine/{renderers-Q6AO5M54.mjs → renderers-W5CTR4B5.mjs} +1 -1
  181. package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
  182. package/dist/preview-engine/renderers-WNBDSSJ3.mjs +1 -0
  183. package/dist/preview-engine/{renderers-ATL5ARUV.mjs → renderers-WPBTAU2E.mjs} +1 -1
  184. package/dist/preview-engine/renderers-WTC2RNGU.mjs +1 -0
  185. package/dist/preview-engine/renderers-XLBHSQZJ.mjs +228 -0
  186. package/dist/preview-engine/{renderers-WOLTH5VI.mjs → renderers-XSPU2BIQ.mjs} +1 -1
  187. package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
  188. package/dist/preview-engine/renderers-YHOQUEHD.mjs +1 -0
  189. package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
  190. package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
  191. package/dist/preview-engine/signals.mjs +1 -1
  192. package/dist/{program-KwDdbC0-.mjs → program-BdPDtfVv.mjs} +133 -30
  193. package/dist/program-BdPDtfVv.mjs.map +1 -0
  194. package/dist/registry/annotate.json +30 -0
  195. package/dist/registry/app-frame.json +38 -0
  196. package/dist/registry/backdrop.json +37 -0
  197. package/dist/registry/before-after.json +33 -0
  198. package/dist/registry/callout.json +30 -0
  199. package/dist/registry/captions.json +37 -0
  200. package/dist/registry/card-stack.json +30 -0
  201. package/dist/registry/chat-thread.json +32 -0
  202. package/dist/registry/code-block.json +45 -0
  203. package/dist/registry/confetti.json +29 -0
  204. package/dist/registry/counter.json +36 -0
  205. package/dist/registry/device-frame.json +36 -0
  206. package/dist/registry/focus-zoom.json +32 -0
  207. package/dist/registry/index.json +408 -0
  208. package/dist/registry/logo-reveal.json +37 -0
  209. package/dist/registry/lower-third.json +34 -0
  210. package/dist/registry/meter.json +35 -0
  211. package/dist/registry/mouse-pointer.json +44 -0
  212. package/dist/registry/selection.json +31 -0
  213. package/dist/registry/spotlight.json +28 -0
  214. package/dist/registry/terminal.json +40 -0
  215. package/dist/registry/text-reveal.json +39 -0
  216. package/dist/registry/title-card.json +34 -0
  217. package/dist/registry/toasts.json +28 -0
  218. package/dist/registry/touch-point.json +33 -0
  219. package/dist/registry/waveform.json +29 -0
  220. package/dist/registry/word-cycle.json +32 -0
  221. package/dist/renderer/index.d.mts +2 -2
  222. package/dist/renderer/index.mjs +3 -3
  223. package/dist/{renderer-Bhfl-WFX.mjs → renderer-0cHsK6xR.mjs} +5 -5
  224. package/dist/{renderer-Bhfl-WFX.mjs.map → renderer-0cHsK6xR.mjs.map} +1 -1
  225. package/dist/{renderer-D4No_jA4.mjs → renderer-1VKN5j2C.mjs} +4 -4
  226. package/dist/{renderer-D4No_jA4.mjs.map → renderer-1VKN5j2C.mjs.map} +1 -1
  227. package/dist/{renderer-qYhNf6iB.mjs → renderer-2bipMLqz.mjs} +3 -3
  228. package/dist/{renderer-qYhNf6iB.mjs.map → renderer-2bipMLqz.mjs.map} +1 -1
  229. package/dist/{renderer-DK9etIAz.mjs → renderer-7DyjqxEj.mjs} +5 -5
  230. package/dist/{renderer-DK9etIAz.mjs.map → renderer-7DyjqxEj.mjs.map} +1 -1
  231. package/dist/renderer-B-D_VZg3.mjs +5 -0
  232. package/dist/{renderer-Ci6YMa4u.mjs → renderer-B31zMDE8.mjs} +5 -5
  233. package/dist/{renderer-Ci6YMa4u.mjs.map → renderer-B31zMDE8.mjs.map} +1 -1
  234. package/dist/{renderer-DP_In2uT.mjs → renderer-B4blg067.mjs} +4 -4
  235. package/dist/{renderer-DP_In2uT.mjs.map → renderer-B4blg067.mjs.map} +1 -1
  236. package/dist/{renderer-kNjMhwiZ.mjs → renderer-B5YYBBDq.mjs} +3 -3
  237. package/dist/{renderer-kNjMhwiZ.mjs.map → renderer-B5YYBBDq.mjs.map} +1 -1
  238. package/dist/renderer-B64dhpDX.mjs +5 -0
  239. package/dist/{renderer-mqUBkx-a.mjs → renderer-B8LXXvHi.mjs} +4 -4
  240. package/dist/{renderer-mqUBkx-a.mjs.map → renderer-B8LXXvHi.mjs.map} +1 -1
  241. package/dist/renderer-BA2Ko4H1.mjs +3 -0
  242. package/dist/{renderer-B4ydDdo6.mjs → renderer-BAkPq8qo.mjs} +3 -3
  243. package/dist/{renderer-B4ydDdo6.mjs.map → renderer-BAkPq8qo.mjs.map} +1 -1
  244. package/dist/{renderer-OEpwc9Zk.mjs → renderer-BBTdHKH7.mjs} +5 -5
  245. package/dist/{renderer-OEpwc9Zk.mjs.map → renderer-BBTdHKH7.mjs.map} +1 -1
  246. package/dist/{renderer-DGT141pN.mjs → renderer-BBTkfhL8.mjs} +5 -5
  247. package/dist/{renderer-DGT141pN.mjs.map → renderer-BBTkfhL8.mjs.map} +1 -1
  248. package/dist/renderer-BDL4jyrb.mjs +5 -0
  249. package/dist/{renderer-BtWWpFvl.mjs → renderer-BGNdwdCR.mjs} +4 -4
  250. package/dist/{renderer-BtWWpFvl.mjs.map → renderer-BGNdwdCR.mjs.map} +1 -1
  251. package/dist/{renderer-DXSIstnn.mjs → renderer-BJwOM1Dq.mjs} +4 -4
  252. package/dist/{renderer-DXSIstnn.mjs.map → renderer-BJwOM1Dq.mjs.map} +1 -1
  253. package/dist/renderer-BKCZGKkl.mjs +5 -0
  254. package/dist/renderer-BKs3jI7-.mjs +5 -0
  255. package/dist/{renderer-C5WkQZGR.mjs → renderer-BN_n6O6P.mjs} +5 -5
  256. package/dist/{renderer-C5WkQZGR.mjs.map → renderer-BN_n6O6P.mjs.map} +1 -1
  257. package/dist/renderer-BW74Zf-u.mjs +5 -0
  258. package/dist/{renderer-C1U85w9f.mjs → renderer-BWa3CLK7.mjs} +3 -3
  259. package/dist/{renderer-C1U85w9f.mjs.map → renderer-BWa3CLK7.mjs.map} +1 -1
  260. package/dist/{renderer-plx7_lUQ.mjs → renderer-BWnFh7NO.mjs} +5 -5
  261. package/dist/{renderer-plx7_lUQ.mjs.map → renderer-BWnFh7NO.mjs.map} +1 -1
  262. package/dist/renderer-BXuQN61O.mjs +5 -0
  263. package/dist/renderer-BY1pPvzx.mjs +6 -0
  264. package/dist/{renderer-CwO8T8l8.mjs → renderer-BYJS2lhn.mjs} +4 -4
  265. package/dist/{renderer-CwO8T8l8.mjs.map → renderer-BYJS2lhn.mjs.map} +1 -1
  266. package/dist/renderer-Bahthqvq.mjs +5 -0
  267. package/dist/renderer-BbaiQG8h.mjs +5 -0
  268. package/dist/{renderer-gm0zoV4t.mjs → renderer-BfrzKmRh.mjs} +3 -3
  269. package/dist/{renderer-gm0zoV4t.mjs.map → renderer-BfrzKmRh.mjs.map} +1 -1
  270. package/dist/renderer-BhHF-08y.mjs +5 -0
  271. package/dist/{renderer-DQeUc1yY.mjs → renderer-BhhweLr_.mjs} +4 -4
  272. package/dist/{renderer-DQeUc1yY.mjs.map → renderer-BhhweLr_.mjs.map} +1 -1
  273. package/dist/{renderer-OsA-Lg4d.mjs → renderer-Bmj7AyJP.mjs} +3 -3
  274. package/dist/{renderer-OsA-Lg4d.mjs.map → renderer-Bmj7AyJP.mjs.map} +1 -1
  275. package/dist/{renderer-DZhIe8Gj.mjs → renderer-BmoQJUJO.mjs} +4 -4
  276. package/dist/{renderer-DZhIe8Gj.mjs.map → renderer-BmoQJUJO.mjs.map} +1 -1
  277. package/dist/renderer-BnrMcw6C.mjs +5 -0
  278. package/dist/{renderer-Blm4Dv_h.mjs → renderer-Bo1PY0zW.mjs} +3 -3
  279. package/dist/{renderer-DcOT5c0t.mjs → renderer-Bo_d7h86.mjs} +4 -4
  280. package/dist/{renderer-DcOT5c0t.mjs.map → renderer-Bo_d7h86.mjs.map} +1 -1
  281. package/dist/renderer-BsS61z5l.mjs +5 -0
  282. package/dist/renderer-Btuq2Eq8.mjs +5 -0
  283. package/dist/renderer-BvcqncI2.mjs +3 -0
  284. package/dist/{renderer-C4xvz_Ft.mjs → renderer-Bw5YP2Db.mjs} +4 -4
  285. package/dist/{renderer-C4xvz_Ft.mjs.map → renderer-Bw5YP2Db.mjs.map} +1 -1
  286. package/dist/renderer-BxmsEl2x.mjs +5 -0
  287. package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
  288. package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
  289. package/dist/{renderer-B4jxP8vF.mjs → renderer-CDX2f82b.mjs} +5 -5
  290. package/dist/{renderer-B4jxP8vF.mjs.map → renderer-CDX2f82b.mjs.map} +1 -1
  291. package/dist/renderer-CGOyHdKs.mjs +5 -0
  292. package/dist/renderer-CJjmpmpu.mjs +5 -0
  293. package/dist/{renderer-P4OPsD82.mjs → renderer-CJoa4H2G.mjs} +3 -3
  294. package/dist/{renderer-P4OPsD82.mjs.map → renderer-CJoa4H2G.mjs.map} +1 -1
  295. package/dist/{renderer-1P3yS8YM.mjs → renderer-CLO8QHWE.mjs} +4 -4
  296. package/dist/{renderer-1P3yS8YM.mjs.map → renderer-CLO8QHWE.mjs.map} +1 -1
  297. package/dist/{renderer-CjQAYeYz.mjs → renderer-CMEqUhrW.mjs} +5 -5
  298. package/dist/{renderer-CjQAYeYz.mjs.map → renderer-CMEqUhrW.mjs.map} +1 -1
  299. package/dist/{renderer-CzgDJcot.mjs → renderer-CNs1vBUy.mjs} +4 -4
  300. package/dist/{renderer-CzgDJcot.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
  301. package/dist/{index-B0BZMhtw.d.mts → renderer-COXKPofU.d.mts} +13 -13
  302. package/dist/renderer-COXKPofU.d.mts.map +1 -0
  303. package/dist/{renderer-CrwYWVsV.mjs → renderer-COtZ315B.mjs} +3 -3
  304. package/dist/renderer-CQvDDAIu.mjs +5 -0
  305. package/dist/{renderer-DOvzHN60.mjs → renderer-CWSM0IGG.mjs} +4 -4
  306. package/dist/{renderer-DOvzHN60.mjs.map → renderer-CWSM0IGG.mjs.map} +1 -1
  307. package/dist/{renderer-DVFFVy9v.mjs → renderer-CXbXF7Dh.mjs} +5 -5
  308. package/dist/{renderer-DVFFVy9v.mjs.map → renderer-CXbXF7Dh.mjs.map} +1 -1
  309. package/dist/renderer-CYxigw7S.mjs +5 -0
  310. package/dist/{renderer-DOxmmN6Q.mjs → renderer-CdUf7ZDJ.mjs} +5 -5
  311. package/dist/{renderer-DOxmmN6Q.mjs.map → renderer-CdUf7ZDJ.mjs.map} +1 -1
  312. package/dist/renderer-CgDofO5z.mjs +5 -0
  313. package/dist/renderer-CgmQchab.mjs +5 -0
  314. package/dist/{renderer-CS8VMTp1.mjs → renderer-Ch7qwjH9.mjs} +5 -5
  315. package/dist/{renderer-CS8VMTp1.mjs.map → renderer-Ch7qwjH9.mjs.map} +1 -1
  316. package/dist/{renderer-PuN2_AL_.mjs → renderer-ChCUad83.mjs} +5 -5
  317. package/dist/{renderer-PuN2_AL_.mjs.map → renderer-ChCUad83.mjs.map} +1 -1
  318. package/dist/{renderer-BaJQx0Bp.mjs → renderer-ChjkppUz.mjs} +5 -5
  319. package/dist/{renderer-BaJQx0Bp.mjs.map → renderer-ChjkppUz.mjs.map} +1 -1
  320. package/dist/{renderer-CTYKUnDq.mjs → renderer-Cj1giMd0.mjs} +3 -3
  321. package/dist/{renderer-CTYKUnDq.mjs.map → renderer-Cj1giMd0.mjs.map} +1 -1
  322. package/dist/{renderer-DWG4Podv.mjs → renderer-Cjs1OeBu.mjs} +6 -6
  323. package/dist/{renderer-DWG4Podv.mjs.map → renderer-Cjs1OeBu.mjs.map} +1 -1
  324. package/dist/renderer-CjzrLwW_.mjs +5 -0
  325. package/dist/renderer-ClnYWADT.mjs +5 -0
  326. package/dist/{renderer-B9ssmkbx.mjs → renderer-CmKdr2nA.mjs} +5 -5
  327. package/dist/{renderer-B9ssmkbx.mjs.map → renderer-CmKdr2nA.mjs.map} +1 -1
  328. package/dist/renderer-CwAd71C6.mjs +5 -0
  329. package/dist/{renderer-BT0x6KPK.mjs → renderer-D0X7Eh-T.mjs} +4 -4
  330. package/dist/{renderer-BT0x6KPK.mjs.map → renderer-D0X7Eh-T.mjs.map} +1 -1
  331. package/dist/{renderer-DYbgd6Ye.mjs → renderer-D2ru2Afi.mjs} +4 -4
  332. package/dist/{renderer-DYbgd6Ye.mjs.map → renderer-D2ru2Afi.mjs.map} +1 -1
  333. package/dist/renderer-D3Z9t-xT.mjs +5 -0
  334. package/dist/{renderer-CLxQ4rU6.mjs → renderer-D5u3GVtD.mjs} +74 -74
  335. package/dist/{renderer-CLxQ4rU6.mjs.map → renderer-D5u3GVtD.mjs.map} +1 -1
  336. package/dist/{renderer-DCsTCvdo.mjs → renderer-D6p8b6ql.mjs} +4 -4
  337. package/dist/{renderer-DCsTCvdo.mjs.map → renderer-D6p8b6ql.mjs.map} +1 -1
  338. package/dist/{renderer-Bkq1PT0g.mjs → renderer-DBjV6C2u.mjs} +3 -3
  339. package/dist/{renderer-BAoKytKL.mjs → renderer-DHqicGgT.mjs} +4 -4
  340. package/dist/{renderer-BAoKytKL.mjs.map → renderer-DHqicGgT.mjs.map} +1 -1
  341. package/dist/{renderer-B_b8-ztW.mjs → renderer-DK34NH92.mjs} +5 -5
  342. package/dist/{renderer-B_b8-ztW.mjs.map → renderer-DK34NH92.mjs.map} +1 -1
  343. package/dist/renderer-DKH1oSlW.mjs +5 -0
  344. package/dist/{renderer-I3Wxk1tL.mjs → renderer-DP41Fokp.mjs} +4 -4
  345. package/dist/{renderer-I3Wxk1tL.mjs.map → renderer-DP41Fokp.mjs.map} +1 -1
  346. package/dist/{renderer-CPLfsRe1.mjs → renderer-DQuKNgIx.mjs} +6 -6
  347. package/dist/{renderer-CPLfsRe1.mjs.map → renderer-DQuKNgIx.mjs.map} +1 -1
  348. package/dist/renderer-DTkf_hwG.mjs +5 -0
  349. package/dist/renderer-DU0bmOS7.mjs +5 -0
  350. package/dist/{renderer-GapR_An3.mjs → renderer-DWaqF7-6.mjs} +4 -4
  351. package/dist/{renderer-GapR_An3.mjs.map → renderer-DWaqF7-6.mjs.map} +1 -1
  352. package/dist/renderer-D_vJHQt5.mjs +5 -0
  353. package/dist/{renderer-GbVNyv-E.mjs → renderer-Db_wphHH.mjs} +192 -27
  354. package/dist/renderer-Db_wphHH.mjs.map +1 -0
  355. package/dist/renderer-Dc5n0M6P.mjs +5 -0
  356. package/dist/renderer-Ddfn0Dha.mjs +5 -0
  357. package/dist/renderer-DeSoNQeG.mjs +5 -0
  358. package/dist/{renderer-C0ds-UfM.mjs → renderer-DkPDYtD3.mjs} +5 -5
  359. package/dist/{renderer-C0ds-UfM.mjs.map → renderer-DkPDYtD3.mjs.map} +1 -1
  360. package/dist/{renderer-BCLmYH4S.mjs → renderer-DqO9gBAi.mjs} +4 -4
  361. package/dist/{renderer-BCLmYH4S.mjs.map → renderer-DqO9gBAi.mjs.map} +1 -1
  362. package/dist/{renderer-BUwHWIf7.mjs → renderer-DuQMzR3v.mjs} +4 -4
  363. package/dist/{renderer-BUwHWIf7.mjs.map → renderer-DuQMzR3v.mjs.map} +1 -1
  364. package/dist/{renderer-DBtt-7wt.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
  365. package/dist/{renderer-DBtt-7wt.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
  366. package/dist/{renderer-f7A01ArI.mjs → renderer-DyMEAZIm.mjs} +5 -5
  367. package/dist/{renderer-f7A01ArI.mjs.map → renderer-DyMEAZIm.mjs.map} +1 -1
  368. package/dist/renderer-Dzca9Qba.mjs +5 -0
  369. package/dist/{renderer-DBKyuPl1.mjs → renderer-FCqOfN6n.mjs} +5 -5
  370. package/dist/{renderer-DBKyuPl1.mjs.map → renderer-FCqOfN6n.mjs.map} +1 -1
  371. package/dist/{renderer-D96Pu8yX.mjs → renderer-Fsdod0yZ.mjs} +5 -5
  372. package/dist/{renderer-D96Pu8yX.mjs.map → renderer-Fsdod0yZ.mjs.map} +1 -1
  373. package/dist/{renderer-Du8eOWWU.mjs → renderer-G3px5ODP.mjs} +4 -4
  374. package/dist/{renderer-Du8eOWWU.mjs.map → renderer-G3px5ODP.mjs.map} +1 -1
  375. package/dist/renderer-HRVvtc9c.mjs +5 -0
  376. package/dist/{renderer-CUPWHfEY.mjs → renderer-IMg0dK6K.mjs} +5 -5
  377. package/dist/{renderer-CUPWHfEY.mjs.map → renderer-IMg0dK6K.mjs.map} +1 -1
  378. package/dist/renderer-M3Qs4f1K.mjs +5 -0
  379. package/dist/renderer-NDHJt_Ae.mjs +5 -0
  380. package/dist/{renderer-y6k54AM6.mjs → renderer-PLoGrFGz.mjs} +4 -4
  381. package/dist/{renderer-y6k54AM6.mjs.map → renderer-PLoGrFGz.mjs.map} +1 -1
  382. package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
  383. package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
  384. package/dist/{renderer-CDky5Gva.mjs → renderer-VdTs-dqH.mjs} +4 -4
  385. package/dist/{renderer-CDky5Gva.mjs.map → renderer-VdTs-dqH.mjs.map} +1 -1
  386. package/dist/{renderer-QaN-aejD.mjs → renderer-VxVi_0c7.mjs} +3 -3
  387. package/dist/{renderer-QaN-aejD.mjs.map → renderer-VxVi_0c7.mjs.map} +1 -1
  388. package/dist/{renderer-BMLJgnbU.mjs → renderer-WVrUeiLZ.mjs} +3 -3
  389. package/dist/{renderer-BHLYKy8b.mjs → renderer-Z39F9QK5.mjs} +5 -5
  390. package/dist/{renderer-BHLYKy8b.mjs.map → renderer-Z39F9QK5.mjs.map} +1 -1
  391. package/dist/{renderer-DSbRWfgl.mjs → renderer-ZjSP5jw6.mjs} +3 -3
  392. package/dist/{renderer-DSbRWfgl.mjs.map → renderer-ZjSP5jw6.mjs.map} +1 -1
  393. package/dist/{renderer-CE83KHgr.mjs → renderer-fH9SCJC2.mjs} +3 -3
  394. package/dist/{renderer-CE83KHgr.mjs.map → renderer-fH9SCJC2.mjs.map} +1 -1
  395. package/dist/{renderer-Cy4a31rZ.mjs → renderer-gjT5v76-.mjs} +3 -3
  396. package/dist/{renderer-Cy4a31rZ.mjs.map → renderer-gjT5v76-.mjs.map} +1 -1
  397. package/dist/{renderer-C-z6bxj9.mjs → renderer-kP5Y282J.mjs} +5 -5
  398. package/dist/{renderer-C-z6bxj9.mjs.map → renderer-kP5Y282J.mjs.map} +1 -1
  399. package/dist/{renderer-BI8QhEj9.mjs → renderer-kkDfQ56G.mjs} +5 -5
  400. package/dist/{renderer-BI8QhEj9.mjs.map → renderer-kkDfQ56G.mjs.map} +1 -1
  401. package/dist/{renderer-DHUlVqST.mjs → renderer-l_U6kA8K.mjs} +3 -3
  402. package/dist/{renderer-DHUlVqST.mjs.map → renderer-l_U6kA8K.mjs.map} +1 -1
  403. package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
  404. package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
  405. package/dist/{renderer-C4vHq0X8.mjs → renderer-o_JK4YfO.mjs} +5 -5
  406. package/dist/{renderer-C4vHq0X8.mjs.map → renderer-o_JK4YfO.mjs.map} +1 -1
  407. package/dist/{renderer-CAi-lhR2.mjs → renderer-vwoyR8pW.mjs} +4 -4
  408. package/dist/{renderer-CAi-lhR2.mjs.map → renderer-vwoyR8pW.mjs.map} +1 -1
  409. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs → renderers-CP8CFWDs-DiX2Y4Qp.mjs} +4 -4
  410. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs.map → renderers-CP8CFWDs-DiX2Y4Qp.mjs.map} +1 -1
  411. package/dist/signals/index.d.mts +6 -6
  412. package/dist/signals/index.mjs +8 -8
  413. package/dist/{signals-BwdVfK3p.mjs → signals-Cf9mfNGE.mjs} +4 -4
  414. package/dist/{signals-BwdVfK3p.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
  415. package/dist/src-Ds9IAk5S.mjs +8373 -0
  416. package/dist/src-Ds9IAk5S.mjs.map +1 -0
  417. package/package.json +68 -58
  418. package/dist/dist-DMa2BbYs.mjs.map +0 -1
  419. package/dist/dist-hmWTJPik.mjs.map +0 -1
  420. package/dist/fonts-Da1JDKpc.mjs.map +0 -1
  421. package/dist/index-B0BZMhtw.d.mts.map +0 -1
  422. package/dist/index-CJkihekp.d.mts.map +0 -1
  423. package/dist/index-DGe83M-p.d.mts.map +0 -1
  424. package/dist/index.d.mts.map +0 -1
  425. package/dist/index.mjs.map +0 -1
  426. package/dist/preview/index.d.mts.map +0 -1
  427. package/dist/preview-5E4B96RD.mjs.map +0 -1
  428. package/dist/preview-engine/chunk-3T4LB4ZH.mjs +0 -3
  429. package/dist/preview-engine/chunk-E7DH7EPX.mjs +0 -1
  430. package/dist/preview-engine/chunk-PCWWKYFO.mjs +0 -1
  431. package/dist/preview-engine/chunk-RQLMW6MA.mjs +0 -4
  432. package/dist/preview-engine/chunk-XN56POGE.mjs +0 -1
  433. package/dist/preview-engine/renderers-2AD6AHAO.mjs +0 -1
  434. package/dist/preview-engine/renderers-37UYW266.mjs +0 -1
  435. package/dist/preview-engine/renderers-3YHETAPE.mjs +0 -1
  436. package/dist/preview-engine/renderers-43LBWRY2.mjs +0 -1
  437. package/dist/preview-engine/renderers-4I4UDLDR.mjs +0 -1
  438. package/dist/preview-engine/renderers-5EITT2FW.mjs +0 -1
  439. package/dist/preview-engine/renderers-7UKFQ75V.mjs +0 -1
  440. package/dist/preview-engine/renderers-AIRDDXRB.mjs +0 -1
  441. package/dist/preview-engine/renderers-BUOGMWAA.mjs +0 -1
  442. package/dist/preview-engine/renderers-C4XIAG3F.mjs +0 -1
  443. package/dist/preview-engine/renderers-ELARGDRC.mjs +0 -1
  444. package/dist/preview-engine/renderers-EU5VM2S2.mjs +0 -1
  445. package/dist/preview-engine/renderers-GEPP3YKK.mjs +0 -1
  446. package/dist/preview-engine/renderers-IQNZQWYU.mjs +0 -1
  447. package/dist/preview-engine/renderers-J6DEIWTU.mjs +0 -1
  448. package/dist/preview-engine/renderers-JQ7AI473.mjs +0 -228
  449. package/dist/preview-engine/renderers-JTVCE5PV.mjs +0 -1
  450. package/dist/preview-engine/renderers-KCNUETAD.mjs +0 -1
  451. package/dist/preview-engine/renderers-KKBHXAWS.mjs +0 -1
  452. package/dist/preview-engine/renderers-LER7SUT2.mjs +0 -1
  453. package/dist/preview-engine/renderers-MOERLDWF.mjs +0 -1
  454. package/dist/preview-engine/renderers-O57YIIAO.mjs +0 -1
  455. package/dist/preview-engine/renderers-OPUIAD7I.mjs +0 -1
  456. package/dist/preview-engine/renderers-PENUAXDD.mjs +0 -1
  457. package/dist/preview-engine/renderers-PFCI7ZFW.mjs +0 -1
  458. package/dist/preview-engine/renderers-Q4HDP2IE.mjs +0 -1
  459. package/dist/preview-engine/renderers-QMHUOKMM.mjs +0 -1
  460. package/dist/preview-engine/renderers-R26YPECG.mjs +0 -1
  461. package/dist/preview-engine/renderers-TAFDMFEA.mjs +0 -1
  462. package/dist/preview-engine/renderers-TMZLWQP2.mjs +0 -1
  463. package/dist/preview-engine/renderers-TP6ZMGU4.mjs +0 -1
  464. package/dist/preview-engine/renderers-TY63VTZB.mjs +0 -1
  465. package/dist/preview-engine/renderers-UBO4ZNE6.mjs +0 -1
  466. package/dist/preview-engine/renderers-UCNQ536S.mjs +0 -1
  467. package/dist/preview-engine/renderers-WOZQDE4A.mjs +0 -1
  468. package/dist/preview-engine/renderers-X2XGDF3R.mjs +0 -1
  469. package/dist/preview-engine/renderers-XG3BDROH.mjs +0 -1
  470. package/dist/preview-engine/renderers-XS4CFZWR.mjs +0 -1
  471. package/dist/preview-engine/renderers-ZQDMRWN7.mjs +0 -1
  472. package/dist/program-KwDdbC0-.mjs.map +0 -1
  473. package/dist/renderer-5C41E6gT.mjs +0 -5
  474. package/dist/renderer-6SXF9Ykm.mjs +0 -5
  475. package/dist/renderer-B2C2w3Wr.mjs +0 -5
  476. package/dist/renderer-B2QSfPYZ.mjs +0 -5
  477. package/dist/renderer-B5cQcMl1.mjs +0 -5
  478. package/dist/renderer-BDhD8Yab.mjs +0 -3
  479. package/dist/renderer-BSDdTHDh.mjs +0 -5
  480. package/dist/renderer-BTUjk8uY.mjs +0 -5
  481. package/dist/renderer-Bcey5Gvk.mjs +0 -5
  482. package/dist/renderer-Bd2MuOeJ.mjs +0 -5
  483. package/dist/renderer-Bd5A0zer.mjs +0 -5
  484. package/dist/renderer-CC-WlYa2.mjs +0 -5
  485. package/dist/renderer-Cb0qf1UG.mjs +0 -5
  486. package/dist/renderer-CfX13dgQ.mjs +0 -5
  487. package/dist/renderer-ChFkRLrv.mjs +0 -5
  488. package/dist/renderer-CjkfJj5R.mjs +0 -5
  489. package/dist/renderer-Ck7Lu6c9.mjs +0 -5
  490. package/dist/renderer-CuquqG_c.mjs +0 -5
  491. package/dist/renderer-Cwz2E4QD.mjs +0 -5
  492. package/dist/renderer-Czkt9YYp.mjs +0 -5
  493. package/dist/renderer-DFTIhSdJ.mjs +0 -5
  494. package/dist/renderer-DFaa-Ats.mjs +0 -5
  495. package/dist/renderer-DIHXKvPl.mjs +0 -5
  496. package/dist/renderer-DMzOqVM3.mjs +0 -5
  497. package/dist/renderer-DOId5U8x.mjs +0 -5
  498. package/dist/renderer-DQXFOup8.mjs +0 -5
  499. package/dist/renderer-DRt3BSTj.mjs +0 -5
  500. package/dist/renderer-Di_5vQ81.mjs +0 -6
  501. package/dist/renderer-DkmpsPIa.mjs +0 -5
  502. package/dist/renderer-Ds6wd9Gk.mjs +0 -5
  503. package/dist/renderer-DuuOlYIG.mjs +0 -3
  504. package/dist/renderer-Dv4p0lp9.mjs +0 -5
  505. package/dist/renderer-DzWoOlVc.mjs +0 -5
  506. package/dist/renderer-GbVNyv-E.mjs.map +0 -1
  507. package/dist/renderer-IOz63OWg.mjs +0 -5
  508. package/dist/renderer-JkSrsUa5.mjs +0 -5
  509. package/dist/renderer-Ocs1Djwu.mjs +0 -5
  510. package/dist/renderer-Wdn7m_uN.mjs +0 -5
  511. package/dist/renderer-mKpjaoE3.mjs +0 -5
  512. /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
  513. /package/dist/preview-engine/{chunk-Q4Z54DQ7.mjs → chunk-LXHECDOB.mjs} +0 -0
  514. /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
@@ -2217,4 +2217,4 @@ var TensorPipeline = class TensorPipeline$1 {
2217
2217
 
2218
2218
  //#endregion
2219
2219
  export { PoseSkeletonComputePipeline as a, OpticalFlowComputePipeline as i, ControlNetMultiplexer as n, TemporalDeflickerPipeline as o, DepthNormalsComputePipeline as r, TensorPipeline as s, CannyComputePipeline as t };
2220
- //# sourceMappingURL=dist-0QGroRYZ.mjs.map
2220
+ //# sourceMappingURL=dist-C_SMBmHr.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-0QGroRYZ.mjs","names":["TensorPipeline"],"sources":["../../tensor-webgpu/dist/index.mjs"],"sourcesContent":["//#region src/multiplexer/controlnet-multiplexer.ts\nvar ControlNetMultiplexer = class {\n\ttextures = /* @__PURE__ */ new Map();\n\tset(type, texture) {\n\t\tthis.textures.set(type, texture);\n\t}\n\tget(type) {\n\t\treturn this.textures.get(type);\n\t}\n\thas(type) {\n\t\treturn this.textures.has(type);\n\t}\n\tgetOutputs() {\n\t\treturn {\n\t\t\tcanny: this.textures.get(\"canny\"),\n\t\t\tdepth: this.textures.get(\"depth\"),\n\t\t\tnormals: this.textures.get(\"normals\"),\n\t\t\tposeSkeleton: this.textures.get(\"poseSkeleton\"),\n\t\t\tsegmentationMask: this.textures.get(\"segmentationMask\"),\n\t\t\tfaceLandmarks: this.textures.get(\"faceLandmarks\"),\n\t\t\tmotionVectors: this.textures.get(\"motionVectors\"),\n\t\t\tdeflickered: this.textures.get(\"deflickered\")\n\t\t};\n\t}\n\tcreateBindGroupEntry(type, bindingIndex) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot create bind group entry: conditioning texture \"${type}\" is not registered in VRAM.`);\n\t\treturn {\n\t\t\tbinding: bindingIndex,\n\t\t\tresource: tex.createView({ label: `controlnet_${type}_view` })\n\t\t};\n\t}\n\texportTensorView(type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Conditioning tensor \"${type}\" not found in multiplexer.`);\n\t\treturn {\n\t\t\ttexture: tex,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height,\n\t\t\tformat: tex.format\n\t\t};\n\t}\n\tasync readPixelsAsync(device, type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot read pixels: conditioning texture \"${type}\" is missing.`);\n\t\tconst width = tex.width;\n\t\tconst height = tex.height;\n\t\tconst format = tex.format;\n\t\tlet bytesPerPixel = 4;\n\t\tif (format === \"rgba16float\" || format === \"rg32float\") bytesPerPixel = 8;\n\t\telse if (format === \"r32float\") bytesPerPixel = 4;\n\t\telse if (format === \"rgba32float\") bytesPerPixel = 16;\n\t\tconst unalignedBytesPerRow = width * bytesPerPixel;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * height;\n\t\tconst stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: `controlnet_readback_staging_${type}`\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: `readback_encoder_${type}` });\n\t\tencoder.copyTextureToBuffer({ texture: tex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, [\n\t\t\twidth,\n\t\t\theight,\n\t\t\t1\n\t\t]);\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = stagingBuffer.getMappedRange();\n\t\tconst resultData = new Uint8Array(width * height * bytesPerPixel);\n\t\tconst sourceBytes = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unalignedBytesPerRow) resultData.set(sourceBytes.subarray(0, width * height * bytesPerPixel));\n\t\telse for (let y = 0; y < height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unalignedBytesPerRow;\n\t\t\tresultData.set(sourceBytes.subarray(srcOffset, srcOffset + unalignedBytesPerRow), dstOffset);\n\t\t}\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t\tdata: resultData\n\t\t};\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures.values()) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tthis.textures.clear();\n\t}\n};\n\n//#endregion\n//#region src/shaders/canny.wgsl.ts\n/**\n* @file canny.wgsl.ts\n* High-performance WebGPU Canny Edge Compute Shaders\n* Pass 1: Sobel gradient magnitude & quantized angle\n* Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis\n*/\nconst cannySobelWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var magnitudeTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\nfn getLuma(coord: vec2<i32>, maxCoord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0), maxCoord);\n let c = textureLoad(inputTex, clamped, 0);\n return dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\n@compute @workgroup_size(16, 16)\nfn computeSobel(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let p00 = getLuma(vec2<i32>(x - 1, y - 1), maxCoord);\n let p10 = getLuma(vec2<i32>(x, y - 1), maxCoord);\n let p20 = getLuma(vec2<i32>(x + 1, y - 1), maxCoord);\n let p01 = getLuma(vec2<i32>(x - 1, y), maxCoord);\n let p21 = getLuma(vec2<i32>(x + 1, y), maxCoord);\n let p02 = getLuma(vec2<i32>(x - 1, y + 1), maxCoord);\n let p12 = getLuma(vec2<i32>(x, y + 1), maxCoord);\n let p22 = getLuma(vec2<i32>(x + 1, y + 1), maxCoord);\n\n let gx = (p20 + 2.0 * p21 + p22) - (p00 + 2.0 * p01 + p02);\n let gy = (p02 + 2.0 * p12 + p22) - (p00 + 2.0 * p10 + p20);\n\n let mag = sqrt(gx * gx + gy * gy);\n let angle = atan2(gy, gx);\n\n // Quantize angle into 4 sectors (0: 0 deg, 1: 45 deg, 2: 90 deg, 3: 135 deg)\n var sector: f32 = 0.0;\n let a = (angle * 180.0 / 3.14159265 + 180.0) % 180.0;\n if ((a >= 0.0 && a < 22.5) || (a >= 157.5 && a <= 180.0)) {\n sector = 0.0;\n } else if (a >= 22.5 && a < 67.5) {\n sector = 1.0;\n } else if (a >= 67.5 && a < 112.5) {\n sector = 2.0;\n } else {\n sector = 3.0;\n }\n\n textureStore(magnitudeTex, id.xy, vec4<f32>(mag, sector, 0.0, 1.0));\n}\n`;\nconst cannyNmsRgba8Wgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, edge, edge, 1.0));\n}\n`;\nconst cannyNmsR32fWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<r32float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, 0.0, 0.0, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/canny-pipeline.ts\nvar CannyComputePipeline = class {\n\tsobelPipeline;\n\tnmsRgba8Pipeline;\n\tnmsR32fPipeline;\n\tuniformBuffer;\n\tcachedIntermediateTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst sobelModule = device.createShaderModule({\n\t\t\tlabel: \"canny_sobel.wgsl\",\n\t\t\tcode: cannySobelWgsl\n\t\t});\n\t\tthis.sobelPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannySobelPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: sobelModule,\n\t\t\t\tentryPoint: \"computeSobel\"\n\t\t\t}\n\t\t});\n\t\tconst nmsRgba8Module = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_rgba8.wgsl\",\n\t\t\tcode: cannyNmsRgba8Wgsl\n\t\t});\n\t\tthis.nmsRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsRgba8Module,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tconst nmsR32fModule = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_r32f.wgsl\",\n\t\t\tcode: cannyNmsR32fWgsl\n\t\t});\n\t\tthis.nmsR32fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsR32fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsR32fModule,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"canny_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst lowThreshold = options.low ?? .1;\n\t\tconst highThreshold = options.high ?? .3;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba8unorm\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tf32View[0] = lowThreshold;\n\t\tf32View[1] = highThreshold;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedIntermediateTexture || this.cachedIntermediateTexture.width !== width || this.cachedIntermediateTexture.height !== height) {\n\t\t\tthis.cachedIntermediateTexture?.destroy();\n\t\t\tthis.cachedIntermediateTexture = this.device.createTexture({\n\t\t\t\tlabel: \"canny_magnitude_intermediate\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `canny_edge_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"canny_command_encoder\" });\n\t\tconst sobelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.sobelPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginComputePass({ label: \"canny_sobel_pass\" });\n\t\tpass1.setPipeline(this.sobelPipeline);\n\t\tpass1.setBindGroup(0, sobelBindGroup);\n\t\tpass1.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass1.end();\n\t\tconst nmsPipeline = outputFormat === \"r32float\" ? this.nmsR32fPipeline : this.nmsRgba8Pipeline;\n\t\tconst nmsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: nmsPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginComputePass({ label: \"canny_nms_pass\" });\n\t\tpass2.setPipeline(nmsPipeline);\n\t\tpass2.setBindGroup(0, nmsBindGroup);\n\t\tpass2.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass2.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedIntermediateTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/depth-normals.wgsl.ts\n/**\n* @file depth-normals.wgsl.ts\n* Screen-Space Normal Map Reconstruction from Depth Tensor\n* Analytical cross-product of spatial partial derivatives:\n* dP/dx = [1, 0, dD/dx]^T, dP/dy = [0, 1, dD/dy]^T\n* N = normalize(dP/dx x dP/dy) = normalize([-dx, -dy, 1.0])\n*/\nconst depthNormalsRgba16fWgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\nconst depthNormalsRgba8Wgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/depth-normals-pipeline.ts\nvar DepthNormalsComputePipeline = class {\n\tnormalRgba16fPipeline;\n\tnormalRgba8Pipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba16f.wgsl\",\n\t\t\tcode: depthNormalsRgba16fWgsl\n\t\t});\n\t\tthis.normalRgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba8.wgsl\",\n\t\t\tcode: depthNormalsRgba8Wgsl\n\t\t});\n\t\tthis.normalRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"depth_normals_uniform_buffer\"\n\t\t});\n\t}\n\texecute(depthTexture, options = {}) {\n\t\tconst width = depthTexture.width;\n\t\tconst height = depthTexture.height;\n\t\tconst depthScale = options.depthScale ?? 1;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = depthScale;\n\t\tf32View[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `normal_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst pipeline = outputFormat === \"rgba8unorm\" ? this.normalRgba8Pipeline : this.normalRgba16fPipeline;\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"depth_normals_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"depth_normals_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/face-landmarks.wgsl.ts\n/**\n* @file face-landmarks.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet Face & MediaPipe facial contour rasterization.\n* Renders antialiased facial mesh contours (lips, eyes, brows, nose, oval) directly in VRAM for SDXL ControlNet.\n*/\nconst faceLandmarksWgsl = `\nstruct FaceSegment {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct FaceParams {\n width: u32,\n height: u32,\n numSegments: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: FaceParams;\n@group(0) @binding(2) var<storage, read> segments: array<FaceSegment>;\n\n@compute @workgroup_size(16, 16)\nfn computeFaceLandmarks(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Solid black background for SDXL ControlNet\n\n let count = params.numSegments;\n for (var i = 0u; i < count; i = i + 1u) {\n let seg = segments[i];\n if (seg.enabled < 0.5) {\n continue;\n }\n\n let ab = seg.end - seg.start;\n let ap = p - seg.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = seg.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= seg.radius) {\n let edgeAlpha = clamp(seg.radius - dist + 0.5, 0.0, 1.0);\n outColor = vec4<f32>(mix(outColor.rgb, seg.color.rgb, edgeAlpha * seg.color.a), 1.0);\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/face-landmarks-pipeline.ts\nfunction buildLoopSegments(indices, color) {\n\tconst segs = [];\n\tfor (let i = 0; i < indices.length - 1; i++) segs.push({\n\t\tfrom: indices[i],\n\t\tto: indices[i + 1],\n\t\tcolor\n\t});\n\treturn segs;\n}\nconst CANONICAL_FACE_CONTOURS = [\n\t...buildLoopSegments([\n\t\t70,\n\t\t63,\n\t\t105,\n\t\t66,\n\t\t107\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t300,\n\t\t293,\n\t\t334,\n\t\t296,\n\t\t336\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t33,\n\t\t160,\n\t\t158,\n\t\t133,\n\t\t153,\n\t\t144,\n\t\t33\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t263,\n\t\t387,\n\t\t385,\n\t\t362,\n\t\t380,\n\t\t373,\n\t\t263\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t168,\n\t\t6,\n\t\t197,\n\t\t195,\n\t\t4\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t98,\n\t\t97,\n\t\t2,\n\t\t326,\n\t\t327\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t61,\n\t\t185,\n\t\t40,\n\t\t39,\n\t\t37,\n\t\t0,\n\t\t267,\n\t\t269,\n\t\t270,\n\t\t409,\n\t\t291,\n\t\t375,\n\t\t321,\n\t\t405,\n\t\t314,\n\t\t17,\n\t\t84,\n\t\t181,\n\t\t91,\n\t\t146,\n\t\t61\n\t], [\n\t\t1,\n\t\t.2,\n\t\t.2,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t78,\n\t\t95,\n\t\t88,\n\t\t178,\n\t\t87,\n\t\t14,\n\t\t317,\n\t\t402,\n\t\t318,\n\t\t324,\n\t\t308,\n\t\t415,\n\t\t310,\n\t\t311,\n\t\t312,\n\t\t13,\n\t\t82,\n\t\t81,\n\t\t80,\n\t\t191,\n\t\t78\n\t], [\n\t\t1,\n\t\t0,\n\t\t.8,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t10,\n\t\t338,\n\t\t297,\n\t\t332,\n\t\t284,\n\t\t251,\n\t\t389,\n\t\t356,\n\t\t454,\n\t\t323,\n\t\t361,\n\t\t288,\n\t\t397,\n\t\t365,\n\t\t379,\n\t\t378,\n\t\t400,\n\t\t377,\n\t\t152,\n\t\t148,\n\t\t176,\n\t\t149,\n\t\t150,\n\t\t136,\n\t\t172,\n\t\t58,\n\t\t132,\n\t\t93,\n\t\t234,\n\t\t127,\n\t\t162,\n\t\t21,\n\t\t54,\n\t\t103,\n\t\t67,\n\t\t109,\n\t\t10\n\t], [\n\t\t.9,\n\t\t.9,\n\t\t.9,\n\t\t1\n\t])\n];\nvar FaceLandmarksComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tstorageBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"face_landmarks.wgsl\",\n\t\t\tcode: faceLandmarksWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"FaceLandmarksComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeFaceLandmarks\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 64,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_uniform_buffer\"\n\t\t});\n\t\tconst storageSize = Math.max(256, CANONICAL_FACE_CONTOURS.length * 48);\n\t\tthis.storageBuffer = device.createBuffer({\n\t\t\tsize: storageSize,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_storage_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}) {\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 4;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst u32Uniforms = new Uint32Array(4);\n\t\tu32Uniforms[0] = width;\n\t\tu32Uniforms[1] = height;\n\t\tu32Uniforms[2] = CANONICAL_FACE_CONTOURS.length;\n\t\tu32Uniforms[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, u32Uniforms);\n\t\tconst f32Segments = new Float32Array(CANONICAL_FACE_CONTOURS.length * 12);\n\t\tfor (let i = 0; i < CANONICAL_FACE_CONTOURS.length; i++) {\n\t\t\tconst seg = CANONICAL_FACE_CONTOURS[i];\n\t\t\tconst ptA = landmarks[seg.from];\n\t\t\tconst ptB = landmarks[seg.to];\n\t\t\tconst offset = i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32Segments[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32Segments[offset + 0] = ptA.x * width;\n\t\t\tf32Segments[offset + 1] = ptA.y * height;\n\t\t\tf32Segments[offset + 2] = ptB.x * width;\n\t\t\tf32Segments[offset + 3] = ptB.y * height;\n\t\t\tf32Segments[offset + 4] = seg.color[0];\n\t\t\tf32Segments[offset + 5] = seg.color[1];\n\t\t\tf32Segments[offset + 6] = seg.color[2];\n\t\t\tf32Segments[offset + 7] = seg.color[3];\n\t\t\tf32Segments[offset + 8] = radius;\n\t\t\tf32Segments[offset + 9] = 1;\n\t\t\tf32Segments[offset + 10] = 0;\n\t\t\tf32Segments[offset + 11] = 0;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.storageBuffer, 0, f32Segments);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: \"face_landmarks_output_texture\"\n\t\t\t});\n\t\t}\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"FaceLandmarksBindGroup\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.storageBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"FaceLandmarksCommandEncoder\" });\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"FaceLandmarksComputePass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t\tthis.storageBuffer.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/optical-flow.wgsl.ts\n/**\n* @file optical-flow.wgsl.ts\n* High-Performance Native WebGPU Optical Flow Compute Shaders\n* Implements coarse-to-fine Lucas-Kanade motion vector estimation with\n* spatial structure tensor integration and Tikhonov aperture regularization.\n*/\nconst opticalFlowDirectWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)\n regularization: f32, // Tikhonov regularization lambda\n maxDisplacement: f32, // Maximum allowable flow vector length\n _pad0: f32,\n _pad1: f32,\n _pad2: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(3) var<uniform> params: FlowParams;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let inDims = vec2<f32>(textureDimensions(tex));\n let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));\n let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);\n let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n\n // Central difference spatial gradients on current frame\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal gradient: difference between current and previous frame\n let cCurr = sampleLuma(currTex, p);\n let cPrev = sampleLuma(prevTex, p);\n let it = cCurr - cPrev;\n\n // Gaussian spatial falloff weight\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n // Tikhonov regularization prevents singularity in flat/homogeneous regions\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var u: f32 = 0.0;\n var v: f32 = 0.0;\n\n if (det > 1e-6) {\n u = (-sxt * C + syt * B) / det;\n v = (-syt * A + sxt * B) / det;\n }\n\n let mag = length(vec2<f32>(u, v));\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n let scale = maxD / mag;\n u *= scale;\n v *= scale;\n }\n\n textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));\n}\n`;\nconst opticalFlowRefineWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32,\n regularization: f32,\n maxDisplacement: f32,\n coarseWidth: u32,\n coarseHeight: u32,\n _pad0: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;\n@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: FlowParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\nfn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n return rgbToLuminance(sampleColor.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read upsampled prior flow from coarse scale (scaled by 2x)\n let coarseCoord = vec2<i32>(centerCoord / 2);\n let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);\n let priorFlow = coarseSample.xy * 2.0;\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n let pUv = (vec2<f32>(p) + 0.5) * invDims;\n\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal residual against warped previous frame\n let cCurr = sampleLuma(currTex, p);\n let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);\n let it = cCurr - cWarpedPrev;\n\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var du: f32 = 0.0;\n var dv: f32 = 0.0;\n\n if (det > 1e-6) {\n du = (-sxt * C + syt * B) / det;\n dv = (-syt * A + sxt * B) / det;\n }\n\n // Combine coarse prior flow with fine residual flow\n var totalFlow = priorFlow + vec2<f32>(du, dv);\n let mag = length(totalFlow);\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n totalFlow *= (maxD / mag);\n }\n\n textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/optical-flow-pipeline.ts\nvar OpticalFlowComputePipeline = class {\n\tdirectPipeline;\n\trefinePipeline;\n\tdirectUniformBuffer;\n\trefineUniformBuffer;\n\tbilinearSampler;\n\tcachedCoarseTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst directModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_direct.wgsl\",\n\t\t\tcode: opticalFlowDirectWgsl\n\t\t});\n\t\tthis.directPipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowDirectPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: directModule,\n\t\t\t\tentryPoint: \"computeFlow\"\n\t\t\t}\n\t\t});\n\t\tconst refineModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_refine.wgsl\",\n\t\t\tcode: opticalFlowRefineWgsl\n\t\t});\n\t\tthis.refinePipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowRefinePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: refineModule,\n\t\t\t\tentryPoint: \"refineFlow\"\n\t\t\t}\n\t\t});\n\t\tthis.directUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_direct_uniform\"\n\t\t});\n\t\tthis.refineUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_refine_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"optical_flow_bilinear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(prevTexture, currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst windowSize = options?.windowSize ?? 3;\n\t\tconst regularization = options?.regularization ?? options?.lambda ?? .05;\n\t\tconst scale = options?.scale ?? .5;\n\t\tconst maxDisplacement = 64;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `optical_flow_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"optical_flow_command_encoder\" });\n\t\tif (scale > .1 && scale < .95 && width >= 64 && height >= 64) {\n\t\t\tconst coarseW = Math.max(16, Math.floor(width * scale));\n\t\t\tconst coarseH = Math.max(16, Math.floor(height * scale));\n\t\t\tif (!this.cachedCoarseTexture || this.cachedCoarseTexture.width !== coarseW || this.cachedCoarseTexture.height !== coarseH) {\n\t\t\t\tthis.cachedCoarseTexture?.destroy();\n\t\t\t\tthis.cachedCoarseTexture = this.device.createTexture({\n\t\t\t\t\tlabel: \"optical_flow_coarse\",\n\t\t\t\t\tsize: [coarseW, coarseH],\n\t\t\t\t\tformat: \"rgba16float\",\n\t\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = coarseW;\n\t\t\tdirectU32[1] = coarseH;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement * scale;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst coarseBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst coarsePass = commandEncoder.beginComputePass({ label: \"optical_flow_coarse_pass\" });\n\t\t\tcoarsePass.setPipeline(this.directPipeline);\n\t\t\tcoarsePass.setBindGroup(0, coarseBindGroup);\n\t\t\tcoarsePass.dispatchWorkgroups(Math.ceil(coarseW / 16), Math.ceil(coarseH / 16));\n\t\t\tcoarsePass.end();\n\t\t\tconst refineData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst refineU32 = new Uint32Array(refineData);\n\t\t\tconst refineF32 = new Float32Array(refineData);\n\t\t\trefineU32[0] = width;\n\t\t\trefineU32[1] = height;\n\t\t\trefineU32[2] = windowSize;\n\t\t\trefineF32[3] = regularization;\n\t\t\trefineF32[4] = maxDisplacement;\n\t\t\trefineU32[5] = coarseW;\n\t\t\trefineU32[6] = coarseH;\n\t\t\tthis.device.queue.writeBuffer(this.refineUniformBuffer, 0, refineData);\n\t\t\tconst refineBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.refinePipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: { buffer: this.refineUniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst finePass = commandEncoder.beginComputePass({ label: \"optical_flow_fine_pass\" });\n\t\t\tfinePass.setPipeline(this.refinePipeline);\n\t\t\tfinePass.setBindGroup(0, refineBindGroup);\n\t\t\tfinePass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tfinePass.end();\n\t\t} else {\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = width;\n\t\t\tdirectU32[1] = height;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst directBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst directPass = commandEncoder.beginComputePass({ label: \"optical_flow_direct_pass\" });\n\t\t\tdirectPass.setPipeline(this.directPipeline);\n\t\t\tdirectPass.setBindGroup(0, directBindGroup);\n\t\t\tdirectPass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tdirectPass.end();\n\t\t}\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedCoarseTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.directUniformBuffer.destroy();\n\t\tthis.refineUniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pose-skeleton.wgsl.ts\n/**\n* @file pose-skeleton.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet OpenPose skeleton rasterization.\n* Renders instanced bone cylinders/capsules directly in VRAM without CPU roundtrips.\n*/\nconst poseSkeletonWgsl = `\nstruct Bone {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct SkeletonParams {\n width: u32,\n height: u32,\n numBones: u32,\n pad: u32,\n bones: array<Bone, 24>,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: SkeletonParams;\n\n@compute @workgroup_size(16, 16)\nfn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n let count = min(params.numBones, 24u);\n for (var i = 0u; i < count; i = i + 1u) {\n let bone = params.bones[i];\n if (bone.enabled < 0.5) {\n continue;\n }\n\n let ab = bone.end - bone.start;\n let ap = p - bone.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = bone.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= bone.radius) {\n // Sub-pixel edge antialiasing\n let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);\n let a = edgeAlpha * bone.color.a;\n outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/pose-skeleton-pipeline.ts\nconst CANONICAL_OPENPOSE_BONES = [\n\t{\n\t\tfrom: 0,\n\t\tto: 11,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 0,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 13,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 13,\n\t\tto: 15,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 14,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 14,\n\t\tto: 16,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 23,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 25,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 25,\n\t\tto: 27,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 24,\n\t\tto: 26,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 26,\n\t\tto: 28,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\nvar PoseSkeletonComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"pose_skeleton.wgsl\",\n\t\t\tcode: poseSkeletonWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"PoseSkeletonComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computePoseSkeleton\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 1280,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"pose_skeleton_uniform_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}, bones) {\n\t\tconst boneDefs = bones ?? CANONICAL_OPENPOSE_BONES;\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 6;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst arrayBuf = new ArrayBuffer(1280);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tu32View[2] = boneDefs.length;\n\t\tu32View[3] = 0;\n\t\tconst boneBaseFloatOffset = 4;\n\t\tfor (let i = 0; i < boneDefs.length; i++) {\n\t\t\tconst boneDef = boneDefs[i];\n\t\t\tconst ptA = landmarks[boneDef.from];\n\t\t\tconst ptB = landmarks[boneDef.to];\n\t\t\tconst offset = boneBaseFloatOffset + i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32View[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32View[offset + 0] = ptA.x * width;\n\t\t\tf32View[offset + 1] = ptA.y * height;\n\t\t\tf32View[offset + 2] = ptB.x * width;\n\t\t\tf32View[offset + 3] = ptB.y * height;\n\t\t\tf32View[offset + 4] = boneDef.color[0];\n\t\t\tf32View[offset + 5] = boneDef.color[1];\n\t\t\tf32View[offset + 6] = boneDef.color[2];\n\t\t\tf32View[offset + 7] = boneDef.color[3];\n\t\t\tf32View[offset + 8] = radius;\n\t\t\tf32View[offset + 9] = 1;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"openpose_skeleton_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"pose_skeleton_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"pose_skeleton_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"pose_skeleton_output_view\" })\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"pose_skeleton_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/segmentation.wgsl.ts\n/**\n* @file segmentation.wgsl.ts\n* Native WebGPU WGSL compute shader for segmentation mask thresholding and edge feathering.\n* Outputs crisp alpha mattes directly in VRAM without CPU roundtrips.\n*/\nconst segmentationWgsl = `\nstruct SegParams {\n threshold: f32,\n feather: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: SegParams;\n\n@compute @workgroup_size(16, 16)\nfn computeSegmentation(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let sample = textureLoad(inputTex, coord, 0);\n\n // Luminance or alpha channel extraction\n let rawAlpha = max(sample.a, dot(sample.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n\n let lower = max(0.0, params.threshold - params.feather);\n let upper = min(1.0, params.threshold + params.feather);\n let alpha = smoothstep(lower, upper, rawAlpha);\n\n textureStore(outputTex, id.xy, vec4<f32>(alpha, alpha, alpha, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/segmentation-pipeline.ts\nvar SegmentationComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"segmentation.wgsl\",\n\t\t\tcode: segmentationWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"SegmentationComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeSegmentation\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"segmentation_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst threshold = options.threshold ?? .5;\n\t\tconst feather = options.feather ?? .05;\n\t\tconst arrayBuf = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tf32View[0] = threshold;\n\t\tf32View[1] = feather;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"segmentation_output_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"segmentation_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"segmentation_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView({ label: \"segmentation_input_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"segmentation_output_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"segmentation_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/temporal-warp-blend.wgsl.ts\n/**\n* @file temporal-warp-blend.wgsl.ts\n* Native WebGPU Forward Warping & Adaptive Photometric Temporal Blend Compute Shaders\n* Warps previous frame forward along motion vectors and blends adaptively with current\n* frame to eliminate generative AI video flicker with zero ghosting.\n*/\nconst temporalWarpBlendRgba8Wgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)\n disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame\n maxMotionPixels: f32, // Speed cutoff for fallback to curr frame\n isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n // If first frame or scene cut reset, pass through current frame directly\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read motion vector (u, v) in pixel units\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n // Motion-compensated backward warp coordinate pointing to previous frame\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n // Adaptive blend weight:\n // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)\n // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\nconst temporalWarpBlendRgba16fWgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32,\n disocclusionThreshold: f32,\n maxMotionPixels: f32,\n isFirstFrame: f32,\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\n\n//#endregion\n//#region src/pipelines/temporal-deflicker-pipeline.ts\nvar TemporalDeflickerPipeline = class {\n\tflowPipeline;\n\trgba8Pipeline;\n\trgba16fPipeline;\n\tuniformBuffer;\n\tbilinearSampler;\n\thistoryTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.flowPipeline = new OpticalFlowComputePipeline(device);\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba8.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba8Wgsl\n\t\t});\n\t\tthis.rgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba16f.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba16fWgsl\n\t\t});\n\t\tthis.rgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"temporal_deflicker_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"temporal_deflicker_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst rawBlendWeight = options.blendWeight ?? .35;\n\t\tconst blendWeight = typeof rawBlendWeight === \"number\" ? rawBlendWeight : Number(rawBlendWeight);\n\t\tconst disocclusionThreshold = options.disocclusionThreshold ?? .15;\n\t\tconst maxMotionPixels = options.maxMotionPixels ?? 64;\n\t\tconst format = currTexture.format;\n\t\tconst isRgba16f = format === \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== format) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `deflickered_output_${format}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\tif (!this.historyTexture || this.historyTexture.width !== width || this.historyTexture.height !== height) {\n\t\t\tthis.historyTexture?.destroy();\n\t\t\tthis.historyTexture = this.device.createTexture({\n\t\t\t\tlabel: \"deflicker_history_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t\tconst commandEncoder$1 = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_first_frame_encoder\" });\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.historyTexture }, [width, height]);\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.cachedOutputTexture }, [width, height]);\n\t\t\tif (!customEncoder) this.device.queue.submit([commandEncoder$1.finish()]);\n\t\t\treturn this.cachedOutputTexture;\n\t\t}\n\t\tconst flowTexture = this.flowPipeline.execute(this.historyTexture, currTexture, options.opticalFlow, customEncoder);\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = blendWeight;\n\t\tf32View[3] = disocclusionThreshold;\n\t\tf32View[4] = maxMotionPixels;\n\t\tf32View[5] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tconst pipeline = isRgba16f ? this.rgba16fPipeline : this.rgba8Pipeline;\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_blend_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.historyTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: flowTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"deflicker_blend_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tcommandEncoder.copyTextureToTexture({ texture: this.cachedOutputTexture }, { texture: this.historyTexture }, [width, height]);\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\treset() {\n\t\tthis.historyTexture?.destroy();\n\t\tthis.historyTexture = void 0;\n\t}\n\tdestroy() {\n\t\tthis.flowPipeline.destroy();\n\t\tthis.historyTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/pipeline/tensor-pipeline.ts\nvar TensorPipeline = class TensorPipeline {\n\tid;\n\tcannyOptions;\n\tdepthNormalsOptions;\n\tposeSkeletonOptions;\n\tfaceLandmarksOptions;\n\tsegmentationOptions;\n\topticalFlowOptions;\n\tdeflickerOptions;\n\tmultiplexer = new ControlNetMultiplexer();\n\tcannyPipeline;\n\tdepthNormalsPipeline;\n\tposePipeline;\n\tfacePipeline;\n\tsegmentationPipeline;\n\topticalFlowPipeline;\n\tdeflickerPipeline;\n\tprevInputTexture;\n\tconstructor(source) {\n\t\tthis.source = source;\n\t\tthis.id = `tensor-${Math.random().toString(36).slice(2, 9)}`;\n\t}\n\tstatic from(source) {\n\t\treturn new TensorPipeline(source);\n\t}\n\tcanny(options = {}) {\n\t\tthis.cannyOptions = options;\n\t\treturn this;\n\t}\n\tdepthNormals(options = {}) {\n\t\tthis.depthNormalsOptions = options;\n\t\treturn this;\n\t}\n\tposeSkeleton(options = {}) {\n\t\tthis.poseSkeletonOptions = options;\n\t\treturn this;\n\t}\n\tpose(landmarks, options = {}) {\n\t\tthis.poseSkeletonOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tfaceLandmarks(options = {}) {\n\t\tthis.faceLandmarksOptions = options;\n\t\treturn this;\n\t}\n\tface(landmarks, options = {}) {\n\t\tthis.faceLandmarksOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tsegmentation(options = {}) {\n\t\tthis.segmentationOptions = options;\n\t\treturn this;\n\t}\n\topticalFlow(options = {}) {\n\t\tthis.opticalFlowOptions = options;\n\t\treturn this;\n\t}\n\tdeflicker(options = {}) {\n\t\tthis.deflickerOptions = options;\n\t\treturn this;\n\t}\n\tgetMultiplexer() {\n\t\treturn this.multiplexer;\n\t}\n\tasync execute(device, overrideSourceTexture) {\n\t\tlet inputTexture = overrideSourceTexture;\n\t\tif (!inputTexture && typeof this.source?.createView === \"function\") inputTexture = this.source;\n\t\tif (!inputTexture) throw new Error(\"[TensorPipeline.execute] No GPUTexture available for tensor compute execution. Pass a valid GPUTexture to execute() or initialize with a GPUTexture source.\");\n\t\tif (this.cannyOptions) {\n\t\t\tif (!this.cannyPipeline) this.cannyPipeline = new CannyComputePipeline(device);\n\t\t\tconst cannyTex = this.cannyPipeline.execute(inputTexture, this.cannyOptions);\n\t\t\tthis.multiplexer.set(\"canny\", cannyTex);\n\t\t}\n\t\tif (this.depthNormalsOptions) {\n\t\t\tif (!this.depthNormalsPipeline) this.depthNormalsPipeline = new DepthNormalsComputePipeline(device);\n\t\t\tconst normalTex = this.depthNormalsPipeline.execute(inputTexture, this.depthNormalsOptions);\n\t\t\tthis.multiplexer.set(\"normals\", normalTex);\n\t\t}\n\t\tif (this.poseSkeletonOptions?.landmarks) {\n\t\t\tif (!this.posePipeline) this.posePipeline = new PoseSkeletonComputePipeline(device);\n\t\t\tconst skeletonTex = this.posePipeline.execute(this.poseSkeletonOptions.landmarks, {\n\t\t\t\twidth: this.poseSkeletonOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.poseSkeletonOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.poseSkeletonOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"poseSkeleton\", skeletonTex);\n\t\t}\n\t\tif (this.faceLandmarksOptions?.landmarks) {\n\t\t\tif (!this.facePipeline) this.facePipeline = new FaceLandmarksComputePipeline(device);\n\t\t\tconst faceTex = this.facePipeline.execute(this.faceLandmarksOptions.landmarks, {\n\t\t\t\twidth: this.faceLandmarksOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.faceLandmarksOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.faceLandmarksOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"faceLandmarks\", faceTex);\n\t\t}\n\t\tif (this.segmentationOptions) {\n\t\t\tif (!this.segmentationPipeline) this.segmentationPipeline = new SegmentationComputePipeline(device);\n\t\t\tconst segTex = this.segmentationPipeline.execute(inputTexture, this.segmentationOptions);\n\t\t\tthis.multiplexer.set(\"segmentationMask\", segTex);\n\t\t}\n\t\tif (this.opticalFlowOptions) {\n\t\t\tif (!this.opticalFlowPipeline) this.opticalFlowPipeline = new OpticalFlowComputePipeline(device);\n\t\t\tconst prevTex = this.prevInputTexture ?? inputTexture;\n\t\t\tconst flowTex = this.opticalFlowPipeline.execute(prevTex, inputTexture, this.opticalFlowOptions);\n\t\t\tthis.multiplexer.set(\"motionVectors\", flowTex);\n\t\t}\n\t\tif (this.deflickerOptions) {\n\t\t\tif (!this.deflickerPipeline) this.deflickerPipeline = new TemporalDeflickerPipeline(device);\n\t\t\tconst deflickeredTex = this.deflickerPipeline.execute(inputTexture, this.deflickerOptions);\n\t\t\tthis.multiplexer.set(\"deflickered\", deflickeredTex);\n\t\t}\n\t\tthis.prevInputTexture = inputTexture;\n\t\treturn this.multiplexer.getOutputs();\n\t}\n\ttoConfig() {\n\t\treturn {\n\t\t\tcanny: this.cannyOptions,\n\t\t\tdepthNormals: this.depthNormalsOptions,\n\t\t\tposeSkeleton: this.poseSkeletonOptions,\n\t\t\tfaceLandmarks: this.faceLandmarksOptions,\n\t\t\tsegmentation: this.segmentationOptions,\n\t\t\topticalFlow: this.opticalFlowOptions,\n\t\t\tdeflicker: this.deflickerOptions\n\t\t};\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"tensor\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.toConfig()\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.cannyPipeline?.destroy();\n\t\tthis.depthNormalsPipeline?.destroy();\n\t\tthis.posePipeline?.destroy();\n\t\tthis.facePipeline?.destroy();\n\t\tthis.segmentationPipeline?.destroy();\n\t\tthis.opticalFlowPipeline?.destroy();\n\t\tthis.deflickerPipeline?.destroy();\n\t\tthis.multiplexer.destroy();\n\t}\n};\n\n//#endregion\nexport { CANONICAL_FACE_CONTOURS, CANONICAL_OPENPOSE_BONES, CannyComputePipeline, ControlNetMultiplexer, DepthNormalsComputePipeline, FaceLandmarksComputePipeline, OpticalFlowComputePipeline, PoseSkeletonComputePipeline, SegmentationComputePipeline, TemporalDeflickerPipeline, TensorPipeline, cannyNmsR32fWgsl, cannyNmsRgba8Wgsl, cannySobelWgsl, depthNormalsRgba16fWgsl, depthNormalsRgba8Wgsl, faceLandmarksWgsl, opticalFlowDirectWgsl, opticalFlowRefineWgsl, poseSkeletonWgsl, segmentationWgsl, temporalWarpBlendRgba16fWgsl, temporalWarpBlendRgba8Wgsl };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF;AACD,IAAI,+BAA+B,MAAM;CACxC;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;GACP,CAAC;EACF,MAAM,cAAc,KAAK,IAAI,KAAK,wBAAwB,SAAS,GAAG;AACtE,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;G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K,qBAAqB,SAAS;AACnC,OAAK,oBAAoB,SAAS;AAClC,OAAK,oBAAoB,SAAS;;;;;;;;AAWpC,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DzB,MAAM,2BAA2B;CAChC;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;AACD,IAAI,8BAA8B,MAAM;CACvC;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN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"}
1
+ {"version":3,"file":"dist-C_SMBmHr.mjs","names":["TensorPipeline"],"sources":["../../tensor-webgpu/dist/index.mjs"],"sourcesContent":["//#region src/multiplexer/controlnet-multiplexer.ts\nvar ControlNetMultiplexer = class {\n\ttextures = /* @__PURE__ */ new Map();\n\tset(type, texture) {\n\t\tthis.textures.set(type, texture);\n\t}\n\tget(type) {\n\t\treturn this.textures.get(type);\n\t}\n\thas(type) {\n\t\treturn this.textures.has(type);\n\t}\n\tgetOutputs() {\n\t\treturn {\n\t\t\tcanny: this.textures.get(\"canny\"),\n\t\t\tdepth: this.textures.get(\"depth\"),\n\t\t\tnormals: this.textures.get(\"normals\"),\n\t\t\tposeSkeleton: this.textures.get(\"poseSkeleton\"),\n\t\t\tsegmentationMask: this.textures.get(\"segmentationMask\"),\n\t\t\tfaceLandmarks: this.textures.get(\"faceLandmarks\"),\n\t\t\tmotionVectors: this.textures.get(\"motionVectors\"),\n\t\t\tdeflickered: this.textures.get(\"deflickered\")\n\t\t};\n\t}\n\tcreateBindGroupEntry(type, bindingIndex) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot create bind group entry: conditioning texture \"${type}\" is not registered in VRAM.`);\n\t\treturn {\n\t\t\tbinding: bindingIndex,\n\t\t\tresource: tex.createView({ label: `controlnet_${type}_view` })\n\t\t};\n\t}\n\texportTensorView(type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Conditioning tensor \"${type}\" not found in multiplexer.`);\n\t\treturn {\n\t\t\ttexture: tex,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height,\n\t\t\tformat: tex.format\n\t\t};\n\t}\n\tasync readPixelsAsync(device, type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot read pixels: conditioning texture \"${type}\" is missing.`);\n\t\tconst width = tex.width;\n\t\tconst height = tex.height;\n\t\tconst format = tex.format;\n\t\tlet bytesPerPixel = 4;\n\t\tif (format === \"rgba16float\" || format === \"rg32float\") bytesPerPixel = 8;\n\t\telse if (format === \"r32float\") bytesPerPixel = 4;\n\t\telse if (format === \"rgba32float\") bytesPerPixel = 16;\n\t\tconst unalignedBytesPerRow = width * bytesPerPixel;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * height;\n\t\tconst stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: `controlnet_readback_staging_${type}`\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: `readback_encoder_${type}` });\n\t\tencoder.copyTextureToBuffer({ texture: tex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, [\n\t\t\twidth,\n\t\t\theight,\n\t\t\t1\n\t\t]);\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = stagingBuffer.getMappedRange();\n\t\tconst resultData = new Uint8Array(width * height * bytesPerPixel);\n\t\tconst sourceBytes = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unalignedBytesPerRow) resultData.set(sourceBytes.subarray(0, width * height * bytesPerPixel));\n\t\telse for (let y = 0; y < height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unalignedBytesPerRow;\n\t\t\tresultData.set(sourceBytes.subarray(srcOffset, srcOffset + unalignedBytesPerRow), dstOffset);\n\t\t}\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t\tdata: resultData\n\t\t};\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures.values()) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tthis.textures.clear();\n\t}\n};\n\n//#endregion\n//#region src/shaders/canny.wgsl.ts\n/**\n* @file canny.wgsl.ts\n* High-performance WebGPU Canny Edge Compute Shaders\n* Pass 1: Sobel gradient magnitude & quantized angle\n* Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis\n*/\nconst cannySobelWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var magnitudeTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\nfn getLuma(coord: vec2<i32>, maxCoord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0), maxCoord);\n let c = textureLoad(inputTex, clamped, 0);\n return dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\n@compute @workgroup_size(16, 16)\nfn computeSobel(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let p00 = getLuma(vec2<i32>(x - 1, y - 1), maxCoord);\n let p10 = getLuma(vec2<i32>(x, y - 1), maxCoord);\n let p20 = getLuma(vec2<i32>(x + 1, y - 1), maxCoord);\n let p01 = getLuma(vec2<i32>(x - 1, y), maxCoord);\n let p21 = getLuma(vec2<i32>(x + 1, y), maxCoord);\n let p02 = getLuma(vec2<i32>(x - 1, y + 1), maxCoord);\n let p12 = getLuma(vec2<i32>(x, y + 1), maxCoord);\n let p22 = getLuma(vec2<i32>(x + 1, y + 1), maxCoord);\n\n let gx = (p20 + 2.0 * p21 + p22) - (p00 + 2.0 * p01 + p02);\n let gy = (p02 + 2.0 * p12 + p22) - (p00 + 2.0 * p10 + p20);\n\n let mag = sqrt(gx * gx + gy * gy);\n let angle = atan2(gy, gx);\n\n // Quantize angle into 4 sectors (0: 0 deg, 1: 45 deg, 2: 90 deg, 3: 135 deg)\n var sector: f32 = 0.0;\n let a = (angle * 180.0 / 3.14159265 + 180.0) % 180.0;\n if ((a >= 0.0 && a < 22.5) || (a >= 157.5 && a <= 180.0)) {\n sector = 0.0;\n } else if (a >= 22.5 && a < 67.5) {\n sector = 1.0;\n } else if (a >= 67.5 && a < 112.5) {\n sector = 2.0;\n } else {\n sector = 3.0;\n }\n\n textureStore(magnitudeTex, id.xy, vec4<f32>(mag, sector, 0.0, 1.0));\n}\n`;\nconst cannyNmsRgba8Wgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, edge, edge, 1.0));\n}\n`;\nconst cannyNmsR32fWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<r32float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, 0.0, 0.0, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/canny-pipeline.ts\nvar CannyComputePipeline = class {\n\tsobelPipeline;\n\tnmsRgba8Pipeline;\n\tnmsR32fPipeline;\n\tuniformBuffer;\n\tcachedIntermediateTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst sobelModule = device.createShaderModule({\n\t\t\tlabel: \"canny_sobel.wgsl\",\n\t\t\tcode: cannySobelWgsl\n\t\t});\n\t\tthis.sobelPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannySobelPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: sobelModule,\n\t\t\t\tentryPoint: \"computeSobel\"\n\t\t\t}\n\t\t});\n\t\tconst nmsRgba8Module = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_rgba8.wgsl\",\n\t\t\tcode: cannyNmsRgba8Wgsl\n\t\t});\n\t\tthis.nmsRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsRgba8Module,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tconst nmsR32fModule = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_r32f.wgsl\",\n\t\t\tcode: cannyNmsR32fWgsl\n\t\t});\n\t\tthis.nmsR32fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsR32fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsR32fModule,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"canny_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst lowThreshold = options.low ?? .1;\n\t\tconst highThreshold = options.high ?? .3;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba8unorm\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tf32View[0] = lowThreshold;\n\t\tf32View[1] = highThreshold;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedIntermediateTexture || this.cachedIntermediateTexture.width !== width || this.cachedIntermediateTexture.height !== height) {\n\t\t\tthis.cachedIntermediateTexture?.destroy();\n\t\t\tthis.cachedIntermediateTexture = this.device.createTexture({\n\t\t\t\tlabel: \"canny_magnitude_intermediate\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `canny_edge_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"canny_command_encoder\" });\n\t\tconst sobelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.sobelPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginComputePass({ label: \"canny_sobel_pass\" });\n\t\tpass1.setPipeline(this.sobelPipeline);\n\t\tpass1.setBindGroup(0, sobelBindGroup);\n\t\tpass1.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass1.end();\n\t\tconst nmsPipeline = outputFormat === \"r32float\" ? this.nmsR32fPipeline : this.nmsRgba8Pipeline;\n\t\tconst nmsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: nmsPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginComputePass({ label: \"canny_nms_pass\" });\n\t\tpass2.setPipeline(nmsPipeline);\n\t\tpass2.setBindGroup(0, nmsBindGroup);\n\t\tpass2.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass2.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedIntermediateTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/depth-normals.wgsl.ts\n/**\n* @file depth-normals.wgsl.ts\n* Screen-Space Normal Map Reconstruction from Depth Tensor\n* Analytical cross-product of spatial partial derivatives:\n* dP/dx = [1, 0, dD/dx]^T, dP/dy = [0, 1, dD/dy]^T\n* N = normalize(dP/dx x dP/dy) = normalize([-dx, -dy, 1.0])\n*/\nconst depthNormalsRgba16fWgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\nconst depthNormalsRgba8Wgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/depth-normals-pipeline.ts\nvar DepthNormalsComputePipeline = class {\n\tnormalRgba16fPipeline;\n\tnormalRgba8Pipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba16f.wgsl\",\n\t\t\tcode: depthNormalsRgba16fWgsl\n\t\t});\n\t\tthis.normalRgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba8.wgsl\",\n\t\t\tcode: depthNormalsRgba8Wgsl\n\t\t});\n\t\tthis.normalRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"depth_normals_uniform_buffer\"\n\t\t});\n\t}\n\texecute(depthTexture, options = {}) {\n\t\tconst width = depthTexture.width;\n\t\tconst height = depthTexture.height;\n\t\tconst depthScale = options.depthScale ?? 1;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = depthScale;\n\t\tf32View[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `normal_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst pipeline = outputFormat === \"rgba8unorm\" ? this.normalRgba8Pipeline : this.normalRgba16fPipeline;\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"depth_normals_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"depth_normals_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/face-landmarks.wgsl.ts\n/**\n* @file face-landmarks.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet Face & MediaPipe facial contour rasterization.\n* Renders antialiased facial mesh contours (lips, eyes, brows, nose, oval) directly in VRAM for SDXL ControlNet.\n*/\nconst faceLandmarksWgsl = `\nstruct FaceSegment {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct FaceParams {\n width: u32,\n height: u32,\n numSegments: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: FaceParams;\n@group(0) @binding(2) var<storage, read> segments: array<FaceSegment>;\n\n@compute @workgroup_size(16, 16)\nfn computeFaceLandmarks(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Solid black background for SDXL ControlNet\n\n let count = params.numSegments;\n for (var i = 0u; i < count; i = i + 1u) {\n let seg = segments[i];\n if (seg.enabled < 0.5) {\n continue;\n }\n\n let ab = seg.end - seg.start;\n let ap = p - seg.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = seg.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= seg.radius) {\n let edgeAlpha = clamp(seg.radius - dist + 0.5, 0.0, 1.0);\n outColor = vec4<f32>(mix(outColor.rgb, seg.color.rgb, edgeAlpha * seg.color.a), 1.0);\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/face-landmarks-pipeline.ts\nfunction buildLoopSegments(indices, color) {\n\tconst segs = [];\n\tfor (let i = 0; i < indices.length - 1; i++) segs.push({\n\t\tfrom: indices[i],\n\t\tto: indices[i + 1],\n\t\tcolor\n\t});\n\treturn segs;\n}\nconst CANONICAL_FACE_CONTOURS = [\n\t...buildLoopSegments([\n\t\t70,\n\t\t63,\n\t\t105,\n\t\t66,\n\t\t107\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t300,\n\t\t293,\n\t\t334,\n\t\t296,\n\t\t336\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t33,\n\t\t160,\n\t\t158,\n\t\t133,\n\t\t153,\n\t\t144,\n\t\t33\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t263,\n\t\t387,\n\t\t385,\n\t\t362,\n\t\t380,\n\t\t373,\n\t\t263\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t168,\n\t\t6,\n\t\t197,\n\t\t195,\n\t\t4\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t98,\n\t\t97,\n\t\t2,\n\t\t326,\n\t\t327\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t61,\n\t\t185,\n\t\t40,\n\t\t39,\n\t\t37,\n\t\t0,\n\t\t267,\n\t\t269,\n\t\t270,\n\t\t409,\n\t\t291,\n\t\t375,\n\t\t321,\n\t\t405,\n\t\t314,\n\t\t17,\n\t\t84,\n\t\t181,\n\t\t91,\n\t\t146,\n\t\t61\n\t], [\n\t\t1,\n\t\t.2,\n\t\t.2,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t78,\n\t\t95,\n\t\t88,\n\t\t178,\n\t\t87,\n\t\t14,\n\t\t317,\n\t\t402,\n\t\t318,\n\t\t324,\n\t\t308,\n\t\t415,\n\t\t310,\n\t\t311,\n\t\t312,\n\t\t13,\n\t\t82,\n\t\t81,\n\t\t80,\n\t\t191,\n\t\t78\n\t], [\n\t\t1,\n\t\t0,\n\t\t.8,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t10,\n\t\t338,\n\t\t297,\n\t\t332,\n\t\t284,\n\t\t251,\n\t\t389,\n\t\t356,\n\t\t454,\n\t\t323,\n\t\t361,\n\t\t288,\n\t\t397,\n\t\t365,\n\t\t379,\n\t\t378,\n\t\t400,\n\t\t377,\n\t\t152,\n\t\t148,\n\t\t176,\n\t\t149,\n\t\t150,\n\t\t136,\n\t\t172,\n\t\t58,\n\t\t132,\n\t\t93,\n\t\t234,\n\t\t127,\n\t\t162,\n\t\t21,\n\t\t54,\n\t\t103,\n\t\t67,\n\t\t109,\n\t\t10\n\t], [\n\t\t.9,\n\t\t.9,\n\t\t.9,\n\t\t1\n\t])\n];\nvar FaceLandmarksComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tstorageBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"face_landmarks.wgsl\",\n\t\t\tcode: faceLandmarksWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"FaceLandmarksComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeFaceLandmarks\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 64,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_uniform_buffer\"\n\t\t});\n\t\tconst storageSize = Math.max(256, CANONICAL_FACE_CONTOURS.length * 48);\n\t\tthis.storageBuffer = device.createBuffer({\n\t\t\tsize: storageSize,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_storage_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}) {\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 4;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst u32Uniforms = new Uint32Array(4);\n\t\tu32Uniforms[0] = width;\n\t\tu32Uniforms[1] = height;\n\t\tu32Uniforms[2] = CANONICAL_FACE_CONTOURS.length;\n\t\tu32Uniforms[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, u32Uniforms);\n\t\tconst f32Segments = new Float32Array(CANONICAL_FACE_CONTOURS.length * 12);\n\t\tfor (let i = 0; i < CANONICAL_FACE_CONTOURS.length; i++) {\n\t\t\tconst seg = CANONICAL_FACE_CONTOURS[i];\n\t\t\tconst ptA = landmarks[seg.from];\n\t\t\tconst ptB = landmarks[seg.to];\n\t\t\tconst offset = i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32Segments[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32Segments[offset + 0] = ptA.x * width;\n\t\t\tf32Segments[offset + 1] = ptA.y * height;\n\t\t\tf32Segments[offset + 2] = ptB.x * width;\n\t\t\tf32Segments[offset + 3] = ptB.y * height;\n\t\t\tf32Segments[offset + 4] = seg.color[0];\n\t\t\tf32Segments[offset + 5] = seg.color[1];\n\t\t\tf32Segments[offset + 6] = seg.color[2];\n\t\t\tf32Segments[offset + 7] = seg.color[3];\n\t\t\tf32Segments[offset + 8] = radius;\n\t\t\tf32Segments[offset + 9] = 1;\n\t\t\tf32Segments[offset + 10] = 0;\n\t\t\tf32Segments[offset + 11] = 0;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.storageBuffer, 0, f32Segments);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: \"face_landmarks_output_texture\"\n\t\t\t});\n\t\t}\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"FaceLandmarksBindGroup\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.storageBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"FaceLandmarksCommandEncoder\" });\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"FaceLandmarksComputePass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t\tthis.storageBuffer.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/optical-flow.wgsl.ts\n/**\n* @file optical-flow.wgsl.ts\n* High-Performance Native WebGPU Optical Flow Compute Shaders\n* Implements coarse-to-fine Lucas-Kanade motion vector estimation with\n* spatial structure tensor integration and Tikhonov aperture regularization.\n*/\nconst opticalFlowDirectWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)\n regularization: f32, // Tikhonov regularization lambda\n maxDisplacement: f32, // Maximum allowable flow vector length\n _pad0: f32,\n _pad1: f32,\n _pad2: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(3) var<uniform> params: FlowParams;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let inDims = vec2<f32>(textureDimensions(tex));\n let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));\n let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);\n let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n\n // Central difference spatial gradients on current frame\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal gradient: difference between current and previous frame\n let cCurr = sampleLuma(currTex, p);\n let cPrev = sampleLuma(prevTex, p);\n let it = cCurr - cPrev;\n\n // Gaussian spatial falloff weight\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n // Tikhonov regularization prevents singularity in flat/homogeneous regions\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var u: f32 = 0.0;\n var v: f32 = 0.0;\n\n if (det > 1e-6) {\n u = (-sxt * C + syt * B) / det;\n v = (-syt * A + sxt * B) / det;\n }\n\n let mag = length(vec2<f32>(u, v));\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n let scale = maxD / mag;\n u *= scale;\n v *= scale;\n }\n\n textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));\n}\n`;\nconst opticalFlowRefineWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32,\n regularization: f32,\n maxDisplacement: f32,\n coarseWidth: u32,\n coarseHeight: u32,\n _pad0: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;\n@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: FlowParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\nfn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n return rgbToLuminance(sampleColor.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read upsampled prior flow from coarse scale (scaled by 2x)\n let coarseCoord = vec2<i32>(centerCoord / 2);\n let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);\n let priorFlow = coarseSample.xy * 2.0;\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n let pUv = (vec2<f32>(p) + 0.5) * invDims;\n\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal residual against warped previous frame\n let cCurr = sampleLuma(currTex, p);\n let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);\n let it = cCurr - cWarpedPrev;\n\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var du: f32 = 0.0;\n var dv: f32 = 0.0;\n\n if (det > 1e-6) {\n du = (-sxt * C + syt * B) / det;\n dv = (-syt * A + sxt * B) / det;\n }\n\n // Combine coarse prior flow with fine residual flow\n var totalFlow = priorFlow + vec2<f32>(du, dv);\n let mag = length(totalFlow);\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n totalFlow *= (maxD / mag);\n }\n\n textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/optical-flow-pipeline.ts\nvar OpticalFlowComputePipeline = class {\n\tdirectPipeline;\n\trefinePipeline;\n\tdirectUniformBuffer;\n\trefineUniformBuffer;\n\tbilinearSampler;\n\tcachedCoarseTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst directModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_direct.wgsl\",\n\t\t\tcode: opticalFlowDirectWgsl\n\t\t});\n\t\tthis.directPipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowDirectPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: directModule,\n\t\t\t\tentryPoint: \"computeFlow\"\n\t\t\t}\n\t\t});\n\t\tconst refineModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_refine.wgsl\",\n\t\t\tcode: opticalFlowRefineWgsl\n\t\t});\n\t\tthis.refinePipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowRefinePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: refineModule,\n\t\t\t\tentryPoint: \"refineFlow\"\n\t\t\t}\n\t\t});\n\t\tthis.directUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_direct_uniform\"\n\t\t});\n\t\tthis.refineUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_refine_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"optical_flow_bilinear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(prevTexture, currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst windowSize = options?.windowSize ?? 3;\n\t\tconst regularization = options?.regularization ?? options?.lambda ?? .05;\n\t\tconst scale = options?.scale ?? .5;\n\t\tconst maxDisplacement = 64;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `optical_flow_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"optical_flow_command_encoder\" });\n\t\tif (scale > .1 && scale < .95 && width >= 64 && height >= 64) {\n\t\t\tconst coarseW = Math.max(16, Math.floor(width * scale));\n\t\t\tconst coarseH = Math.max(16, Math.floor(height * scale));\n\t\t\tif (!this.cachedCoarseTexture || this.cachedCoarseTexture.width !== coarseW || this.cachedCoarseTexture.height !== coarseH) {\n\t\t\t\tthis.cachedCoarseTexture?.destroy();\n\t\t\t\tthis.cachedCoarseTexture = this.device.createTexture({\n\t\t\t\t\tlabel: \"optical_flow_coarse\",\n\t\t\t\t\tsize: [coarseW, coarseH],\n\t\t\t\t\tformat: \"rgba16float\",\n\t\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = coarseW;\n\t\t\tdirectU32[1] = coarseH;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement * scale;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst coarseBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst coarsePass = commandEncoder.beginComputePass({ label: \"optical_flow_coarse_pass\" });\n\t\t\tcoarsePass.setPipeline(this.directPipeline);\n\t\t\tcoarsePass.setBindGroup(0, coarseBindGroup);\n\t\t\tcoarsePass.dispatchWorkgroups(Math.ceil(coarseW / 16), Math.ceil(coarseH / 16));\n\t\t\tcoarsePass.end();\n\t\t\tconst refineData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst refineU32 = new Uint32Array(refineData);\n\t\t\tconst refineF32 = new Float32Array(refineData);\n\t\t\trefineU32[0] = width;\n\t\t\trefineU32[1] = height;\n\t\t\trefineU32[2] = windowSize;\n\t\t\trefineF32[3] = regularization;\n\t\t\trefineF32[4] = maxDisplacement;\n\t\t\trefineU32[5] = coarseW;\n\t\t\trefineU32[6] = coarseH;\n\t\t\tthis.device.queue.writeBuffer(this.refineUniformBuffer, 0, refineData);\n\t\t\tconst refineBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.refinePipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: { buffer: this.refineUniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst finePass = commandEncoder.beginComputePass({ label: \"optical_flow_fine_pass\" });\n\t\t\tfinePass.setPipeline(this.refinePipeline);\n\t\t\tfinePass.setBindGroup(0, refineBindGroup);\n\t\t\tfinePass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tfinePass.end();\n\t\t} else {\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = width;\n\t\t\tdirectU32[1] = height;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst directBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst directPass = commandEncoder.beginComputePass({ label: \"optical_flow_direct_pass\" });\n\t\t\tdirectPass.setPipeline(this.directPipeline);\n\t\t\tdirectPass.setBindGroup(0, directBindGroup);\n\t\t\tdirectPass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tdirectPass.end();\n\t\t}\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedCoarseTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.directUniformBuffer.destroy();\n\t\tthis.refineUniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pose-skeleton.wgsl.ts\n/**\n* @file pose-skeleton.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet OpenPose skeleton rasterization.\n* Renders instanced bone cylinders/capsules directly in VRAM without CPU roundtrips.\n*/\nconst poseSkeletonWgsl = `\nstruct Bone {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct SkeletonParams {\n width: u32,\n height: u32,\n numBones: u32,\n pad: u32,\n bones: array<Bone, 24>,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: SkeletonParams;\n\n@compute @workgroup_size(16, 16)\nfn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n let count = min(params.numBones, 24u);\n for (var i = 0u; i < count; i = i + 1u) {\n let bone = params.bones[i];\n if (bone.enabled < 0.5) {\n continue;\n }\n\n let ab = bone.end - bone.start;\n let ap = p - bone.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = bone.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= bone.radius) {\n // Sub-pixel edge antialiasing\n let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);\n let a = edgeAlpha * bone.color.a;\n outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/pose-skeleton-pipeline.ts\nconst CANONICAL_OPENPOSE_BONES = [\n\t{\n\t\tfrom: 0,\n\t\tto: 11,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 0,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 13,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 13,\n\t\tto: 15,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 14,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 14,\n\t\tto: 16,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 23,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 25,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 25,\n\t\tto: 27,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 24,\n\t\tto: 26,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 26,\n\t\tto: 28,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\nvar PoseSkeletonComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"pose_skeleton.wgsl\",\n\t\t\tcode: poseSkeletonWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"PoseSkeletonComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computePoseSkeleton\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 1280,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"pose_skeleton_uniform_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}, bones) {\n\t\tconst boneDefs = bones ?? CANONICAL_OPENPOSE_BONES;\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 6;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst arrayBuf = new ArrayBuffer(1280);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tu32View[2] = boneDefs.length;\n\t\tu32View[3] = 0;\n\t\tconst boneBaseFloatOffset = 4;\n\t\tfor (let i = 0; i < boneDefs.length; i++) {\n\t\t\tconst boneDef = boneDefs[i];\n\t\t\tconst ptA = landmarks[boneDef.from];\n\t\t\tconst ptB = landmarks[boneDef.to];\n\t\t\tconst offset = boneBaseFloatOffset + i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32View[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32View[offset + 0] = ptA.x * width;\n\t\t\tf32View[offset + 1] = ptA.y * height;\n\t\t\tf32View[offset + 2] = ptB.x * width;\n\t\t\tf32View[offset + 3] = ptB.y * height;\n\t\t\tf32View[offset + 4] = boneDef.color[0];\n\t\t\tf32View[offset + 5] = boneDef.color[1];\n\t\t\tf32View[offset + 6] = boneDef.color[2];\n\t\t\tf32View[offset + 7] = boneDef.color[3];\n\t\t\tf32View[offset + 8] = radius;\n\t\t\tf32View[offset + 9] = 1;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"openpose_skeleton_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"pose_skeleton_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"pose_skeleton_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"pose_skeleton_output_view\" })\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"pose_skeleton_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/segmentation.wgsl.ts\n/**\n* @file segmentation.wgsl.ts\n* Native WebGPU WGSL compute shader for segmentation mask thresholding and edge feathering.\n* Outputs crisp alpha mattes directly in VRAM without CPU roundtrips.\n*/\nconst segmentationWgsl = `\nstruct SegParams {\n threshold: f32,\n feather: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: SegParams;\n\n@compute @workgroup_size(16, 16)\nfn computeSegmentation(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let sample = textureLoad(inputTex, coord, 0);\n\n // Luminance or alpha channel extraction\n let rawAlpha = max(sample.a, dot(sample.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n\n let lower = max(0.0, params.threshold - params.feather);\n let upper = min(1.0, params.threshold + params.feather);\n let alpha = smoothstep(lower, upper, rawAlpha);\n\n textureStore(outputTex, id.xy, vec4<f32>(alpha, alpha, alpha, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/segmentation-pipeline.ts\nvar SegmentationComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"segmentation.wgsl\",\n\t\t\tcode: segmentationWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"SegmentationComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeSegmentation\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"segmentation_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst threshold = options.threshold ?? .5;\n\t\tconst feather = options.feather ?? .05;\n\t\tconst arrayBuf = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tf32View[0] = threshold;\n\t\tf32View[1] = feather;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"segmentation_output_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"segmentation_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"segmentation_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView({ label: \"segmentation_input_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"segmentation_output_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"segmentation_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/temporal-warp-blend.wgsl.ts\n/**\n* @file temporal-warp-blend.wgsl.ts\n* Native WebGPU Forward Warping & Adaptive Photometric Temporal Blend Compute Shaders\n* Warps previous frame forward along motion vectors and blends adaptively with current\n* frame to eliminate generative AI video flicker with zero ghosting.\n*/\nconst temporalWarpBlendRgba8Wgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)\n disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame\n maxMotionPixels: f32, // Speed cutoff for fallback to curr frame\n isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n // If first frame or scene cut reset, pass through current frame directly\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read motion vector (u, v) in pixel units\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n // Motion-compensated backward warp coordinate pointing to previous frame\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n // Adaptive blend weight:\n // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)\n // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\nconst temporalWarpBlendRgba16fWgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32,\n disocclusionThreshold: f32,\n maxMotionPixels: f32,\n isFirstFrame: f32,\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\n\n//#endregion\n//#region src/pipelines/temporal-deflicker-pipeline.ts\nvar TemporalDeflickerPipeline = class {\n\tflowPipeline;\n\trgba8Pipeline;\n\trgba16fPipeline;\n\tuniformBuffer;\n\tbilinearSampler;\n\thistoryTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.flowPipeline = new OpticalFlowComputePipeline(device);\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba8.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba8Wgsl\n\t\t});\n\t\tthis.rgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba16f.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba16fWgsl\n\t\t});\n\t\tthis.rgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"temporal_deflicker_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"temporal_deflicker_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst rawBlendWeight = options.blendWeight ?? .35;\n\t\tconst blendWeight = typeof rawBlendWeight === \"number\" ? rawBlendWeight : Number(rawBlendWeight);\n\t\tconst disocclusionThreshold = options.disocclusionThreshold ?? .15;\n\t\tconst maxMotionPixels = options.maxMotionPixels ?? 64;\n\t\tconst format = currTexture.format;\n\t\tconst isRgba16f = format === \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== format) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `deflickered_output_${format}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\tif (!this.historyTexture || this.historyTexture.width !== width || this.historyTexture.height !== height) {\n\t\t\tthis.historyTexture?.destroy();\n\t\t\tthis.historyTexture = this.device.createTexture({\n\t\t\t\tlabel: \"deflicker_history_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t\tconst commandEncoder$1 = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_first_frame_encoder\" });\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.historyTexture }, [width, height]);\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.cachedOutputTexture }, [width, height]);\n\t\t\tif (!customEncoder) this.device.queue.submit([commandEncoder$1.finish()]);\n\t\t\treturn this.cachedOutputTexture;\n\t\t}\n\t\tconst flowTexture = this.flowPipeline.execute(this.historyTexture, currTexture, options.opticalFlow, customEncoder);\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = blendWeight;\n\t\tf32View[3] = disocclusionThreshold;\n\t\tf32View[4] = maxMotionPixels;\n\t\tf32View[5] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tconst pipeline = isRgba16f ? this.rgba16fPipeline : this.rgba8Pipeline;\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_blend_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.historyTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: flowTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"deflicker_blend_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tcommandEncoder.copyTextureToTexture({ texture: this.cachedOutputTexture }, { texture: this.historyTexture }, [width, height]);\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\treset() {\n\t\tthis.historyTexture?.destroy();\n\t\tthis.historyTexture = void 0;\n\t}\n\tdestroy() {\n\t\tthis.flowPipeline.destroy();\n\t\tthis.historyTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/pipeline/tensor-pipeline.ts\nvar TensorPipeline = class TensorPipeline {\n\tid;\n\tcannyOptions;\n\tdepthNormalsOptions;\n\tposeSkeletonOptions;\n\tfaceLandmarksOptions;\n\tsegmentationOptions;\n\topticalFlowOptions;\n\tdeflickerOptions;\n\tmultiplexer = new ControlNetMultiplexer();\n\tcannyPipeline;\n\tdepthNormalsPipeline;\n\tposePipeline;\n\tfacePipeline;\n\tsegmentationPipeline;\n\topticalFlowPipeline;\n\tdeflickerPipeline;\n\tprevInputTexture;\n\tconstructor(source) {\n\t\tthis.source = source;\n\t\tthis.id = `tensor-${Math.random().toString(36).slice(2, 9)}`;\n\t}\n\tstatic from(source) {\n\t\treturn new TensorPipeline(source);\n\t}\n\tcanny(options = {}) {\n\t\tthis.cannyOptions = options;\n\t\treturn this;\n\t}\n\tdepthNormals(options = {}) {\n\t\tthis.depthNormalsOptions = options;\n\t\treturn this;\n\t}\n\tposeSkeleton(options = {}) {\n\t\tthis.poseSkeletonOptions = options;\n\t\treturn this;\n\t}\n\tpose(landmarks, options = {}) {\n\t\tthis.poseSkeletonOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tfaceLandmarks(options = {}) {\n\t\tthis.faceLandmarksOptions = options;\n\t\treturn this;\n\t}\n\tface(landmarks, options = {}) {\n\t\tthis.faceLandmarksOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tsegmentation(options = {}) {\n\t\tthis.segmentationOptions = options;\n\t\treturn this;\n\t}\n\topticalFlow(options = {}) {\n\t\tthis.opticalFlowOptions = options;\n\t\treturn this;\n\t}\n\tdeflicker(options = {}) {\n\t\tthis.deflickerOptions = options;\n\t\treturn this;\n\t}\n\tgetMultiplexer() {\n\t\treturn this.multiplexer;\n\t}\n\tasync execute(device, overrideSourceTexture) {\n\t\tlet inputTexture = overrideSourceTexture;\n\t\tif (!inputTexture && typeof this.source?.createView === \"function\") inputTexture = this.source;\n\t\tif (!inputTexture) throw new Error(\"[TensorPipeline.execute] No GPUTexture available for tensor compute execution. Pass a valid GPUTexture to execute() or initialize with a GPUTexture source.\");\n\t\tif (this.cannyOptions) {\n\t\t\tif (!this.cannyPipeline) this.cannyPipeline = new CannyComputePipeline(device);\n\t\t\tconst cannyTex = this.cannyPipeline.execute(inputTexture, this.cannyOptions);\n\t\t\tthis.multiplexer.set(\"canny\", cannyTex);\n\t\t}\n\t\tif (this.depthNormalsOptions) {\n\t\t\tif (!this.depthNormalsPipeline) this.depthNormalsPipeline = new DepthNormalsComputePipeline(device);\n\t\t\tconst normalTex = this.depthNormalsPipeline.execute(inputTexture, this.depthNormalsOptions);\n\t\t\tthis.multiplexer.set(\"normals\", normalTex);\n\t\t}\n\t\tif (this.poseSkeletonOptions?.landmarks) {\n\t\t\tif (!this.posePipeline) this.posePipeline = new PoseSkeletonComputePipeline(device);\n\t\t\tconst skeletonTex = this.posePipeline.execute(this.poseSkeletonOptions.landmarks, {\n\t\t\t\twidth: this.poseSkeletonOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.poseSkeletonOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.poseSkeletonOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"poseSkeleton\", skeletonTex);\n\t\t}\n\t\tif (this.faceLandmarksOptions?.landmarks) {\n\t\t\tif (!this.facePipeline) this.facePipeline = new FaceLandmarksComputePipeline(device);\n\t\t\tconst faceTex = this.facePipeline.execute(this.faceLandmarksOptions.landmarks, {\n\t\t\t\twidth: this.faceLandmarksOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.faceLandmarksOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.faceLandmarksOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"faceLandmarks\", faceTex);\n\t\t}\n\t\tif (this.segmentationOptions) {\n\t\t\tif (!this.segmentationPipeline) this.segmentationPipeline = new SegmentationComputePipeline(device);\n\t\t\tconst segTex = this.segmentationPipeline.execute(inputTexture, this.segmentationOptions);\n\t\t\tthis.multiplexer.set(\"segmentationMask\", segTex);\n\t\t}\n\t\tif (this.opticalFlowOptions) {\n\t\t\tif (!this.opticalFlowPipeline) this.opticalFlowPipeline = new OpticalFlowComputePipeline(device);\n\t\t\tconst prevTex = this.prevInputTexture ?? inputTexture;\n\t\t\tconst flowTex = this.opticalFlowPipeline.execute(prevTex, inputTexture, this.opticalFlowOptions);\n\t\t\tthis.multiplexer.set(\"motionVectors\", flowTex);\n\t\t}\n\t\tif (this.deflickerOptions) {\n\t\t\tif (!this.deflickerPipeline) this.deflickerPipeline = new TemporalDeflickerPipeline(device);\n\t\t\tconst deflickeredTex = this.deflickerPipeline.execute(inputTexture, this.deflickerOptions);\n\t\t\tthis.multiplexer.set(\"deflickered\", deflickeredTex);\n\t\t}\n\t\tthis.prevInputTexture = inputTexture;\n\t\treturn this.multiplexer.getOutputs();\n\t}\n\ttoConfig() {\n\t\treturn {\n\t\t\tcanny: this.cannyOptions,\n\t\t\tdepthNormals: this.depthNormalsOptions,\n\t\t\tposeSkeleton: this.poseSkeletonOptions,\n\t\t\tfaceLandmarks: this.faceLandmarksOptions,\n\t\t\tsegmentation: this.segmentationOptions,\n\t\t\topticalFlow: this.opticalFlowOptions,\n\t\t\tdeflicker: this.deflickerOptions\n\t\t};\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"tensor\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.toConfig()\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.cannyPipeline?.destroy();\n\t\tthis.depthNormalsPipeline?.destroy();\n\t\tthis.posePipeline?.destroy();\n\t\tthis.facePipeline?.destroy();\n\t\tthis.segmentationPipeline?.destroy();\n\t\tthis.opticalFlowPipeline?.destroy();\n\t\tthis.deflickerPipeline?.destroy();\n\t\tthis.multiplexer.destroy();\n\t}\n};\n\n//#endregion\nexport { CANONICAL_FACE_CONTOURS, CANONICAL_OPENPOSE_BONES, CannyComputePipeline, ControlNetMultiplexer, DepthNormalsComputePipeline, FaceLandmarksComputePipeline, OpticalFlowComputePipeline, PoseSkeletonComputePipeline, SegmentationComputePipeline, TemporalDeflickerPipeline, TensorPipeline, cannyNmsR32fWgsl, cannyNmsRgba8Wgsl, cannySobelWgsl, depthNormalsRgba16fWgsl, depthNormalsRgba8Wgsl, faceLandmarksWgsl, opticalFlowDirectWgsl, opticalFlowRefineWgsl, poseSkeletonWgsl, segmentationWgsl, temporalWarpBlendRgba16fWgsl, temporalWarpBlendRgba8Wgsl };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF;AACD,IAAI,+BAA+B,MAAM;CACxC;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;GACP,CAAC;EACF,MAAM,cAAc,KAAK,IAAI,KAAK,wBAAwB,SAAS,GAAG;AACtE,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;G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K,qBAAqB,SAAS;AACnC,OAAK,oBAAoB,SAAS;AAClC,OAAK,oBAAoB,SAAS;;;;;;;;AAWpC,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DzB,MAAM,2BAA2B;CAChC;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;AACD,IAAI,8BAA8B,MAAM;CACvC;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN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"}