framefields 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/NOTICE.md +4 -0
  2. package/dist/audio/index.d.mts +6 -5
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-CYZkDwae.d.mts → audio-CHV33Od9.d.mts} +3 -4
  5. package/dist/audio-CHV33Od9.d.mts.map +1 -0
  6. package/dist/{audio-BuCVk1IQ.mjs → audio-DHzLQ_RG.mjs} +4 -4
  7. package/dist/{audio-BuCVk1IQ.mjs.map → audio-DHzLQ_RG.mjs.map} +1 -1
  8. package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
  9. package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
  10. package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
  11. package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
  12. package/dist/cli/check-worker.mjs +51 -51
  13. package/dist/cli/check-worker.mjs.map +1 -1
  14. package/dist/cli/local-worker.d.mts +28 -0
  15. package/dist/cli/local-worker.d.mts.map +1 -0
  16. package/dist/cli/local-worker.mjs +83 -0
  17. package/dist/cli/local-worker.mjs.map +1 -0
  18. package/dist/cli.mjs +390 -124
  19. package/dist/cli.mjs.map +1 -1
  20. package/dist/cloud/index.d.mts +16 -3
  21. package/dist/cloud/index.d.mts.map +1 -1
  22. package/dist/cloud/index.mjs +2 -2
  23. package/dist/cloud-Cj1TIme8.mjs +685 -0
  24. package/dist/cloud-Cj1TIme8.mjs.map +1 -0
  25. package/dist/components/index.d.mts +15 -14
  26. package/dist/components/index.mjs +47 -47
  27. package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
  28. package/dist/dist-BSKAbyea.mjs.map +1 -0
  29. package/dist/{dist-CNGv-JTX.mjs → dist-B_rSWeOz.mjs} +1 -1
  30. package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
  31. package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
  32. package/dist/{dist-EQX3TUUl.mjs → dist-CUNvNDS3.mjs} +129 -82
  33. package/dist/dist-CUNvNDS3.mjs.map +1 -0
  34. package/dist/dist-CiTgmfUw.mjs +502 -0
  35. package/dist/dist-CiTgmfUw.mjs.map +1 -0
  36. package/dist/{dist-CWLLnigL.mjs → dist-D3BeAZ7X.mjs} +315 -84
  37. package/dist/dist-D3BeAZ7X.mjs.map +1 -0
  38. package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
  39. package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
  40. package/dist/{dist-Dg9LMWoX.mjs → dist-Kbf-JTry.mjs} +2 -2
  41. package/dist/{dist-Dg9LMWoX.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
  42. package/dist/effects/index.d.mts +6 -6
  43. package/dist/effects/index.mjs +36 -36
  44. package/dist/{effects-DKLbLXF7.mjs → effects-BiDgCK1L.mjs} +3 -3
  45. package/dist/{effects-DKLbLXF7.mjs.map → effects-BiDgCK1L.mjs.map} +1 -1
  46. package/dist/fonts/index.d.mts +1 -1
  47. package/dist/fonts/index.mjs +3 -3
  48. package/dist/{fonts-gPbGbShD.mjs → fonts-DeDPWdvJ.mjs} +2 -2
  49. package/dist/{fonts-gPbGbShD.mjs.map → fonts-DeDPWdvJ.mjs.map} +1 -1
  50. package/dist/{gpu-CpkJJLQP.mjs → gpu-CWjgql4C.mjs} +11 -3
  51. package/dist/gpu-CWjgql4C.mjs.map +1 -0
  52. package/dist/index-BFTtXosj.d.mts +63 -0
  53. package/dist/index-BFTtXosj.d.mts.map +1 -0
  54. package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
  55. package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
  56. package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
  57. package/dist/index-CnZhBlob.d.mts.map +1 -0
  58. package/dist/{index-D2i9J9Zq.d.mts → index-D68eGFNE.d.mts} +3 -30
  59. package/dist/index-D68eGFNE.d.mts.map +1 -0
  60. package/dist/{index-CEU_Zsb9.d.mts → index-DBh3WphX.d.mts} +25 -23
  61. package/dist/index-DBh3WphX.d.mts.map +1 -0
  62. package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
  63. package/dist/index-DQ1U3HC3.d.mts.map +1 -0
  64. package/dist/{index-jSDEM-uE.d.mts → index-Dibc_xpC.d.mts} +6 -6
  65. package/dist/{index-jSDEM-uE.d.mts.map → index-Dibc_xpC.d.mts.map} +1 -1
  66. package/dist/{index-Cro-818i.d.mts → index-E2IXX0Cz.d.mts} +88 -14
  67. package/dist/index-E2IXX0Cz.d.mts.map +1 -0
  68. package/dist/{index-BuiZzc6i.d.mts → index-X2u96TEo.d.mts} +162 -5
  69. package/dist/index-X2u96TEo.d.mts.map +1 -0
  70. package/dist/{index-Bly-7YM1.d.mts → index-YB9j9KUx.d.mts} +3 -3
  71. package/dist/{index-Bly-7YM1.d.mts.map → index-YB9j9KUx.d.mts.map} +1 -1
  72. package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
  73. package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
  74. package/dist/{index-C8YwZ6k1.d.mts → index-rtCXNxGO.d.mts} +2 -2
  75. package/dist/{index-C8YwZ6k1.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
  76. package/dist/index.d.mts +16 -15
  77. package/dist/index.mjs +58 -58
  78. package/dist/preview/index.d.mts +5 -4
  79. package/dist/preview/index.mjs +12 -12
  80. package/dist/{preview-BToKUTtZ.mjs → preview-PDz7o2xg.mjs} +323 -35
  81. package/dist/preview-PDz7o2xg.mjs.map +1 -0
  82. package/dist/preview-engine/audio.mjs +1 -1
  83. package/dist/preview-engine/{chunk-QF4JWVO3.mjs → chunk-35XSD4QM.mjs} +15 -15
  84. package/dist/preview-engine/{chunk-ZF2MEFKO.mjs → chunk-3DOIE4DV.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-JDB7PMRI.mjs → chunk-3IT7LHWR.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-DNNGWS2C.mjs → chunk-3MLGWUSK.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-KVOFO273.mjs → chunk-3QJ5GRBH.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-54Q5CKSV.mjs → chunk-3QTHW2CD.mjs} +1 -1
  89. package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
  90. package/dist/preview-engine/chunk-4P3MMJWD.mjs +1 -0
  91. package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
  92. package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
  93. package/dist/preview-engine/{chunk-UMJ3VGKN.mjs → chunk-6B3NOY5W.mjs} +1 -1
  94. package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
  95. package/dist/preview-engine/{chunk-BRV7TQDV.mjs → chunk-77WWW75O.mjs} +1 -1
  96. package/dist/preview-engine/chunk-7M5LE6EM.mjs +483 -0
  97. package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
  98. package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
  99. package/dist/preview-engine/{chunk-OLB4TQLQ.mjs → chunk-AKVRG7UU.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-CIVEZJYF.mjs → chunk-CRBOK3JT.mjs} +1 -1
  101. package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
  102. package/dist/preview-engine/{chunk-ACBBBOUM.mjs → chunk-CYM75INB.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-EPRINA4V.mjs → chunk-E7BKWHOT.mjs} +10 -10
  105. package/dist/preview-engine/{chunk-NOKPBMIP.mjs → chunk-EWDJMJO5.mjs} +1 -1
  106. package/dist/preview-engine/{chunk-5KSBS3AL.mjs → chunk-EYE3GNL5.mjs} +1 -1
  107. package/dist/preview-engine/chunk-FRJPXWAG.mjs +1 -0
  108. package/dist/preview-engine/{chunk-IKVJ4MW5.mjs → chunk-G4ZTSLZU.mjs} +1 -1
  109. package/dist/preview-engine/{chunk-VZLIRYAL.mjs → chunk-GAMAKN5L.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-ZIXPWP2B.mjs → chunk-ICWD36H6.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-OELPPLML.mjs → chunk-IEEV5RB3.mjs} +1 -1
  112. package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
  113. package/dist/preview-engine/{chunk-YVZTRH4Y.mjs → chunk-KDCM7S3S.mjs} +1 -1
  114. package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
  115. package/dist/preview-engine/{chunk-O63FLYWC.mjs → chunk-N2VISDTG.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-YKM7JDQY.mjs → chunk-NJO2BIJX.mjs} +1 -1
  118. package/dist/preview-engine/{chunk-7GMHSTRP.mjs → chunk-NTSALWFF.mjs} +1 -1
  119. package/dist/preview-engine/{chunk-PKNUTHPI.mjs → chunk-NVXFEDJS.mjs} +1 -1
  120. package/dist/preview-engine/{chunk-VFQH5KVS.mjs → chunk-ONHY4KNY.mjs} +1 -1
  121. package/dist/preview-engine/{chunk-Z24UEN4P.mjs → chunk-PD2HKW2S.mjs} +1 -1
  122. package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
  123. package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
  124. package/dist/preview-engine/{chunk-YHMBGJP6.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
  125. package/dist/preview-engine/{chunk-4AGQN53P.mjs → chunk-QXLFTCLC.mjs} +1 -1
  126. package/dist/preview-engine/{chunk-65NANVQL.mjs → chunk-R4H52Q7S.mjs} +1 -1
  127. package/dist/preview-engine/{chunk-FQL4IJZN.mjs → chunk-RN7J5TRU.mjs} +1 -1
  128. package/dist/preview-engine/{chunk-26XWIHW3.mjs → chunk-RVCLMO5Q.mjs} +1 -1
  129. package/dist/preview-engine/{chunk-VQA4DYZU.mjs → chunk-RYSV44B4.mjs} +1 -1
  130. package/dist/preview-engine/{chunk-TEWRQKX3.mjs → chunk-SFHWP65D.mjs} +1 -1
  131. package/dist/preview-engine/{chunk-RDWLLITE.mjs → chunk-SMHEMYCV.mjs} +1 -1
  132. package/dist/preview-engine/{chunk-EXEO245X.mjs → chunk-SV3ZNZQU.mjs} +1 -1
  133. package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
  134. package/dist/preview-engine/chunk-UFPA36D2.mjs +2227 -0
  135. package/dist/preview-engine/{chunk-EAWJXW4J.mjs → chunk-UVEDFIPN.mjs} +1 -1
  136. package/dist/preview-engine/{chunk-6LTINEA4.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
  137. package/dist/preview-engine/{chunk-IBPYV6HF.mjs → chunk-W4XR6F5G.mjs} +1 -1
  138. package/dist/preview-engine/{chunk-UI3VH33L.mjs → chunk-WPYWCWWL.mjs} +1 -1
  139. package/dist/preview-engine/{chunk-GHTG5XV6.mjs → chunk-XYCR3STG.mjs} +84 -25
  140. package/dist/preview-engine/{chunk-WFMUDL55.mjs → chunk-YAPGJZPI.mjs} +1 -1
  141. package/dist/preview-engine/{chunk-LMXMBX4J.mjs → chunk-YJ4DSRDY.mjs} +1 -1
  142. package/dist/preview-engine/{chunk-CCORQLMR.mjs → chunk-YOJKIMU5.mjs} +1 -1
  143. package/dist/preview-engine/{chunk-UGB6JKVS.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
  144. package/dist/preview-engine/{chunk-LFNCWMKS.mjs → chunk-ZZMI3WOT.mjs} +1 -1
  145. package/dist/preview-engine/components.mjs +1 -1
  146. package/dist/preview-engine/effects.mjs +1 -1
  147. package/dist/preview-engine/fonts.mjs +1 -1
  148. package/dist/preview-engine/framefields.mjs +1 -1
  149. package/dist/preview-engine/player.mjs +5 -5
  150. package/dist/preview-engine/{renderers-53EI26GL.mjs → renderers-3FZVDYRQ.mjs} +1 -1
  151. package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
  152. package/dist/preview-engine/{renderers-6YVZUQOH.mjs → renderers-4RPQSUUZ.mjs} +1 -1
  153. package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
  154. package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
  155. package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
  156. package/dist/preview-engine/{renderers-CCRZNGVK.mjs → renderers-6FENMFSC.mjs} +1 -1
  157. package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
  158. package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
  159. package/dist/preview-engine/renderers-AFTUFMQQ.mjs +1 -0
  160. package/dist/preview-engine/{renderers-CYJAVWHT.mjs → renderers-AIZRIW2R.mjs} +1 -1
  161. package/dist/preview-engine/{renderers-OGOW3NA4.mjs → renderers-BDI2BDBA.mjs} +1 -1
  162. package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
  163. package/dist/preview-engine/{renderers-EN7LXJLG.mjs → renderers-BUZ67FNZ.mjs} +1 -1
  164. package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
  165. package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
  166. package/dist/preview-engine/{renderers-WSABL3QO.mjs → renderers-ECXMT5BD.mjs} +1 -1
  167. package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
  168. package/dist/preview-engine/renderers-EPSF5CSQ.mjs +1 -0
  169. package/dist/preview-engine/{renderers-X6CORAES.mjs → renderers-EVEWFJ7U.mjs} +1 -1
  170. package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
  171. package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
  172. package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
  173. package/dist/preview-engine/{renderers-GQM3KMV3.mjs → renderers-FQISHQEN.mjs} +1 -1
  174. package/dist/preview-engine/{renderers-HKLCB4U6.mjs → renderers-FXAVFNUN.mjs} +1 -1
  175. package/dist/preview-engine/{renderers-P2HORBZ6.mjs → renderers-GITAVRYZ.mjs} +1 -1
  176. package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
  177. package/dist/preview-engine/{renderers-KCGK33Y2.mjs → renderers-HG6JZIZO.mjs} +1 -1
  178. package/dist/preview-engine/{renderers-I6QKZ7CH.mjs → renderers-HHWMIDN3.mjs} +1 -1
  179. package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
  180. package/dist/preview-engine/{renderers-7CAHX35U.mjs → renderers-HXEDI4BD.mjs} +1 -1
  181. package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
  182. package/dist/preview-engine/{renderers-ACUJMDEK.mjs → renderers-I2ZOUFRU.mjs} +1 -1
  183. package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
  184. package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
  185. package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
  186. package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
  187. package/dist/preview-engine/{renderers-C7SI3NIE.mjs → renderers-KKULMOV4.mjs} +1 -1
  188. package/dist/preview-engine/{renderers-HSFQIILN.mjs → renderers-KMVMPYY7.mjs} +1 -1
  189. package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
  190. package/dist/preview-engine/{renderers-BOBVXYAA.mjs → renderers-LWW4RF6D.mjs} +1 -1
  191. package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
  192. package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
  193. package/dist/preview-engine/{renderers-VVP5WQOY.mjs → renderers-MPFU74I3.mjs} +1 -1
  194. package/dist/preview-engine/{renderers-H6PBHEYU.mjs → renderers-MW53LTMB.mjs} +1 -1
  195. package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
  196. package/dist/preview-engine/renderers-OJWWIVNW.mjs +1 -0
  197. package/dist/preview-engine/{renderers-4IBFDW2S.mjs → renderers-PC2GOZDT.mjs} +1 -1
  198. package/dist/preview-engine/{renderers-UG2C3C7T.mjs → renderers-Q77UPEYE.mjs} +1 -1
  199. package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
  200. package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
  201. package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
  202. package/dist/preview-engine/renderers-RHMRWX46.mjs +1 -0
  203. package/dist/preview-engine/{renderers-5XLGCEOA.mjs → renderers-RIPXT4AL.mjs} +1 -1
  204. package/dist/preview-engine/{renderers-FY2HOQCS.mjs → renderers-SFVFAS3C.mjs} +1 -1
  205. package/dist/preview-engine/{renderers-VIGZYJYX.mjs → renderers-SWQVCJHB.mjs} +1 -1
  206. package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
  207. package/dist/preview-engine/renderers-TTXTV4PC.mjs +228 -0
  208. package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
  209. package/dist/preview-engine/{renderers-6LNDAO4B.mjs → renderers-U4IXWMD6.mjs} +1 -1
  210. package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
  211. package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
  212. package/dist/preview-engine/{renderers-33FCFHDR.mjs → renderers-VUQAZ56P.mjs} +1 -1
  213. package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
  214. package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
  215. package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
  216. package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
  217. package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
  218. package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
  219. package/dist/preview-engine/signals.mjs +1 -1
  220. package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-YXNX4MLK.mjs} +1 -1
  221. package/dist/{program-Bc860ko5.mjs → program-Bn6ko_I4.mjs} +44 -17
  222. package/dist/program-Bn6ko_I4.mjs.map +1 -0
  223. package/dist/renderer/index.d.mts +4 -3
  224. package/dist/renderer/index.mjs +3 -3
  225. package/dist/{renderer-B3Dme2es.mjs → renderer--Q0pM9Vh.mjs} +5 -5
  226. package/dist/{renderer-B3Dme2es.mjs.map → renderer--Q0pM9Vh.mjs.map} +1 -1
  227. package/dist/renderer-1aSF5BmY.mjs +5 -0
  228. package/dist/{renderer-CAWnCsQc.mjs → renderer-45ifiDkn.mjs} +5 -5
  229. package/dist/{renderer-CAWnCsQc.mjs.map → renderer-45ifiDkn.mjs.map} +1 -1
  230. package/dist/{renderer-Cz-n883J.mjs → renderer-549d94qG.mjs} +5 -5
  231. package/dist/{renderer-Cz-n883J.mjs.map → renderer-549d94qG.mjs.map} +1 -1
  232. package/dist/{renderer-BhsrlGKp.mjs → renderer-B-LUGB9h.mjs} +74 -21
  233. package/dist/renderer-B-LUGB9h.mjs.map +1 -0
  234. package/dist/renderer-B2e4Gr9u.mjs +5 -0
  235. package/dist/{renderer-B1LD29TV.mjs → renderer-B5b-ehRb.mjs} +3 -3
  236. package/dist/{renderer-B1LD29TV.mjs.map → renderer-B5b-ehRb.mjs.map} +1 -1
  237. package/dist/renderer-B6fz4j50.mjs +5 -0
  238. package/dist/{renderer-_9gbYS-3.mjs → renderer-BCTUqJG7.mjs} +5 -5
  239. package/dist/{renderer-_9gbYS-3.mjs.map → renderer-BCTUqJG7.mjs.map} +1 -1
  240. package/dist/renderer-BEftIYw-.mjs +5 -0
  241. package/dist/{renderer-C9BSXyrq.mjs → renderer-BHPgkoEL.mjs} +4 -4
  242. package/dist/{renderer-C9BSXyrq.mjs.map → renderer-BHPgkoEL.mjs.map} +1 -1
  243. package/dist/renderer-BHTnO-7e.mjs +5 -0
  244. package/dist/{renderer-fs8f1QeE.mjs → renderer-BIieU9pY.mjs} +5 -5
  245. package/dist/{renderer-fs8f1QeE.mjs.map → renderer-BIieU9pY.mjs.map} +1 -1
  246. package/dist/{renderer-DwK9jsER.mjs → renderer-BKi6jDi_.mjs} +4 -4
  247. package/dist/{renderer-DwK9jsER.mjs.map → renderer-BKi6jDi_.mjs.map} +1 -1
  248. package/dist/renderer-BMlnQqTO.mjs +5 -0
  249. package/dist/{renderer-BNJ6Jk7-.mjs → renderer-BMpmmYOq.mjs} +4 -4
  250. package/dist/{renderer-BNJ6Jk7-.mjs.map → renderer-BMpmmYOq.mjs.map} +1 -1
  251. package/dist/{renderer-DkqZmfm8.mjs → renderer-BO_wuUKA.mjs} +5 -5
  252. package/dist/{renderer-DkqZmfm8.mjs.map → renderer-BO_wuUKA.mjs.map} +1 -1
  253. package/dist/renderer-BOzcFezY.mjs +5 -0
  254. package/dist/{renderer-Bxjb0HYU.mjs → renderer-BPOh9x5X.mjs} +4 -4
  255. package/dist/{renderer-Bxjb0HYU.mjs.map → renderer-BPOh9x5X.mjs.map} +1 -1
  256. package/dist/{renderer-Ros7XQg2.mjs → renderer-BPiWsrC2.mjs} +3 -3
  257. package/dist/{renderer-Ros7XQg2.mjs.map → renderer-BPiWsrC2.mjs.map} +1 -1
  258. package/dist/{renderer-lHNTgiOM.mjs → renderer-BUj7jE6t.mjs} +3 -3
  259. package/dist/{renderer-lHNTgiOM.mjs.map → renderer-BUj7jE6t.mjs.map} +1 -1
  260. package/dist/renderer-BVbjJIKJ.mjs +5 -0
  261. package/dist/renderer-BXsHKf4k.mjs +5 -0
  262. package/dist/{renderer-D0aAZHC7.mjs → renderer-BZgJj8Cl.mjs} +4 -4
  263. package/dist/{renderer-D0aAZHC7.mjs.map → renderer-BZgJj8Cl.mjs.map} +1 -1
  264. package/dist/{renderer-V4dhrf_h.mjs → renderer-BgjPbgbn.mjs} +6 -6
  265. package/dist/{renderer-V4dhrf_h.mjs.map → renderer-BgjPbgbn.mjs.map} +1 -1
  266. package/dist/{renderer-BaIJIfJ6.mjs → renderer-BjgFpwVK.mjs} +5 -5
  267. package/dist/{renderer-BaIJIfJ6.mjs.map → renderer-BjgFpwVK.mjs.map} +1 -1
  268. package/dist/renderer-Bks49NVl.mjs +5 -0
  269. package/dist/{renderer-CU8v-LxD.mjs → renderer-BlZgyBSo.mjs} +5 -5
  270. package/dist/{renderer-CU8v-LxD.mjs.map → renderer-BlZgyBSo.mjs.map} +1 -1
  271. package/dist/{renderer-B6Oeahe_.mjs → renderer-BqUAyzCZ.mjs} +5 -5
  272. package/dist/{renderer-B6Oeahe_.mjs.map → renderer-BqUAyzCZ.mjs.map} +1 -1
  273. package/dist/{renderer-h62QaJYz.mjs → renderer-Br8km655.mjs} +4 -4
  274. package/dist/{renderer-h62QaJYz.mjs.map → renderer-Br8km655.mjs.map} +1 -1
  275. package/dist/{renderer-sfqZK6L5.mjs → renderer-BsMZ5Iaq.mjs} +4 -4
  276. package/dist/{renderer-sfqZK6L5.mjs.map → renderer-BsMZ5Iaq.mjs.map} +1 -1
  277. package/dist/{renderer-g_1t2je9.mjs → renderer-BtgqTg2K.mjs} +3 -3
  278. package/dist/{renderer-DcvjSolU.mjs → renderer-BuvKGwk3.mjs} +11 -2
  279. package/dist/{renderer-DcvjSolU.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
  280. package/dist/{renderer-BOrMBwQS.mjs → renderer-C-3qhk5x.mjs} +2 -2
  281. package/dist/{renderer-BOrMBwQS.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
  282. package/dist/{renderer-CLAvn9c6.mjs → renderer-C-GTxnfv.mjs} +4 -4
  283. package/dist/{renderer-CLAvn9c6.mjs.map → renderer-C-GTxnfv.mjs.map} +1 -1
  284. package/dist/renderer-C-t7qFKr.mjs +5 -0
  285. package/dist/{renderer-BDZC3o3N.mjs → renderer-C1ctHdXl.mjs} +4 -4
  286. package/dist/{renderer-BDZC3o3N.mjs.map → renderer-C1ctHdXl.mjs.map} +1 -1
  287. package/dist/renderer-C24n-6CX.mjs +6 -0
  288. package/dist/{renderer-pNmI-A9o.mjs → renderer-C7m7Yxgc.mjs} +5 -5
  289. package/dist/{renderer-pNmI-A9o.mjs.map → renderer-C7m7Yxgc.mjs.map} +1 -1
  290. package/dist/{renderer-Bf4-N7k7.mjs → renderer-C9dqx3U7.mjs} +5 -5
  291. package/dist/{renderer-Bf4-N7k7.mjs.map → renderer-C9dqx3U7.mjs.map} +1 -1
  292. package/dist/renderer-CCReX-7M.mjs +5 -0
  293. package/dist/{renderer-JHByuUNb.mjs → renderer-CE4535aW.mjs} +3 -3
  294. package/dist/{renderer-JHByuUNb.mjs.map → renderer-CE4535aW.mjs.map} +1 -1
  295. package/dist/renderer-CIxFQrAm.mjs +5 -0
  296. package/dist/{renderer-ByjaseAo.mjs → renderer-CL-vyXgX.mjs} +5 -5
  297. package/dist/{renderer-ByjaseAo.mjs.map → renderer-CL-vyXgX.mjs.map} +1 -1
  298. package/dist/renderer-CLHBMIqJ.mjs +5 -0
  299. package/dist/renderer-CMJKi-Ye.mjs +5 -0
  300. package/dist/{renderer-B-CMRUag.mjs → renderer-CMnlgAGs.mjs} +4 -4
  301. package/dist/{renderer-B-CMRUag.mjs.map → renderer-CMnlgAGs.mjs.map} +1 -1
  302. package/dist/{renderer-BNHcwxw9.mjs → renderer-CQFMyC_c.mjs} +4 -4
  303. package/dist/{renderer-BNHcwxw9.mjs.map → renderer-CQFMyC_c.mjs.map} +1 -1
  304. package/dist/{renderer-DgPn_SOC.mjs → renderer-CYwVNbUh.mjs} +4 -4
  305. package/dist/{renderer-DgPn_SOC.mjs.map → renderer-CYwVNbUh.mjs.map} +1 -1
  306. package/dist/{renderer-DLPhfwbR.mjs → renderer-CZ5mwBW1.mjs} +3 -3
  307. package/dist/{renderer-DLPhfwbR.mjs.map → renderer-CZ5mwBW1.mjs.map} +1 -1
  308. package/dist/{renderer-4ZUv3X1I.mjs → renderer-C_1eqfI0.mjs} +5 -5
  309. package/dist/{renderer-4ZUv3X1I.mjs.map → renderer-C_1eqfI0.mjs.map} +1 -1
  310. package/dist/renderer-C_H3mHZa.mjs +5 -0
  311. package/dist/{renderer-B1esRxGy.mjs → renderer-CciiDHuU.mjs} +4 -4
  312. package/dist/{renderer-B1esRxGy.mjs.map → renderer-CciiDHuU.mjs.map} +1 -1
  313. package/dist/renderer-CfkTdR5B.mjs +5 -0
  314. package/dist/{renderer-ynFRJh7G.mjs → renderer-CgK7Q1G8.mjs} +3 -3
  315. package/dist/{renderer-CR0mDPYY.mjs → renderer-CnL8Cmmr.mjs} +3 -3
  316. package/dist/renderer-CnhkXJ0R.mjs +5 -0
  317. package/dist/{renderer-fwKnV9zs.mjs → renderer-Cp_HOmp7.mjs} +5 -5
  318. package/dist/{renderer-fwKnV9zs.mjs.map → renderer-Cp_HOmp7.mjs.map} +1 -1
  319. package/dist/renderer-CqpyVsq_.mjs +5 -0
  320. package/dist/renderer-CtWgIpTE.mjs +5 -0
  321. package/dist/{renderer-riIFosX6.mjs → renderer-Cu3iKMSJ.mjs} +5 -5
  322. package/dist/{renderer-riIFosX6.mjs.map → renderer-Cu3iKMSJ.mjs.map} +1 -1
  323. package/dist/{renderer-D4f8f66C.mjs → renderer-CuPAQjDK.mjs} +4 -4
  324. package/dist/{renderer-D4f8f66C.mjs.map → renderer-CuPAQjDK.mjs.map} +1 -1
  325. package/dist/{renderer-CxGx1Lhi.mjs → renderer-CwlY8Tb-.mjs} +3 -3
  326. package/dist/{renderer-CxGx1Lhi.mjs.map → renderer-CwlY8Tb-.mjs.map} +1 -1
  327. package/dist/{renderer-o68mVeyk.mjs → renderer-CxSFvKd1.mjs} +4 -4
  328. package/dist/{renderer-o68mVeyk.mjs.map → renderer-CxSFvKd1.mjs.map} +1 -1
  329. package/dist/{renderer-CrR8Mpxq.mjs → renderer-CyUiXLRa.mjs} +5 -5
  330. package/dist/{renderer-CrR8Mpxq.mjs.map → renderer-CyUiXLRa.mjs.map} +1 -1
  331. package/dist/renderer-CyuKr5ca.mjs +5 -0
  332. package/dist/renderer-CzgcZXKH.mjs +3 -0
  333. package/dist/{renderer-Bx14Wnxl.mjs → renderer-D-GWBoVT.mjs} +58 -4
  334. package/dist/renderer-D-GWBoVT.mjs.map +1 -0
  335. package/dist/{renderer-BwrfKKqw.mjs → renderer-D-fzEZfX.mjs} +4 -4
  336. package/dist/{renderer-BwrfKKqw.mjs.map → renderer-D-fzEZfX.mjs.map} +1 -1
  337. package/dist/renderer-D5yp74NL.mjs +3 -0
  338. package/dist/{renderer-DAn9xiQT.mjs → renderer-D8gN7aqk.mjs} +4 -4
  339. package/dist/{renderer-DAn9xiQT.mjs.map → renderer-D8gN7aqk.mjs.map} +1 -1
  340. package/dist/renderer-D9ON_1Hf.mjs +5 -0
  341. package/dist/renderer-DAnTgh4o.mjs +5 -0
  342. package/dist/{renderer-Dpl6poqD.mjs → renderer-DGOMfyh8.mjs} +2 -2
  343. package/dist/{renderer-Dpl6poqD.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
  344. package/dist/{renderer-Rw87u1Cr.mjs → renderer-DGb_wgTW.mjs} +6 -6
  345. package/dist/{renderer-Rw87u1Cr.mjs.map → renderer-DGb_wgTW.mjs.map} +1 -1
  346. package/dist/{renderer-Co6UFbZB.mjs → renderer-DJPZs_zV.mjs} +5 -5
  347. package/dist/{renderer-Co6UFbZB.mjs.map → renderer-DJPZs_zV.mjs.map} +1 -1
  348. package/dist/renderer-DKJOon6y.d.mts +1 -0
  349. package/dist/{renderer-DOkbn1ot.mjs → renderer-DOZPZTxe.mjs} +5 -5
  350. package/dist/{renderer-DOkbn1ot.mjs.map → renderer-DOZPZTxe.mjs.map} +1 -1
  351. package/dist/{renderer-DaXQgGg3.mjs → renderer-DRal7Goa.mjs} +5 -5
  352. package/dist/{renderer-DaXQgGg3.mjs.map → renderer-DRal7Goa.mjs.map} +1 -1
  353. package/dist/renderer-DWgpivA3.mjs +5 -0
  354. package/dist/{renderer-Bo7shNdU.mjs → renderer-DXFJv_e6.mjs} +4 -4
  355. package/dist/{renderer-Bo7shNdU.mjs.map → renderer-DXFJv_e6.mjs.map} +1 -1
  356. package/dist/renderer-Dh_qNNwR.mjs +5 -0
  357. package/dist/renderer-DkCpXPMP.mjs +5 -0
  358. package/dist/{renderer-eMCTAa9e.mjs → renderer-Dp5ChuOs.mjs} +4 -4
  359. package/dist/{renderer-eMCTAa9e.mjs.map → renderer-Dp5ChuOs.mjs.map} +1 -1
  360. package/dist/{renderer-1uoKiILq.mjs → renderer-DpZballM.mjs} +3 -3
  361. package/dist/{renderer-1uoKiILq.mjs.map → renderer-DpZballM.mjs.map} +1 -1
  362. package/dist/renderer-Dre-6cDR.mjs +5 -0
  363. package/dist/renderer-Ds5z4_HX.mjs +5 -0
  364. package/dist/{renderer-7ow5Acsg.mjs → renderer-DwGlDNOV.mjs} +3 -3
  365. package/dist/{renderer-7ow5Acsg.mjs.map → renderer-DwGlDNOV.mjs.map} +1 -1
  366. package/dist/{renderer-q7q6k_cD.mjs → renderer-DxB_OfLs.mjs} +4 -4
  367. package/dist/{renderer-q7q6k_cD.mjs.map → renderer-DxB_OfLs.mjs.map} +1 -1
  368. package/dist/{renderer-DFJWPqOJ.mjs → renderer-Dz6P-rPI.mjs} +3 -3
  369. package/dist/{renderer-DFJWPqOJ.mjs.map → renderer-Dz6P-rPI.mjs.map} +1 -1
  370. package/dist/{renderer-BURhYcpA.mjs → renderer-FPiLBwj5.mjs} +4 -4
  371. package/dist/{renderer-BURhYcpA.mjs.map → renderer-FPiLBwj5.mjs.map} +1 -1
  372. package/dist/renderer-HGSCOMyP.mjs +5 -0
  373. package/dist/renderer-KMY8W-cJ.mjs +5 -0
  374. package/dist/{renderer-D-QVGphn.mjs → renderer-KgsVk9c6.mjs} +4 -4
  375. package/dist/{renderer-D-QVGphn.mjs.map → renderer-KgsVk9c6.mjs.map} +1 -1
  376. package/dist/{renderer-COcKhouz.mjs → renderer-LXhEPCmy.mjs} +5 -5
  377. package/dist/{renderer-COcKhouz.mjs.map → renderer-LXhEPCmy.mjs.map} +1 -1
  378. package/dist/{renderer-HDj9Zb-O.mjs → renderer-NBMmvqWl.mjs} +20 -7
  379. package/dist/renderer-NBMmvqWl.mjs.map +1 -0
  380. package/dist/{renderer-DE9Jik9K.mjs → renderer-Nnu32rqg.mjs} +3 -3
  381. package/dist/{renderer-DE9Jik9K.mjs.map → renderer-Nnu32rqg.mjs.map} +1 -1
  382. package/dist/renderer-R21YvXz3.mjs +5 -0
  383. package/dist/{renderer-celhuAL7.mjs → renderer-RAq3LnNy.mjs} +3 -3
  384. package/dist/{renderer-celhuAL7.mjs.map → renderer-RAq3LnNy.mjs.map} +1 -1
  385. package/dist/renderer-RtzCz37W.mjs +5 -0
  386. package/dist/{renderer-50JEMaVo.mjs → renderer-RzkU_O1i.mjs} +5 -5
  387. package/dist/{renderer-50JEMaVo.mjs.map → renderer-RzkU_O1i.mjs.map} +1 -1
  388. package/dist/{renderer-Bbxh4N8Y.mjs → renderer-S9tVGneU.mjs} +95 -80
  389. package/dist/renderer-S9tVGneU.mjs.map +1 -0
  390. package/dist/{renderer-BSELd5vU.mjs → renderer-SJyp9-62.mjs} +3 -3
  391. package/dist/{renderer-BSELd5vU.mjs.map → renderer-SJyp9-62.mjs.map} +1 -1
  392. package/dist/{renderer-jnAIhWn_.mjs → renderer-_54hiCq0.mjs} +5 -5
  393. package/dist/{renderer-jnAIhWn_.mjs.map → renderer-_54hiCq0.mjs.map} +1 -1
  394. package/dist/{renderer-88C3QpKL.d.mts → renderer-aRk849b3.d.mts} +2 -2
  395. package/dist/{renderer-88C3QpKL.d.mts.map → renderer-aRk849b3.d.mts.map} +1 -1
  396. package/dist/{renderer-BQetXCcZ.mjs → renderer-dGEMVaZ3.mjs} +4 -4
  397. package/dist/{renderer-BQetXCcZ.mjs.map → renderer-dGEMVaZ3.mjs.map} +1 -1
  398. package/dist/{renderer-RvI3qRUI.mjs → renderer-dRXP2dJU.mjs} +5 -5
  399. package/dist/{renderer-RvI3qRUI.mjs.map → renderer-dRXP2dJU.mjs.map} +1 -1
  400. package/dist/{renderer-D06HxSXO.mjs → renderer-g9SstkTz.mjs} +3 -3
  401. package/dist/renderer-iMrqAjix.mjs +5 -0
  402. package/dist/{renderer-BJ-7WRgO.mjs → renderer-opVuiAQR.mjs} +3 -3
  403. package/dist/{renderer-BJ-7WRgO.mjs.map → renderer-opVuiAQR.mjs.map} +1 -1
  404. package/dist/{renderer-KKk7myX1.mjs → renderer-puQhVfDS.mjs} +5 -5
  405. package/dist/{renderer-KKk7myX1.mjs.map → renderer-puQhVfDS.mjs.map} +1 -1
  406. package/dist/renderer-sMed1u1O.mjs +5 -0
  407. package/dist/renderer-tsAuo46l.mjs +5 -0
  408. package/dist/{renderer-TKZCA0B9.mjs → renderer-vll8LX0I.mjs} +211 -72
  409. package/dist/renderer-vll8LX0I.mjs.map +1 -0
  410. package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs → renderers-CP8CFWDs-BRQyvcut.mjs} +4 -4
  411. package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs.map → renderers-CP8CFWDs-BRQyvcut.mjs.map} +1 -1
  412. package/dist/sam/index.d.mts +3 -3
  413. package/dist/sam/index.mjs +1 -1
  414. package/dist/signals/index.d.mts +7 -7
  415. package/dist/signals/index.mjs +8 -8
  416. package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
  417. package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
  418. package/dist/{src-Bnr8DUC--BRDqRF6I.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +76 -11
  419. package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +1 -0
  420. package/dist/{src-BYp6r-cS.mjs → src-BzFGotRc.mjs} +250 -30
  421. package/dist/src-BzFGotRc.mjs.map +1 -0
  422. package/dist/storage/index.d.mts +206 -0
  423. package/dist/storage/index.d.mts.map +1 -0
  424. package/dist/storage/index.mjs +3 -0
  425. package/package.json +67 -59
  426. package/dist/audio-CYZkDwae.d.mts.map +0 -1
  427. package/dist/cloud-xcfV4J03.mjs +0 -233
  428. package/dist/cloud-xcfV4J03.mjs.map +0 -1
  429. package/dist/dist-CWLLnigL.mjs.map +0 -1
  430. package/dist/dist-CySGkG54.mjs.map +0 -1
  431. package/dist/dist-EQX3TUUl.mjs.map +0 -1
  432. package/dist/gpu-CpkJJLQP.mjs.map +0 -1
  433. package/dist/index-BuiZzc6i.d.mts.map +0 -1
  434. package/dist/index-CEU_Zsb9.d.mts.map +0 -1
  435. package/dist/index-CdCrae-I.d.mts.map +0 -1
  436. package/dist/index-Cro-818i.d.mts.map +0 -1
  437. package/dist/index-D2i9J9Zq.d.mts.map +0 -1
  438. package/dist/index-gOVtTm-P.d.mts.map +0 -1
  439. package/dist/preview-BToKUTtZ.mjs.map +0 -1
  440. package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
  441. package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
  442. package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
  443. package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
  444. package/dist/preview-engine/chunk-C4M3B2Q2.mjs +0 -1
  445. package/dist/preview-engine/chunk-CIVJXFWH.mjs +0 -4
  446. package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
  447. package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
  448. package/dist/preview-engine/chunk-M4QANUJI.mjs +0 -480
  449. package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
  450. package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
  451. package/dist/preview-engine/chunk-XF6DYP6B.mjs +0 -1974
  452. package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
  453. package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
  454. package/dist/preview-engine/renderers-2NGIILMI.mjs +0 -1
  455. package/dist/preview-engine/renderers-466Z77BH.mjs +0 -1
  456. package/dist/preview-engine/renderers-4KRENGZA.mjs +0 -1
  457. package/dist/preview-engine/renderers-4W52BQEU.mjs +0 -1
  458. package/dist/preview-engine/renderers-55PRAS7G.mjs +0 -1
  459. package/dist/preview-engine/renderers-5LLYINHW.mjs +0 -1
  460. package/dist/preview-engine/renderers-63N3Y2XO.mjs +0 -1
  461. package/dist/preview-engine/renderers-6ROVFDIN.mjs +0 -1
  462. package/dist/preview-engine/renderers-A4RVLPMG.mjs +0 -1
  463. package/dist/preview-engine/renderers-A53P4J6O.mjs +0 -1
  464. package/dist/preview-engine/renderers-AFJ3373L.mjs +0 -1
  465. package/dist/preview-engine/renderers-ATFWTA3U.mjs +0 -1
  466. package/dist/preview-engine/renderers-BPYJXHBU.mjs +0 -1
  467. package/dist/preview-engine/renderers-D3ZF7FXT.mjs +0 -1
  468. package/dist/preview-engine/renderers-D7YN6B4B.mjs +0 -1
  469. package/dist/preview-engine/renderers-DBLASKF5.mjs +0 -1
  470. package/dist/preview-engine/renderers-DC5ZYYHM.mjs +0 -1
  471. package/dist/preview-engine/renderers-J6ZEXW5L.mjs +0 -1
  472. package/dist/preview-engine/renderers-JV4MF46Q.mjs +0 -1
  473. package/dist/preview-engine/renderers-KQKH4ZIX.mjs +0 -1
  474. package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
  475. package/dist/preview-engine/renderers-MEITHN4N.mjs +0 -1
  476. package/dist/preview-engine/renderers-MN3HSBTJ.mjs +0 -1
  477. package/dist/preview-engine/renderers-NTG3QGNH.mjs +0 -1
  478. package/dist/preview-engine/renderers-OU4SFMB2.mjs +0 -1
  479. package/dist/preview-engine/renderers-P6TIBJIG.mjs +0 -1
  480. package/dist/preview-engine/renderers-POJWQ7L3.mjs +0 -1
  481. package/dist/preview-engine/renderers-RJ7S6VHD.mjs +0 -1
  482. package/dist/preview-engine/renderers-RJJAJZYN.mjs +0 -1
  483. package/dist/preview-engine/renderers-UEQ733VK.mjs +0 -1
  484. package/dist/preview-engine/renderers-ULO2AW2U.mjs +0 -1
  485. package/dist/preview-engine/renderers-UPVHGHCK.mjs +0 -1
  486. package/dist/preview-engine/renderers-UZHSNNIM.mjs +0 -1
  487. package/dist/preview-engine/renderers-V5KWZL2C.mjs +0 -1
  488. package/dist/preview-engine/renderers-WL372W36.mjs +0 -228
  489. package/dist/preview-engine/renderers-YMXKYOHQ.mjs +0 -1
  490. package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +0 -1
  491. package/dist/program-Bc860ko5.mjs.map +0 -1
  492. package/dist/renderer--Ymc_4XJ.mjs +0 -5
  493. package/dist/renderer-B-OdV-eq.mjs +0 -5
  494. package/dist/renderer-B65fwoA2.mjs +0 -5
  495. package/dist/renderer-B92Ahkcv.mjs +0 -5
  496. package/dist/renderer-B9z2AK31.mjs +0 -5
  497. package/dist/renderer-BIF3Dg3Z.mjs +0 -5
  498. package/dist/renderer-BJUVaIAT.mjs +0 -5
  499. package/dist/renderer-BKRDMbI-.mjs +0 -5
  500. package/dist/renderer-BSwhyVWa.mjs +0 -5
  501. package/dist/renderer-BUqSZn2X.mjs +0 -5
  502. package/dist/renderer-BVKOQarx.d.mts +0 -99
  503. package/dist/renderer-BVKOQarx.d.mts.map +0 -1
  504. package/dist/renderer-BbmvjqK9.mjs +0 -3
  505. package/dist/renderer-Bbxh4N8Y.mjs.map +0 -1
  506. package/dist/renderer-BhsrlGKp.mjs.map +0 -1
  507. package/dist/renderer-Bpe4k_x6.mjs +0 -5
  508. package/dist/renderer-Bx14Wnxl.mjs.map +0 -1
  509. package/dist/renderer-C1NjG0CJ.mjs +0 -5
  510. package/dist/renderer-C7Puyst9.mjs +0 -5
  511. package/dist/renderer-CGA_7320.mjs +0 -5
  512. package/dist/renderer-CLnFkXO7.mjs +0 -5
  513. package/dist/renderer-CMQIT1Kh.mjs +0 -5
  514. package/dist/renderer-CQ1rwjIh.mjs +0 -5
  515. package/dist/renderer-CT8h0boY.mjs +0 -5
  516. package/dist/renderer-Cb0lszt3.mjs +0 -5
  517. package/dist/renderer-Ci7oLye9.mjs +0 -5
  518. package/dist/renderer-CjqXB3CZ.mjs +0 -5
  519. package/dist/renderer-CqTV04zQ.mjs +0 -5
  520. package/dist/renderer-CtWeRtHK.mjs +0 -5
  521. package/dist/renderer-CzolnwCo.mjs +0 -5
  522. package/dist/renderer-D6qhcx_C.mjs +0 -5
  523. package/dist/renderer-DDfEf0jt.mjs +0 -5
  524. package/dist/renderer-DDpa8ztp.mjs +0 -5
  525. package/dist/renderer-DbQBqzmx.mjs +0 -5
  526. package/dist/renderer-DfUcwMKa.mjs +0 -5
  527. package/dist/renderer-DgIjNANM.mjs +0 -6
  528. package/dist/renderer-Dsh6Tgu0.mjs +0 -3
  529. package/dist/renderer-DuIwR9GT.mjs +0 -5
  530. package/dist/renderer-Dv4u2c14.mjs +0 -5
  531. package/dist/renderer-HDj9Zb-O.mjs.map +0 -1
  532. package/dist/renderer-IE1yu3lZ.mjs +0 -5
  533. package/dist/renderer-PY_wnEN0.mjs +0 -5
  534. package/dist/renderer-TKZCA0B9.mjs.map +0 -1
  535. package/dist/renderer-gv24VyzO.mjs +0 -5
  536. package/dist/renderer-nN6lPZf9.mjs +0 -5
  537. package/dist/src-BYp6r-cS.mjs.map +0 -1
  538. package/dist/src-Bnr8DUC--BRDqRF6I.mjs.map +0 -1
  539. /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
  540. /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.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-BIE8fvlv.mjs.map
2220
+ //# sourceMappingURL=dist-DgZpN6IK.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-BIE8fvlv.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-DgZpN6IK.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,4 +1,4 @@
1
- import { F as registerVisionModel, M as varint, O as readVarint, P as VISION_MODELS, _ as fields, b as lengthDelimited, g as encoder, h as createDefaultSessionProvider, j as strings, k as sessionCompute, m as concat, u as VisionModelStore, v as firstString, y as imageToTensor } from "./src-Bnr8DUC--BRDqRF6I.mjs";
1
+ import { F as registerVisionModel, M as varint, O as readVarint, P as VISION_MODELS, _ as fields, b as lengthDelimited, g as encoder, h as createDefaultSessionProvider, j as strings, k as sessionCompute, m as concat, u as VisionModelStore, v as firstString, y as imageToTensor } from "./src-BU6vm9sP-DdTHmCr4.mjs";
2
2
  import { z } from "zod";
3
3
  import { Tokenizer } from "@huggingface/tokenizers";
4
4
 
@@ -1431,4 +1431,4 @@ function seedLogits(logits) {
1431
1431
 
1432
1432
  //#endregion
1433
1433
  export { sam3Run as C, validateSam3Prompts as E, sam3Revision as S, validateSam2Prompts as T, sam3EncoderFiles as _, SAM_MODELS as a, sam3Position as b, Sam3MemoryBank as c, assertSamLicenseAccepted as d, decodeSam2Mask as f, sam3DenseDecoder as g, sam2Tokens as h, SAM_LICENSE_TERMS_URL as i, Sam3TextSelector as l, sam2Revision as m, SAM3_ENCODER as n, Sam2MemoryBank as o, ensureSamModelsRegistered as p, SAM_LICENSE as r, Sam2Tracker as s, SAM2_EXPORTS as t, Sam3Tracker as u, sam3Floats as v, sam3SupportGraphs as w, sam3Precision as x, sam3Mask as y };
1434
- //# sourceMappingURL=dist-Dg9LMWoX.mjs.map
1434
+ //# sourceMappingURL=dist-Kbf-JTry.mjs.map