framefields 2.4.2 → 2.5.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 (504) hide show
  1. package/README.md +26 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-DJeVoE8b.mjs → audio-BluXgSeG.mjs} +1 -1
  5. package/dist/{audio-DJeVoE8b.mjs.map → audio-BluXgSeG.mjs.map} +1 -1
  6. package/dist/{audio-DHuEMOtQ.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
  7. package/dist/{audio-DHuEMOtQ.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
  8. package/dist/{audio-Bb31xJuX.mjs → audio-CMHpfOoS.mjs} +4 -4
  9. package/dist/{audio-Bb31xJuX.mjs.map → audio-CMHpfOoS.mjs.map} +1 -1
  10. package/dist/cli.d.mts +1 -0
  11. package/dist/cli.mjs +221 -0
  12. package/dist/cli.mjs.map +1 -0
  13. package/dist/components/index.d.mts +12 -0
  14. package/dist/components/index.mjs +49 -0
  15. package/dist/{dist-CspOG4V1.mjs → dist-BBUrGwqd.mjs} +24 -3
  16. package/dist/{dist-CspOG4V1.mjs.map → dist-BBUrGwqd.mjs.map} +1 -1
  17. package/dist/{dist-SB9qfAko.mjs → dist-CQZ5_60A.mjs} +2 -2
  18. package/dist/{dist-SB9qfAko.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
  19. package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
  20. package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
  21. package/dist/{dist-ClyC_d66.mjs → dist-DFeF-ygz.mjs} +117 -40
  22. package/dist/dist-DFeF-ygz.mjs.map +1 -0
  23. package/dist/{dist-CxGfrigI.mjs → dist-QMVy31gR.mjs} +23 -4
  24. package/dist/dist-QMVy31gR.mjs.map +1 -0
  25. package/dist/effects/index.d.mts +5 -5
  26. package/dist/effects/index.mjs +36 -36
  27. package/dist/{effects-BOk_2kzM.mjs → effects-mRe-rLte.mjs} +71 -3
  28. package/dist/effects-mRe-rLte.mjs.map +1 -0
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +3 -3
  31. package/dist/{fonts-CsMDfqv9.mjs → fonts-wI3CUYHM.mjs} +2 -2
  32. package/dist/{fonts-CsMDfqv9.mjs.map → fonts-wI3CUYHM.mjs.map} +1 -1
  33. package/dist/{gpu-DtT5I4ME.mjs → gpu-I5fdrflL.mjs} +2 -2
  34. package/dist/{gpu-DtT5I4ME.mjs.map → gpu-I5fdrflL.mjs.map} +1 -1
  35. package/dist/{index-BTPLbjt4.d.mts → index-B-KVpJMb.d.mts} +2 -2
  36. package/dist/{index-BTPLbjt4.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
  37. package/dist/index-BJe_GEyj.d.mts +5968 -0
  38. package/dist/index-BJe_GEyj.d.mts.map +1 -0
  39. package/dist/{index-D-l-yCv6.d.mts → index-BpdVOlsV.d.mts} +3 -3
  40. package/dist/{index-D-l-yCv6.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
  41. package/dist/index-C2f4Hm-p.d.mts +89 -0
  42. package/dist/index-C2f4Hm-p.d.mts.map +1 -0
  43. package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
  44. package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
  45. package/dist/{index-B2Xesdug.d.mts → index-D6-lH1Mx.d.mts} +477 -327
  46. package/dist/index-D6-lH1Mx.d.mts.map +1 -0
  47. package/dist/{index-B3-gwjK6.d.mts → index-DNKM3to5.d.mts} +3 -3
  48. package/dist/{index-B3-gwjK6.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
  49. package/dist/{index-DujpgUUq.d.mts → index-fymoeGNW.d.mts} +245 -152
  50. package/dist/index-fymoeGNW.d.mts.map +1 -0
  51. package/dist/index.d.mts +13 -4593
  52. package/dist/index.mjs +59 -6654
  53. package/dist/preview/index.d.mts +4 -90
  54. package/dist/preview/index.mjs +12 -12
  55. package/dist/{preview-DyGw2b3_.mjs → preview--DEgW67P.mjs} +3 -3
  56. package/dist/{preview-DyGw2b3_.mjs.map → preview--DEgW67P.mjs.map} +1 -1
  57. package/dist/preview-engine/audio.mjs +1 -1
  58. package/dist/preview-engine/{chunk-FHKBALVI.mjs → chunk-24H3QVYB.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-SWXVITCQ.mjs → chunk-25T3M6MI.mjs} +1 -1
  60. package/dist/preview-engine/chunk-2AV7HRRL.mjs +174 -0
  61. package/dist/preview-engine/{chunk-HNNIVJ2K.mjs → chunk-4EOS6ZWW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-67SSYK7D.mjs → chunk-4UI3S3UG.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-LLDIDE5Q.mjs → chunk-5N3GW3NE.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-KAQUNOVB.mjs → chunk-5P764TTF.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-WJJIISQJ.mjs → chunk-7BUKVFWB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-HUKAC5MJ.mjs → chunk-7EHUT5A3.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-34ACEGNW.mjs → chunk-7HTTYP6T.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-6K7US2WD.mjs → chunk-7JYMNGNK.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-NRAZV5OA.mjs → chunk-A5OUYV3I.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-VONDRBA2.mjs → chunk-AJLPRIXB.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-HDGFNBYK.mjs → chunk-ANZDLSSM.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-FFMPC7QA.mjs → chunk-C2TA65CH.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-7QJUC6YY.mjs → chunk-CBQOJAIS.mjs} +14 -14
  74. package/dist/preview-engine/{chunk-GMGGDADT.mjs → chunk-CEIOI4HO.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-RHRMEBNK.mjs → chunk-DKXKOUQR.mjs} +1 -1
  76. package/dist/preview-engine/chunk-DPIED3EG.mjs +1 -0
  77. package/dist/preview-engine/{chunk-QJZKIY4H.mjs → chunk-ENS4KUJV.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-Z6UKUHPU.mjs → chunk-HXHP3UHZ.mjs} +1 -1
  79. package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
  80. package/dist/preview-engine/{chunk-2DDBSI75.mjs → chunk-ILKBHDFB.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-O6NRIXS5.mjs → chunk-JMOJKT5W.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-PZF6T7DM.mjs → chunk-KKBJ7X3T.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-NNQUIVTE.mjs → chunk-KRVXRP5F.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-FLPSWDX4.mjs → chunk-MJN3LOZ7.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-GQLZXCW3.mjs → chunk-MLW6Y4RN.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-KT35IPCF.mjs → chunk-MRDJNDYV.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-RKVB47IA.mjs → chunk-MZAAJXUL.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-FFGBUS76.mjs → chunk-NB55FW7D.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-JX22B2FS.mjs → chunk-NG5WSR3A.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-XOEEGC4Z.mjs → chunk-NVTPJUNG.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-ZKPQGQE3.mjs → chunk-NXKXOSE6.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-WCZ5DKZ4.mjs → chunk-NYEDWUFS.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-WACWOKEP.mjs → chunk-O6LGKH4S.mjs} +1 -1
  94. package/dist/preview-engine/chunk-OLLY3Q7M.mjs +1 -0
  95. package/dist/preview-engine/{chunk-A5OVKZ52.mjs → chunk-OOJAQBS3.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-PJN7DD55.mjs} +3 -3
  97. package/dist/preview-engine/{chunk-R26SY5D4.mjs → chunk-QCUGWPYP.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-LK3T65RB.mjs → chunk-QQJPPGH5.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-3ACCCPBN.mjs → chunk-QVUT3QNF.mjs} +1 -1
  100. package/dist/preview-engine/chunk-RNFYEZLL.mjs +1 -0
  101. package/dist/preview-engine/{chunk-GNG4YH2W.mjs → chunk-TA5OBYRR.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-NQZKBFC6.mjs → chunk-V6DAD4S4.mjs} +14 -14
  103. package/dist/preview-engine/{chunk-5RQHNB6Y.mjs → chunk-VRNN6H6Y.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-C6Z7H2RZ.mjs → chunk-VTE3IISK.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-RDP6QROU.mjs → chunk-VZGDX7II.mjs} +1 -1
  106. package/dist/preview-engine/{chunk-DOCSX45C.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-7LVOSEGN.mjs → chunk-XYRBFLFF.mjs} +1 -1
  108. package/dist/preview-engine/{chunk-LIQA5OOU.mjs → chunk-YMQMPBTL.mjs} +1 -1
  109. package/dist/preview-engine/{chunk-G4J662EL.mjs → chunk-Z4ZO4RVT.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-2GIWWDE4.mjs → chunk-ZFURUTVW.mjs} +1 -1
  111. package/dist/preview-engine/effects.mjs +1 -1
  112. package/dist/preview-engine/framefields.mjs +30 -28
  113. package/dist/preview-engine/player.mjs +5 -5
  114. package/dist/preview-engine/renderers-2CBJYNOC.mjs +1 -0
  115. package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
  116. package/dist/preview-engine/renderers-3AZ5PMGC.mjs +1 -0
  117. package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
  118. package/dist/preview-engine/renderers-3VXNHICC.mjs +1 -0
  119. package/dist/preview-engine/{renderers-BDWVXYTW.mjs → renderers-3ZYXHUSW.mjs} +1 -1
  120. package/dist/preview-engine/renderers-4FONYSBA.mjs +1 -0
  121. package/dist/preview-engine/renderers-54I5SFXR.mjs +1 -0
  122. package/dist/preview-engine/renderers-5LXALKB4.mjs +1 -0
  123. package/dist/preview-engine/renderers-5TICPV2K.mjs +1 -0
  124. package/dist/preview-engine/renderers-5YS5WHAV.mjs +1 -0
  125. package/dist/preview-engine/renderers-6UTRYW7Z.mjs +1 -0
  126. package/dist/preview-engine/{renderers-R4WMM6IX.mjs → renderers-6ZCFR7BL.mjs} +1 -1
  127. package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
  128. package/dist/preview-engine/{renderers-75TL7RLS.mjs → renderers-BOT4H6KJ.mjs} +1 -1
  129. package/dist/preview-engine/{renderers-NJLGPPX7.mjs → renderers-C44CEIYB.mjs} +1 -1
  130. package/dist/preview-engine/{renderers-UDOBX433.mjs → renderers-C4G7X7LD.mjs} +1 -1
  131. package/dist/preview-engine/renderers-CLCPP3TZ.mjs +1 -0
  132. package/dist/preview-engine/{renderers-RKZGYWDG.mjs → renderers-DBRC3SQE.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-HZHEGONW.mjs → renderers-DSICQMRF.mjs} +1 -1
  134. package/dist/preview-engine/renderers-DTZ2AER5.mjs +1 -0
  135. package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
  136. package/dist/preview-engine/{renderers-AZYJFJLO.mjs → renderers-EOIMH7UE.mjs} +1 -1
  137. package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
  138. package/dist/preview-engine/{renderers-CK3ZL3GM.mjs → renderers-GSRKNT75.mjs} +1 -1
  139. package/dist/preview-engine/renderers-GUJTPO37.mjs +1 -0
  140. package/dist/preview-engine/{renderers-TCNPEANL.mjs → renderers-HE42AT5T.mjs} +1 -1
  141. package/dist/preview-engine/{renderers-GUPEJK3O.mjs → renderers-JM7JEVBN.mjs} +1 -1
  142. package/dist/preview-engine/{renderers-FKH5S64C.mjs → renderers-JRU2GNPE.mjs} +1 -1
  143. package/dist/preview-engine/{renderers-IHRFEZNP.mjs → renderers-K6J77OI5.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-IJDQJEE5.mjs → renderers-L7EITUCD.mjs} +1 -1
  145. package/dist/preview-engine/renderers-LGUHDWWB.mjs +1 -0
  146. package/dist/preview-engine/renderers-LGXD24IJ.mjs +1 -0
  147. package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
  148. package/dist/preview-engine/renderers-OBXNUQMP.mjs +1 -0
  149. package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
  150. package/dist/preview-engine/{renderers-7CPYTCNW.mjs → renderers-PJGFJGJS.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-SW7FIEKO.mjs → renderers-PPGOYOID.mjs} +1 -1
  152. package/dist/preview-engine/renderers-PUJRHBUW.mjs +1 -0
  153. package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
  154. package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
  155. package/dist/preview-engine/{renderers-K7B5PQBT.mjs → renderers-QPHOG7QR.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-WR6MKT5S.mjs → renderers-RV62K5JC.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-UMPOVFRA.mjs → renderers-SBX64ERA.mjs} +1 -1
  158. package/dist/preview-engine/renderers-SCJTTOEJ.mjs +1 -0
  159. package/dist/preview-engine/{renderers-FM6A5YR4.mjs → renderers-SD35PBEM.mjs} +1 -1
  160. package/dist/preview-engine/{renderers-LVLVJHOL.mjs → renderers-SIHL5GLI.mjs} +1 -1
  161. package/dist/preview-engine/renderers-SNUVYUDE.mjs +1 -0
  162. package/dist/preview-engine/renderers-SPW4SWZ2.mjs +228 -0
  163. package/dist/preview-engine/renderers-SRKCF3LD.mjs +1 -0
  164. package/dist/preview-engine/{renderers-GAIUTII6.mjs → renderers-T3S7QVM4.mjs} +1 -1
  165. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
  166. package/dist/preview-engine/renderers-UN6YLFHW.mjs +1 -0
  167. package/dist/preview-engine/renderers-UTWKTBZI.mjs +1 -0
  168. package/dist/preview-engine/{renderers-6JZ4HYIU.mjs → renderers-V5MJJH33.mjs} +1 -1
  169. package/dist/preview-engine/{renderers-XKHNBARD.mjs → renderers-V67L3MCY.mjs} +1 -1
  170. package/dist/preview-engine/{renderers-FADYGSLK.mjs → renderers-VYK2BJID.mjs} +1 -1
  171. package/dist/preview-engine/renderers-W6762MNW.mjs +1 -0
  172. package/dist/preview-engine/renderers-W6ZTVA2I.mjs +1 -0
  173. package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
  174. package/dist/preview-engine/{renderers-MBSOKWKB.mjs → renderers-WPBTAU2E.mjs} +1 -1
  175. package/dist/preview-engine/renderers-XP7YFWBV.mjs +1 -0
  176. package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
  177. package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
  178. package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
  179. package/dist/preview-engine/{renderers-4AJWVIJG.mjs → renderers-ZAPIBQZC.mjs} +1 -1
  180. package/dist/preview-engine/renderers-ZRR4TUVQ.mjs +1 -0
  181. package/dist/preview-engine/{renderers-TY7DVI7E.mjs → renderers-ZVKXIQ3E.mjs} +1 -1
  182. package/dist/preview-engine/signals.mjs +1 -1
  183. package/dist/{program-C2cJayA1.mjs → program-CEHCeDpG.mjs} +204 -61
  184. package/dist/program-CEHCeDpG.mjs.map +1 -0
  185. package/dist/registry/annotate.json +30 -0
  186. package/dist/registry/app-frame.json +38 -0
  187. package/dist/registry/backdrop.json +37 -0
  188. package/dist/registry/before-after.json +33 -0
  189. package/dist/registry/callout.json +30 -0
  190. package/dist/registry/captions.json +37 -0
  191. package/dist/registry/card-stack.json +30 -0
  192. package/dist/registry/chat-thread.json +32 -0
  193. package/dist/registry/code-block.json +45 -0
  194. package/dist/registry/confetti.json +29 -0
  195. package/dist/registry/counter.json +36 -0
  196. package/dist/registry/device-frame.json +36 -0
  197. package/dist/registry/focus-zoom.json +32 -0
  198. package/dist/registry/index.json +408 -0
  199. package/dist/registry/logo-reveal.json +37 -0
  200. package/dist/registry/lower-third.json +34 -0
  201. package/dist/registry/meter.json +35 -0
  202. package/dist/registry/mouse-pointer.json +44 -0
  203. package/dist/registry/selection.json +31 -0
  204. package/dist/registry/spotlight.json +28 -0
  205. package/dist/registry/terminal.json +40 -0
  206. package/dist/registry/text-reveal.json +39 -0
  207. package/dist/registry/title-card.json +34 -0
  208. package/dist/registry/toasts.json +28 -0
  209. package/dist/registry/touch-point.json +33 -0
  210. package/dist/registry/waveform.json +29 -0
  211. package/dist/registry/word-cycle.json +32 -0
  212. package/dist/renderer/index.d.mts +2 -2
  213. package/dist/renderer/index.mjs +3 -3
  214. package/dist/{renderer-BMKFzfSQ.mjs → renderer--wMbTRFg.mjs} +4 -4
  215. package/dist/{renderer-BMKFzfSQ.mjs.map → renderer--wMbTRFg.mjs.map} +1 -1
  216. package/dist/{renderer-CDUxAtsk.mjs → renderer-3aLw-la1.mjs} +5 -5
  217. package/dist/{renderer-CDUxAtsk.mjs.map → renderer-3aLw-la1.mjs.map} +1 -1
  218. package/dist/renderer-7vCBWQVP.mjs +5 -0
  219. package/dist/{renderer-DILUmb-e.mjs → renderer-AkRxGnFU.mjs} +5 -5
  220. package/dist/{renderer-DILUmb-e.mjs.map → renderer-AkRxGnFU.mjs.map} +1 -1
  221. package/dist/renderer-B-XgGMCq.mjs +5 -0
  222. package/dist/renderer-B0yabPlf.mjs +5 -0
  223. package/dist/{renderer-CoWfz-9p.mjs → renderer-B1yPBJQc.mjs} +74 -74
  224. package/dist/{renderer-CoWfz-9p.mjs.map → renderer-B1yPBJQc.mjs.map} +1 -1
  225. package/dist/{renderer-BPixWnmY.mjs → renderer-B41jTHFs.mjs} +6 -6
  226. package/dist/{renderer-BPixWnmY.mjs.map → renderer-B41jTHFs.mjs.map} +1 -1
  227. package/dist/{renderer-BTd2sWDC.mjs → renderer-B5HG6Czb.mjs} +4 -4
  228. package/dist/{renderer-BTd2sWDC.mjs.map → renderer-B5HG6Czb.mjs.map} +1 -1
  229. package/dist/{renderer-gRMkQabv.mjs → renderer-B5oJN3A5.mjs} +5 -5
  230. package/dist/{renderer-gRMkQabv.mjs.map → renderer-B5oJN3A5.mjs.map} +1 -1
  231. package/dist/renderer-B9MYevrF.mjs +5 -0
  232. package/dist/renderer-BA2Ko4H1.mjs +3 -0
  233. package/dist/renderer-BCGosndi.mjs +5 -0
  234. package/dist/{renderer-CzRqzp8P.mjs → renderer-BEmDSqXg.mjs} +4 -4
  235. package/dist/{renderer-CzRqzp8P.mjs.map → renderer-BEmDSqXg.mjs.map} +1 -1
  236. package/dist/{renderer-Csss5GFQ.mjs → renderer-BG8jNTHr.mjs} +3 -3
  237. package/dist/{renderer-Csss5GFQ.mjs.map → renderer-BG8jNTHr.mjs.map} +1 -1
  238. package/dist/{renderer-BTigwMQp.mjs → renderer-BMnrBPh1.mjs} +4 -4
  239. package/dist/{renderer-BTigwMQp.mjs.map → renderer-BMnrBPh1.mjs.map} +1 -1
  240. package/dist/{renderer-yyUpCeWb.mjs → renderer-BORzpTQP.mjs} +3 -3
  241. package/dist/{renderer-yyUpCeWb.mjs.map → renderer-BORzpTQP.mjs.map} +1 -1
  242. package/dist/{renderer-RDCax5CK.mjs → renderer-BWtI3wKu.mjs} +4 -4
  243. package/dist/{renderer-RDCax5CK.mjs.map → renderer-BWtI3wKu.mjs.map} +1 -1
  244. package/dist/renderer-BXTHDEnd.mjs +5 -0
  245. package/dist/{renderer-G1pMJH5C.mjs → renderer-Baw30QRI.mjs} +3 -3
  246. package/dist/{renderer-G1pMJH5C.mjs.map → renderer-Baw30QRI.mjs.map} +1 -1
  247. package/dist/renderer-BbJoZ-zL.mjs +5 -0
  248. package/dist/{renderer-Dwu_zfdL.mjs → renderer-BbdgwkDB.mjs} +5 -5
  249. package/dist/{renderer-Dwu_zfdL.mjs.map → renderer-BbdgwkDB.mjs.map} +1 -1
  250. package/dist/{renderer-D6BXR7P4.mjs → renderer-BgOEqtZu.mjs} +3 -3
  251. package/dist/{renderer-D6BXR7P4.mjs.map → renderer-BgOEqtZu.mjs.map} +1 -1
  252. package/dist/{renderer-NizuhHsH.mjs → renderer-Bv0-WmP4.mjs} +4 -4
  253. package/dist/{renderer-NizuhHsH.mjs.map → renderer-Bv0-WmP4.mjs.map} +1 -1
  254. package/dist/renderer-BvcqncI2.mjs +3 -0
  255. package/dist/{renderer-BljMOvry.mjs → renderer-Bvhj-05p.mjs} +4 -4
  256. package/dist/{renderer-BljMOvry.mjs.map → renderer-Bvhj-05p.mjs.map} +1 -1
  257. package/dist/renderer-BxAZKOQy.mjs +5 -0
  258. package/dist/{renderer-92eLJg24.mjs → renderer-BxDhx8KM.mjs} +5 -5
  259. package/dist/{renderer-92eLJg24.mjs.map → renderer-BxDhx8KM.mjs.map} +1 -1
  260. package/dist/renderer-BxgkH__7.mjs +5 -0
  261. package/dist/{renderer-7y5Cj8rV.mjs → renderer-C1XZ0fQ-.mjs} +4 -4
  262. package/dist/{renderer-7y5Cj8rV.mjs.map → renderer-C1XZ0fQ-.mjs.map} +1 -1
  263. package/dist/{renderer-UcdqCarR.mjs → renderer-C8KEfda3.mjs} +4 -4
  264. package/dist/{renderer-UcdqCarR.mjs.map → renderer-C8KEfda3.mjs.map} +1 -1
  265. package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
  266. package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
  267. package/dist/{renderer-B3e4LSE6.mjs → renderer-CF25oNd3.mjs} +5 -5
  268. package/dist/{renderer-B3e4LSE6.mjs.map → renderer-CF25oNd3.mjs.map} +1 -1
  269. package/dist/renderer-CFEvikBH.mjs +5 -0
  270. package/dist/{renderer-DzSMeQBC.mjs → renderer-CHFUJyul.mjs} +5 -5
  271. package/dist/{renderer-DzSMeQBC.mjs.map → renderer-CHFUJyul.mjs.map} +1 -1
  272. package/dist/{renderer-ByCX4JYg.mjs → renderer-CKGOKBZi.mjs} +5 -5
  273. package/dist/{renderer-ByCX4JYg.mjs.map → renderer-CKGOKBZi.mjs.map} +1 -1
  274. package/dist/{renderer-If8JOkBi.mjs → renderer-CNs1vBUy.mjs} +4 -4
  275. package/dist/{renderer-If8JOkBi.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
  276. package/dist/{index-B1XcyMm8.d.mts → renderer-COXKPofU.d.mts} +18 -18
  277. package/dist/renderer-COXKPofU.d.mts.map +1 -0
  278. package/dist/{renderer-CNuVJ4nG.mjs → renderer-COZCwiIr.mjs} +3 -3
  279. package/dist/{renderer-CNuVJ4nG.mjs.map → renderer-COZCwiIr.mjs.map} +1 -1
  280. package/dist/{renderer-V5uEyDFz.mjs → renderer-CPmoA87K.mjs} +4 -4
  281. package/dist/{renderer-V5uEyDFz.mjs.map → renderer-CPmoA87K.mjs.map} +1 -1
  282. package/dist/{renderer-Cw6Sagih.mjs → renderer-CYZb9uoO.mjs} +4 -4
  283. package/dist/{renderer-Cw6Sagih.mjs.map → renderer-CYZb9uoO.mjs.map} +1 -1
  284. package/dist/renderer-C_u9B-_7.mjs +5 -0
  285. package/dist/{renderer-BwpgDLYO.mjs → renderer-CaUJlGoB.mjs} +5 -5
  286. package/dist/{renderer-BwpgDLYO.mjs.map → renderer-CaUJlGoB.mjs.map} +1 -1
  287. package/dist/{renderer-DjwITRvg.mjs → renderer-CcS3Zntx.mjs} +3 -3
  288. package/dist/{renderer-BDCy8NgT.mjs → renderer-CddpdCL3.mjs} +4 -4
  289. package/dist/{renderer-BDCy8NgT.mjs.map → renderer-CddpdCL3.mjs.map} +1 -1
  290. package/dist/{renderer-BV48PFjX.mjs → renderer-Cg-d78nf.mjs} +192 -27
  291. package/dist/renderer-Cg-d78nf.mjs.map +1 -0
  292. package/dist/renderer-Cgx_qzGT.mjs +5 -0
  293. package/dist/{renderer-DScyMHpJ.mjs → renderer-ChNCtBMR.mjs} +3 -3
  294. package/dist/{renderer-DScyMHpJ.mjs.map → renderer-ChNCtBMR.mjs.map} +1 -1
  295. package/dist/renderer-ClOkY1Ny.mjs +5 -0
  296. package/dist/{renderer-DyyIXLQK.mjs → renderer-CrU0kbiB.mjs} +5 -5
  297. package/dist/{renderer-DyyIXLQK.mjs.map → renderer-CrU0kbiB.mjs.map} +1 -1
  298. package/dist/renderer-CtDub_ig.mjs +5 -0
  299. package/dist/{renderer-ut1GqW89.mjs → renderer-CyhSWLKq.mjs} +4 -4
  300. package/dist/{renderer-ut1GqW89.mjs.map → renderer-CyhSWLKq.mjs.map} +1 -1
  301. package/dist/{renderer-DaSxr9fM.mjs → renderer-D-bmSKv4.mjs} +5 -5
  302. package/dist/{renderer-DaSxr9fM.mjs.map → renderer-D-bmSKv4.mjs.map} +1 -1
  303. package/dist/renderer-D0duAhCo.mjs +5 -0
  304. package/dist/{renderer-BBAbZfBl.mjs → renderer-D2tdNoM6.mjs} +6 -6
  305. package/dist/{renderer-BBAbZfBl.mjs.map → renderer-D2tdNoM6.mjs.map} +1 -1
  306. package/dist/renderer-D4wM1dqg.mjs +6 -0
  307. package/dist/renderer-D5U3d09T.mjs +5 -0
  308. package/dist/{renderer-B1QREs7J.mjs → renderer-D86Y5YYi.mjs} +5 -5
  309. package/dist/{renderer-B1QREs7J.mjs.map → renderer-D86Y5YYi.mjs.map} +1 -1
  310. package/dist/{renderer-Cbsnj9vV.mjs → renderer-D8D7dKxq.mjs} +4 -4
  311. package/dist/{renderer-Cbsnj9vV.mjs.map → renderer-D8D7dKxq.mjs.map} +1 -1
  312. package/dist/{renderer-D0vom99O.mjs → renderer-DATAjI6x.mjs} +3 -3
  313. package/dist/{renderer-D0vom99O.mjs.map → renderer-DATAjI6x.mjs.map} +1 -1
  314. package/dist/{renderer-X0eKSD7v.mjs → renderer-DGhCIVI4.mjs} +5 -5
  315. package/dist/{renderer-X0eKSD7v.mjs.map → renderer-DGhCIVI4.mjs.map} +1 -1
  316. package/dist/{renderer-CJ4bxCld.mjs → renderer-DILjs1tz.mjs} +3 -3
  317. package/dist/{renderer-DjBCWxYy.mjs → renderer-DIyzKouj.mjs} +4 -4
  318. package/dist/{renderer-DjBCWxYy.mjs.map → renderer-DIyzKouj.mjs.map} +1 -1
  319. package/dist/{renderer-BwwZB2mt.mjs → renderer-DJ78Bgv7.mjs} +5 -5
  320. package/dist/{renderer-BwwZB2mt.mjs.map → renderer-DJ78Bgv7.mjs.map} +1 -1
  321. package/dist/renderer-DKqFxYfP.mjs +5 -0
  322. package/dist/renderer-DQZNI1zf.mjs +5 -0
  323. package/dist/{renderer-B4RpSd4A.mjs → renderer-DVnrUnkh.mjs} +3 -3
  324. package/dist/{renderer-B4RpSd4A.mjs.map → renderer-DVnrUnkh.mjs.map} +1 -1
  325. package/dist/{renderer-C1E5Rt5q.mjs → renderer-DWtquP0s.mjs} +4 -4
  326. package/dist/{renderer-C1E5Rt5q.mjs.map → renderer-DWtquP0s.mjs.map} +1 -1
  327. package/dist/renderer-DXITcVbS.mjs +5 -0
  328. package/dist/renderer-DY1QgdDC.mjs +5 -0
  329. package/dist/renderer-DYEz06xn.mjs +5 -0
  330. package/dist/renderer-D_2OrSMc.mjs +5 -0
  331. package/dist/renderer-DcCl9CO6.mjs +5 -0
  332. package/dist/{renderer-rXgqgAjw.mjs → renderer-DetTl6bQ.mjs} +3 -3
  333. package/dist/{renderer-rXgqgAjw.mjs.map → renderer-DetTl6bQ.mjs.map} +1 -1
  334. package/dist/{renderer-BjCHW9Jp.mjs → renderer-DfxwJVjW.mjs} +3 -3
  335. package/dist/{renderer-Cv4lchUP.mjs → renderer-DhQZiRL3.mjs} +5 -5
  336. package/dist/{renderer-Cv4lchUP.mjs.map → renderer-DhQZiRL3.mjs.map} +1 -1
  337. package/dist/{renderer-EZp_IIPK.mjs → renderer-Djn4BYtz.mjs} +5 -5
  338. package/dist/{renderer-EZp_IIPK.mjs.map → renderer-Djn4BYtz.mjs.map} +1 -1
  339. package/dist/{renderer-Bkrk0M0r.mjs → renderer-DkS6cblv.mjs} +5 -5
  340. package/dist/{renderer-Bkrk0M0r.mjs.map → renderer-DkS6cblv.mjs.map} +1 -1
  341. package/dist/{renderer-DKfwlE4e.mjs → renderer-DkeJefRk.mjs} +5 -5
  342. package/dist/{renderer-DKfwlE4e.mjs.map → renderer-DkeJefRk.mjs.map} +1 -1
  343. package/dist/renderer-DotZXhrh.mjs +5 -0
  344. package/dist/renderer-DpYDVTzs.mjs +5 -0
  345. package/dist/renderer-DpZxLVQF.mjs +5 -0
  346. package/dist/{renderer-Za4D9hej.mjs → renderer-DqabtpGN.mjs} +5 -5
  347. package/dist/{renderer-Za4D9hej.mjs.map → renderer-DqabtpGN.mjs.map} +1 -1
  348. package/dist/{renderer-DaqWTx7s.mjs → renderer-DqdD8gzX.mjs} +5 -5
  349. package/dist/{renderer-DaqWTx7s.mjs.map → renderer-DqdD8gzX.mjs.map} +1 -1
  350. package/dist/{renderer-DZJJHCtm.mjs → renderer-DstROEvX.mjs} +4 -4
  351. package/dist/{renderer-DZJJHCtm.mjs.map → renderer-DstROEvX.mjs.map} +1 -1
  352. package/dist/{renderer-BjvNEbML.mjs → renderer-DuawUm8D.mjs} +3 -3
  353. package/dist/{renderer-BjvNEbML.mjs.map → renderer-DuawUm8D.mjs.map} +1 -1
  354. package/dist/{renderer-CDOobs18.mjs → renderer-DvIWhLnY.mjs} +5 -5
  355. package/dist/{renderer-CDOobs18.mjs.map → renderer-DvIWhLnY.mjs.map} +1 -1
  356. package/dist/renderer-DvJbouz0.mjs +5 -0
  357. package/dist/{renderer-apeDrNXM.mjs → renderer-Dw2ZFwDT.mjs} +5 -5
  358. package/dist/{renderer-apeDrNXM.mjs.map → renderer-Dw2ZFwDT.mjs.map} +1 -1
  359. package/dist/{renderer-CxqPeATd.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
  360. package/dist/{renderer-CxqPeATd.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
  361. package/dist/{renderer-CcoUNzlQ.mjs → renderer-DxLkZGUK.mjs} +4 -4
  362. package/dist/{renderer-CcoUNzlQ.mjs.map → renderer-DxLkZGUK.mjs.map} +1 -1
  363. package/dist/{renderer-CeiCJCg4.mjs → renderer-GY7D1oAn.mjs} +4 -4
  364. package/dist/{renderer-CeiCJCg4.mjs.map → renderer-GY7D1oAn.mjs.map} +1 -1
  365. package/dist/{renderer-D2-V9nQq.mjs → renderer-JaSEubRQ.mjs} +4 -4
  366. package/dist/{renderer-D2-V9nQq.mjs.map → renderer-JaSEubRQ.mjs.map} +1 -1
  367. package/dist/{renderer-CqtIbe5n.mjs → renderer-MrvH4L7b.mjs} +4 -4
  368. package/dist/{renderer-CqtIbe5n.mjs.map → renderer-MrvH4L7b.mjs.map} +1 -1
  369. package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
  370. package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
  371. package/dist/renderer-S305xm67.mjs +5 -0
  372. package/dist/renderer-TgUloP-y.mjs +5 -0
  373. package/dist/{renderer-DFJQ6v0F.mjs → renderer-VcPoZAM2.mjs} +3 -3
  374. package/dist/{renderer-DFJQ6v0F.mjs.map → renderer-VcPoZAM2.mjs.map} +1 -1
  375. package/dist/{renderer-DcBGYN3V.mjs → renderer-ZGJWn-_L.mjs} +4 -4
  376. package/dist/{renderer-DcBGYN3V.mjs.map → renderer-ZGJWn-_L.mjs.map} +1 -1
  377. package/dist/{renderer-DTw-W0Yz.mjs → renderer-aXwxbXcE.mjs} +5 -5
  378. package/dist/{renderer-DTw-W0Yz.mjs.map → renderer-aXwxbXcE.mjs.map} +1 -1
  379. package/dist/renderer-gZ5SMvbU.mjs +5 -0
  380. package/dist/{renderer-CCGzT6bX.mjs → renderer-gniIzAsk.mjs} +3 -3
  381. package/dist/renderer-kEpx7pUy.mjs +5 -0
  382. package/dist/{renderer-BkWd4-YO.mjs → renderer-mSlww_MA.mjs} +4 -4
  383. package/dist/{renderer-BkWd4-YO.mjs.map → renderer-mSlww_MA.mjs.map} +1 -1
  384. package/dist/{renderer-B0gPTXhe.mjs → renderer-mWfgWQy_.mjs} +5 -5
  385. package/dist/{renderer-B0gPTXhe.mjs.map → renderer-mWfgWQy_.mjs.map} +1 -1
  386. package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
  387. package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
  388. package/dist/renderer-oPWZmzua.mjs +5 -0
  389. package/dist/{renderer--ruTGlPo.mjs → renderer-pcpDwv3K.mjs} +4 -4
  390. package/dist/{renderer--ruTGlPo.mjs.map → renderer-pcpDwv3K.mjs.map} +1 -1
  391. package/dist/renderer-qCNOffLy.mjs +5 -0
  392. package/dist/{renderer-DwVOxdzC.mjs → renderer-vPJRRVNN.mjs} +5 -5
  393. package/dist/{renderer-DwVOxdzC.mjs.map → renderer-vPJRRVNN.mjs.map} +1 -1
  394. package/dist/{renderer-JvcR1vYI.mjs → renderer-vQrX7Qsw.mjs} +3 -3
  395. package/dist/{renderer-JvcR1vYI.mjs.map → renderer-vQrX7Qsw.mjs.map} +1 -1
  396. package/dist/{renderer-Bi6W4RSn.mjs → renderer-wld_ZR0-.mjs} +3 -3
  397. package/dist/{renderer-Bi6W4RSn.mjs.map → renderer-wld_ZR0-.mjs.map} +1 -1
  398. package/dist/renderer-xEVoeq12.mjs +5 -0
  399. package/dist/renderer-ypw8fzVD.mjs +5 -0
  400. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs → renderers-CP8CFWDs-DgKdGMvS.mjs} +4 -4
  401. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs.map → renderers-CP8CFWDs-DgKdGMvS.mjs.map} +1 -1
  402. package/dist/signals/index.d.mts +6 -6
  403. package/dist/signals/index.mjs +8 -8
  404. package/dist/{signals-C5nOrRmn.mjs → signals-Cf9mfNGE.mjs} +4 -4
  405. package/dist/{signals-C5nOrRmn.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
  406. package/dist/src-CU_7ui4I.mjs +8373 -0
  407. package/dist/src-CU_7ui4I.mjs.map +1 -0
  408. package/package.json +68 -58
  409. package/dist/dist-ClyC_d66.mjs.map +0 -1
  410. package/dist/dist-CxGfrigI.mjs.map +0 -1
  411. package/dist/effects-BOk_2kzM.mjs.map +0 -1
  412. package/dist/index-B1XcyMm8.d.mts.map +0 -1
  413. package/dist/index-B2Xesdug.d.mts.map +0 -1
  414. package/dist/index-DujpgUUq.d.mts.map +0 -1
  415. package/dist/index.d.mts.map +0 -1
  416. package/dist/index.mjs.map +0 -1
  417. package/dist/preview/index.d.mts.map +0 -1
  418. package/dist/preview-engine/chunk-AQNTIWTK.mjs +0 -1
  419. package/dist/preview-engine/chunk-CPFPY35C.mjs +0 -1
  420. package/dist/preview-engine/chunk-UZBVCYRY.mjs +0 -174
  421. package/dist/preview-engine/chunk-XDMZP3E2.mjs +0 -1
  422. package/dist/preview-engine/chunk-YKMBRUAE.mjs +0 -1
  423. package/dist/preview-engine/renderers-3CXFGRE7.mjs +0 -1
  424. package/dist/preview-engine/renderers-3FC3WCJN.mjs +0 -1
  425. package/dist/preview-engine/renderers-3S2FM33K.mjs +0 -1
  426. package/dist/preview-engine/renderers-53ZTBI3C.mjs +0 -1
  427. package/dist/preview-engine/renderers-5USBVCMQ.mjs +0 -1
  428. package/dist/preview-engine/renderers-65G6BLEA.mjs +0 -1
  429. package/dist/preview-engine/renderers-7XU7BXE7.mjs +0 -1
  430. package/dist/preview-engine/renderers-BFXM32BC.mjs +0 -1
  431. package/dist/preview-engine/renderers-CDXHCWWK.mjs +0 -1
  432. package/dist/preview-engine/renderers-CLUN7WU6.mjs +0 -1
  433. package/dist/preview-engine/renderers-DTB4HEXU.mjs +0 -1
  434. package/dist/preview-engine/renderers-EFKNRLYF.mjs +0 -1
  435. package/dist/preview-engine/renderers-EI6MQ2EL.mjs +0 -228
  436. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +0 -1
  437. package/dist/preview-engine/renderers-GTUO5LIV.mjs +0 -1
  438. package/dist/preview-engine/renderers-HSJIVP57.mjs +0 -1
  439. package/dist/preview-engine/renderers-IHACBWXI.mjs +0 -1
  440. package/dist/preview-engine/renderers-IO3BVVJ7.mjs +0 -1
  441. package/dist/preview-engine/renderers-IR772VSN.mjs +0 -1
  442. package/dist/preview-engine/renderers-L6TRJOXA.mjs +0 -1
  443. package/dist/preview-engine/renderers-N6H6RSF2.mjs +0 -1
  444. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +0 -1
  445. package/dist/preview-engine/renderers-O6V3OEKX.mjs +0 -1
  446. package/dist/preview-engine/renderers-OODA27UH.mjs +0 -1
  447. package/dist/preview-engine/renderers-RIGW33ZI.mjs +0 -1
  448. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +0 -1
  449. package/dist/preview-engine/renderers-SKB2GGKS.mjs +0 -1
  450. package/dist/preview-engine/renderers-T4D2TASM.mjs +0 -1
  451. package/dist/preview-engine/renderers-T74XV36Q.mjs +0 -1
  452. package/dist/preview-engine/renderers-TOPW2UM3.mjs +0 -1
  453. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +0 -1
  454. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +0 -1
  455. package/dist/preview-engine/renderers-UWKSTSTA.mjs +0 -1
  456. package/dist/preview-engine/renderers-VHPAOUTA.mjs +0 -1
  457. package/dist/preview-engine/renderers-YEQRQJFC.mjs +0 -1
  458. package/dist/preview-engine/renderers-YRZ3WODX.mjs +0 -1
  459. package/dist/preview-engine/renderers-YUTFGVRY.mjs +0 -1
  460. package/dist/preview-engine/renderers-YXOTRKPA.mjs +0 -1
  461. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +0 -1
  462. package/dist/preview-engine/renderers-ZW75LQTR.mjs +0 -1
  463. package/dist/program-C2cJayA1.mjs.map +0 -1
  464. package/dist/renderer-BAhZeUUn.mjs +0 -5
  465. package/dist/renderer-BHAE_dKq.mjs +0 -5
  466. package/dist/renderer-BNYZY3FE.mjs +0 -5
  467. package/dist/renderer-BSvubMvI.mjs +0 -5
  468. package/dist/renderer-BV48PFjX.mjs.map +0 -1
  469. package/dist/renderer-B_M_yhTc.mjs +0 -5
  470. package/dist/renderer-B_xSsTuy.mjs +0 -5
  471. package/dist/renderer-BePHurAU.mjs +0 -5
  472. package/dist/renderer-BfZquJrW.mjs +0 -5
  473. package/dist/renderer-BuY5ypB2.mjs +0 -5
  474. package/dist/renderer-BvOQgFHo.mjs +0 -5
  475. package/dist/renderer-C7NkSvUz.mjs +0 -5
  476. package/dist/renderer-CIuxV2q1.mjs +0 -5
  477. package/dist/renderer-CKp97tSQ.mjs +0 -5
  478. package/dist/renderer-CY89dTFR.mjs +0 -5
  479. package/dist/renderer-C_B_4Bl0.mjs +0 -5
  480. package/dist/renderer-Cd87JOjP.mjs +0 -5
  481. package/dist/renderer-Cev6orIK.mjs +0 -6
  482. package/dist/renderer-Cewf6UPh.mjs +0 -5
  483. package/dist/renderer-CnHsMLIv.mjs +0 -5
  484. package/dist/renderer-CoxuAr7b.mjs +0 -5
  485. package/dist/renderer-CrdG7trA.mjs +0 -5
  486. package/dist/renderer-Cu5MFgbk.mjs +0 -5
  487. package/dist/renderer-CuOjhtoo.mjs +0 -5
  488. package/dist/renderer-D2_0g6Oi.mjs +0 -5
  489. package/dist/renderer-D62FwolD.mjs +0 -5
  490. package/dist/renderer-DDNY9N7I.mjs +0 -5
  491. package/dist/renderer-DF_ONJ3v.mjs +0 -5
  492. package/dist/renderer-DbzrVHEE.mjs +0 -5
  493. package/dist/renderer-DlYchp1v.mjs +0 -5
  494. package/dist/renderer-DqcUNP8J.mjs +0 -5
  495. package/dist/renderer-DqvFhEQj.mjs +0 -5
  496. package/dist/renderer-DuuOlYIG.mjs +0 -3
  497. package/dist/renderer-DxBav2bE.mjs +0 -5
  498. package/dist/renderer-GvSRoQje.mjs +0 -5
  499. package/dist/renderer-KP7Ita9g.mjs +0 -5
  500. package/dist/renderer-Pc8dyNXt.mjs +0 -5
  501. package/dist/renderer-ezRCmU09.mjs +0 -3
  502. package/dist/renderer-h6ev1ogx.mjs +0 -5
  503. /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
  504. /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { C as FileDataSchema, J as SingleOutputGenericSchema, ct as VirtualMediaDataSchema, mt as createOutputItemSchema } from "./dist-ClyC_d66.mjs";
1
+ import { C as FileDataSchema, J as SingleOutputGenericSchema, ct as VirtualMediaDataSchema, ht as createOutputItemSchema } from "./dist-DFeF-ygz.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region ../node-sdk/dist/index.mjs
@@ -99,4 +99,4 @@ const OperationInputsSchema = z.record(z.string(), z.object({
99
99
 
100
100
  //#endregion
101
101
  export { configBuilder as a, VideoResultSchema as i, ImageResultSchema as n, SignalResultSchema as r, ColorSchema as t };
102
- //# sourceMappingURL=dist-SB9qfAko.mjs.map
102
+ //# sourceMappingURL=dist-CQZ5_60A.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-SB9qfAko.mjs","names":["ConfigBuilder"],"sources":["../../node-sdk/dist/index.mjs"],"sourcesContent":["import { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry } from \"./renderer.mjs\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.ts\nvar ConfigBuilder = class ConfigBuilder {\n\tconstructor(shape = {}, options = { strict: true }) {\n\t\tthis.shape = shape;\n\t\tthis.options = options;\n\t}\n\tfield(key, schema, options) {\n\t\tconst withMeta = options ? schema.meta({ ...options }) : schema;\n\t\treturn new ConfigBuilder({\n\t\t\t...this.shape,\n\t\t\t[key]: withMeta\n\t\t}, this.options);\n\t}\n\tbuild() {\n\t\tconst base = z.object(this.shape);\n\t\treturn { schema: this.options.strict !== false ? base.strict() : base };\n\t}\n};\nfunction configBuilder(options = { strict: true }) {\n\treturn new ConfigBuilder({}, options);\n}\n\n//#endregion\n//#region shared/schemas.ts\nconst COMPOSITE_OPERATIONS = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\"\n];\nconst GlobalCompositeOperation = z.enum(COMPOSITE_OPERATIONS);\nconst ColorSchema = z.string().optional();\nconst PercentageSchema = z.number().min(0).max(100);\nconst DimensionSchema = z.number().min(0).optional();\nconst AnimationSchema = z.object({ animations: z.array(z.object({\n\tid: z.string(),\n\ttype: z.enum([\n\t\t\"fade-in\",\n\t\t\"fade-out\",\n\t\t\"slide-in-left\",\n\t\t\"slide-in-right\",\n\t\t\"slide-in-top\",\n\t\t\"slide-in-bottom\",\n\t\t\"zoom-in\",\n\t\t\"zoom-out\",\n\t\t\"rotate-cw\",\n\t\t\"rotate-ccw\",\n\t\t\"bounce\",\n\t\t\"shake\"\n\t]),\n\tvalue: z.number()\n})).optional() });\nconst StrokeSchema = z.object({\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional().default(\"inside\"),\n\tstrokeRadius: z.number().min(0).optional()\n});\nconst ImageResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Image\"), FileDataSchema));\nconst VideoResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Video\"), VirtualMediaDataSchema));\nconst AudioResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Audio\"), VirtualMediaDataSchema));\nconst TextResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Text\"), z.string()));\nconst NumberResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Number\"), z.number()));\nconst SignalResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Signal\"), z.unknown()));\n/** The `inputs` map an operation carries: one entry per connected handle. */\nconst OperationInputsSchema = z.record(z.string(), z.object({\n\tconnectionValid: z.boolean(),\n\toutputItem: z.object({\n\t\ttype: z.string(),\n\t\tdata: z.unknown()\n\t}).nullable().optional()\n}));\n\n//#endregion\nexport { AnimationSchema, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, FileDataSchema, GlobalCompositeOperation, ImageResultSchema, MultiOutputGenericSchema, NumberResultSchema, OperationInputsSchema, PercentageSchema, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResultSchema, VideoResultSchema, VirtualMediaDataSchema, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=index.mjs.map"],"mappings":";;;;AAKA,IAAI,gBAAgB,MAAMA,gBAAc;CACvC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,MAAM,EAAE;AACnD,OAAK,QAAQ;AACb,OAAK,UAAU;;CAEhB,MAAM,KAAK,QAAQ,SAAS;EAC3B,MAAM,WAAW,UAAU,OAAO,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG;AACzD,SAAO,IAAIA,gBAAc;GACxB,GAAG,KAAK;IACP,MAAM;GACP,EAAE,KAAK,QAAQ;;CAEjB,QAAQ;EACP,MAAM,OAAO,EAAE,OAAO,KAAK,MAAM;AACjC,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,QAAQ,GAAG,MAAM;;;AAGzE,SAAS,cAAc,UAAU,EAAE,QAAQ,MAAM,EAAE;AAClD,QAAO,IAAI,cAAc,EAAE,EAAE,QAAQ;;AAKtC,MAAM,uBAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,2BAA2B,EAAE,KAAK,qBAAqB;AAC7D,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU;AACzC,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AACnD,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;AACpD,MAAM,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;CAC/D,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACjB,MAAM,eAAe,EAAE,OAAO;CAC7B,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,aAAa,EAAE,KAAK;EACnB;EACA;EACA;EACA,CAAC,CAAC,UAAU,CAAC,QAAQ,SAAS;CAC/B,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1C,CAAC;AACF,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,eAAe,CAAC;AAC/G,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,mBAAmB,0BAA0B,uBAAuB,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7G,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;;AAE9G,MAAM,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO;CAC3D,iBAAiB,EAAE,SAAS;CAC5B,YAAY,EAAE,OAAO;EACpB,MAAM,EAAE,QAAQ;EAChB,MAAM,EAAE,SAAS;EACjB,CAAC,CAAC,UAAU,CAAC,UAAU;CACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"dist-CQZ5_60A.mjs","names":["ConfigBuilder"],"sources":["../../node-sdk/dist/index.mjs"],"sourcesContent":["import { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry } from \"./renderer.mjs\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.ts\nvar ConfigBuilder = class ConfigBuilder {\n\tconstructor(shape = {}, options = { strict: true }) {\n\t\tthis.shape = shape;\n\t\tthis.options = options;\n\t}\n\tfield(key, schema, options) {\n\t\tconst withMeta = options ? schema.meta({ ...options }) : schema;\n\t\treturn new ConfigBuilder({\n\t\t\t...this.shape,\n\t\t\t[key]: withMeta\n\t\t}, this.options);\n\t}\n\tbuild() {\n\t\tconst base = z.object(this.shape);\n\t\treturn { schema: this.options.strict !== false ? base.strict() : base };\n\t}\n};\nfunction configBuilder(options = { strict: true }) {\n\treturn new ConfigBuilder({}, options);\n}\n\n//#endregion\n//#region shared/schemas.ts\nconst COMPOSITE_OPERATIONS = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\"\n];\nconst GlobalCompositeOperation = z.enum(COMPOSITE_OPERATIONS);\nconst ColorSchema = z.string().optional();\nconst PercentageSchema = z.number().min(0).max(100);\nconst DimensionSchema = z.number().min(0).optional();\nconst AnimationSchema = z.object({ animations: z.array(z.object({\n\tid: z.string(),\n\ttype: z.enum([\n\t\t\"fade-in\",\n\t\t\"fade-out\",\n\t\t\"slide-in-left\",\n\t\t\"slide-in-right\",\n\t\t\"slide-in-top\",\n\t\t\"slide-in-bottom\",\n\t\t\"zoom-in\",\n\t\t\"zoom-out\",\n\t\t\"rotate-cw\",\n\t\t\"rotate-ccw\",\n\t\t\"bounce\",\n\t\t\"shake\"\n\t]),\n\tvalue: z.number()\n})).optional() });\nconst StrokeSchema = z.object({\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional().default(\"inside\"),\n\tstrokeRadius: z.number().min(0).optional()\n});\nconst ImageResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Image\"), FileDataSchema));\nconst VideoResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Video\"), VirtualMediaDataSchema));\nconst AudioResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Audio\"), VirtualMediaDataSchema));\nconst TextResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Text\"), z.string()));\nconst NumberResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Number\"), z.number()));\nconst SignalResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Signal\"), z.unknown()));\n/** The `inputs` map an operation carries: one entry per connected handle. */\nconst OperationInputsSchema = z.record(z.string(), z.object({\n\tconnectionValid: z.boolean(),\n\toutputItem: z.object({\n\t\ttype: z.string(),\n\t\tdata: z.unknown()\n\t}).nullable().optional()\n}));\n\n//#endregion\nexport { AnimationSchema, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, FileDataSchema, GlobalCompositeOperation, ImageResultSchema, MultiOutputGenericSchema, NumberResultSchema, OperationInputsSchema, PercentageSchema, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResultSchema, VideoResultSchema, VirtualMediaDataSchema, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=index.mjs.map"],"mappings":";;;;AAKA,IAAI,gBAAgB,MAAMA,gBAAc;CACvC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,MAAM,EAAE;AACnD,OAAK,QAAQ;AACb,OAAK,UAAU;;CAEhB,MAAM,KAAK,QAAQ,SAAS;EAC3B,MAAM,WAAW,UAAU,OAAO,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG;AACzD,SAAO,IAAIA,gBAAc;GACxB,GAAG,KAAK;IACP,MAAM;GACP,EAAE,KAAK,QAAQ;;CAEjB,QAAQ;EACP,MAAM,OAAO,EAAE,OAAO,KAAK,MAAM;AACjC,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,QAAQ,GAAG,MAAM;;;AAGzE,SAAS,cAAc,UAAU,EAAE,QAAQ,MAAM,EAAE;AAClD,QAAO,IAAI,cAAc,EAAE,EAAE,QAAQ;;AAKtC,MAAM,uBAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,2BAA2B,EAAE,KAAK,qBAAqB;AAC7D,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU;AACzC,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AACnD,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;AACpD,MAAM,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;CAC/D,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACjB,MAAM,eAAe,EAAE,OAAO;CAC7B,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,aAAa,EAAE,KAAK;EACnB;EACA;EACA;EACA,CAAC,CAAC,UAAU,CAAC,QAAQ,SAAS;CAC/B,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1C,CAAC;AACF,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,eAAe,CAAC;AAC/G,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,mBAAmB,0BAA0B,uBAAuB,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7G,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;;AAE9G,MAAM,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO;CAC3D,iBAAiB,EAAE,SAAS;CAC5B,YAAY,EAAE,OAAO;EACpB,MAAM,EAAE,QAAQ;EAChB,MAAM,EAAE,SAAS;EACjB,CAAC,CAAC,UAAU,CAAC,UAAU;CACxB,CAAC,CAAC"}
@@ -2217,4 +2217,4 @@ var TensorPipeline = class TensorPipeline$1 {
2217
2217
 
2218
2218
  //#endregion
2219
2219
  export { PoseSkeletonComputePipeline as a, OpticalFlowComputePipeline as i, ControlNetMultiplexer as n, TemporalDeflickerPipeline as o, DepthNormalsComputePipeline as r, TensorPipeline as s, CannyComputePipeline as t };
2220
- //# sourceMappingURL=dist-0QGroRYZ.mjs.map
2220
+ //# sourceMappingURL=dist-C_SMBmHr.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-0QGroRYZ.mjs","names":["TensorPipeline"],"sources":["../../tensor-webgpu/dist/index.mjs"],"sourcesContent":["//#region src/multiplexer/controlnet-multiplexer.ts\nvar ControlNetMultiplexer = class {\n\ttextures = /* @__PURE__ */ new Map();\n\tset(type, texture) {\n\t\tthis.textures.set(type, texture);\n\t}\n\tget(type) {\n\t\treturn this.textures.get(type);\n\t}\n\thas(type) {\n\t\treturn this.textures.has(type);\n\t}\n\tgetOutputs() {\n\t\treturn {\n\t\t\tcanny: this.textures.get(\"canny\"),\n\t\t\tdepth: this.textures.get(\"depth\"),\n\t\t\tnormals: this.textures.get(\"normals\"),\n\t\t\tposeSkeleton: this.textures.get(\"poseSkeleton\"),\n\t\t\tsegmentationMask: this.textures.get(\"segmentationMask\"),\n\t\t\tfaceLandmarks: this.textures.get(\"faceLandmarks\"),\n\t\t\tmotionVectors: this.textures.get(\"motionVectors\"),\n\t\t\tdeflickered: this.textures.get(\"deflickered\")\n\t\t};\n\t}\n\tcreateBindGroupEntry(type, bindingIndex) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot create bind group entry: conditioning texture \"${type}\" is not registered in VRAM.`);\n\t\treturn {\n\t\t\tbinding: bindingIndex,\n\t\t\tresource: tex.createView({ label: `controlnet_${type}_view` })\n\t\t};\n\t}\n\texportTensorView(type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Conditioning tensor \"${type}\" not found in multiplexer.`);\n\t\treturn {\n\t\t\ttexture: tex,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height,\n\t\t\tformat: tex.format\n\t\t};\n\t}\n\tasync readPixelsAsync(device, type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot read pixels: conditioning texture \"${type}\" is missing.`);\n\t\tconst width = tex.width;\n\t\tconst height = tex.height;\n\t\tconst format = tex.format;\n\t\tlet bytesPerPixel = 4;\n\t\tif (format === \"rgba16float\" || format === \"rg32float\") bytesPerPixel = 8;\n\t\telse if (format === \"r32float\") bytesPerPixel = 4;\n\t\telse if (format === \"rgba32float\") bytesPerPixel = 16;\n\t\tconst unalignedBytesPerRow = width * bytesPerPixel;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * height;\n\t\tconst stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: `controlnet_readback_staging_${type}`\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: `readback_encoder_${type}` });\n\t\tencoder.copyTextureToBuffer({ texture: tex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, [\n\t\t\twidth,\n\t\t\theight,\n\t\t\t1\n\t\t]);\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = stagingBuffer.getMappedRange();\n\t\tconst resultData = new Uint8Array(width * height * bytesPerPixel);\n\t\tconst sourceBytes = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unalignedBytesPerRow) resultData.set(sourceBytes.subarray(0, width * height * bytesPerPixel));\n\t\telse for (let y = 0; y < height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unalignedBytesPerRow;\n\t\t\tresultData.set(sourceBytes.subarray(srcOffset, srcOffset + unalignedBytesPerRow), dstOffset);\n\t\t}\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t\tdata: resultData\n\t\t};\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures.values()) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tthis.textures.clear();\n\t}\n};\n\n//#endregion\n//#region src/shaders/canny.wgsl.ts\n/**\n* @file canny.wgsl.ts\n* High-performance WebGPU Canny Edge Compute Shaders\n* Pass 1: Sobel gradient magnitude & quantized angle\n* Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis\n*/\nconst cannySobelWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var magnitudeTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\nfn getLuma(coord: vec2<i32>, maxCoord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0), maxCoord);\n let c = textureLoad(inputTex, clamped, 0);\n return dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\n@compute @workgroup_size(16, 16)\nfn computeSobel(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let p00 = getLuma(vec2<i32>(x - 1, y - 1), maxCoord);\n let p10 = getLuma(vec2<i32>(x, y - 1), maxCoord);\n let p20 = getLuma(vec2<i32>(x + 1, y - 1), maxCoord);\n let p01 = getLuma(vec2<i32>(x - 1, y), maxCoord);\n let p21 = getLuma(vec2<i32>(x + 1, y), maxCoord);\n let p02 = getLuma(vec2<i32>(x - 1, y + 1), maxCoord);\n let p12 = getLuma(vec2<i32>(x, y + 1), maxCoord);\n let p22 = getLuma(vec2<i32>(x + 1, y + 1), maxCoord);\n\n let gx = (p20 + 2.0 * p21 + p22) - (p00 + 2.0 * p01 + p02);\n let gy = (p02 + 2.0 * p12 + p22) - (p00 + 2.0 * p10 + p20);\n\n let mag = sqrt(gx * gx + gy * gy);\n let angle = atan2(gy, gx);\n\n // Quantize angle into 4 sectors (0: 0 deg, 1: 45 deg, 2: 90 deg, 3: 135 deg)\n var sector: f32 = 0.0;\n let a = (angle * 180.0 / 3.14159265 + 180.0) % 180.0;\n if ((a >= 0.0 && a < 22.5) || (a >= 157.5 && a <= 180.0)) {\n sector = 0.0;\n } else if (a >= 22.5 && a < 67.5) {\n sector = 1.0;\n } else if (a >= 67.5 && a < 112.5) {\n sector = 2.0;\n } else {\n sector = 3.0;\n }\n\n textureStore(magnitudeTex, id.xy, vec4<f32>(mag, sector, 0.0, 1.0));\n}\n`;\nconst cannyNmsRgba8Wgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, edge, edge, 1.0));\n}\n`;\nconst cannyNmsR32fWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<r32float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, 0.0, 0.0, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/canny-pipeline.ts\nvar CannyComputePipeline = class {\n\tsobelPipeline;\n\tnmsRgba8Pipeline;\n\tnmsR32fPipeline;\n\tuniformBuffer;\n\tcachedIntermediateTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst sobelModule = device.createShaderModule({\n\t\t\tlabel: \"canny_sobel.wgsl\",\n\t\t\tcode: cannySobelWgsl\n\t\t});\n\t\tthis.sobelPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannySobelPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: sobelModule,\n\t\t\t\tentryPoint: \"computeSobel\"\n\t\t\t}\n\t\t});\n\t\tconst nmsRgba8Module = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_rgba8.wgsl\",\n\t\t\tcode: cannyNmsRgba8Wgsl\n\t\t});\n\t\tthis.nmsRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsRgba8Module,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tconst nmsR32fModule = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_r32f.wgsl\",\n\t\t\tcode: cannyNmsR32fWgsl\n\t\t});\n\t\tthis.nmsR32fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsR32fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsR32fModule,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"canny_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst lowThreshold = options.low ?? .1;\n\t\tconst highThreshold = options.high ?? .3;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba8unorm\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tf32View[0] = lowThreshold;\n\t\tf32View[1] = highThreshold;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedIntermediateTexture || this.cachedIntermediateTexture.width !== width || this.cachedIntermediateTexture.height !== height) {\n\t\t\tthis.cachedIntermediateTexture?.destroy();\n\t\t\tthis.cachedIntermediateTexture = this.device.createTexture({\n\t\t\t\tlabel: \"canny_magnitude_intermediate\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `canny_edge_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"canny_command_encoder\" });\n\t\tconst sobelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.sobelPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginComputePass({ label: \"canny_sobel_pass\" });\n\t\tpass1.setPipeline(this.sobelPipeline);\n\t\tpass1.setBindGroup(0, sobelBindGroup);\n\t\tpass1.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass1.end();\n\t\tconst nmsPipeline = outputFormat === \"r32float\" ? this.nmsR32fPipeline : this.nmsRgba8Pipeline;\n\t\tconst nmsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: nmsPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginComputePass({ label: \"canny_nms_pass\" });\n\t\tpass2.setPipeline(nmsPipeline);\n\t\tpass2.setBindGroup(0, nmsBindGroup);\n\t\tpass2.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass2.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedIntermediateTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/depth-normals.wgsl.ts\n/**\n* @file depth-normals.wgsl.ts\n* Screen-Space Normal Map Reconstruction from Depth Tensor\n* Analytical cross-product of spatial partial derivatives:\n* dP/dx = [1, 0, dD/dx]^T, dP/dy = [0, 1, dD/dy]^T\n* N = normalize(dP/dx x dP/dy) = normalize([-dx, -dy, 1.0])\n*/\nconst depthNormalsRgba16fWgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\nconst depthNormalsRgba8Wgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/depth-normals-pipeline.ts\nvar DepthNormalsComputePipeline = class {\n\tnormalRgba16fPipeline;\n\tnormalRgba8Pipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba16f.wgsl\",\n\t\t\tcode: depthNormalsRgba16fWgsl\n\t\t});\n\t\tthis.normalRgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba8.wgsl\",\n\t\t\tcode: depthNormalsRgba8Wgsl\n\t\t});\n\t\tthis.normalRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"depth_normals_uniform_buffer\"\n\t\t});\n\t}\n\texecute(depthTexture, options = {}) {\n\t\tconst width = depthTexture.width;\n\t\tconst height = depthTexture.height;\n\t\tconst depthScale = options.depthScale ?? 1;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = depthScale;\n\t\tf32View[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `normal_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst pipeline = outputFormat === \"rgba8unorm\" ? this.normalRgba8Pipeline : this.normalRgba16fPipeline;\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"depth_normals_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"depth_normals_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/face-landmarks.wgsl.ts\n/**\n* @file face-landmarks.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet Face & MediaPipe facial contour rasterization.\n* Renders antialiased facial mesh contours (lips, eyes, brows, nose, oval) directly in VRAM for SDXL ControlNet.\n*/\nconst faceLandmarksWgsl = `\nstruct FaceSegment {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct FaceParams {\n width: u32,\n height: u32,\n numSegments: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: FaceParams;\n@group(0) @binding(2) var<storage, read> segments: array<FaceSegment>;\n\n@compute @workgroup_size(16, 16)\nfn computeFaceLandmarks(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Solid black background for SDXL ControlNet\n\n let count = params.numSegments;\n for (var i = 0u; i < count; i = i + 1u) {\n let seg = segments[i];\n if (seg.enabled < 0.5) {\n continue;\n }\n\n let ab = seg.end - seg.start;\n let ap = p - seg.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = seg.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= seg.radius) {\n let edgeAlpha = clamp(seg.radius - dist + 0.5, 0.0, 1.0);\n outColor = vec4<f32>(mix(outColor.rgb, seg.color.rgb, edgeAlpha * seg.color.a), 1.0);\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/face-landmarks-pipeline.ts\nfunction buildLoopSegments(indices, color) {\n\tconst segs = [];\n\tfor (let i = 0; i < indices.length - 1; i++) segs.push({\n\t\tfrom: indices[i],\n\t\tto: indices[i + 1],\n\t\tcolor\n\t});\n\treturn segs;\n}\nconst CANONICAL_FACE_CONTOURS = [\n\t...buildLoopSegments([\n\t\t70,\n\t\t63,\n\t\t105,\n\t\t66,\n\t\t107\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t300,\n\t\t293,\n\t\t334,\n\t\t296,\n\t\t336\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t33,\n\t\t160,\n\t\t158,\n\t\t133,\n\t\t153,\n\t\t144,\n\t\t33\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t263,\n\t\t387,\n\t\t385,\n\t\t362,\n\t\t380,\n\t\t373,\n\t\t263\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t168,\n\t\t6,\n\t\t197,\n\t\t195,\n\t\t4\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t98,\n\t\t97,\n\t\t2,\n\t\t326,\n\t\t327\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t61,\n\t\t185,\n\t\t40,\n\t\t39,\n\t\t37,\n\t\t0,\n\t\t267,\n\t\t269,\n\t\t270,\n\t\t409,\n\t\t291,\n\t\t375,\n\t\t321,\n\t\t405,\n\t\t314,\n\t\t17,\n\t\t84,\n\t\t181,\n\t\t91,\n\t\t146,\n\t\t61\n\t], [\n\t\t1,\n\t\t.2,\n\t\t.2,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t78,\n\t\t95,\n\t\t88,\n\t\t178,\n\t\t87,\n\t\t14,\n\t\t317,\n\t\t402,\n\t\t318,\n\t\t324,\n\t\t308,\n\t\t415,\n\t\t310,\n\t\t311,\n\t\t312,\n\t\t13,\n\t\t82,\n\t\t81,\n\t\t80,\n\t\t191,\n\t\t78\n\t], [\n\t\t1,\n\t\t0,\n\t\t.8,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t10,\n\t\t338,\n\t\t297,\n\t\t332,\n\t\t284,\n\t\t251,\n\t\t389,\n\t\t356,\n\t\t454,\n\t\t323,\n\t\t361,\n\t\t288,\n\t\t397,\n\t\t365,\n\t\t379,\n\t\t378,\n\t\t400,\n\t\t377,\n\t\t152,\n\t\t148,\n\t\t176,\n\t\t149,\n\t\t150,\n\t\t136,\n\t\t172,\n\t\t58,\n\t\t132,\n\t\t93,\n\t\t234,\n\t\t127,\n\t\t162,\n\t\t21,\n\t\t54,\n\t\t103,\n\t\t67,\n\t\t109,\n\t\t10\n\t], [\n\t\t.9,\n\t\t.9,\n\t\t.9,\n\t\t1\n\t])\n];\nvar FaceLandmarksComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tstorageBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"face_landmarks.wgsl\",\n\t\t\tcode: faceLandmarksWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"FaceLandmarksComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeFaceLandmarks\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 64,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_uniform_buffer\"\n\t\t});\n\t\tconst storageSize = Math.max(256, CANONICAL_FACE_CONTOURS.length * 48);\n\t\tthis.storageBuffer = device.createBuffer({\n\t\t\tsize: storageSize,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_storage_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}) {\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 4;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst u32Uniforms = new Uint32Array(4);\n\t\tu32Uniforms[0] = width;\n\t\tu32Uniforms[1] = height;\n\t\tu32Uniforms[2] = CANONICAL_FACE_CONTOURS.length;\n\t\tu32Uniforms[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, u32Uniforms);\n\t\tconst f32Segments = new Float32Array(CANONICAL_FACE_CONTOURS.length * 12);\n\t\tfor (let i = 0; i < CANONICAL_FACE_CONTOURS.length; i++) {\n\t\t\tconst seg = CANONICAL_FACE_CONTOURS[i];\n\t\t\tconst ptA = landmarks[seg.from];\n\t\t\tconst ptB = landmarks[seg.to];\n\t\t\tconst offset = i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32Segments[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32Segments[offset + 0] = ptA.x * width;\n\t\t\tf32Segments[offset + 1] = ptA.y * height;\n\t\t\tf32Segments[offset + 2] = ptB.x * width;\n\t\t\tf32Segments[offset + 3] = ptB.y * height;\n\t\t\tf32Segments[offset + 4] = seg.color[0];\n\t\t\tf32Segments[offset + 5] = seg.color[1];\n\t\t\tf32Segments[offset + 6] = seg.color[2];\n\t\t\tf32Segments[offset + 7] = seg.color[3];\n\t\t\tf32Segments[offset + 8] = radius;\n\t\t\tf32Segments[offset + 9] = 1;\n\t\t\tf32Segments[offset + 10] = 0;\n\t\t\tf32Segments[offset + 11] = 0;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.storageBuffer, 0, f32Segments);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: \"face_landmarks_output_texture\"\n\t\t\t});\n\t\t}\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"FaceLandmarksBindGroup\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.storageBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"FaceLandmarksCommandEncoder\" });\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"FaceLandmarksComputePass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t\tthis.storageBuffer.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/optical-flow.wgsl.ts\n/**\n* @file optical-flow.wgsl.ts\n* High-Performance Native WebGPU Optical Flow Compute Shaders\n* Implements coarse-to-fine Lucas-Kanade motion vector estimation with\n* spatial structure tensor integration and Tikhonov aperture regularization.\n*/\nconst opticalFlowDirectWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)\n regularization: f32, // Tikhonov regularization lambda\n maxDisplacement: f32, // Maximum allowable flow vector length\n _pad0: f32,\n _pad1: f32,\n _pad2: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(3) var<uniform> params: FlowParams;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let inDims = vec2<f32>(textureDimensions(tex));\n let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));\n let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);\n let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n\n // Central difference spatial gradients on current frame\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal gradient: difference between current and previous frame\n let cCurr = sampleLuma(currTex, p);\n let cPrev = sampleLuma(prevTex, p);\n let it = cCurr - cPrev;\n\n // Gaussian spatial falloff weight\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n // Tikhonov regularization prevents singularity in flat/homogeneous regions\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var u: f32 = 0.0;\n var v: f32 = 0.0;\n\n if (det > 1e-6) {\n u = (-sxt * C + syt * B) / det;\n v = (-syt * A + sxt * B) / det;\n }\n\n let mag = length(vec2<f32>(u, v));\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n let scale = maxD / mag;\n u *= scale;\n v *= scale;\n }\n\n textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));\n}\n`;\nconst opticalFlowRefineWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32,\n regularization: f32,\n maxDisplacement: f32,\n coarseWidth: u32,\n coarseHeight: u32,\n _pad0: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;\n@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: FlowParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\nfn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n return rgbToLuminance(sampleColor.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read upsampled prior flow from coarse scale (scaled by 2x)\n let coarseCoord = vec2<i32>(centerCoord / 2);\n let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);\n let priorFlow = coarseSample.xy * 2.0;\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n let pUv = (vec2<f32>(p) + 0.5) * invDims;\n\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal residual against warped previous frame\n let cCurr = sampleLuma(currTex, p);\n let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);\n let it = cCurr - cWarpedPrev;\n\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var du: f32 = 0.0;\n var dv: f32 = 0.0;\n\n if (det > 1e-6) {\n du = (-sxt * C + syt * B) / det;\n dv = (-syt * A + sxt * B) / det;\n }\n\n // Combine coarse prior flow with fine residual flow\n var totalFlow = priorFlow + vec2<f32>(du, dv);\n let mag = length(totalFlow);\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n totalFlow *= (maxD / mag);\n }\n\n textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/optical-flow-pipeline.ts\nvar OpticalFlowComputePipeline = class {\n\tdirectPipeline;\n\trefinePipeline;\n\tdirectUniformBuffer;\n\trefineUniformBuffer;\n\tbilinearSampler;\n\tcachedCoarseTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst directModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_direct.wgsl\",\n\t\t\tcode: opticalFlowDirectWgsl\n\t\t});\n\t\tthis.directPipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowDirectPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: directModule,\n\t\t\t\tentryPoint: \"computeFlow\"\n\t\t\t}\n\t\t});\n\t\tconst refineModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_refine.wgsl\",\n\t\t\tcode: opticalFlowRefineWgsl\n\t\t});\n\t\tthis.refinePipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowRefinePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: refineModule,\n\t\t\t\tentryPoint: \"refineFlow\"\n\t\t\t}\n\t\t});\n\t\tthis.directUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_direct_uniform\"\n\t\t});\n\t\tthis.refineUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_refine_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"optical_flow_bilinear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(prevTexture, currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst windowSize = options?.windowSize ?? 3;\n\t\tconst regularization = options?.regularization ?? options?.lambda ?? .05;\n\t\tconst scale = options?.scale ?? .5;\n\t\tconst maxDisplacement = 64;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `optical_flow_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"optical_flow_command_encoder\" });\n\t\tif (scale > .1 && scale < .95 && width >= 64 && height >= 64) {\n\t\t\tconst coarseW = Math.max(16, Math.floor(width * scale));\n\t\t\tconst coarseH = Math.max(16, Math.floor(height * scale));\n\t\t\tif (!this.cachedCoarseTexture || this.cachedCoarseTexture.width !== coarseW || this.cachedCoarseTexture.height !== coarseH) {\n\t\t\t\tthis.cachedCoarseTexture?.destroy();\n\t\t\t\tthis.cachedCoarseTexture = this.device.createTexture({\n\t\t\t\t\tlabel: \"optical_flow_coarse\",\n\t\t\t\t\tsize: [coarseW, coarseH],\n\t\t\t\t\tformat: \"rgba16float\",\n\t\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = coarseW;\n\t\t\tdirectU32[1] = coarseH;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement * scale;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst coarseBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst coarsePass = commandEncoder.beginComputePass({ label: \"optical_flow_coarse_pass\" });\n\t\t\tcoarsePass.setPipeline(this.directPipeline);\n\t\t\tcoarsePass.setBindGroup(0, coarseBindGroup);\n\t\t\tcoarsePass.dispatchWorkgroups(Math.ceil(coarseW / 16), Math.ceil(coarseH / 16));\n\t\t\tcoarsePass.end();\n\t\t\tconst refineData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst refineU32 = new Uint32Array(refineData);\n\t\t\tconst refineF32 = new Float32Array(refineData);\n\t\t\trefineU32[0] = width;\n\t\t\trefineU32[1] = height;\n\t\t\trefineU32[2] = windowSize;\n\t\t\trefineF32[3] = regularization;\n\t\t\trefineF32[4] = maxDisplacement;\n\t\t\trefineU32[5] = coarseW;\n\t\t\trefineU32[6] = coarseH;\n\t\t\tthis.device.queue.writeBuffer(this.refineUniformBuffer, 0, refineData);\n\t\t\tconst refineBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.refinePipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: { buffer: this.refineUniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst finePass = commandEncoder.beginComputePass({ label: \"optical_flow_fine_pass\" });\n\t\t\tfinePass.setPipeline(this.refinePipeline);\n\t\t\tfinePass.setBindGroup(0, refineBindGroup);\n\t\t\tfinePass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tfinePass.end();\n\t\t} else {\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = width;\n\t\t\tdirectU32[1] = height;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst directBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst directPass = commandEncoder.beginComputePass({ label: \"optical_flow_direct_pass\" });\n\t\t\tdirectPass.setPipeline(this.directPipeline);\n\t\t\tdirectPass.setBindGroup(0, directBindGroup);\n\t\t\tdirectPass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tdirectPass.end();\n\t\t}\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedCoarseTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.directUniformBuffer.destroy();\n\t\tthis.refineUniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pose-skeleton.wgsl.ts\n/**\n* @file pose-skeleton.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet OpenPose skeleton rasterization.\n* Renders instanced bone cylinders/capsules directly in VRAM without CPU roundtrips.\n*/\nconst poseSkeletonWgsl = `\nstruct Bone {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct SkeletonParams {\n width: u32,\n height: u32,\n numBones: u32,\n pad: u32,\n bones: array<Bone, 24>,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: SkeletonParams;\n\n@compute @workgroup_size(16, 16)\nfn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n let count = min(params.numBones, 24u);\n for (var i = 0u; i < count; i = i + 1u) {\n let bone = params.bones[i];\n if (bone.enabled < 0.5) {\n continue;\n }\n\n let ab = bone.end - bone.start;\n let ap = p - bone.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = bone.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= bone.radius) {\n // Sub-pixel edge antialiasing\n let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);\n let a = edgeAlpha * bone.color.a;\n outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/pose-skeleton-pipeline.ts\nconst CANONICAL_OPENPOSE_BONES = [\n\t{\n\t\tfrom: 0,\n\t\tto: 11,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 0,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 13,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 13,\n\t\tto: 15,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 14,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 14,\n\t\tto: 16,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 23,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 25,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 25,\n\t\tto: 27,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 24,\n\t\tto: 26,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 26,\n\t\tto: 28,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\nvar PoseSkeletonComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"pose_skeleton.wgsl\",\n\t\t\tcode: poseSkeletonWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"PoseSkeletonComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computePoseSkeleton\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 1280,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"pose_skeleton_uniform_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}, bones) {\n\t\tconst boneDefs = bones ?? CANONICAL_OPENPOSE_BONES;\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 6;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst arrayBuf = new ArrayBuffer(1280);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tu32View[2] = boneDefs.length;\n\t\tu32View[3] = 0;\n\t\tconst boneBaseFloatOffset = 4;\n\t\tfor (let i = 0; i < boneDefs.length; i++) {\n\t\t\tconst boneDef = boneDefs[i];\n\t\t\tconst ptA = landmarks[boneDef.from];\n\t\t\tconst ptB = landmarks[boneDef.to];\n\t\t\tconst offset = boneBaseFloatOffset + i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32View[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32View[offset + 0] = ptA.x * width;\n\t\t\tf32View[offset + 1] = ptA.y * height;\n\t\t\tf32View[offset + 2] = ptB.x * width;\n\t\t\tf32View[offset + 3] = ptB.y * height;\n\t\t\tf32View[offset + 4] = boneDef.color[0];\n\t\t\tf32View[offset + 5] = boneDef.color[1];\n\t\t\tf32View[offset + 6] = boneDef.color[2];\n\t\t\tf32View[offset + 7] = boneDef.color[3];\n\t\t\tf32View[offset + 8] = radius;\n\t\t\tf32View[offset + 9] = 1;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"openpose_skeleton_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"pose_skeleton_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"pose_skeleton_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"pose_skeleton_output_view\" })\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"pose_skeleton_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/segmentation.wgsl.ts\n/**\n* @file segmentation.wgsl.ts\n* Native WebGPU WGSL compute shader for segmentation mask thresholding and edge feathering.\n* Outputs crisp alpha mattes directly in VRAM without CPU roundtrips.\n*/\nconst segmentationWgsl = `\nstruct SegParams {\n threshold: f32,\n feather: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: SegParams;\n\n@compute @workgroup_size(16, 16)\nfn computeSegmentation(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let sample = textureLoad(inputTex, coord, 0);\n\n // Luminance or alpha channel extraction\n let rawAlpha = max(sample.a, dot(sample.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n\n let lower = max(0.0, params.threshold - params.feather);\n let upper = min(1.0, params.threshold + params.feather);\n let alpha = smoothstep(lower, upper, rawAlpha);\n\n textureStore(outputTex, id.xy, vec4<f32>(alpha, alpha, alpha, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/segmentation-pipeline.ts\nvar SegmentationComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"segmentation.wgsl\",\n\t\t\tcode: segmentationWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"SegmentationComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeSegmentation\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"segmentation_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst threshold = options.threshold ?? .5;\n\t\tconst feather = options.feather ?? .05;\n\t\tconst arrayBuf = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tf32View[0] = threshold;\n\t\tf32View[1] = feather;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"segmentation_output_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"segmentation_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"segmentation_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView({ label: \"segmentation_input_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"segmentation_output_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"segmentation_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/temporal-warp-blend.wgsl.ts\n/**\n* @file temporal-warp-blend.wgsl.ts\n* Native WebGPU Forward Warping & Adaptive Photometric Temporal Blend Compute Shaders\n* Warps previous frame forward along motion vectors and blends adaptively with current\n* frame to eliminate generative AI video flicker with zero ghosting.\n*/\nconst temporalWarpBlendRgba8Wgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)\n disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame\n maxMotionPixels: f32, // Speed cutoff for fallback to curr frame\n isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n // If first frame or scene cut reset, pass through current frame directly\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read motion vector (u, v) in pixel units\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n // Motion-compensated backward warp coordinate pointing to previous frame\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n // Adaptive blend weight:\n // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)\n // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\nconst temporalWarpBlendRgba16fWgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32,\n disocclusionThreshold: f32,\n maxMotionPixels: f32,\n isFirstFrame: f32,\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\n\n//#endregion\n//#region src/pipelines/temporal-deflicker-pipeline.ts\nvar TemporalDeflickerPipeline = class {\n\tflowPipeline;\n\trgba8Pipeline;\n\trgba16fPipeline;\n\tuniformBuffer;\n\tbilinearSampler;\n\thistoryTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.flowPipeline = new OpticalFlowComputePipeline(device);\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba8.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba8Wgsl\n\t\t});\n\t\tthis.rgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba16f.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba16fWgsl\n\t\t});\n\t\tthis.rgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"temporal_deflicker_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"temporal_deflicker_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst rawBlendWeight = options.blendWeight ?? .35;\n\t\tconst blendWeight = typeof rawBlendWeight === \"number\" ? rawBlendWeight : Number(rawBlendWeight);\n\t\tconst disocclusionThreshold = options.disocclusionThreshold ?? .15;\n\t\tconst maxMotionPixels = options.maxMotionPixels ?? 64;\n\t\tconst format = currTexture.format;\n\t\tconst isRgba16f = format === \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== format) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `deflickered_output_${format}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\tif (!this.historyTexture || this.historyTexture.width !== width || this.historyTexture.height !== height) {\n\t\t\tthis.historyTexture?.destroy();\n\t\t\tthis.historyTexture = this.device.createTexture({\n\t\t\t\tlabel: \"deflicker_history_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t\tconst commandEncoder$1 = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_first_frame_encoder\" });\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.historyTexture }, [width, height]);\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.cachedOutputTexture }, [width, height]);\n\t\t\tif (!customEncoder) this.device.queue.submit([commandEncoder$1.finish()]);\n\t\t\treturn this.cachedOutputTexture;\n\t\t}\n\t\tconst flowTexture = this.flowPipeline.execute(this.historyTexture, currTexture, options.opticalFlow, customEncoder);\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = blendWeight;\n\t\tf32View[3] = disocclusionThreshold;\n\t\tf32View[4] = maxMotionPixels;\n\t\tf32View[5] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tconst pipeline = isRgba16f ? this.rgba16fPipeline : this.rgba8Pipeline;\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_blend_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.historyTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: flowTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"deflicker_blend_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tcommandEncoder.copyTextureToTexture({ texture: this.cachedOutputTexture }, { texture: this.historyTexture }, [width, height]);\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\treset() {\n\t\tthis.historyTexture?.destroy();\n\t\tthis.historyTexture = void 0;\n\t}\n\tdestroy() {\n\t\tthis.flowPipeline.destroy();\n\t\tthis.historyTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/pipeline/tensor-pipeline.ts\nvar TensorPipeline = class TensorPipeline {\n\tid;\n\tcannyOptions;\n\tdepthNormalsOptions;\n\tposeSkeletonOptions;\n\tfaceLandmarksOptions;\n\tsegmentationOptions;\n\topticalFlowOptions;\n\tdeflickerOptions;\n\tmultiplexer = new ControlNetMultiplexer();\n\tcannyPipeline;\n\tdepthNormalsPipeline;\n\tposePipeline;\n\tfacePipeline;\n\tsegmentationPipeline;\n\topticalFlowPipeline;\n\tdeflickerPipeline;\n\tprevInputTexture;\n\tconstructor(source) {\n\t\tthis.source = source;\n\t\tthis.id = `tensor-${Math.random().toString(36).slice(2, 9)}`;\n\t}\n\tstatic from(source) {\n\t\treturn new TensorPipeline(source);\n\t}\n\tcanny(options = {}) {\n\t\tthis.cannyOptions = options;\n\t\treturn this;\n\t}\n\tdepthNormals(options = {}) {\n\t\tthis.depthNormalsOptions = options;\n\t\treturn this;\n\t}\n\tposeSkeleton(options = {}) {\n\t\tthis.poseSkeletonOptions = options;\n\t\treturn this;\n\t}\n\tpose(landmarks, options = {}) {\n\t\tthis.poseSkeletonOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tfaceLandmarks(options = {}) {\n\t\tthis.faceLandmarksOptions = options;\n\t\treturn this;\n\t}\n\tface(landmarks, options = {}) {\n\t\tthis.faceLandmarksOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tsegmentation(options = {}) {\n\t\tthis.segmentationOptions = options;\n\t\treturn this;\n\t}\n\topticalFlow(options = {}) {\n\t\tthis.opticalFlowOptions = options;\n\t\treturn this;\n\t}\n\tdeflicker(options = {}) {\n\t\tthis.deflickerOptions = options;\n\t\treturn this;\n\t}\n\tgetMultiplexer() {\n\t\treturn this.multiplexer;\n\t}\n\tasync execute(device, overrideSourceTexture) {\n\t\tlet inputTexture = overrideSourceTexture;\n\t\tif (!inputTexture && typeof this.source?.createView === \"function\") inputTexture = this.source;\n\t\tif (!inputTexture) throw new Error(\"[TensorPipeline.execute] No GPUTexture available for tensor compute execution. Pass a valid GPUTexture to execute() or initialize with a GPUTexture source.\");\n\t\tif (this.cannyOptions) {\n\t\t\tif (!this.cannyPipeline) this.cannyPipeline = new CannyComputePipeline(device);\n\t\t\tconst cannyTex = this.cannyPipeline.execute(inputTexture, this.cannyOptions);\n\t\t\tthis.multiplexer.set(\"canny\", cannyTex);\n\t\t}\n\t\tif (this.depthNormalsOptions) {\n\t\t\tif (!this.depthNormalsPipeline) this.depthNormalsPipeline = new DepthNormalsComputePipeline(device);\n\t\t\tconst normalTex = this.depthNormalsPipeline.execute(inputTexture, this.depthNormalsOptions);\n\t\t\tthis.multiplexer.set(\"normals\", normalTex);\n\t\t}\n\t\tif (this.poseSkeletonOptions?.landmarks) {\n\t\t\tif (!this.posePipeline) this.posePipeline = new PoseSkeletonComputePipeline(device);\n\t\t\tconst skeletonTex = this.posePipeline.execute(this.poseSkeletonOptions.landmarks, {\n\t\t\t\twidth: this.poseSkeletonOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.poseSkeletonOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.poseSkeletonOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"poseSkeleton\", skeletonTex);\n\t\t}\n\t\tif (this.faceLandmarksOptions?.landmarks) {\n\t\t\tif (!this.facePipeline) this.facePipeline = new FaceLandmarksComputePipeline(device);\n\t\t\tconst faceTex = this.facePipeline.execute(this.faceLandmarksOptions.landmarks, {\n\t\t\t\twidth: this.faceLandmarksOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.faceLandmarksOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.faceLandmarksOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"faceLandmarks\", faceTex);\n\t\t}\n\t\tif (this.segmentationOptions) {\n\t\t\tif (!this.segmentationPipeline) this.segmentationPipeline = new SegmentationComputePipeline(device);\n\t\t\tconst segTex = this.segmentationPipeline.execute(inputTexture, this.segmentationOptions);\n\t\t\tthis.multiplexer.set(\"segmentationMask\", segTex);\n\t\t}\n\t\tif (this.opticalFlowOptions) {\n\t\t\tif (!this.opticalFlowPipeline) this.opticalFlowPipeline = new OpticalFlowComputePipeline(device);\n\t\t\tconst prevTex = this.prevInputTexture ?? inputTexture;\n\t\t\tconst flowTex = this.opticalFlowPipeline.execute(prevTex, inputTexture, this.opticalFlowOptions);\n\t\t\tthis.multiplexer.set(\"motionVectors\", flowTex);\n\t\t}\n\t\tif (this.deflickerOptions) {\n\t\t\tif (!this.deflickerPipeline) this.deflickerPipeline = new TemporalDeflickerPipeline(device);\n\t\t\tconst deflickeredTex = this.deflickerPipeline.execute(inputTexture, this.deflickerOptions);\n\t\t\tthis.multiplexer.set(\"deflickered\", deflickeredTex);\n\t\t}\n\t\tthis.prevInputTexture = inputTexture;\n\t\treturn this.multiplexer.getOutputs();\n\t}\n\ttoConfig() {\n\t\treturn {\n\t\t\tcanny: this.cannyOptions,\n\t\t\tdepthNormals: this.depthNormalsOptions,\n\t\t\tposeSkeleton: this.poseSkeletonOptions,\n\t\t\tfaceLandmarks: this.faceLandmarksOptions,\n\t\t\tsegmentation: this.segmentationOptions,\n\t\t\topticalFlow: this.opticalFlowOptions,\n\t\t\tdeflicker: this.deflickerOptions\n\t\t};\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"tensor\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.toConfig()\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.cannyPipeline?.destroy();\n\t\tthis.depthNormalsPipeline?.destroy();\n\t\tthis.posePipeline?.destroy();\n\t\tthis.facePipeline?.destroy();\n\t\tthis.segmentationPipeline?.destroy();\n\t\tthis.opticalFlowPipeline?.destroy();\n\t\tthis.deflickerPipeline?.destroy();\n\t\tthis.multiplexer.destroy();\n\t}\n};\n\n//#endregion\nexport { CANONICAL_FACE_CONTOURS, CANONICAL_OPENPOSE_BONES, CannyComputePipeline, ControlNetMultiplexer, DepthNormalsComputePipeline, FaceLandmarksComputePipeline, OpticalFlowComputePipeline, PoseSkeletonComputePipeline, SegmentationComputePipeline, TemporalDeflickerPipeline, TensorPipeline, cannyNmsR32fWgsl, cannyNmsRgba8Wgsl, cannySobelWgsl, depthNormalsRgba16fWgsl, depthNormalsRgba8Wgsl, faceLandmarksWgsl, opticalFlowDirectWgsl, opticalFlowRefineWgsl, poseSkeletonWgsl, segmentationWgsl, temporalWarpBlendRgba16fWgsl, temporalWarpBlendRgba8Wgsl };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF;AACD,IAAI,+BAA+B,MAAM;CACxC;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;GACP,CAAC;EACF,MAAM,cAAc,KAAK,IAAI,KAAK,wBAAwB,SAAS,GAAG;AACtE,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;G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K,qBAAqB,SAAS;AACnC,OAAK,oBAAoB,SAAS;AAClC,OAAK,oBAAoB,SAAS;;;;;;;;AAWpC,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DzB,MAAM,2BAA2B;CAChC;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;AACD,IAAI,8BAA8B,MAAM;CACvC;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN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"}
1
+ {"version":3,"file":"dist-C_SMBmHr.mjs","names":["TensorPipeline"],"sources":["../../tensor-webgpu/dist/index.mjs"],"sourcesContent":["//#region src/multiplexer/controlnet-multiplexer.ts\nvar ControlNetMultiplexer = class {\n\ttextures = /* @__PURE__ */ new Map();\n\tset(type, texture) {\n\t\tthis.textures.set(type, texture);\n\t}\n\tget(type) {\n\t\treturn this.textures.get(type);\n\t}\n\thas(type) {\n\t\treturn this.textures.has(type);\n\t}\n\tgetOutputs() {\n\t\treturn {\n\t\t\tcanny: this.textures.get(\"canny\"),\n\t\t\tdepth: this.textures.get(\"depth\"),\n\t\t\tnormals: this.textures.get(\"normals\"),\n\t\t\tposeSkeleton: this.textures.get(\"poseSkeleton\"),\n\t\t\tsegmentationMask: this.textures.get(\"segmentationMask\"),\n\t\t\tfaceLandmarks: this.textures.get(\"faceLandmarks\"),\n\t\t\tmotionVectors: this.textures.get(\"motionVectors\"),\n\t\t\tdeflickered: this.textures.get(\"deflickered\")\n\t\t};\n\t}\n\tcreateBindGroupEntry(type, bindingIndex) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot create bind group entry: conditioning texture \"${type}\" is not registered in VRAM.`);\n\t\treturn {\n\t\t\tbinding: bindingIndex,\n\t\t\tresource: tex.createView({ label: `controlnet_${type}_view` })\n\t\t};\n\t}\n\texportTensorView(type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Conditioning tensor \"${type}\" not found in multiplexer.`);\n\t\treturn {\n\t\t\ttexture: tex,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height,\n\t\t\tformat: tex.format\n\t\t};\n\t}\n\tasync readPixelsAsync(device, type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot read pixels: conditioning texture \"${type}\" is missing.`);\n\t\tconst width = tex.width;\n\t\tconst height = tex.height;\n\t\tconst format = tex.format;\n\t\tlet bytesPerPixel = 4;\n\t\tif (format === \"rgba16float\" || format === \"rg32float\") bytesPerPixel = 8;\n\t\telse if (format === \"r32float\") bytesPerPixel = 4;\n\t\telse if (format === \"rgba32float\") bytesPerPixel = 16;\n\t\tconst unalignedBytesPerRow = width * bytesPerPixel;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * height;\n\t\tconst stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: `controlnet_readback_staging_${type}`\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: `readback_encoder_${type}` });\n\t\tencoder.copyTextureToBuffer({ texture: tex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, [\n\t\t\twidth,\n\t\t\theight,\n\t\t\t1\n\t\t]);\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = stagingBuffer.getMappedRange();\n\t\tconst resultData = new Uint8Array(width * height * bytesPerPixel);\n\t\tconst sourceBytes = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unalignedBytesPerRow) resultData.set(sourceBytes.subarray(0, width * height * bytesPerPixel));\n\t\telse for (let y = 0; y < height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unalignedBytesPerRow;\n\t\t\tresultData.set(sourceBytes.subarray(srcOffset, srcOffset + unalignedBytesPerRow), dstOffset);\n\t\t}\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t\tdata: resultData\n\t\t};\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures.values()) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tthis.textures.clear();\n\t}\n};\n\n//#endregion\n//#region src/shaders/canny.wgsl.ts\n/**\n* @file canny.wgsl.ts\n* High-performance WebGPU Canny Edge Compute Shaders\n* Pass 1: Sobel gradient magnitude & quantized angle\n* Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis\n*/\nconst cannySobelWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var magnitudeTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\nfn getLuma(coord: vec2<i32>, maxCoord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0), maxCoord);\n let c = textureLoad(inputTex, clamped, 0);\n return dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\n@compute @workgroup_size(16, 16)\nfn computeSobel(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let p00 = getLuma(vec2<i32>(x - 1, y - 1), maxCoord);\n let p10 = getLuma(vec2<i32>(x, y - 1), maxCoord);\n let p20 = getLuma(vec2<i32>(x + 1, y - 1), maxCoord);\n let p01 = getLuma(vec2<i32>(x - 1, y), maxCoord);\n let p21 = getLuma(vec2<i32>(x + 1, y), maxCoord);\n let p02 = getLuma(vec2<i32>(x - 1, y + 1), maxCoord);\n let p12 = getLuma(vec2<i32>(x, y + 1), maxCoord);\n let p22 = getLuma(vec2<i32>(x + 1, y + 1), maxCoord);\n\n let gx = (p20 + 2.0 * p21 + p22) - (p00 + 2.0 * p01 + p02);\n let gy = (p02 + 2.0 * p12 + p22) - (p00 + 2.0 * p10 + p20);\n\n let mag = sqrt(gx * gx + gy * gy);\n let angle = atan2(gy, gx);\n\n // Quantize angle into 4 sectors (0: 0 deg, 1: 45 deg, 2: 90 deg, 3: 135 deg)\n var sector: f32 = 0.0;\n let a = (angle * 180.0 / 3.14159265 + 180.0) % 180.0;\n if ((a >= 0.0 && a < 22.5) || (a >= 157.5 && a <= 180.0)) {\n sector = 0.0;\n } else if (a >= 22.5 && a < 67.5) {\n sector = 1.0;\n } else if (a >= 67.5 && a < 112.5) {\n sector = 2.0;\n } else {\n sector = 3.0;\n }\n\n textureStore(magnitudeTex, id.xy, vec4<f32>(mag, sector, 0.0, 1.0));\n}\n`;\nconst cannyNmsRgba8Wgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, edge, edge, 1.0));\n}\n`;\nconst cannyNmsR32fWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<r32float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, 0.0, 0.0, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/canny-pipeline.ts\nvar CannyComputePipeline = class {\n\tsobelPipeline;\n\tnmsRgba8Pipeline;\n\tnmsR32fPipeline;\n\tuniformBuffer;\n\tcachedIntermediateTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst sobelModule = device.createShaderModule({\n\t\t\tlabel: \"canny_sobel.wgsl\",\n\t\t\tcode: cannySobelWgsl\n\t\t});\n\t\tthis.sobelPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannySobelPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: sobelModule,\n\t\t\t\tentryPoint: \"computeSobel\"\n\t\t\t}\n\t\t});\n\t\tconst nmsRgba8Module = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_rgba8.wgsl\",\n\t\t\tcode: cannyNmsRgba8Wgsl\n\t\t});\n\t\tthis.nmsRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsRgba8Module,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tconst nmsR32fModule = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_r32f.wgsl\",\n\t\t\tcode: cannyNmsR32fWgsl\n\t\t});\n\t\tthis.nmsR32fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsR32fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsR32fModule,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"canny_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst lowThreshold = options.low ?? .1;\n\t\tconst highThreshold = options.high ?? .3;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba8unorm\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tf32View[0] = lowThreshold;\n\t\tf32View[1] = highThreshold;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedIntermediateTexture || this.cachedIntermediateTexture.width !== width || this.cachedIntermediateTexture.height !== height) {\n\t\t\tthis.cachedIntermediateTexture?.destroy();\n\t\t\tthis.cachedIntermediateTexture = this.device.createTexture({\n\t\t\t\tlabel: \"canny_magnitude_intermediate\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `canny_edge_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"canny_command_encoder\" });\n\t\tconst sobelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.sobelPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginComputePass({ label: \"canny_sobel_pass\" });\n\t\tpass1.setPipeline(this.sobelPipeline);\n\t\tpass1.setBindGroup(0, sobelBindGroup);\n\t\tpass1.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass1.end();\n\t\tconst nmsPipeline = outputFormat === \"r32float\" ? this.nmsR32fPipeline : this.nmsRgba8Pipeline;\n\t\tconst nmsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: nmsPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginComputePass({ label: \"canny_nms_pass\" });\n\t\tpass2.setPipeline(nmsPipeline);\n\t\tpass2.setBindGroup(0, nmsBindGroup);\n\t\tpass2.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass2.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedIntermediateTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/depth-normals.wgsl.ts\n/**\n* @file depth-normals.wgsl.ts\n* Screen-Space Normal Map Reconstruction from Depth Tensor\n* Analytical cross-product of spatial partial derivatives:\n* dP/dx = [1, 0, dD/dx]^T, dP/dy = [0, 1, dD/dy]^T\n* N = normalize(dP/dx x dP/dy) = normalize([-dx, -dy, 1.0])\n*/\nconst depthNormalsRgba16fWgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\nconst depthNormalsRgba8Wgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/depth-normals-pipeline.ts\nvar DepthNormalsComputePipeline = class {\n\tnormalRgba16fPipeline;\n\tnormalRgba8Pipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba16f.wgsl\",\n\t\t\tcode: depthNormalsRgba16fWgsl\n\t\t});\n\t\tthis.normalRgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba8.wgsl\",\n\t\t\tcode: depthNormalsRgba8Wgsl\n\t\t});\n\t\tthis.normalRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"depth_normals_uniform_buffer\"\n\t\t});\n\t}\n\texecute(depthTexture, options = {}) {\n\t\tconst width = depthTexture.width;\n\t\tconst height = depthTexture.height;\n\t\tconst depthScale = options.depthScale ?? 1;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = depthScale;\n\t\tf32View[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `normal_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst pipeline = outputFormat === \"rgba8unorm\" ? this.normalRgba8Pipeline : this.normalRgba16fPipeline;\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"depth_normals_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"depth_normals_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/face-landmarks.wgsl.ts\n/**\n* @file face-landmarks.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet Face & MediaPipe facial contour rasterization.\n* Renders antialiased facial mesh contours (lips, eyes, brows, nose, oval) directly in VRAM for SDXL ControlNet.\n*/\nconst faceLandmarksWgsl = `\nstruct FaceSegment {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct FaceParams {\n width: u32,\n height: u32,\n numSegments: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: FaceParams;\n@group(0) @binding(2) var<storage, read> segments: array<FaceSegment>;\n\n@compute @workgroup_size(16, 16)\nfn computeFaceLandmarks(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Solid black background for SDXL ControlNet\n\n let count = params.numSegments;\n for (var i = 0u; i < count; i = i + 1u) {\n let seg = segments[i];\n if (seg.enabled < 0.5) {\n continue;\n }\n\n let ab = seg.end - seg.start;\n let ap = p - seg.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = seg.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= seg.radius) {\n let edgeAlpha = clamp(seg.radius - dist + 0.5, 0.0, 1.0);\n outColor = vec4<f32>(mix(outColor.rgb, seg.color.rgb, edgeAlpha * seg.color.a), 1.0);\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/face-landmarks-pipeline.ts\nfunction buildLoopSegments(indices, color) {\n\tconst segs = [];\n\tfor (let i = 0; i < indices.length - 1; i++) segs.push({\n\t\tfrom: indices[i],\n\t\tto: indices[i + 1],\n\t\tcolor\n\t});\n\treturn segs;\n}\nconst CANONICAL_FACE_CONTOURS = [\n\t...buildLoopSegments([\n\t\t70,\n\t\t63,\n\t\t105,\n\t\t66,\n\t\t107\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t300,\n\t\t293,\n\t\t334,\n\t\t296,\n\t\t336\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t33,\n\t\t160,\n\t\t158,\n\t\t133,\n\t\t153,\n\t\t144,\n\t\t33\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t263,\n\t\t387,\n\t\t385,\n\t\t362,\n\t\t380,\n\t\t373,\n\t\t263\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t168,\n\t\t6,\n\t\t197,\n\t\t195,\n\t\t4\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t98,\n\t\t97,\n\t\t2,\n\t\t326,\n\t\t327\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t61,\n\t\t185,\n\t\t40,\n\t\t39,\n\t\t37,\n\t\t0,\n\t\t267,\n\t\t269,\n\t\t270,\n\t\t409,\n\t\t291,\n\t\t375,\n\t\t321,\n\t\t405,\n\t\t314,\n\t\t17,\n\t\t84,\n\t\t181,\n\t\t91,\n\t\t146,\n\t\t61\n\t], [\n\t\t1,\n\t\t.2,\n\t\t.2,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t78,\n\t\t95,\n\t\t88,\n\t\t178,\n\t\t87,\n\t\t14,\n\t\t317,\n\t\t402,\n\t\t318,\n\t\t324,\n\t\t308,\n\t\t415,\n\t\t310,\n\t\t311,\n\t\t312,\n\t\t13,\n\t\t82,\n\t\t81,\n\t\t80,\n\t\t191,\n\t\t78\n\t], [\n\t\t1,\n\t\t0,\n\t\t.8,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t10,\n\t\t338,\n\t\t297,\n\t\t332,\n\t\t284,\n\t\t251,\n\t\t389,\n\t\t356,\n\t\t454,\n\t\t323,\n\t\t361,\n\t\t288,\n\t\t397,\n\t\t365,\n\t\t379,\n\t\t378,\n\t\t400,\n\t\t377,\n\t\t152,\n\t\t148,\n\t\t176,\n\t\t149,\n\t\t150,\n\t\t136,\n\t\t172,\n\t\t58,\n\t\t132,\n\t\t93,\n\t\t234,\n\t\t127,\n\t\t162,\n\t\t21,\n\t\t54,\n\t\t103,\n\t\t67,\n\t\t109,\n\t\t10\n\t], [\n\t\t.9,\n\t\t.9,\n\t\t.9,\n\t\t1\n\t])\n];\nvar FaceLandmarksComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tstorageBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"face_landmarks.wgsl\",\n\t\t\tcode: faceLandmarksWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"FaceLandmarksComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeFaceLandmarks\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 64,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_uniform_buffer\"\n\t\t});\n\t\tconst storageSize = Math.max(256, CANONICAL_FACE_CONTOURS.length * 48);\n\t\tthis.storageBuffer = device.createBuffer({\n\t\t\tsize: storageSize,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_storage_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}) {\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 4;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst u32Uniforms = new Uint32Array(4);\n\t\tu32Uniforms[0] = width;\n\t\tu32Uniforms[1] = height;\n\t\tu32Uniforms[2] = CANONICAL_FACE_CONTOURS.length;\n\t\tu32Uniforms[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, u32Uniforms);\n\t\tconst f32Segments = new Float32Array(CANONICAL_FACE_CONTOURS.length * 12);\n\t\tfor (let i = 0; i < CANONICAL_FACE_CONTOURS.length; i++) {\n\t\t\tconst seg = CANONICAL_FACE_CONTOURS[i];\n\t\t\tconst ptA = landmarks[seg.from];\n\t\t\tconst ptB = landmarks[seg.to];\n\t\t\tconst offset = i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32Segments[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32Segments[offset + 0] = ptA.x * width;\n\t\t\tf32Segments[offset + 1] = ptA.y * height;\n\t\t\tf32Segments[offset + 2] = ptB.x * width;\n\t\t\tf32Segments[offset + 3] = ptB.y * height;\n\t\t\tf32Segments[offset + 4] = seg.color[0];\n\t\t\tf32Segments[offset + 5] = seg.color[1];\n\t\t\tf32Segments[offset + 6] = seg.color[2];\n\t\t\tf32Segments[offset + 7] = seg.color[3];\n\t\t\tf32Segments[offset + 8] = radius;\n\t\t\tf32Segments[offset + 9] = 1;\n\t\t\tf32Segments[offset + 10] = 0;\n\t\t\tf32Segments[offset + 11] = 0;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.storageBuffer, 0, f32Segments);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: \"face_landmarks_output_texture\"\n\t\t\t});\n\t\t}\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"FaceLandmarksBindGroup\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.storageBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"FaceLandmarksCommandEncoder\" });\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"FaceLandmarksComputePass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t\tthis.storageBuffer.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/optical-flow.wgsl.ts\n/**\n* @file optical-flow.wgsl.ts\n* High-Performance Native WebGPU Optical Flow Compute Shaders\n* Implements coarse-to-fine Lucas-Kanade motion vector estimation with\n* spatial structure tensor integration and Tikhonov aperture regularization.\n*/\nconst opticalFlowDirectWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)\n regularization: f32, // Tikhonov regularization lambda\n maxDisplacement: f32, // Maximum allowable flow vector length\n _pad0: f32,\n _pad1: f32,\n _pad2: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(3) var<uniform> params: FlowParams;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let inDims = vec2<f32>(textureDimensions(tex));\n let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));\n let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);\n let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n\n // Central difference spatial gradients on current frame\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal gradient: difference between current and previous frame\n let cCurr = sampleLuma(currTex, p);\n let cPrev = sampleLuma(prevTex, p);\n let it = cCurr - cPrev;\n\n // Gaussian spatial falloff weight\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n // Tikhonov regularization prevents singularity in flat/homogeneous regions\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var u: f32 = 0.0;\n var v: f32 = 0.0;\n\n if (det > 1e-6) {\n u = (-sxt * C + syt * B) / det;\n v = (-syt * A + sxt * B) / det;\n }\n\n let mag = length(vec2<f32>(u, v));\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n let scale = maxD / mag;\n u *= scale;\n v *= scale;\n }\n\n textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));\n}\n`;\nconst opticalFlowRefineWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32,\n regularization: f32,\n maxDisplacement: f32,\n coarseWidth: u32,\n coarseHeight: u32,\n _pad0: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;\n@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: FlowParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\nfn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n return rgbToLuminance(sampleColor.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read upsampled prior flow from coarse scale (scaled by 2x)\n let coarseCoord = vec2<i32>(centerCoord / 2);\n let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);\n let priorFlow = coarseSample.xy * 2.0;\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n let pUv = (vec2<f32>(p) + 0.5) * invDims;\n\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal residual against warped previous frame\n let cCurr = sampleLuma(currTex, p);\n let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);\n let it = cCurr - cWarpedPrev;\n\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var du: f32 = 0.0;\n var dv: f32 = 0.0;\n\n if (det > 1e-6) {\n du = (-sxt * C + syt * B) / det;\n dv = (-syt * A + sxt * B) / det;\n }\n\n // Combine coarse prior flow with fine residual flow\n var totalFlow = priorFlow + vec2<f32>(du, dv);\n let mag = length(totalFlow);\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n totalFlow *= (maxD / mag);\n }\n\n textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/optical-flow-pipeline.ts\nvar OpticalFlowComputePipeline = class {\n\tdirectPipeline;\n\trefinePipeline;\n\tdirectUniformBuffer;\n\trefineUniformBuffer;\n\tbilinearSampler;\n\tcachedCoarseTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst directModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_direct.wgsl\",\n\t\t\tcode: opticalFlowDirectWgsl\n\t\t});\n\t\tthis.directPipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowDirectPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: directModule,\n\t\t\t\tentryPoint: \"computeFlow\"\n\t\t\t}\n\t\t});\n\t\tconst refineModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_refine.wgsl\",\n\t\t\tcode: opticalFlowRefineWgsl\n\t\t});\n\t\tthis.refinePipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowRefinePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: refineModule,\n\t\t\t\tentryPoint: \"refineFlow\"\n\t\t\t}\n\t\t});\n\t\tthis.directUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_direct_uniform\"\n\t\t});\n\t\tthis.refineUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_refine_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"optical_flow_bilinear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(prevTexture, currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst windowSize = options?.windowSize ?? 3;\n\t\tconst regularization = options?.regularization ?? options?.lambda ?? .05;\n\t\tconst scale = options?.scale ?? .5;\n\t\tconst maxDisplacement = 64;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `optical_flow_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"optical_flow_command_encoder\" });\n\t\tif (scale > .1 && scale < .95 && width >= 64 && height >= 64) {\n\t\t\tconst coarseW = Math.max(16, Math.floor(width * scale));\n\t\t\tconst coarseH = Math.max(16, Math.floor(height * scale));\n\t\t\tif (!this.cachedCoarseTexture || this.cachedCoarseTexture.width !== coarseW || this.cachedCoarseTexture.height !== coarseH) {\n\t\t\t\tthis.cachedCoarseTexture?.destroy();\n\t\t\t\tthis.cachedCoarseTexture = this.device.createTexture({\n\t\t\t\t\tlabel: \"optical_flow_coarse\",\n\t\t\t\t\tsize: [coarseW, coarseH],\n\t\t\t\t\tformat: \"rgba16float\",\n\t\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = coarseW;\n\t\t\tdirectU32[1] = coarseH;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement * scale;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst coarseBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst coarsePass = commandEncoder.beginComputePass({ label: \"optical_flow_coarse_pass\" });\n\t\t\tcoarsePass.setPipeline(this.directPipeline);\n\t\t\tcoarsePass.setBindGroup(0, coarseBindGroup);\n\t\t\tcoarsePass.dispatchWorkgroups(Math.ceil(coarseW / 16), Math.ceil(coarseH / 16));\n\t\t\tcoarsePass.end();\n\t\t\tconst refineData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst refineU32 = new Uint32Array(refineData);\n\t\t\tconst refineF32 = new Float32Array(refineData);\n\t\t\trefineU32[0] = width;\n\t\t\trefineU32[1] = height;\n\t\t\trefineU32[2] = windowSize;\n\t\t\trefineF32[3] = regularization;\n\t\t\trefineF32[4] = maxDisplacement;\n\t\t\trefineU32[5] = coarseW;\n\t\t\trefineU32[6] = coarseH;\n\t\t\tthis.device.queue.writeBuffer(this.refineUniformBuffer, 0, refineData);\n\t\t\tconst refineBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.refinePipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: { buffer: this.refineUniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst finePass = commandEncoder.beginComputePass({ label: \"optical_flow_fine_pass\" });\n\t\t\tfinePass.setPipeline(this.refinePipeline);\n\t\t\tfinePass.setBindGroup(0, refineBindGroup);\n\t\t\tfinePass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tfinePass.end();\n\t\t} else {\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = width;\n\t\t\tdirectU32[1] = height;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst directBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst directPass = commandEncoder.beginComputePass({ label: \"optical_flow_direct_pass\" });\n\t\t\tdirectPass.setPipeline(this.directPipeline);\n\t\t\tdirectPass.setBindGroup(0, directBindGroup);\n\t\t\tdirectPass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tdirectPass.end();\n\t\t}\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedCoarseTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.directUniformBuffer.destroy();\n\t\tthis.refineUniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pose-skeleton.wgsl.ts\n/**\n* @file pose-skeleton.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet OpenPose skeleton rasterization.\n* Renders instanced bone cylinders/capsules directly in VRAM without CPU roundtrips.\n*/\nconst poseSkeletonWgsl = `\nstruct Bone {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct SkeletonParams {\n width: u32,\n height: u32,\n numBones: u32,\n pad: u32,\n bones: array<Bone, 24>,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: SkeletonParams;\n\n@compute @workgroup_size(16, 16)\nfn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n let count = min(params.numBones, 24u);\n for (var i = 0u; i < count; i = i + 1u) {\n let bone = params.bones[i];\n if (bone.enabled < 0.5) {\n continue;\n }\n\n let ab = bone.end - bone.start;\n let ap = p - bone.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = bone.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= bone.radius) {\n // Sub-pixel edge antialiasing\n let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);\n let a = edgeAlpha * bone.color.a;\n outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/pose-skeleton-pipeline.ts\nconst CANONICAL_OPENPOSE_BONES = [\n\t{\n\t\tfrom: 0,\n\t\tto: 11,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 0,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 13,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 13,\n\t\tto: 15,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 14,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 14,\n\t\tto: 16,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 23,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 25,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 25,\n\t\tto: 27,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 24,\n\t\tto: 26,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 26,\n\t\tto: 28,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\nvar PoseSkeletonComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"pose_skeleton.wgsl\",\n\t\t\tcode: poseSkeletonWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"PoseSkeletonComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computePoseSkeleton\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 1280,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"pose_skeleton_uniform_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}, bones) {\n\t\tconst boneDefs = bones ?? CANONICAL_OPENPOSE_BONES;\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 6;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst arrayBuf = new ArrayBuffer(1280);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tu32View[2] = boneDefs.length;\n\t\tu32View[3] = 0;\n\t\tconst boneBaseFloatOffset = 4;\n\t\tfor (let i = 0; i < boneDefs.length; i++) {\n\t\t\tconst boneDef = boneDefs[i];\n\t\t\tconst ptA = landmarks[boneDef.from];\n\t\t\tconst ptB = landmarks[boneDef.to];\n\t\t\tconst offset = boneBaseFloatOffset + i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32View[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32View[offset + 0] = ptA.x * width;\n\t\t\tf32View[offset + 1] = ptA.y * height;\n\t\t\tf32View[offset + 2] = ptB.x * width;\n\t\t\tf32View[offset + 3] = ptB.y * height;\n\t\t\tf32View[offset + 4] = boneDef.color[0];\n\t\t\tf32View[offset + 5] = boneDef.color[1];\n\t\t\tf32View[offset + 6] = boneDef.color[2];\n\t\t\tf32View[offset + 7] = boneDef.color[3];\n\t\t\tf32View[offset + 8] = radius;\n\t\t\tf32View[offset + 9] = 1;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"openpose_skeleton_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"pose_skeleton_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"pose_skeleton_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"pose_skeleton_output_view\" })\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"pose_skeleton_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/segmentation.wgsl.ts\n/**\n* @file segmentation.wgsl.ts\n* Native WebGPU WGSL compute shader for segmentation mask thresholding and edge feathering.\n* Outputs crisp alpha mattes directly in VRAM without CPU roundtrips.\n*/\nconst segmentationWgsl = `\nstruct SegParams {\n threshold: f32,\n feather: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: SegParams;\n\n@compute @workgroup_size(16, 16)\nfn computeSegmentation(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let sample = textureLoad(inputTex, coord, 0);\n\n // Luminance or alpha channel extraction\n let rawAlpha = max(sample.a, dot(sample.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n\n let lower = max(0.0, params.threshold - params.feather);\n let upper = min(1.0, params.threshold + params.feather);\n let alpha = smoothstep(lower, upper, rawAlpha);\n\n textureStore(outputTex, id.xy, vec4<f32>(alpha, alpha, alpha, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/segmentation-pipeline.ts\nvar SegmentationComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"segmentation.wgsl\",\n\t\t\tcode: segmentationWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"SegmentationComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeSegmentation\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"segmentation_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst threshold = options.threshold ?? .5;\n\t\tconst feather = options.feather ?? .05;\n\t\tconst arrayBuf = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tf32View[0] = threshold;\n\t\tf32View[1] = feather;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"segmentation_output_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"segmentation_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"segmentation_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView({ label: \"segmentation_input_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"segmentation_output_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"segmentation_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/temporal-warp-blend.wgsl.ts\n/**\n* @file temporal-warp-blend.wgsl.ts\n* Native WebGPU Forward Warping & Adaptive Photometric Temporal Blend Compute Shaders\n* Warps previous frame forward along motion vectors and blends adaptively with current\n* frame to eliminate generative AI video flicker with zero ghosting.\n*/\nconst temporalWarpBlendRgba8Wgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)\n disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame\n maxMotionPixels: f32, // Speed cutoff for fallback to curr frame\n isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n // If first frame or scene cut reset, pass through current frame directly\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read motion vector (u, v) in pixel units\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n // Motion-compensated backward warp coordinate pointing to previous frame\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n // Adaptive blend weight:\n // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)\n // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\nconst temporalWarpBlendRgba16fWgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32,\n disocclusionThreshold: f32,\n maxMotionPixels: f32,\n isFirstFrame: f32,\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\n\n//#endregion\n//#region src/pipelines/temporal-deflicker-pipeline.ts\nvar TemporalDeflickerPipeline = class {\n\tflowPipeline;\n\trgba8Pipeline;\n\trgba16fPipeline;\n\tuniformBuffer;\n\tbilinearSampler;\n\thistoryTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.flowPipeline = new OpticalFlowComputePipeline(device);\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba8.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba8Wgsl\n\t\t});\n\t\tthis.rgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba16f.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba16fWgsl\n\t\t});\n\t\tthis.rgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"temporal_deflicker_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"temporal_deflicker_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst rawBlendWeight = options.blendWeight ?? .35;\n\t\tconst blendWeight = typeof rawBlendWeight === \"number\" ? rawBlendWeight : Number(rawBlendWeight);\n\t\tconst disocclusionThreshold = options.disocclusionThreshold ?? .15;\n\t\tconst maxMotionPixels = options.maxMotionPixels ?? 64;\n\t\tconst format = currTexture.format;\n\t\tconst isRgba16f = format === \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== format) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `deflickered_output_${format}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\tif (!this.historyTexture || this.historyTexture.width !== width || this.historyTexture.height !== height) {\n\t\t\tthis.historyTexture?.destroy();\n\t\t\tthis.historyTexture = this.device.createTexture({\n\t\t\t\tlabel: \"deflicker_history_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t\tconst commandEncoder$1 = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_first_frame_encoder\" });\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.historyTexture }, [width, height]);\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.cachedOutputTexture }, [width, height]);\n\t\t\tif (!customEncoder) this.device.queue.submit([commandEncoder$1.finish()]);\n\t\t\treturn this.cachedOutputTexture;\n\t\t}\n\t\tconst flowTexture = this.flowPipeline.execute(this.historyTexture, currTexture, options.opticalFlow, customEncoder);\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = blendWeight;\n\t\tf32View[3] = disocclusionThreshold;\n\t\tf32View[4] = maxMotionPixels;\n\t\tf32View[5] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tconst pipeline = isRgba16f ? this.rgba16fPipeline : this.rgba8Pipeline;\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_blend_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.historyTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: flowTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"deflicker_blend_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tcommandEncoder.copyTextureToTexture({ texture: this.cachedOutputTexture }, { texture: this.historyTexture }, [width, height]);\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\treset() {\n\t\tthis.historyTexture?.destroy();\n\t\tthis.historyTexture = void 0;\n\t}\n\tdestroy() {\n\t\tthis.flowPipeline.destroy();\n\t\tthis.historyTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/pipeline/tensor-pipeline.ts\nvar TensorPipeline = class TensorPipeline {\n\tid;\n\tcannyOptions;\n\tdepthNormalsOptions;\n\tposeSkeletonOptions;\n\tfaceLandmarksOptions;\n\tsegmentationOptions;\n\topticalFlowOptions;\n\tdeflickerOptions;\n\tmultiplexer = new ControlNetMultiplexer();\n\tcannyPipeline;\n\tdepthNormalsPipeline;\n\tposePipeline;\n\tfacePipeline;\n\tsegmentationPipeline;\n\topticalFlowPipeline;\n\tdeflickerPipeline;\n\tprevInputTexture;\n\tconstructor(source) {\n\t\tthis.source = source;\n\t\tthis.id = `tensor-${Math.random().toString(36).slice(2, 9)}`;\n\t}\n\tstatic from(source) {\n\t\treturn new TensorPipeline(source);\n\t}\n\tcanny(options = {}) {\n\t\tthis.cannyOptions = options;\n\t\treturn this;\n\t}\n\tdepthNormals(options = {}) {\n\t\tthis.depthNormalsOptions = options;\n\t\treturn this;\n\t}\n\tposeSkeleton(options = {}) {\n\t\tthis.poseSkeletonOptions = options;\n\t\treturn this;\n\t}\n\tpose(landmarks, options = {}) {\n\t\tthis.poseSkeletonOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tfaceLandmarks(options = {}) {\n\t\tthis.faceLandmarksOptions = options;\n\t\treturn this;\n\t}\n\tface(landmarks, options = {}) {\n\t\tthis.faceLandmarksOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tsegmentation(options = {}) {\n\t\tthis.segmentationOptions = options;\n\t\treturn this;\n\t}\n\topticalFlow(options = {}) {\n\t\tthis.opticalFlowOptions = options;\n\t\treturn this;\n\t}\n\tdeflicker(options = {}) {\n\t\tthis.deflickerOptions = options;\n\t\treturn this;\n\t}\n\tgetMultiplexer() {\n\t\treturn this.multiplexer;\n\t}\n\tasync execute(device, overrideSourceTexture) {\n\t\tlet inputTexture = overrideSourceTexture;\n\t\tif (!inputTexture && typeof this.source?.createView === \"function\") inputTexture = this.source;\n\t\tif (!inputTexture) throw new Error(\"[TensorPipeline.execute] No GPUTexture available for tensor compute execution. Pass a valid GPUTexture to execute() or initialize with a GPUTexture source.\");\n\t\tif (this.cannyOptions) {\n\t\t\tif (!this.cannyPipeline) this.cannyPipeline = new CannyComputePipeline(device);\n\t\t\tconst cannyTex = this.cannyPipeline.execute(inputTexture, this.cannyOptions);\n\t\t\tthis.multiplexer.set(\"canny\", cannyTex);\n\t\t}\n\t\tif (this.depthNormalsOptions) {\n\t\t\tif (!this.depthNormalsPipeline) this.depthNormalsPipeline = new DepthNormalsComputePipeline(device);\n\t\t\tconst normalTex = this.depthNormalsPipeline.execute(inputTexture, this.depthNormalsOptions);\n\t\t\tthis.multiplexer.set(\"normals\", normalTex);\n\t\t}\n\t\tif (this.poseSkeletonOptions?.landmarks) {\n\t\t\tif (!this.posePipeline) this.posePipeline = new PoseSkeletonComputePipeline(device);\n\t\t\tconst skeletonTex = this.posePipeline.execute(this.poseSkeletonOptions.landmarks, {\n\t\t\t\twidth: this.poseSkeletonOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.poseSkeletonOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.poseSkeletonOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"poseSkeleton\", skeletonTex);\n\t\t}\n\t\tif (this.faceLandmarksOptions?.landmarks) {\n\t\t\tif (!this.facePipeline) this.facePipeline = new FaceLandmarksComputePipeline(device);\n\t\t\tconst faceTex = this.facePipeline.execute(this.faceLandmarksOptions.landmarks, {\n\t\t\t\twidth: this.faceLandmarksOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.faceLandmarksOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.faceLandmarksOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"faceLandmarks\", faceTex);\n\t\t}\n\t\tif (this.segmentationOptions) {\n\t\t\tif (!this.segmentationPipeline) this.segmentationPipeline = new SegmentationComputePipeline(device);\n\t\t\tconst segTex = this.segmentationPipeline.execute(inputTexture, this.segmentationOptions);\n\t\t\tthis.multiplexer.set(\"segmentationMask\", segTex);\n\t\t}\n\t\tif (this.opticalFlowOptions) {\n\t\t\tif (!this.opticalFlowPipeline) this.opticalFlowPipeline = new OpticalFlowComputePipeline(device);\n\t\t\tconst prevTex = this.prevInputTexture ?? inputTexture;\n\t\t\tconst flowTex = this.opticalFlowPipeline.execute(prevTex, inputTexture, this.opticalFlowOptions);\n\t\t\tthis.multiplexer.set(\"motionVectors\", flowTex);\n\t\t}\n\t\tif (this.deflickerOptions) {\n\t\t\tif (!this.deflickerPipeline) this.deflickerPipeline = new TemporalDeflickerPipeline(device);\n\t\t\tconst deflickeredTex = this.deflickerPipeline.execute(inputTexture, this.deflickerOptions);\n\t\t\tthis.multiplexer.set(\"deflickered\", deflickeredTex);\n\t\t}\n\t\tthis.prevInputTexture = inputTexture;\n\t\treturn this.multiplexer.getOutputs();\n\t}\n\ttoConfig() {\n\t\treturn {\n\t\t\tcanny: this.cannyOptions,\n\t\t\tdepthNormals: this.depthNormalsOptions,\n\t\t\tposeSkeleton: this.poseSkeletonOptions,\n\t\t\tfaceLandmarks: this.faceLandmarksOptions,\n\t\t\tsegmentation: this.segmentationOptions,\n\t\t\topticalFlow: this.opticalFlowOptions,\n\t\t\tdeflicker: this.deflickerOptions\n\t\t};\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"tensor\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.toConfig()\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.cannyPipeline?.destroy();\n\t\tthis.depthNormalsPipeline?.destroy();\n\t\tthis.posePipeline?.destroy();\n\t\tthis.facePipeline?.destroy();\n\t\tthis.segmentationPipeline?.destroy();\n\t\tthis.opticalFlowPipeline?.destroy();\n\t\tthis.deflickerPipeline?.destroy();\n\t\tthis.multiplexer.destroy();\n\t}\n};\n\n//#endregion\nexport { CANONICAL_FACE_CONTOURS, CANONICAL_OPENPOSE_BONES, CannyComputePipeline, ControlNetMultiplexer, DepthNormalsComputePipeline, FaceLandmarksComputePipeline, OpticalFlowComputePipeline, PoseSkeletonComputePipeline, SegmentationComputePipeline, TemporalDeflickerPipeline, TensorPipeline, cannyNmsR32fWgsl, cannyNmsRgba8Wgsl, cannySobelWgsl, depthNormalsRgba16fWgsl, depthNormalsRgba8Wgsl, faceLandmarksWgsl, opticalFlowDirectWgsl, opticalFlowRefineWgsl, poseSkeletonWgsl, segmentationWgsl, temporalWarpBlendRgba16fWgsl, temporalWarpBlendRgba8Wgsl };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF;AACD,IAAI,+BAA+B,MAAM;CACxC;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;GACP,CAAC;EACF,MAAM,cAAc,KAAK,IAAI,KAAK,wBAAwB,SAAS,GAAG;AACtE,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;G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K,qBAAqB,SAAS;AACnC,OAAK,oBAAoB,SAAS;AAClC,OAAK,oBAAoB,SAAS;;;;;;;;AAWpC,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DzB,MAAM,2BAA2B;CAChC;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;AACD,IAAI,8BAA8B,MAAM;CACvC;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN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"}